Skip to content

Commit 15d234a

Browse files
authored
Merge pull request #1712 from saiiiiiii/layoutcustomizer
2 parents 9b0a82e + 4cc8196 commit 15d234a

23 files changed

Lines changed: 32614 additions & 0 deletions

samples/js-application-layout-customizer/.eslintrc.js

Lines changed: 319 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
6+
# Dependency directories
7+
node_modules
8+
9+
# Build generated files
10+
dist
11+
lib
12+
release
13+
solution
14+
temp
15+
*.sppkg
16+
.heft
17+
18+
# Coverage directory used by tools like istanbul
19+
coverage
20+
21+
# OSX
22+
.DS_Store
23+
24+
# Visual Studio files
25+
.ntvs_analysis.dat
26+
.vs
27+
bin
28+
obj
29+
30+
# Resx Generated Code
31+
*.resx.ts
32+
33+
# Styles Generated Code
34+
*.scss.ts
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
!dist
2+
config
3+
4+
gulpfile.js
5+
6+
release
7+
src
8+
temp
9+
10+
tsconfig.json
11+
tslint.json
12+
13+
*.log
14+
15+
.yo-rc.json
16+
.vscode
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
v18.20.8
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"@microsoft/generator-sharepoint": {
3+
"plusBeta": false,
4+
"isCreatingSolution": true,
5+
"nodeVersion": "18.20.8",
6+
"sdksVersions": {
7+
"@microsoft/microsoft-graph-client": "3.0.2",
8+
"@microsoft/teams-js": "2.24.0"
9+
},
10+
"version": "1.20.0",
11+
"libraryName": "three-column-layout",
12+
"libraryId": "e32ff069-e26e-4e48-8525-41867ecd37c5",
13+
"environment": "spo",
14+
"packageManager": "npm",
15+
"solutionName": "three-column-layout",
16+
"solutionShortDescription": "three-column-layout description",
17+
"skipFeatureDeployment": true,
18+
"isDomainIsolated": false,
19+
"componentType": "extension",
20+
"extensionType": "ApplicationCustomizer"
21+
}
22+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# LayoutCustomizer — SPFx Application Customizer
2+
3+
A SharePoint Framework (SPFx) Application Customizer that applies a responsive **3-column grid layout** to SharePoint Modern pages. Provides a Fluent-styled floating toolbar and modal panel for live column-width configuration, persisted via `localStorage`.
4+
5+
---
6+
7+
![Layout Customizer](./assets/layout-customizer-demo.gif)
8+
9+
## Features
10+
11+
- Responsive 3-column layout applied to SharePoint Modern pages.
12+
- Converts page sections into a flexible Left, Main, and Right grid layout.
13+
- Floating toolbar for quick layout actions.
14+
- Fluent-style configuration panel for adjusting column widths.
15+
- Live layout preview when changing column values.
16+
- Slider and numeric input support for precise column configuration.
17+
- Optional right navigation panel that can be enabled or disabled.
18+
- Layout configuration stored in browser localStorage (can be enhanced to store settings in the SharePoint page).
19+
- Reset option to clear saved layout settings.
20+
- Lightweight implementation using SPFx Application Customizer.
21+
22+
## Compatibility
23+
24+
| :warning: Important |
25+
|:---------------------------|
26+
| Every SPFx version is optimally compatible with specific versions of Node.js. In order to be able to Toolchain this sample, you need to ensure that the version of Node on your workstation matches one of the versions listed in this section. This sample will not work on a different version of Node.|
27+
|Refer to <https://aka.ms/spfx-matrix> for more information on SPFx compatibility. |
28+
29+
This sample is optimally compatible with the following environment configuration:
30+
31+
![SPFx 1.20.0](https://img.shields.io/badge/SPFx-1.20.0-green.svg)
32+
![Node.js v18](https://img.shields.io/badge/Node.js-v18-green.svg)
33+
![Toolchain: Heft](https://img.shields.io/badge/Toolchain-Heft-green.svg)
34+
![Compatible with SharePoint Online](https://img.shields.io/badge/SharePoint%20Online-Compatible-green.svg)
35+
![Does not work with SharePoint 2019](https://img.shields.io/badge/SharePoint%20Server%202019-Incompatible-red.svg "SharePoint Server 2019 requires SPFx 1.4.1 or lower")
36+
![Does not work with SharePoint 2016 (Feature Pack 2)](https://img.shields.io/badge/SharePoint%20Server%202016%20(Feature%20Pack%202)-Incompatible-red.svg "SharePoint Server 2016 Feature Pack 2 requires SPFx 1.1")
37+
![Local Workbench Unsupported](https://img.shields.io/badge/Local%20Workbench-Unsupported-red.svg "Local workbench is no longer available as of SPFx 1.13 and above")
38+
![Hosted Workbench Compatible](https://img.shields.io/badge/Hosted%20Workbench-Compatible-green.svg)
39+
![Compatible with Remote Containers](https://img.shields.io/badge/Remote%20Containers-Compatible-green.svg)
40+
41+
42+
## Applies to
43+
44+
- [SharePoint Framework](https://aka.ms/spfx)
45+
- [Microsoft 365 tenant](https://docs.microsoft.com/en-us/sharepoint/dev/spfx/set-up-your-developer-tenant)
46+
47+
> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/o365devprogram)
48+
49+
## Prerequisites
50+
51+
- Node.js v18.17.1 or compatible version
52+
- SharePoint Online environment
53+
- Site Collection Administrator permissions (for deployment)
54+
55+
## Contributors
56+
57+
-[@saiiiiiii](https://github.com/saiiiiiii) |
58+
59+
## Version history
60+
61+
| Version | Date | Comments |
62+
| ------- | ---- | -------- |
63+
| 1.0.0 | March 2026 | Initial release |
64+
65+
## Disclaimer
66+
67+
**THIS CODE IS PROVIDED _AS IS_ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.**
68+
69+
---
70+
71+
## Minimal Path to Awesome
72+
73+
- Clone this repository
74+
- In the command-line run:
75+
- `npm install`
76+
- `gulp serve`
77+
- To deploy:
78+
- `gulp bundle --ship`
79+
- `gulp package-solution --ship`
80+
- Upload the `.sppkg` file to your App Catalog
81+
- Install the app on your site
82+
83+
84+
## References
85+
86+
- [Getting started with SharePoint Framework](https://docs.microsoft.com/en-us/sharepoint/dev/spfx/set-up-your-developer-tenant)
87+
- [Microsoft 365 Patterns and Practices](https://aka.ms/m365pnp)
88+
- [PnPjs Documentation](https://pnp.github.io/pnpjs/)
89+
90+
## Help
91+
92+
If you encounter any issues while using this sample, [create a new issue](https://github.com/saiiiiiii/js-application-layout-customizer/issues/new).
93+
94+
<img src="https://m365-visitor-stats.azurewebsites.net/sp-dev-fx-extensions/samples/js-application-layout-customizer" />
2.75 MB
Loading
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
[
2+
{
3+
"name": "pnp-sp-dev-spfx-extensions-js-application-layout-customizer",
4+
"source": "pnp",
5+
"title": "SharePoint Page Indexer",
6+
"shortDescription": "A SharePoint Framework (SPFx) Application Customizer that applies a responsive 3-column grid layout to SharePoint Modern pages. Provides a Fluent-styled floating toolbar and modal panel for live column-width configuration, persisted via localStorage.",
7+
"url": "https://github.com/pnp/sp-dev-fx-extensions/tree/main/samples/js-application-layout-customizer",
8+
"downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/sp-dev-fx-extensions/tree/main/samples/js-application-layout-customizer",
9+
"longDescription": [
10+
"A SharePoint Framework (SPFx) Application Customizer that applies a responsive 3-column grid layout to SharePoint Modern pages. Provides a Fluent-styled floating toolbar and modal panel for live column-width configuration, persisted via localStorage."
11+
],
12+
"creationDateTime": "2026-03-11",
13+
"updateDateTime": "2026-03-11",
14+
"products": [
15+
"SharePoint",
16+
"Office"
17+
],
18+
"metadata": [
19+
{
20+
"key": "CLIENT-SIDE-DEV",
21+
"value": "TypeScript"
22+
},
23+
{
24+
"key": "SPFX-VERSION",
25+
"value": "1.20.0"
26+
}
27+
],
28+
"thumbnails": [
29+
{
30+
"name": "layout-customizer-demo.gif",
31+
"type": "image",
32+
"order": 100,
33+
"url": "https://github.com/saiiiiiii/js-application-layout-customizer/raw/main/assets/layout-customizer-demo.gif",
34+
"alt": "SharePoint Page Layout Customizer"
35+
}
36+
],
37+
"authors": [
38+
{
39+
"gitHubAccount": "saiiiiiii",
40+
"pictureUrl": "https://avatars.githubusercontent.com/u/46020510?v=4",
41+
"name": "Sai Siva Ram Bandaru"
42+
}
43+
],
44+
"references": [
45+
{
46+
"name": "Getting started with SharePoint Framework",
47+
"description": "Introduction about how to develop Microsoft 365 extensions using SharePoint Framework.",
48+
"url": "https://docs.microsoft.com/en-us/sharepoint/dev/spfx/set-up-your-developer-tenant"
49+
},
50+
{
51+
"name": "Build your first SharePoint Framework Extension",
52+
"description": "Learn how to build your first SharePoint Framework Application Customizer.",
53+
"url": "https://learn.microsoft.com/en-us/sharepoint/dev/spfx/extensions/get-started/build-a-hello-world-extension"
54+
},
55+
{
56+
"name": "Microsoft 365 Patterns and Practices",
57+
"description": "Guidance, tooling, samples and open-source controls for your Microsoft 365 development.",
58+
"url": "https://aka.ms/m365pnp"
59+
},
60+
{
61+
"name": "PnPjs Documentation",
62+
"description": "PnPjs is a collection of fluent libraries for consuming SharePoint, Graph, and Office 365 REST APIs.",
63+
"url": "https://pnp.github.io/pnpjs/"
64+
}
65+
]
66+
}
67+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"$schema": "https://developer.microsoft.com/json-schemas/spfx-build/config.2.0.schema.json",
3+
"version": "2.0",
4+
"bundles": {
5+
"layout-customizer-application-customizer": {
6+
"components": [
7+
{
8+
"entrypoint": "./lib/extensions/layoutCustomizer/LayoutCustomizerApplicationCustomizer.js",
9+
"manifest": "./src/extensions/layoutCustomizer/LayoutCustomizerApplicationCustomizer.manifest.json"
10+
}
11+
]
12+
}
13+
},
14+
"externals": {},
15+
"localizedResources": {
16+
"LayoutCustomizerApplicationCustomizerStrings": "lib/extensions/layoutCustomizer/loc/{locale}.js"
17+
}
18+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"$schema": "https://developer.microsoft.com/json-schemas/spfx-build/deploy-azure-storage.schema.json",
3+
"workingDir": "./release/assets/",
4+
"account": "<!-- STORAGE ACCOUNT NAME -->",
5+
"container": "three-column-layout",
6+
"accessKey": "<!-- ACCESS KEY -->"
7+
}

0 commit comments

Comments
 (0)