{"_id":"@apvee/spfx-react-toolkit","_rev":"9-d835456a25eebc562ace742d3bcf0188","name":"@apvee/spfx-react-toolkit","dist-tags":{"latest":"2.1.0"},"versions":{"1.0.0":{"name":"@apvee/spfx-react-toolkit","version":"1.0.0","keywords":["sharepoint","spfx","sharepoint-framework","react","hooks","typescript","office365","microsoft365","m365","webpart","extension","commandset","field-customizer","application-customizer","jotai","pnp","pnpjs","context","state-management"],"author":{"name":"Apvee Solutions"},"license":"MIT","_id":"@apvee/spfx-react-toolkit@1.0.0","maintainers":[{"name":"fabiofranzini","email":"fabio@apvee.com"}],"homepage":"https://github.com/apvee/spfx-react-toolkit#readme","bugs":{"url":"https://github.com/apvee/spfx-react-toolkit/issues"},"dist":{"shasum":"147beb7b5ba39febb77fe5c19d395b1d16171760","tarball":"https://registry.npmjs.org/@apvee/spfx-react-toolkit/-/spfx-react-toolkit-1.0.0.tgz","fileCount":220,"integrity":"sha512-CvlIYRCTlYY2DhAUP++FPduXnfFFrVhn/XZyCu/Y3LQQcgIwA0XgynPpmJ4Nj5wXfgV2tKn7tW3wVevfmhs0fQ==","signatures":[{"sig":"MEUCIHfVlhhJajOlffL/HR+L30VxPJd+m3/DnN6/ke6m2ZJkAiEAmXSEGpLGaDZW4J0YOYJuu3D1tlgpTkZs0kN2XxKYPXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":853736},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=22.14.0 < 23.0.0"},"gitHead":"c683a94ab14777792f4c8bbd102839730bfa166d","private":false,"scripts":{"test":"gulp test","build":"gulp bundle","clean":"gulp clean","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"fabiofranzini","email":"fabio@apvee.com"},"repository":{"url":"git+https://github.com/apvee/spfx-react-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Comprehensive React runtime and hooks library for SharePoint Framework (SPFx) with 33+ type-safe hooks","directories":{},"_nodeVersion":"22.14.0","dependencies":{"react":"17.0.1","tslib":"2.3.1","react-dom":"17.0.1","@fluentui/react":"^8.106.4","@fluentui/react-theme":"^9.2.0","@microsoft/sp-core-library":">=1.18.0","@microsoft/sp-webpart-base":">=1.18.0","@microsoft/sp-lodash-subset":">=1.18.0","@microsoft/sp-property-pane":">=1.18.0","@microsoft/sp-component-base":">=1.18.0","@microsoft/sp-application-base":">=1.18.0","@fluentui/react-migration-v8-v9":"^9.9.12","@microsoft/sp-office-ui-fabric-core":">=1.18.0","@microsoft/sp-listview-extensibility":">=1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^6.12.5","gulp":"4.0.2","eslint":"8.57.1","typescript":"~5.3.3","@types/react":"17.0.45","@types/react-dom":"17.0.17","@types/webpack-env":"~1.15.2","@microsoft/sp-build-web":">=1.18.0","@rushstack/eslint-config":"4.0.1","eslint-plugin-react-hooks":"4.3.0","@microsoft/eslint-config-spfx":">=1.18.0","@microsoft/eslint-plugin-spfx":">=1.18.0","@microsoft/sp-module-interfaces":">=1.18.0","@microsoft/rush-stack-compiler-5.3":"0.1.0"},"peerDependencies":{"jotai":"^2.0.0","@pnp/sp":"^4.0.0","@pnp/core":"^4.0.0","@pnp/queryable":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spfx-react-toolkit_1.0.0_1763123985310_0.6232621695310461","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@apvee/spfx-react-toolkit","version":"1.1.0","keywords":["sharepoint","spfx","sharepoint-framework","react","hooks","typescript","office365","microsoft365","m365","webpart","extension","commandset","field-customizer","application-customizer","jotai","pnp","pnpjs","context","state-management"],"author":{"name":"Apvee Solutions"},"license":"MIT","_id":"@apvee/spfx-react-toolkit@1.1.0","maintainers":[{"name":"fabiofranzini","email":"fabio@apvee.com"}],"homepage":"https://github.com/apvee/spfx-react-toolkit#readme","bugs":{"url":"https://github.com/apvee/spfx-react-toolkit/issues"},"dist":{"shasum":"f4a85ce1b081c6eb2aca5059bb0cae11e9239297","tarball":"https://registry.npmjs.org/@apvee/spfx-react-toolkit/-/spfx-react-toolkit-1.1.0.tgz","fileCount":224,"integrity":"sha512-72wgklEBCxiRV55L7tJBWILuqT7eRpYXtJ4B+cXn0pyfcPdpPBaAkMuH/3TG2uSWMS5zN8UOEw+3oPlaV7P5Lg==","signatures":[{"sig":"MEQCIH35O21hTmElxsGHw8MfHAGCx3+iHcNsmzrMq+gj+wG1AiAOqe337N55EZIihy62EMvjXLy9bsT/dhaOLYNZTsQe9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1107364},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=22.14.0 < 23.0.0"},"gitHead":"864025cde996d0b216a1831bde95e41ac1125aa0","private":false,"scripts":{"test":"gulp test","build":"gulp bundle","clean":"gulp clean","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"fabiofranzini","email":"fabio@apvee.com"},"repository":{"url":"git+https://github.com/apvee/spfx-react-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Comprehensive React runtime and hooks library for SharePoint Framework (SPFx)","directories":{},"_nodeVersion":"22.14.0","dependencies":{"react":"17.0.1","tslib":"2.3.1","react-dom":"17.0.1","@fluentui/react":"^8.106.4","@fluentui/react-theme":"^9.2.0","@microsoft/sp-core-library":">=1.18.0","@microsoft/sp-webpart-base":">=1.18.0","@microsoft/sp-lodash-subset":">=1.18.0","@microsoft/sp-property-pane":">=1.18.0","@microsoft/sp-component-base":">=1.18.0","@microsoft/sp-application-base":">=1.18.0","@fluentui/react-migration-v8-v9":"^9.9.12","@microsoft/sp-office-ui-fabric-core":">=1.18.0","@microsoft/sp-listview-extensibility":">=1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^6.12.5","gulp":"4.0.2","eslint":"8.57.1","typescript":"~5.3.3","@types/react":"17.0.45","@types/react-dom":"17.0.17","@types/webpack-env":"~1.15.2","@microsoft/sp-build-web":">=1.18.0","@rushstack/eslint-config":"4.0.1","eslint-plugin-react-hooks":"4.3.0","@microsoft/eslint-config-spfx":">=1.18.0","@microsoft/eslint-plugin-spfx":">=1.18.0","@microsoft/sp-module-interfaces":">=1.18.0","@microsoft/rush-stack-compiler-5.3":"0.1.0"},"peerDependencies":{"jotai":"^2.0.0","@pnp/sp":"^4.0.0","@pnp/core":"^4.0.0","@pnp/queryable":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spfx-react-toolkit_1.1.0_1765530960004_0.40608249991248124","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@apvee/spfx-react-toolkit","version":"1.2.0","keywords":["sharepoint","spfx","sharepoint-framework","react","hooks","typescript","office365","microsoft365","m365","webpart","extension","commandset","field-customizer","application-customizer","jotai","pnp","pnpjs","context","state-management"],"author":{"name":"Apvee Solutions"},"license":"MIT","_id":"@apvee/spfx-react-toolkit@1.2.0","maintainers":[{"name":"fabiofranzini","email":"fabio@apvee.com"}],"homepage":"https://github.com/apvee/spfx-react-toolkit#readme","bugs":{"url":"https://github.com/apvee/spfx-react-toolkit/issues"},"dist":{"shasum":"5e663f89b991d23906fda87940583849e07615ba","tarball":"https://registry.npmjs.org/@apvee/spfx-react-toolkit/-/spfx-react-toolkit-1.2.0.tgz","fileCount":224,"integrity":"sha512-qMtwB5CXxhrW9fbbRhXlNK+PJOfaAhsSAtC+yCMbouBFIP8u7iQA6BrwbsUiuakqAJJEMsS4j5GMBUo2T2Jy2Q==","signatures":[{"sig":"MEYCIQCUCo1hlRtAW8rHuDAOQwfwT3BJNFzRHcLh2SaQqyA42QIhAK5JVZgakC4OpBgsvxqI+FoCt/K5HyW0ba75cDy5gsUW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1108299},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=22.14.0 < 23.0.0"},"gitHead":"6e353dffc36948064a1726b79ea21d02d9eb3cbd","private":false,"scripts":{"test":"gulp test","build":"gulp bundle","clean":"gulp clean","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"fabiofranzini","email":"fabio@apvee.com"},"repository":{"url":"git+https://github.com/apvee/spfx-react-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Comprehensive React runtime and hooks library for SharePoint Framework (SPFx)","directories":{},"_nodeVersion":"22.14.0","dependencies":{"react":"17.0.1","tslib":"2.3.1","react-dom":"17.0.1","@fluentui/react":"^8.106.4","@fluentui/react-theme":"^9.2.0","@microsoft/sp-core-library":">=1.18.0","@microsoft/sp-webpart-base":">=1.18.0","@microsoft/sp-lodash-subset":">=1.18.0","@microsoft/sp-property-pane":">=1.18.0","@microsoft/sp-component-base":">=1.18.0","@microsoft/sp-application-base":">=1.18.0","@fluentui/react-migration-v8-v9":"^9.9.12","@microsoft/sp-office-ui-fabric-core":">=1.18.0","@microsoft/sp-listview-extensibility":">=1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^6.12.5","gulp":"4.0.2","eslint":"8.57.1","typescript":"~5.3.3","@types/react":"17.0.45","@types/react-dom":"17.0.17","@types/webpack-env":"~1.15.2","@microsoft/sp-build-web":">=1.18.0","@rushstack/eslint-config":"4.0.1","eslint-plugin-react-hooks":"4.3.0","@microsoft/eslint-config-spfx":">=1.18.0","@microsoft/eslint-plugin-spfx":">=1.18.0","@microsoft/sp-module-interfaces":">=1.18.0","@microsoft/rush-stack-compiler-5.3":"0.1.0"},"peerDependencies":{"jotai":"^2.0.0","@pnp/sp":"^4.0.0","@pnp/core":"^4.0.0","@pnp/queryable":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spfx-react-toolkit_1.2.0_1769521117251_0.45167197115341073","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@apvee/spfx-react-toolkit","version":"1.2.1","keywords":["sharepoint","spfx","sharepoint-framework","react","hooks","typescript","office365","microsoft365","m365","webpart","extension","commandset","field-customizer","application-customizer","jotai","pnp","pnpjs","context","state-management"],"author":{"name":"Apvee Solutions"},"license":"MIT","_id":"@apvee/spfx-react-toolkit@1.2.1","maintainers":[{"name":"fabiofranzini","email":"fabio@apvee.com"}],"homepage":"https://github.com/apvee/spfx-react-toolkit#readme","bugs":{"url":"https://github.com/apvee/spfx-react-toolkit/issues"},"dist":{"shasum":"80c77d9f93843444454d9eb5df1a694d1742450e","tarball":"https://registry.npmjs.org/@apvee/spfx-react-toolkit/-/spfx-react-toolkit-1.2.1.tgz","fileCount":276,"integrity":"sha512-E31OLkjsAYzxOAaIXNkR2o1N07Mjqb89LRRZwnlr3DtXiHW+xYWFZ5695Obew+zLTMjtnvBg5bmJuHyhpHYBGQ==","signatures":[{"sig":"MEUCIQCsptCOiokuNGAhpKu0s+Vu1lc51cmtBa3qoJW4afwFnQIgBKSeAi7HPPC3jJ1OcnTcayNVJA8LpW1n3C9l69UFQ+A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":872591},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=22.14.0 < 23.0.0"},"gitHead":"c7e451f936d509ddc15f82cd2195088a308fd24b","private":false,"scripts":{"test":"gulp test","build":"gulp bundle","clean":"gulp clean","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"fabiofranzini","email":"fabio@apvee.com"},"repository":{"url":"git+https://github.com/apvee/spfx-react-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Comprehensive React runtime and hooks library for SharePoint Framework (SPFx)","directories":{},"_nodeVersion":"22.14.0","dependencies":{"jotai":"^2.6.0","react":"17.0.1","tslib":"2.3.1","react-dom":"17.0.1","@fluentui/react-theme":"^9.2.0","@microsoft/sp-core-library":">=1.18.0","@microsoft/sp-webpart-base":">=1.18.0","@microsoft/sp-component-base":">=1.18.0","@microsoft/sp-application-base":">=1.18.0","@fluentui/react-migration-v8-v9":"^9.9.12","@microsoft/sp-listview-extensibility":">=1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^6.12.5","gulp":"4.0.2","eslint":"8.57.1","typescript":"~5.3.3","@types/react":"17.0.45","@fluentui/react":"^8.106.4","@types/react-dom":"17.0.17","@types/webpack-env":"~1.15.2","@microsoft/sp-build-web":">=1.18.0","@rushstack/eslint-config":"4.0.1","eslint-plugin-react-hooks":"4.3.0","@microsoft/sp-lodash-subset":">=1.18.0","@microsoft/sp-property-pane":">=1.18.0","@microsoft/eslint-config-spfx":">=1.18.0","@microsoft/eslint-plugin-spfx":">=1.18.0","@microsoft/sp-module-interfaces":">=1.18.0","@microsoft/rush-stack-compiler-5.3":"0.1.0","@microsoft/sp-office-ui-fabric-core":">=1.18.0"},"peerDependencies":{"@pnp/sp":"^4.0.0","@pnp/core":"^4.0.0","@pnp/queryable":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spfx-react-toolkit_1.2.1_1769854118200_0.5248498271057964","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@apvee/spfx-react-toolkit","version":"1.3.0","keywords":["sharepoint","spfx","sharepoint-framework","react","hooks","typescript","office365","microsoft365","m365","webpart","extension","commandset","field-customizer","application-customizer","jotai","pnp","pnpjs","context","state-management"],"author":{"name":"Apvee Solutions"},"license":"MIT","_id":"@apvee/spfx-react-toolkit@1.3.0","maintainers":[{"name":"fabiofranzini","email":"fabio@apvee.com"}],"homepage":"https://github.com/apvee/spfx-react-toolkit#readme","bugs":{"url":"https://github.com/apvee/spfx-react-toolkit/issues"},"dist":{"shasum":"8d3542e2db029aed04167b3751b36df391471b3a","tarball":"https://registry.npmjs.org/@apvee/spfx-react-toolkit/-/spfx-react-toolkit-1.3.0.tgz","fileCount":282,"integrity":"sha512-SqKP2jfPYg90Ymt7F2mO0qpGDOSxvLGmSWiDOWb9fRYGzKtYUEbv9+622pMINA9PDzJJGXS5QWuuhF16PMtDlg==","signatures":[{"sig":"MEUCIG8JAmqsuRDI07gSU0Ai38ORIr//DV4ZfMBq8bHSl7L6AiEAmuq1mZHZ6DPP2+Vgm3FJRmBEIBf2Ch8LPXfWhYbHPDs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":907528},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=22.14.0 < 23.0.0"},"gitHead":"26d180a3955ba66fe36abd189bc5c356b485ab14","private":false,"scripts":{"test":"gulp test","build":"gulp bundle","clean":"gulp clean","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"fabiofranzini","email":"fabio@apvee.com"},"repository":{"url":"git+https://github.com/apvee/spfx-react-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Comprehensive React runtime and hooks library for SharePoint Framework (SPFx)","directories":{},"_nodeVersion":"22.14.0","dependencies":{"jotai":"^2.6.0","react":"17.0.1","tslib":"2.3.1","react-dom":"17.0.1","@microsoft/sp-dialog":"1.21.1","@fluentui/react-theme":"^9.2.0","@microsoft/decorators":"1.21.1","@microsoft/sp-core-library":"1.21.1","@microsoft/sp-webpart-base":">=1.18.0","@microsoft/sp-component-base":">=1.18.0","@microsoft/sp-application-base":"1.21.1","@fluentui/react-migration-v8-v9":"^9.9.12","@microsoft/sp-listview-extensibility":">=1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^6.12.5","gulp":"4.0.2","eslint":"8.57.1","typescript":"~5.3.3","@types/react":"17.0.45","@fluentui/react":"^8.106.4","@types/react-dom":"17.0.17","@types/webpack-env":"~1.15.2","@microsoft/sp-build-web":">=1.18.0","@rushstack/eslint-config":"4.0.1","eslint-plugin-react-hooks":"4.3.0","@microsoft/sp-lodash-subset":">=1.18.0","@microsoft/sp-property-pane":">=1.18.0","@microsoft/eslint-config-spfx":">=1.18.0","@microsoft/eslint-plugin-spfx":">=1.18.0","@microsoft/sp-module-interfaces":"1.21.1","@microsoft/rush-stack-compiler-5.3":"0.1.0","@microsoft/sp-office-ui-fabric-core":">=1.18.0"},"peerDependencies":{"@pnp/sp":"^4.0.0","@pnp/core":"^4.0.0","@pnp/queryable":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spfx-react-toolkit_1.3.0_1770044074890_0.5626229300502672","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@apvee/spfx-react-toolkit","version":"2.0.0","keywords":["sharepoint","spfx","sharepoint-framework","react","hooks","typescript","office365","microsoft365","m365","webpart","extension","commandset","field-customizer","application-customizer","jotai","pnp","pnpjs","context","state-management"],"author":{"name":"Apvee Solutions"},"license":"MIT","_id":"@apvee/spfx-react-toolkit@2.0.0","maintainers":[{"name":"fabiofranzini","email":"fabio@apvee.com"}],"homepage":"https://github.com/apvee/spfx-react-toolkit#readme","bugs":{"url":"https://github.com/apvee/spfx-react-toolkit/issues"},"dist":{"shasum":"aa05efec35e8e50e72e48bc9c9cca7e687e8bac0","tarball":"https://registry.npmjs.org/@apvee/spfx-react-toolkit/-/spfx-react-toolkit-2.0.0.tgz","fileCount":290,"integrity":"sha512-5JSg6DDpqYOPAZQerH+Q1hjvCh17KyodqvFeo7nWk47SQbTLyZpvXdZS5WPl/QDOcNC6nJkXnoDnd2126hRirw==","signatures":[{"sig":"MEYCIQCIq71ajG5abqJRlpNkW4R8wsCNUD/pCPBW4BwLNHBYEAIhAJ/CzM4Hn2VE3VIo8jt+TZUw4UDjiOWvojsfKGE1v3do","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":851623},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=22.14.0 < 23.0.0"},"gitHead":"2520b8bd6f7c947bb38af38471134ea85467d7b1","private":false,"scripts":{"test":"gulp test","build":"gulp bundle","clean":"gulp clean","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"fabiofranzini","email":"fabio@apvee.com"},"repository":{"url":"git+https://github.com/apvee/spfx-react-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Comprehensive React runtime and hooks library for SharePoint Framework (SPFx)","directories":{},"_nodeVersion":"22.14.0","dependencies":{"jotai":"^2.6.0","react":"17.0.1","tslib":"2.3.1","react-dom":"17.0.1","@microsoft/sp-dialog":"1.21.1","@fluentui/react-theme":"^9.2.0","@microsoft/decorators":"1.21.1","@microsoft/sp-core-library":"1.21.1","@microsoft/sp-webpart-base":">=1.18.0","@microsoft/sp-component-base":">=1.18.0","@microsoft/sp-application-base":"1.21.1","@fluentui/react-migration-v8-v9":"^9.9.12","@microsoft/sp-listview-extensibility":">=1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^6.12.5","gulp":"4.0.2","eslint":"8.57.1","typescript":"~5.3.3","@types/react":"17.0.45","@fluentui/react":"^8.106.4","@types/react-dom":"17.0.17","@types/webpack-env":"~1.15.2","@microsoft/sp-build-web":">=1.18.0","@rushstack/eslint-config":"4.0.1","eslint-plugin-react-hooks":"4.3.0","@microsoft/sp-lodash-subset":">=1.18.0","@microsoft/sp-property-pane":">=1.18.0","@microsoft/eslint-config-spfx":">=1.18.0","@microsoft/eslint-plugin-spfx":">=1.18.0","@microsoft/sp-module-interfaces":"1.21.1","@microsoft/rush-stack-compiler-5.3":"0.1.0","@microsoft/sp-office-ui-fabric-core":">=1.18.0"},"peerDependencies":{"@pnp/sp":"^4.0.0","@pnp/core":"^4.0.0","@pnp/queryable":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spfx-react-toolkit_2.0.0_1775886420691_0.9757462576997287","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@apvee/spfx-react-toolkit","version":"2.0.1","keywords":["sharepoint","spfx","sharepoint-framework","react","hooks","typescript","office365","microsoft365","m365","webpart","extension","commandset","field-customizer","application-customizer","jotai","pnp","pnpjs","context","state-management"],"author":{"name":"Apvee Solutions"},"license":"MIT","_id":"@apvee/spfx-react-toolkit@2.0.1","maintainers":[{"name":"fabiofranzini","email":"fabio@apvee.com"}],"homepage":"https://github.com/apvee/spfx-react-toolkit#readme","bugs":{"url":"https://github.com/apvee/spfx-react-toolkit/issues"},"dist":{"shasum":"b138311a4c55773bbc4afe127af43915ea8dc4ee","tarball":"https://registry.npmjs.org/@apvee/spfx-react-toolkit/-/spfx-react-toolkit-2.0.1.tgz","fileCount":290,"integrity":"sha512-z2dJDZZscDDhM7HgZIWZRic7jDR2r70+EQ05Cy625dob6hSA1u3TpAH+QhGL9Oyf/3v/DR58ZT9G037WVNKSqw==","signatures":[{"sig":"MEUCIQCvuO+Bvi0ntUYn3KTFtu8rwwskQu9llXu8NsT23+Zi4wIgEGYaFmTpjnsCofYSU1Dh3v8a4EXjkAg97rJjADlKU3U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":860293},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=22.14.0 < 23.0.0"},"gitHead":"2f30d82c046354b1f0bfafdb5a05086a33782926","private":false,"scripts":{"test":"gulp test","build":"gulp bundle","clean":"gulp clean","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"fabiofranzini","email":"fabio@apvee.com"},"repository":{"url":"git+https://github.com/apvee/spfx-react-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Comprehensive React runtime and hooks library for SharePoint Framework (SPFx)","directories":{},"_nodeVersion":"22.14.0","dependencies":{"jotai":"^2.6.0","react":"17.0.1","tslib":"2.3.1","react-dom":"17.0.1","@microsoft/sp-dialog":"1.21.1","@fluentui/react-theme":"^9.2.0","@microsoft/decorators":"1.21.1","@microsoft/sp-core-library":"1.21.1","@microsoft/sp-webpart-base":">=1.18.0","@microsoft/sp-component-base":">=1.18.0","@microsoft/sp-application-base":"1.21.1","@fluentui/react-migration-v8-v9":"^9.9.12","@microsoft/sp-listview-extensibility":">=1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^6.12.5","gulp":"4.0.2","eslint":"8.57.1","typescript":"~5.3.3","@types/react":"17.0.45","@fluentui/react":"^8.106.4","@types/react-dom":"17.0.17","@types/webpack-env":"~1.15.2","@microsoft/sp-build-web":">=1.18.0","@rushstack/eslint-config":"4.0.1","eslint-plugin-react-hooks":"4.3.0","@microsoft/sp-lodash-subset":">=1.18.0","@microsoft/sp-property-pane":">=1.18.0","@microsoft/eslint-config-spfx":">=1.18.0","@microsoft/eslint-plugin-spfx":">=1.18.0","@microsoft/sp-module-interfaces":"1.21.1","@microsoft/rush-stack-compiler-5.3":"0.1.0","@microsoft/sp-office-ui-fabric-core":">=1.18.0"},"peerDependencies":{"@pnp/sp":"^4.0.0","@pnp/core":"^4.0.0","@pnp/queryable":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spfx-react-toolkit_2.0.1_1776020522778_0.4539830883353664","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@apvee/spfx-react-toolkit","version":"2.0.2","keywords":["sharepoint","spfx","sharepoint-framework","react","hooks","typescript","office365","microsoft365","m365","webpart","extension","commandset","field-customizer","application-customizer","jotai","pnp","pnpjs","context","state-management"],"author":{"name":"Apvee Solutions"},"license":"MIT","_id":"@apvee/spfx-react-toolkit@2.0.2","maintainers":[{"name":"fabiofranzini","email":"fabio@apvee.com"}],"homepage":"https://github.com/apvee/spfx-react-toolkit#readme","bugs":{"url":"https://github.com/apvee/spfx-react-toolkit/issues"},"dist":{"shasum":"16369a5a505dbfda3cddb38302ade649031f48cf","tarball":"https://registry.npmjs.org/@apvee/spfx-react-toolkit/-/spfx-react-toolkit-2.0.2.tgz","fileCount":290,"integrity":"sha512-5bIeBqzAs+mwmgzTcCJdbx6YOloKY7nXz7gwu0ZFd4n7aGxAkwu2gBkOVLfama4XSHSC3vlDiw0iFjhblZED3w==","signatures":[{"sig":"MEYCIQCKNS4pzDBeLxEYmO59PDqFlRIVD1ntSVFUxCceaVB0BgIhALYfwuLIBRjz00F5owvCCblrJ7mVVTnGERQ36za8roNd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":860293},"main":"lib/index.js","types":"lib/index.d.ts","engines":{"node":">=22.14.0 < 23.0.0"},"gitHead":"c0ab466d06df8ea83d457c5245bd73eeaddc45b1","private":false,"scripts":{"test":"gulp test","build":"gulp bundle","clean":"gulp clean","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"fabiofranzini","email":"fabio@apvee.com"},"repository":{"url":"git+https://github.com/apvee/spfx-react-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Comprehensive React runtime and hooks library for SharePoint Framework (SPFx)","directories":{},"_nodeVersion":"22.14.0","dependencies":{"jotai":"^2.6.0","react":"17.0.1","tslib":"2.3.1","react-dom":"17.0.1","@microsoft/sp-dialog":"1.21.1","@fluentui/react-theme":"^9.2.0","@microsoft/decorators":"1.21.1","@microsoft/sp-core-library":"1.21.1","@microsoft/sp-webpart-base":">=1.18.0","@microsoft/sp-component-base":">=1.18.0","@microsoft/sp-application-base":"1.21.1","@fluentui/react-migration-v8-v9":"^9.9.12","@microsoft/sp-listview-extensibility":">=1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^6.12.5","gulp":"4.0.2","eslint":"8.57.1","typescript":"~5.3.3","@types/react":"17.0.45","@fluentui/react":"^8.106.4","@types/react-dom":"17.0.17","@types/webpack-env":"~1.15.2","@microsoft/sp-build-web":">=1.18.0","@rushstack/eslint-config":"4.0.1","eslint-plugin-react-hooks":"4.3.0","@microsoft/sp-lodash-subset":">=1.18.0","@microsoft/sp-property-pane":">=1.18.0","@microsoft/eslint-config-spfx":">=1.18.0","@microsoft/eslint-plugin-spfx":">=1.18.0","@microsoft/sp-module-interfaces":"1.21.1","@microsoft/rush-stack-compiler-5.3":"0.1.0","@microsoft/sp-office-ui-fabric-core":">=1.18.0"},"peerDependencies":{"@pnp/sp":"^4.0.0","@pnp/core":"^4.0.0","@pnp/queryable":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spfx-react-toolkit_2.0.2_1776725933741_0.5695959883209614","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@apvee/spfx-react-toolkit","version":"2.1.0","description":"Comprehensive React runtime and hooks library for SharePoint Framework (SPFx)","private":false,"engines":{"node":">=22.14.0 < 23.0.0"},"main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build":"gulp bundle","clean":"gulp clean","test":"gulp test","verify:examples":"node scripts/verify-example-coverage.cjs","verify:runtime-store":"node scripts/verify-runtime-store.cjs","verify:public-docs":"node scripts/verify-public-docs.cjs","prepublishOnly":"npm run clean && npm run build && npm test && npm run verify:examples && npm run verify:runtime-store && npm run verify:public-docs"},"dependencies":{"@fluentui/react-migration-v8-v9":"^9.9.12","@fluentui/react-theme":"^9.2.0","tslib":"2.3.1"},"devDependencies":{"@fluentui/react":"^8.106.4","@microsoft/eslint-config-spfx":">=1.18.0","@microsoft/eslint-plugin-spfx":">=1.18.0","@microsoft/rush-stack-compiler-5.3":"0.1.0","@microsoft/sp-build-web":">=1.18.0","@microsoft/sp-application-base":"1.21.1","@microsoft/sp-component-base":"1.21.1","@microsoft/sp-core-library":"1.21.1","@microsoft/sp-http":"1.21.1","@microsoft/sp-listview-extensibility":"1.21.1","@microsoft/sp-lodash-subset":">=1.18.0","@microsoft/sp-module-interfaces":"1.21.1","@microsoft/sp-office-ui-fabric-core":">=1.18.0","@microsoft/sp-page-context":"1.21.1","@microsoft/sp-property-pane":">=1.18.0","@microsoft/sp-webpart-base":"1.21.1","@rushstack/eslint-config":"4.0.1","@types/react":"17.0.45","@types/react-dom":"17.0.17","@types/webpack-env":"~1.15.2","ajv":"^6.12.5","eslint":"8.57.1","eslint-plugin-react-hooks":"4.3.0","gulp":"4.0.2","react":"17.0.1","react-dom":"17.0.1","typescript":"~5.3.3"},"peerDependencies":{"@microsoft/sp-application-base":">=1.18.0 <2.0.0","@microsoft/sp-component-base":">=1.18.0 <2.0.0","@microsoft/sp-core-library":">=1.18.0 <2.0.0","@microsoft/sp-http":">=1.18.0 <2.0.0","@microsoft/sp-listview-extensibility":">=1.18.0 <2.0.0","@microsoft/sp-page-context":">=1.18.0 <2.0.0","@microsoft/sp-webpart-base":">=1.18.0 <2.0.0","@pnp/core":"^4.0.0","@pnp/queryable":"^4.0.0","@pnp/sp":"^4.0.0","react":"17.x","react-dom":"17.x"},"homepage":"https://github.com/apvee/spfx-react-toolkit#readme","repository":{"type":"git","url":"git+https://github.com/apvee/spfx-react-toolkit.git"},"bugs":{"url":"https://github.com/apvee/spfx-react-toolkit/issues"},"author":{"name":"Apvee Solutions"},"license":"MIT","keywords":["sharepoint","spfx","sharepoint-framework","react","hooks","typescript","office365","microsoft365","m365","webpart","extension","commandset","field-customizer","application-customizer","pnp","pnpjs","context","state-management"],"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_id":"@apvee/spfx-react-toolkit@2.1.0","gitHead":"169fd3d09816581f3212e50d0da085ffd0c15248","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-wA8VbvYzG11DmKZRWG4gcOvEAjoG3aL4K49fpjmURf95qVXOsX3mPGqjHwBI3hMNCjN8OsB1Czd7Qj5MyBA6zA==","shasum":"c52203fb9d054cf4dc4bf0bf39f3019f3ae3f73d","tarball":"https://registry.npmjs.org/@apvee/spfx-react-toolkit/-/spfx-react-toolkit-2.1.0.tgz","fileCount":331,"unpackedSize":817065,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEChZLtlwBtRKuIogu+X2E1LhSqUaYDC9pgonsNmCHKkAiEA/rcn4Z+mE2hCyXfmsSOL2YdBXn7MQhgpFZ7OJAJR7k4="}]},"_npmUser":{"name":"fabiofranzini","email":"fabio@apvee.com"},"directories":{},"maintainers":[{"name":"fabiofranzini","email":"fabio@apvee.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spfx-react-toolkit_2.1.0_1781086964888_0.8470881297299995"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-14T12:39:45.240Z","modified":"2026-06-10T10:22:45.235Z","1.0.0":"2025-11-14T12:39:45.538Z","1.1.0":"2025-12-12T09:16:00.221Z","1.2.0":"2026-01-27T13:38:37.454Z","1.2.1":"2026-01-31T10:08:38.380Z","1.3.0":"2026-02-02T14:54:35.082Z","2.0.0":"2026-04-11T05:47:00.933Z","2.0.1":"2026-04-12T19:02:02.925Z","2.0.2":"2026-04-20T22:58:53.968Z","2.1.0":"2026-06-10T10:22:45.101Z"},"bugs":{"url":"https://github.com/apvee/spfx-react-toolkit/issues"},"author":{"name":"Apvee Solutions"},"license":"MIT","homepage":"https://github.com/apvee/spfx-react-toolkit#readme","keywords":["sharepoint","spfx","sharepoint-framework","react","hooks","typescript","office365","microsoft365","m365","webpart","extension","commandset","field-customizer","application-customizer","pnp","pnpjs","context","state-management"],"repository":{"type":"git","url":"git+https://github.com/apvee/spfx-react-toolkit.git"},"description":"Comprehensive React runtime and hooks library for SharePoint Framework (SPFx)","maintainers":[{"name":"fabiofranzini","email":"fabio@apvee.com"}],"readme":"# SPFx React Toolkit\n\n> A comprehensive React runtime, hooks, helpers, and services library for SharePoint Framework (SPFx). Simplifies SPFx development with instance-scoped state isolation, ergonomic hooks, and reusable non-React composition APIs across WebParts, Extensions, and Command Sets.\n\n![SPFx React Toolkit](https://raw.githubusercontent.com/apvee/spfx-react-toolkit/main/assets/banner.png)\n\n---\n\n## Overview\n\n**SPFx React Toolkit** is a production-ready library that simplifies SharePoint Framework development by providing unified React providers, strongly-typed hooks, and reusable public helpers/services.\n\nBuilt on a provider-scoped runtime store, it delivers per-instance state isolation, automatic synchronization, and APIs that work both inside React hooks and in non-hook composition code.\n\n> **Designed for SPFx host projects:** This package is intended to be installed and consumed from SharePoint Framework projects. It is not a standalone React application; the consuming SPFx project provides the SharePoint runtime, React runtime, and host-specific SPFx packages.\n\n### Key Benefits\n\n| Benefit | Description |\n|---------|-------------|\n| 💪 **Type-Safe** | Full TypeScript support across hooks, helpers, and services |\n| ⚡ **Optimized** | Provider-scoped runtime state with per-instance isolation |\n| 🔄 **Auto-Sync** | Bidirectional synchronization between React and SPFx |\n| 🎨 **Universal** | Works with WebParts, Application Customizers, Field Customizers, and Command Sets |\n| 📦 **Modular** | Public hooks for React usage, plus helpers/services for non-hook composition |\n\n### Features\n\n- ✅ **40 React Hooks** — Comprehensive API surface for SPFx runtime data, clients, token providers, and API permission prechecks\n- ✅ **Public Helpers** — Pure utilities for storage keys, context extraction, tenant value parsing, theme conversion, and API permission prechecks\n- ✅ **Public Services** — Reusable service factories for PnPjs, app catalog lookup, tenant properties, tenant key-value storage, OneDrive app data, user photos, and API permission prechecks\n- ✅ **Instance Isolation** — State scoped per SPFx instance (multi-instance support)\n- ✅ **PnPjs Integration** — Optional hooks for PnPjs v4 with type-safe filters\n- ✅ **Cross-Platform** — Teams, SharePoint, and Local Workbench support\n\n---\n\n## Quick Start\n\n### Installation\n\nInstall the package in your SPFx project:\n\n```bash\nnpm install @apvee/spfx-react-toolkit\n```\n\nIf you use the PnPjs hooks or services, install the peer PnPjs packages as well:\n\n```bash\nnpm install @pnp/core @pnp/queryable @pnp/sp\n```\n\nThen wrap the SPFx entry point with the provider that matches the component type you are building:\n\n- `SPFxWebPartProvider` for WebParts\n- `SPFxApplicationCustomizerProvider` for Application Customizers\n- `SPFxFieldCustomizerProvider` for Field Customizers\n- `SPFxListViewCommandSetProvider` for ListView Command Sets\n\n### Basic Usage\n\n```typescript\n// In your WebPart\nimport { SPFxWebPartProvider } from '@apvee/spfx-react-toolkit';\n\npublic render(): void {\n  const element = (\n    <SPFxWebPartProvider instance={this}>\n      <MyComponent />\n    </SPFxWebPartProvider>\n  );\n  ReactDom.render(element, this.domElement);\n}\n\n// In your component\nimport { useSPFxProperties, useSPFxUserInfo } from '@apvee/spfx-react-toolkit';\n\nconst MyComponent: React.FC = () => {\n  const { properties } = useSPFxProperties<IMyProps>();\n  const { displayName } = useSPFxUserInfo();\n\n  return <div>Hello {displayName}!</div>;\n};\n```\n\n### Helpers and Services\n\nUse public helpers and services when the logic must run outside a React hook while keeping the same behavior used internally by the hooks.\n\n```typescript\nimport {\n  createScopedSPFxStorageKey,\n  createSPFxPnPListService,\n  getSPFxUserInfo,\n} from '@apvee/spfx-react-toolkit';\n\nconst user = getSPFxUserInfo(pageContext);\nconst filtersKey = createScopedSPFxStorageKey(instanceId, 'filters');\nconst tasks = createSPFxPnPListService(sp, 'Tasks', 50);\n```\n\n### API Permission Precheck\n\nUse `useSPFxApiPermissionPrecheck` to check whether the current SPFx runtime can obtain delegated tokens for Microsoft Graph and custom APIs before running a feature that depends on those scopes.\n\n```typescript\nimport { useSPFxApiPermissionPrecheck } from '@apvee/spfx-react-toolkit';\n\nfunction PermissionStatus() {\n  const precheck = useSPFxApiPermissionPrecheck({\n    graph: ['Sites.Read.All'],\n    customApis: [\n      {\n        name: 'Orders API',\n        resource: 'api://contoso-orders-api',\n        packageResource: 'Orders API',\n        scopes: ['Orders.Read']\n      }\n    ]\n  });\n\n  return <span>{precheck.configurationState}</span>;\n}\n```\n\n`available` means the current SPFx runtime obtained a token with the delegated scope. It does not read tenant grants and does not replace server-side authorization.\n\n---\n\n## Development Scripts\n\nUse these scripts when working on this repository:\n\n| Script | Purpose |\n|--------|---------|\n| `npm run build` | Bundles the SPFx package with `gulp bundle`, including TypeScript, Sass, lint, and webpack steps. |\n| `npm run clean` | Removes generated SPFx build output. Run before a clean build or before publishing. |\n| `npm test` | Runs the SPFx test pipeline with `gulp test`. |\n| `npm run verify:examples` | Verifies that the sample webpart registry covers all exported hooks and providers. |\n| `npm run verify:runtime-store` | Runs a focused runtime-store behavior check without requiring SharePoint. |\n| `npm run verify:public-docs` | Verifies that public helper/service documentation stays aligned with exported APIs. |\n| `npm run prepublishOnly` | Runs automatically before `npm publish`; performs a clean build, test task, and release verification checks. |\n\nRecommended local check before opening a PR or publishing a package:\n\n```bash\nnpm run clean\nnpm run build\nnpm test\nnpm run verify:examples\nnpm run verify:runtime-store\nnpm run verify:public-docs\n```\n\n---\n\n## 📚 Documentation\n\nFor complete documentation including:\n- Installation & configuration\n- All 4 provider components\n- Complete hooks API reference (40 hooks)\n- Public helpers and services API references\n- Code examples and best practices\n\n**➡️ [View Full Documentation](https://github.com/apvee/spfx-react-toolkit/blob/main/docs/INTRODUCTION.md)**\n\n---\n\n## Requirements\n\n| Requirement | Version |\n|-------------|---------|\n| Node.js | 22.x |\n| SPFx | 1.18.0+ |\n| React | 17.x |\n| TypeScript | 5.3+ |\n\n---\n\n## License\n\nMIT — See [LICENSE](./LICENSE) for details.\n\n---\n\n## Links\n\n- [📖 Full Documentation](https://github.com/apvee/spfx-react-toolkit/blob/main/docs/INTRODUCTION.md)\n- [📚 API Reference](https://github.com/apvee/spfx-react-toolkit/blob/main/docs/INDEX.md)\n- [🧰 Helpers API](https://github.com/apvee/spfx-react-toolkit/blob/main/docs/api/helpers/INDEX.md)\n- [🧩 Services API](https://github.com/apvee/spfx-react-toolkit/blob/main/docs/api/services/INDEX.md)\n- [📦 NPM Package](https://www.npmjs.com/package/@apvee/spfx-react-toolkit)\n- [🐛 Issues](https://github.com/apvee/spfx-react-toolkit/issues)\n\n---\n\nMade with ❤️ by [Apvee Solutions](https://github.com/apvee)\n","readmeFilename":"README.md"}