@apvee/spfx-react-toolkit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2012 -0
  3. package/lib/core/atoms.internal.d.ts +53 -0
  4. package/lib/core/atoms.internal.d.ts.map +1 -0
  5. package/lib/core/atoms.internal.js +35 -0
  6. package/lib/core/atoms.internal.js.map +1 -0
  7. package/lib/core/context.internal.d.ts +23 -0
  8. package/lib/core/context.internal.d.ts.map +1 -0
  9. package/lib/core/context.internal.js +34 -0
  10. package/lib/core/context.internal.js.map +1 -0
  11. package/lib/core/index.d.ts +6 -0
  12. package/lib/core/index.d.ts.map +1 -0
  13. package/lib/core/index.js +6 -0
  14. package/lib/core/index.js.map +1 -0
  15. package/lib/core/provider-application-customizer.d.ts +57 -0
  16. package/lib/core/provider-application-customizer.d.ts.map +1 -0
  17. package/lib/core/provider-application-customizer.js +45 -0
  18. package/lib/core/provider-application-customizer.js.map +1 -0
  19. package/lib/core/provider-base.internal.d.ts +20 -0
  20. package/lib/core/provider-base.internal.d.ts.map +1 -0
  21. package/lib/core/provider-base.internal.js +126 -0
  22. package/lib/core/provider-base.internal.js.map +1 -0
  23. package/lib/core/provider-field-customizer.d.ts +58 -0
  24. package/lib/core/provider-field-customizer.d.ts.map +1 -0
  25. package/lib/core/provider-field-customizer.js +46 -0
  26. package/lib/core/provider-field-customizer.js.map +1 -0
  27. package/lib/core/provider-listview-commandset.d.ts +60 -0
  28. package/lib/core/provider-listview-commandset.d.ts.map +1 -0
  29. package/lib/core/provider-listview-commandset.js +48 -0
  30. package/lib/core/provider-listview-commandset.js.map +1 -0
  31. package/lib/core/provider-webpart.d.ts +48 -0
  32. package/lib/core/provider-webpart.d.ts.map +1 -0
  33. package/lib/core/provider-webpart.js +36 -0
  34. package/lib/core/provider-webpart.js.map +1 -0
  35. package/lib/core/types.d.ts +84 -0
  36. package/lib/core/types.d.ts.map +1 -0
  37. package/lib/core/types.js +4 -0
  38. package/lib/core/types.js.map +1 -0
  39. package/lib/hooks/index.d.ts +34 -0
  40. package/lib/hooks/index.d.ts.map +1 -0
  41. package/lib/hooks/index.js +34 -0
  42. package/lib/hooks/index.js.map +1 -0
  43. package/lib/hooks/useSPFxAadHttpClient.d.ts +231 -0
  44. package/lib/hooks/useSPFxAadHttpClient.d.ts.map +1 -0
  45. package/lib/hooks/useSPFxAadHttpClient.js +299 -0
  46. package/lib/hooks/useSPFxAadHttpClient.js.map +1 -0
  47. package/lib/hooks/useSPFxContainerInfo.d.ts +41 -0
  48. package/lib/hooks/useSPFxContainerInfo.d.ts.map +1 -0
  49. package/lib/hooks/useSPFxContainerInfo.js +47 -0
  50. package/lib/hooks/useSPFxContainerInfo.js.map +1 -0
  51. package/lib/hooks/useSPFxContainerSize.d.ts +119 -0
  52. package/lib/hooks/useSPFxContainerSize.d.ts.map +1 -0
  53. package/lib/hooks/useSPFxContainerSize.js +150 -0
  54. package/lib/hooks/useSPFxContainerSize.js.map +1 -0
  55. package/lib/hooks/useSPFxContext.d.ts +14 -0
  56. package/lib/hooks/useSPFxContext.d.ts.map +1 -0
  57. package/lib/hooks/useSPFxContext.js +16 -0
  58. package/lib/hooks/useSPFxContext.js.map +1 -0
  59. package/lib/hooks/useSPFxCorrelationInfo.d.ts +51 -0
  60. package/lib/hooks/useSPFxCorrelationInfo.d.ts.map +1 -0
  61. package/lib/hooks/useSPFxCorrelationInfo.js +58 -0
  62. package/lib/hooks/useSPFxCorrelationInfo.js.map +1 -0
  63. package/lib/hooks/useSPFxCrossSitePermissions.d.ts +81 -0
  64. package/lib/hooks/useSPFxCrossSitePermissions.d.ts.map +1 -0
  65. package/lib/hooks/useSPFxCrossSitePermissions.js +132 -0
  66. package/lib/hooks/useSPFxCrossSitePermissions.js.map +1 -0
  67. package/lib/hooks/useSPFxDisplayMode.d.ts +61 -0
  68. package/lib/hooks/useSPFxDisplayMode.d.ts.map +1 -0
  69. package/lib/hooks/useSPFxDisplayMode.js +69 -0
  70. package/lib/hooks/useSPFxDisplayMode.js.map +1 -0
  71. package/lib/hooks/useSPFxEnvironmentInfo.d.ts +63 -0
  72. package/lib/hooks/useSPFxEnvironmentInfo.d.ts.map +1 -0
  73. package/lib/hooks/useSPFxEnvironmentInfo.js +91 -0
  74. package/lib/hooks/useSPFxEnvironmentInfo.js.map +1 -0
  75. package/lib/hooks/useSPFxFluent9ThemeInfo.d.ts +105 -0
  76. package/lib/hooks/useSPFxFluent9ThemeInfo.d.ts.map +1 -0
  77. package/lib/hooks/useSPFxFluent9ThemeInfo.js +136 -0
  78. package/lib/hooks/useSPFxFluent9ThemeInfo.js.map +1 -0
  79. package/lib/hooks/useSPFxHubSiteInfo.d.ts +80 -0
  80. package/lib/hooks/useSPFxHubSiteInfo.d.ts.map +1 -0
  81. package/lib/hooks/useSPFxHubSiteInfo.js +127 -0
  82. package/lib/hooks/useSPFxHubSiteInfo.js.map +1 -0
  83. package/lib/hooks/useSPFxInstanceInfo.d.ts +41 -0
  84. package/lib/hooks/useSPFxInstanceInfo.d.ts.map +1 -0
  85. package/lib/hooks/useSPFxInstanceInfo.js +40 -0
  86. package/lib/hooks/useSPFxInstanceInfo.js.map +1 -0
  87. package/lib/hooks/useSPFxListInfo.d.ts +64 -0
  88. package/lib/hooks/useSPFxListInfo.d.ts.map +1 -0
  89. package/lib/hooks/useSPFxListInfo.js +70 -0
  90. package/lib/hooks/useSPFxListInfo.js.map +1 -0
  91. package/lib/hooks/useSPFxLocaleInfo.d.ts +123 -0
  92. package/lib/hooks/useSPFxLocaleInfo.d.ts.map +1 -0
  93. package/lib/hooks/useSPFxLocaleInfo.js +109 -0
  94. package/lib/hooks/useSPFxLocaleInfo.js.map +1 -0
  95. package/lib/hooks/useSPFxLogger.d.ts +108 -0
  96. package/lib/hooks/useSPFxLogger.d.ts.map +1 -0
  97. package/lib/hooks/useSPFxLogger.js +117 -0
  98. package/lib/hooks/useSPFxLogger.js.map +1 -0
  99. package/lib/hooks/useSPFxMSGraphClient.d.ts +200 -0
  100. package/lib/hooks/useSPFxMSGraphClient.d.ts.map +1 -0
  101. package/lib/hooks/useSPFxMSGraphClient.js +264 -0
  102. package/lib/hooks/useSPFxMSGraphClient.js.map +1 -0
  103. package/lib/hooks/useSPFxOneDriveAppData.d.ts +264 -0
  104. package/lib/hooks/useSPFxOneDriveAppData.d.ts.map +1 -0
  105. package/lib/hooks/useSPFxOneDriveAppData.js +395 -0
  106. package/lib/hooks/useSPFxOneDriveAppData.js.map +1 -0
  107. package/lib/hooks/useSPFxPageContext.d.ts +37 -0
  108. package/lib/hooks/useSPFxPageContext.d.ts.map +1 -0
  109. package/lib/hooks/useSPFxPageContext.js +49 -0
  110. package/lib/hooks/useSPFxPageContext.js.map +1 -0
  111. package/lib/hooks/useSPFxPageType.d.ts +82 -0
  112. package/lib/hooks/useSPFxPageType.d.ts.map +1 -0
  113. package/lib/hooks/useSPFxPageType.js +137 -0
  114. package/lib/hooks/useSPFxPageType.js.map +1 -0
  115. package/lib/hooks/useSPFxPerformance.d.ts +72 -0
  116. package/lib/hooks/useSPFxPerformance.d.ts.map +1 -0
  117. package/lib/hooks/useSPFxPerformance.js +167 -0
  118. package/lib/hooks/useSPFxPerformance.js.map +1 -0
  119. package/lib/hooks/useSPFxPermissions.d.ts +61 -0
  120. package/lib/hooks/useSPFxPermissions.d.ts.map +1 -0
  121. package/lib/hooks/useSPFxPermissions.js +73 -0
  122. package/lib/hooks/useSPFxPermissions.js.map +1 -0
  123. package/lib/hooks/useSPFxPnP.d.ts +539 -0
  124. package/lib/hooks/useSPFxPnP.d.ts.map +1 -0
  125. package/lib/hooks/useSPFxPnP.js +533 -0
  126. package/lib/hooks/useSPFxPnP.js.map +1 -0
  127. package/lib/hooks/useSPFxPnPContext.d.ts +290 -0
  128. package/lib/hooks/useSPFxPnPContext.d.ts.map +1 -0
  129. package/lib/hooks/useSPFxPnPContext.js +340 -0
  130. package/lib/hooks/useSPFxPnPContext.js.map +1 -0
  131. package/lib/hooks/useSPFxPnPList.d.ts +545 -0
  132. package/lib/hooks/useSPFxPnPList.d.ts.map +1 -0
  133. package/lib/hooks/useSPFxPnPList.js +906 -0
  134. package/lib/hooks/useSPFxPnPList.js.map +1 -0
  135. package/lib/hooks/useSPFxPnPSearch.d.ts +540 -0
  136. package/lib/hooks/useSPFxPnPSearch.d.ts.map +1 -0
  137. package/lib/hooks/useSPFxPnPSearch.js +672 -0
  138. package/lib/hooks/useSPFxPnPSearch.js.map +1 -0
  139. package/lib/hooks/useSPFxProperties.d.ts +80 -0
  140. package/lib/hooks/useSPFxProperties.d.ts.map +1 -0
  141. package/lib/hooks/useSPFxProperties.js +95 -0
  142. package/lib/hooks/useSPFxProperties.js.map +1 -0
  143. package/lib/hooks/useSPFxSPHttpClient.d.ts +218 -0
  144. package/lib/hooks/useSPFxSPHttpClient.d.ts.map +1 -0
  145. package/lib/hooks/useSPFxSPHttpClient.js +287 -0
  146. package/lib/hooks/useSPFxSPHttpClient.js.map +1 -0
  147. package/lib/hooks/useSPFxServiceScope.d.ts +107 -0
  148. package/lib/hooks/useSPFxServiceScope.d.ts.map +1 -0
  149. package/lib/hooks/useSPFxServiceScope.js +105 -0
  150. package/lib/hooks/useSPFxServiceScope.js.map +1 -0
  151. package/lib/hooks/useSPFxSiteInfo.d.ts +116 -0
  152. package/lib/hooks/useSPFxSiteInfo.d.ts.map +1 -0
  153. package/lib/hooks/useSPFxSiteInfo.js +109 -0
  154. package/lib/hooks/useSPFxSiteInfo.js.map +1 -0
  155. package/lib/hooks/useSPFxStorage.d.ts +81 -0
  156. package/lib/hooks/useSPFxStorage.d.ts.map +1 -0
  157. package/lib/hooks/useSPFxStorage.js +140 -0
  158. package/lib/hooks/useSPFxStorage.js.map +1 -0
  159. package/lib/hooks/useSPFxTeams.d.ts +63 -0
  160. package/lib/hooks/useSPFxTeams.d.ts.map +1 -0
  161. package/lib/hooks/useSPFxTeams.js +198 -0
  162. package/lib/hooks/useSPFxTeams.js.map +1 -0
  163. package/lib/hooks/useSPFxTenantProperty.d.ts +389 -0
  164. package/lib/hooks/useSPFxTenantProperty.d.ts.map +1 -0
  165. package/lib/hooks/useSPFxTenantProperty.js +683 -0
  166. package/lib/hooks/useSPFxTenantProperty.js.map +1 -0
  167. package/lib/hooks/useSPFxThemeInfo.d.ts +27 -0
  168. package/lib/hooks/useSPFxThemeInfo.d.ts.map +1 -0
  169. package/lib/hooks/useSPFxThemeInfo.js +33 -0
  170. package/lib/hooks/useSPFxThemeInfo.js.map +1 -0
  171. package/lib/hooks/useSPFxUserInfo.d.ts +47 -0
  172. package/lib/hooks/useSPFxUserInfo.d.ts.map +1 -0
  173. package/lib/hooks/useSPFxUserInfo.js +47 -0
  174. package/lib/hooks/useSPFxUserInfo.js.map +1 -0
  175. package/lib/hooks/useSPFxUserPhoto.d.ts +270 -0
  176. package/lib/hooks/useSPFxUserPhoto.d.ts.map +1 -0
  177. package/lib/hooks/useSPFxUserPhoto.js +346 -0
  178. package/lib/hooks/useSPFxUserPhoto.js.map +1 -0
  179. package/lib/index.d.ts +3 -0
  180. package/lib/index.d.ts.map +1 -0
  181. package/lib/index.js +3 -0
  182. package/lib/index.js.map +1 -0
  183. package/lib/utils/index.d.ts +1 -0
  184. package/lib/utils/index.d.ts.map +1 -0
  185. package/lib/utils/index.js +3 -0
  186. package/lib/utils/index.js.map +1 -0
  187. package/lib/utils/resize-observer.internal.d.ts +10 -0
  188. package/lib/utils/resize-observer.internal.d.ts.map +1 -0
  189. package/lib/utils/resize-observer.internal.js +34 -0
  190. package/lib/utils/resize-observer.internal.js.map +1 -0
  191. package/lib/utils/theme-subscription.internal.d.ts +11 -0
  192. package/lib/utils/theme-subscription.internal.d.ts.map +1 -0
  193. package/lib/utils/theme-subscription.internal.js +58 -0
  194. package/lib/utils/theme-subscription.internal.js.map +1 -0
  195. package/lib/utils/type-guards.internal.d.ts +35 -0
  196. package/lib/utils/type-guards.internal.d.ts.map +1 -0
  197. package/lib/utils/type-guards.internal.js +88 -0
  198. package/lib/utils/type-guards.internal.js.map +1 -0
  199. package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.d.ts +13 -0
  200. package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.d.ts.map +1 -0
  201. package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.js +67 -0
  202. package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.js.map +1 -0
  203. package/lib/webparts/spFxReactToolkitTest/SpFxReactToolkitTestWebPart.manifest.json +21 -0
  204. package/lib/webparts/spFxReactToolkitTest/assets/welcome-dark.png +0 -0
  205. package/lib/webparts/spFxReactToolkitTest/assets/welcome-light.png +0 -0
  206. package/lib/webparts/spFxReactToolkitTest/components/ISpFxReactToolkitTestProps.d.ts +8 -0
  207. package/lib/webparts/spFxReactToolkitTest/components/ISpFxReactToolkitTestProps.d.ts.map +1 -0
  208. package/lib/webparts/spFxReactToolkitTest/components/ISpFxReactToolkitTestProps.js +2 -0
  209. package/lib/webparts/spFxReactToolkitTest/components/ISpFxReactToolkitTestProps.js.map +1 -0
  210. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.d.ts +8 -0
  211. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.d.ts.map +1 -0
  212. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.js +1351 -0
  213. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.js.map +1 -0
  214. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.css +2 -0
  215. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.d.ts +18 -0
  216. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.d.ts.map +1 -0
  217. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.js +19 -0
  218. package/lib/webparts/spFxReactToolkitTest/components/SpFxReactToolkitTest.module.scss.js.map +1 -0
  219. package/lib/webparts/spFxReactToolkitTest/loc/en-us.js +16 -0
  220. package/package.json +95 -0
@@ -0,0 +1,53 @@
1
+ import type { DisplayMode } from '@microsoft/sp-core-library';
2
+ import type { IReadonlyTheme } from '@microsoft/sp-component-base';
3
+ import type { ContainerSize } from './types';
4
+ /**
5
+ * Collection of Jotai atoms for SPFx state
6
+ *
7
+ * These atoms are isolated per Provider instance through separate stores.
8
+ * Each SPFxProvider creates its own store, ensuring complete isolation
9
+ * between multiple instances on the same page.
10
+ *
11
+ * Usage in hooks:
12
+ * const theme = useAtomValue(spfxAtoms.theme);
13
+ * const setDisplayMode = useSetAtom(spfxAtoms.displayMode);
14
+ *
15
+ * Benefits:
16
+ * - Simple atom definitions (no scoping complexity)
17
+ * - Automatic isolation via Provider store
18
+ * - Automatic cleanup when Provider unmounts
19
+ * - Type-safe and follows Jotai best practices
20
+ *
21
+ * @internal
22
+ */
23
+ export declare const spfxAtoms: {
24
+ readonly theme: import("jotai").PrimitiveAtom<IReadonlyTheme | undefined> & {
25
+ init: IReadonlyTheme | undefined;
26
+ };
27
+ readonly displayMode: import("jotai").PrimitiveAtom<DisplayMode | undefined> & {
28
+ init: DisplayMode | undefined;
29
+ };
30
+ readonly properties: import("jotai").PrimitiveAtom<unknown> & {
31
+ init: unknown;
32
+ };
33
+ readonly containerEl: import("jotai").PrimitiveAtom<HTMLElement | undefined> & {
34
+ init: HTMLElement | undefined;
35
+ };
36
+ readonly containerSize: import("jotai").PrimitiveAtom<ContainerSize | undefined> & {
37
+ init: ContainerSize | undefined;
38
+ };
39
+ readonly teams: import("jotai").PrimitiveAtom<{
40
+ supported: boolean;
41
+ context?: unknown;
42
+ theme?: "default" | "dark" | "highContrast" | undefined;
43
+ initialized: boolean;
44
+ }> & {
45
+ init: {
46
+ supported: boolean;
47
+ context?: unknown;
48
+ theme?: "default" | "dark" | "highContrast" | undefined;
49
+ initialized: boolean;
50
+ };
51
+ };
52
+ };
53
+ //# sourceMappingURL=atoms.internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atoms.internal.d.ts","sourceRoot":"","sources":["../../src/core/atoms.internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;mBAeP,OAAO;kBACR,OAAO;;qBAEJ,OAAO;;;uBAHT,OAAO;sBACR,OAAO;;yBAEJ,OAAO;;;CAEd,CAAC"}
@@ -0,0 +1,35 @@
1
+ // atoms.ts
2
+ // Jotai atoms for SPFx state management
3
+ // Each Provider instance gets its own isolated store
4
+ import { atom } from 'jotai';
5
+ /**
6
+ * Collection of Jotai atoms for SPFx state
7
+ *
8
+ * These atoms are isolated per Provider instance through separate stores.
9
+ * Each SPFxProvider creates its own store, ensuring complete isolation
10
+ * between multiple instances on the same page.
11
+ *
12
+ * Usage in hooks:
13
+ * const theme = useAtomValue(spfxAtoms.theme);
14
+ * const setDisplayMode = useSetAtom(spfxAtoms.displayMode);
15
+ *
16
+ * Benefits:
17
+ * - Simple atom definitions (no scoping complexity)
18
+ * - Automatic isolation via Provider store
19
+ * - Automatic cleanup when Provider unmounts
20
+ * - Type-safe and follows Jotai best practices
21
+ *
22
+ * @internal
23
+ */
24
+ export var spfxAtoms = {
25
+ // Core state atoms
26
+ theme: atom(undefined),
27
+ displayMode: atom(undefined),
28
+ properties: atom(undefined),
29
+ // Container state atoms
30
+ containerEl: atom(undefined),
31
+ containerSize: atom(undefined),
32
+ // Teams context state (async initialized)
33
+ teams: atom({ supported: false, initialized: false }),
34
+ };
35
+ //# sourceMappingURL=atoms.internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atoms.internal.js","sourceRoot":"","sources":["../../src/core/atoms.internal.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,wCAAwC;AACxC,qDAAqD;AAErD,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAK7B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,IAAM,SAAS,GAAG;IACvB,mBAAmB;IACnB,KAAK,EAAE,IAAI,CAA6B,SAAS,CAAC;IAElD,WAAW,EAAE,IAAI,CAA0B,SAAS,CAAC;IAErD,UAAU,EAAE,IAAI,CAAU,SAAS,CAAC;IAEpC,wBAAwB;IACxB,WAAW,EAAE,IAAI,CAA0B,SAAS,CAAC;IAErD,aAAa,EAAE,IAAI,CAA4B,SAAS,CAAC;IAEzD,0CAA0C;IAC1C,KAAK,EAAE,IAAI,CAKR,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;CACpC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import * as React from 'react';
2
+ import type { SPFxContextValue } from './types';
3
+ /**
4
+ * React Context for SPFx metadata
5
+ * Contains only static reference data:
6
+ * - instanceId: Unique identifier for this SPFx instance
7
+ * - spfxContext: The SPFx context object (WebPartContext, etc.)
8
+ * - kind: Type of host component
9
+ *
10
+ * This context does NOT contain reactive state.
11
+ * State is managed via Jotai atoms in isolated stores per Provider instance.
12
+ *
13
+ * @internal
14
+ */
15
+ export declare const SPFxContext: React.Context<SPFxContextValue | null>;
16
+ /**
17
+ * Internal hook to access SPFx context
18
+ * Throws error if used outside SPFxProvider
19
+ *
20
+ * @internal
21
+ */
22
+ export declare function useSPFxContext(): SPFxContextValue;
23
+ //# sourceMappingURL=context.internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.internal.d.ts","sourceRoot":"","sources":["../../src/core/context.internal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,wCAAqD,CAAC;AAM9E;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,gBAAgB,CAWjD"}
@@ -0,0 +1,34 @@
1
+ // context.tsx
2
+ // React Context for SPFx metadata (static, non-reactive)
3
+ import * as React from 'react';
4
+ /**
5
+ * React Context for SPFx metadata
6
+ * Contains only static reference data:
7
+ * - instanceId: Unique identifier for this SPFx instance
8
+ * - spfxContext: The SPFx context object (WebPartContext, etc.)
9
+ * - kind: Type of host component
10
+ *
11
+ * This context does NOT contain reactive state.
12
+ * State is managed via Jotai atoms in isolated stores per Provider instance.
13
+ *
14
+ * @internal
15
+ */
16
+ export var SPFxContext = React.createContext(null);
17
+ if (process.env.NODE_ENV !== 'production') {
18
+ SPFxContext.displayName = 'SPFxContext';
19
+ }
20
+ /**
21
+ * Internal hook to access SPFx context
22
+ * Throws error if used outside SPFxProvider
23
+ *
24
+ * @internal
25
+ */
26
+ export function useSPFxContext() {
27
+ var context = React.useContext(SPFxContext);
28
+ if (!context) {
29
+ throw new Error('useSPFxContext must be used within SPFxProvider. ' +
30
+ 'Make sure your component is wrapped with <SPFxProvider>.');
31
+ }
32
+ return context;
33
+ }
34
+ //# sourceMappingURL=context.internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.internal.js","sourceRoot":"","sources":["../../src/core/context.internal.tsx"],"names":[],"mappings":"AAAA,cAAc;AACd,yDAAyD;AAEzD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAA0B,IAAI,CAAC,CAAC;AAE9E,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;IAC1C,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,mDAAmD;YACnD,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './provider-application-customizer';
2
+ export * from './provider-field-customizer';
3
+ export * from './provider-listview-commandset';
4
+ export * from './provider-webpart';
5
+ export * from './types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './provider-application-customizer';
2
+ export * from './provider-field-customizer';
3
+ export * from './provider-listview-commandset';
4
+ export * from './provider-webpart';
5
+ export * from './types';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,57 @@
1
+ import * as React from 'react';
2
+ import type { BaseApplicationCustomizer } from '@microsoft/sp-application-base';
3
+ /**
4
+ * Props for the SPFx Application Customizer-specific provider component.
5
+ *
6
+ * @template TProps - The properties type for the Application Customizer.
7
+ * @public
8
+ */
9
+ export interface SPFxApplicationCustomizerProviderProps<TProps extends {} = {}> {
10
+ /**
11
+ * The SPFx Application Customizer instance.
12
+ */
13
+ instance: BaseApplicationCustomizer<TProps>;
14
+ /**
15
+ * The children to render within the provider.
16
+ */
17
+ children?: React.ReactNode;
18
+ }
19
+ /**
20
+ * SPFx context provider specifically for Application Customizers.
21
+ *
22
+ * This is a type-safe wrapper around the base provider that accepts an Application Customizer instance
23
+ * directly without requiring type casting. Use this provider in Application Customizers instead of the
24
+ * generic `SPFxProvider`.
25
+ *
26
+ * @param props - The component props.
27
+ * @returns The provider component.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * import { SPFxApplicationCustomizerProvider } from 'spfx-react-toolkit';
32
+ *
33
+ * export default class MyApplicationCustomizer extends BaseApplicationCustomizer<IMyProps> {
34
+ * public onInit(): Promise<void> {
35
+ * // Create a placeholder for your customizer
36
+ * const placeholder = this.context.placeholderProvider.tryCreateContent(
37
+ * PlaceholderName.Top
38
+ * );
39
+ *
40
+ * if (placeholder) {
41
+ * const element = React.createElement(
42
+ * SPFxApplicationCustomizerProvider,
43
+ * { instance: this },
44
+ * React.createElement(MyComponent)
45
+ * );
46
+ * ReactDom.render(element, placeholder.domElement);
47
+ * }
48
+ *
49
+ * return Promise.resolve();
50
+ * }
51
+ * }
52
+ * ```
53
+ *
54
+ * @public
55
+ */
56
+ export declare function SPFxApplicationCustomizerProvider<TProps extends {} = {}>(props: SPFxApplicationCustomizerProviderProps<TProps>): JSX.Element;
57
+ //# sourceMappingURL=provider-application-customizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-application-customizer.d.ts","sourceRoot":"","sources":["../../src/core/provider-application-customizer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAGhF;;;;;GAKG;AACH,MAAM,WAAW,sCAAsC,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE;IAC5E;;OAEG;IACH,QAAQ,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE,EACtE,KAAK,EAAE,sCAAsC,CAAC,MAAM,CAAC,GACpD,GAAG,CAAC,OAAO,CAEb"}
@@ -0,0 +1,45 @@
1
+ // provider-application-customizer.tsx
2
+ // Type-safe provider for Application Customizers
3
+ import * as React from 'react';
4
+ import { SPFxProviderBase } from './provider-base.internal';
5
+ /**
6
+ * SPFx context provider specifically for Application Customizers.
7
+ *
8
+ * This is a type-safe wrapper around the base provider that accepts an Application Customizer instance
9
+ * directly without requiring type casting. Use this provider in Application Customizers instead of the
10
+ * generic `SPFxProvider`.
11
+ *
12
+ * @param props - The component props.
13
+ * @returns The provider component.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * import { SPFxApplicationCustomizerProvider } from 'spfx-react-toolkit';
18
+ *
19
+ * export default class MyApplicationCustomizer extends BaseApplicationCustomizer<IMyProps> {
20
+ * public onInit(): Promise<void> {
21
+ * // Create a placeholder for your customizer
22
+ * const placeholder = this.context.placeholderProvider.tryCreateContent(
23
+ * PlaceholderName.Top
24
+ * );
25
+ *
26
+ * if (placeholder) {
27
+ * const element = React.createElement(
28
+ * SPFxApplicationCustomizerProvider,
29
+ * { instance: this },
30
+ * React.createElement(MyComponent)
31
+ * );
32
+ * ReactDom.render(element, placeholder.domElement);
33
+ * }
34
+ *
35
+ * return Promise.resolve();
36
+ * }
37
+ * }
38
+ * ```
39
+ *
40
+ * @public
41
+ */
42
+ export function SPFxApplicationCustomizerProvider(props) {
43
+ return React.createElement(SPFxProviderBase, { instance: props.instance }, props.children);
44
+ }
45
+ //# sourceMappingURL=provider-application-customizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-application-customizer.js","sourceRoot":"","sources":["../../src/core/provider-application-customizer.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iDAAiD;AAEjD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAoB5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,iCAAiC,CAC/C,KAAqD;IAErD,OAAO,oBAAC,gBAAgB,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAiB,IAAG,KAAK,CAAC,QAAQ,CAAoB,CAAC;AAClG,CAAC"}
@@ -0,0 +1,20 @@
1
+ /// <reference types="react" />
2
+ import type { SPFxProviderProps } from './types';
3
+ /**
4
+ * SPFxProviderBase - Internal base provider with shared logic
5
+ *
6
+ * Creates an isolated Jotai store for each instance, ensuring complete
7
+ * state isolation between multiple SPFx components on the same page.
8
+ *
9
+ * DO NOT use directly - use type-specific providers instead:
10
+ * - SPFxWebPartProvider
11
+ * - SPFxApplicationCustomizerProvider
12
+ * - SPFxListViewCommandSetProvider
13
+ * - SPFxFieldCustomizerProvider
14
+ *
15
+ * Or use the generic SPFxProvider for backward compatibility.
16
+ *
17
+ * @internal
18
+ */
19
+ export declare function SPFxProviderBase<TProps extends {} = {}>(props: SPFxProviderProps<TProps>): JSX.Element;
20
+ //# sourceMappingURL=provider-base.internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-base.internal.d.ts","sourceRoot":"","sources":["../../src/core/provider-base.internal.tsx"],"names":[],"mappings":";AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,SAAS,CAAC;AAOnE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE,EACrD,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAC/B,GAAG,CAAC,OAAO,CAgIb"}
@@ -0,0 +1,126 @@
1
+ // provider-base.tsx
2
+ // SPFxProviderBase - Internal base implementation with shared logic
3
+ import * as React from 'react';
4
+ import { Provider, createStore, useSetAtom, useAtomValue } from 'jotai';
5
+ import { SPFxContext } from './context.internal';
6
+ import { spfxAtoms } from './atoms.internal';
7
+ import { detectComponentKind, isWebPart, } from '../utils/type-guards.internal';
8
+ import { useThemeSubscription } from '../utils/theme-subscription.internal';
9
+ /**
10
+ * SPFxProviderBase - Internal base provider with shared logic
11
+ *
12
+ * Creates an isolated Jotai store for each instance, ensuring complete
13
+ * state isolation between multiple SPFx components on the same page.
14
+ *
15
+ * DO NOT use directly - use type-specific providers instead:
16
+ * - SPFxWebPartProvider
17
+ * - SPFxApplicationCustomizerProvider
18
+ * - SPFxListViewCommandSetProvider
19
+ * - SPFxFieldCustomizerProvider
20
+ *
21
+ * Or use the generic SPFxProvider for backward compatibility.
22
+ *
23
+ * @internal
24
+ */
25
+ export function SPFxProviderBase(props) {
26
+ var instance = props.instance, children = props.children;
27
+ // Cast to 'any' to access protected/private properties
28
+ // This is safe because we're inside the provider and know the structure
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ var instanceAny = instance;
31
+ // Detect component kind (WebPart, AppCustomizer, etc.)
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ var kind = React.useMemo(function () { return detectComponentKind(instance); }, [instance]);
34
+ // Extract context (BaseComponentContext - has instanceId)
35
+ var context = instanceAny.context;
36
+ // Extract instanceId type-safe (all SPFx contexts extend BaseComponentContext)
37
+ var instanceId = React.useMemo(function () { return context.instanceId; }, [context]);
38
+ // Create isolated Jotai store for this Provider instance
39
+ // Each store is independent, ensuring complete state isolation
40
+ var store = React.useMemo(function () { return createStore(); }, []);
41
+ // Get atom setters (using the isolated store)
42
+ var setProperties = useSetAtom(spfxAtoms.properties, { store: store });
43
+ var setDisplayMode = useSetAtom(spfxAtoms.displayMode, { store: store });
44
+ var setContainerEl = useSetAtom(spfxAtoms.containerEl, { store: store });
45
+ var setTheme = useSetAtom(spfxAtoms.theme, { store: store });
46
+ // Ref to track last known properties value (prevents loop)
47
+ var lastPropertiesRef = React.useRef(instanceAny.properties);
48
+ // Subscribe to theme changes (single subscription per instance)
49
+ useThemeSubscription(context, setTheme);
50
+ // Initialize atoms based on component type
51
+ React.useEffect(function () {
52
+ // Properties (common to all)
53
+ setProperties(instanceAny.properties);
54
+ lastPropertiesRef.current = instanceAny.properties;
55
+ // WebPart-specific
56
+ if (isWebPart(instance)) {
57
+ setDisplayMode(instanceAny.displayMode);
58
+ setContainerEl(instanceAny.domElement);
59
+ }
60
+ }, [
61
+ instance,
62
+ instanceAny,
63
+ setProperties,
64
+ setDisplayMode,
65
+ setContainerEl,
66
+ ]);
67
+ // Sync properties when they change (SPFx → Atom)
68
+ // Property Pane changes will trigger this via instance.properties reference change
69
+ React.useEffect(function () {
70
+ if (instanceAny.properties !== lastPropertiesRef.current) {
71
+ setProperties(instanceAny.properties);
72
+ lastPropertiesRef.current = instanceAny.properties;
73
+ }
74
+ }, [instanceAny.properties, setProperties, instanceAny]);
75
+ // Sync properties when atom changes (Atom → SPFx)
76
+ // Hook updates will trigger this via atom subscription
77
+ var properties = useAtomValue(spfxAtoms.properties, { store: store });
78
+ React.useEffect(function () {
79
+ // Guard: Don't sync if atom is still undefined (initial state before initialization)
80
+ // This prevents race condition where useAtomValue reads before initialization useEffect runs
81
+ if (properties === undefined) {
82
+ return;
83
+ }
84
+ // Only sync if atom value is different from last known value
85
+ if (properties !== lastPropertiesRef.current) {
86
+ // Mutate SPFx properties object (copy all properties from atom to instance)
87
+ var target = instanceAny.properties;
88
+ var source = properties;
89
+ // Clear existing properties
90
+ for (var key in target) {
91
+ if (Object.prototype.hasOwnProperty.call(target, key)) {
92
+ delete target[key];
93
+ }
94
+ }
95
+ // Copy new properties
96
+ for (var key in source) {
97
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
98
+ target[key] = source[key];
99
+ }
100
+ }
101
+ lastPropertiesRef.current = properties;
102
+ // Refresh Property Pane for WebParts (if propertyPane exists)
103
+ if (isWebPart(instance)) {
104
+ var ctx = instanceAny.context;
105
+ if (ctx.propertyPane && typeof ctx.propertyPane.refresh === 'function') {
106
+ ctx.propertyPane.refresh();
107
+ }
108
+ }
109
+ }
110
+ }, [properties, instance, instanceAny]);
111
+ // WebPart: Sync displayMode when it changes
112
+ React.useEffect(function () {
113
+ if (isWebPart(instance)) {
114
+ setDisplayMode(instanceAny.displayMode);
115
+ }
116
+ }, [instance, instanceAny, setDisplayMode]);
117
+ // Create context value (memoized to prevent re-renders)
118
+ var contextValue = React.useMemo(function () { return ({
119
+ instanceId: instanceId,
120
+ spfxContext: context,
121
+ kind: kind,
122
+ }); }, [instanceId, context, kind]);
123
+ return (React.createElement(Provider, { store: store },
124
+ React.createElement(SPFxContext.Provider, { value: contextValue }, children)));
125
+ }
126
+ //# sourceMappingURL=provider-base.internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-base.internal.js","sourceRoot":"","sources":["../../src/core/provider-base.internal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import * as React from 'react';
2
+ import type { BaseFieldCustomizer } from '@microsoft/sp-listview-extensibility';
3
+ /**
4
+ * Props for the SPFx Field Customizer-specific provider component.
5
+ *
6
+ * @template TProps - The properties type for the Field Customizer.
7
+ * @public
8
+ */
9
+ export interface SPFxFieldCustomizerProviderProps<TProps extends {} = {}> {
10
+ /**
11
+ * The SPFx Field Customizer instance.
12
+ */
13
+ instance: BaseFieldCustomizer<TProps>;
14
+ /**
15
+ * The children to render within the provider.
16
+ */
17
+ children?: React.ReactNode;
18
+ }
19
+ /**
20
+ * SPFx context provider specifically for Field Customizers.
21
+ *
22
+ * This is a type-safe wrapper around the base provider that accepts a Field Customizer instance
23
+ * directly without requiring type casting. Use this provider in Field Customizers instead of the
24
+ * generic `SPFxProvider`.
25
+ *
26
+ * @param props - The component props.
27
+ * @returns The provider component.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * import { SPFxFieldCustomizerProvider } from 'spfx-react-toolkit';
32
+ * import * as ReactDom from 'react-dom';
33
+ *
34
+ * export default class MyFieldCustomizer extends BaseFieldCustomizer<IMyProps> {
35
+ * public onRenderCell(event: IFieldCustomizerCellEventParameters): void {
36
+ * const element = React.createElement(
37
+ * SPFxFieldCustomizerProvider,
38
+ * { instance: this },
39
+ * React.createElement(MyFieldRenderer, {
40
+ * value: event.fieldValue,
41
+ * listItem: event.listItem
42
+ * })
43
+ * );
44
+ *
45
+ * ReactDom.render(element, event.domElement);
46
+ * }
47
+ *
48
+ * public onDisposeCell(event: IFieldCustomizerCellEventParameters): void {
49
+ * ReactDom.unmountComponentAtNode(event.domElement);
50
+ * super.onDisposeCell(event);
51
+ * }
52
+ * }
53
+ * ```
54
+ *
55
+ * @public
56
+ */
57
+ export declare function SPFxFieldCustomizerProvider<TProps extends {} = {}>(props: SPFxFieldCustomizerProviderProps<TProps>): JSX.Element;
58
+ //# sourceMappingURL=provider-field-customizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-field-customizer.d.ts","sourceRoot":"","sources":["../../src/core/provider-field-customizer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAGhF;;;;;GAKG;AACH,MAAM,WAAW,gCAAgC,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE;IACtE;;OAEG;IACH,QAAQ,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE,EAChE,KAAK,EAAE,gCAAgC,CAAC,MAAM,CAAC,GAC9C,GAAG,CAAC,OAAO,CAEb"}
@@ -0,0 +1,46 @@
1
+ // provider-field-customizer.tsx
2
+ // Type-safe provider for Field Customizers
3
+ import * as React from 'react';
4
+ import { SPFxProviderBase } from './provider-base.internal';
5
+ /**
6
+ * SPFx context provider specifically for Field Customizers.
7
+ *
8
+ * This is a type-safe wrapper around the base provider that accepts a Field Customizer instance
9
+ * directly without requiring type casting. Use this provider in Field Customizers instead of the
10
+ * generic `SPFxProvider`.
11
+ *
12
+ * @param props - The component props.
13
+ * @returns The provider component.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * import { SPFxFieldCustomizerProvider } from 'spfx-react-toolkit';
18
+ * import * as ReactDom from 'react-dom';
19
+ *
20
+ * export default class MyFieldCustomizer extends BaseFieldCustomizer<IMyProps> {
21
+ * public onRenderCell(event: IFieldCustomizerCellEventParameters): void {
22
+ * const element = React.createElement(
23
+ * SPFxFieldCustomizerProvider,
24
+ * { instance: this },
25
+ * React.createElement(MyFieldRenderer, {
26
+ * value: event.fieldValue,
27
+ * listItem: event.listItem
28
+ * })
29
+ * );
30
+ *
31
+ * ReactDom.render(element, event.domElement);
32
+ * }
33
+ *
34
+ * public onDisposeCell(event: IFieldCustomizerCellEventParameters): void {
35
+ * ReactDom.unmountComponentAtNode(event.domElement);
36
+ * super.onDisposeCell(event);
37
+ * }
38
+ * }
39
+ * ```
40
+ *
41
+ * @public
42
+ */
43
+ export function SPFxFieldCustomizerProvider(props) {
44
+ return React.createElement(SPFxProviderBase, { instance: props.instance }, props.children);
45
+ }
46
+ //# sourceMappingURL=provider-field-customizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-field-customizer.js","sourceRoot":"","sources":["../../src/core/provider-field-customizer.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2CAA2C;AAE3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAoB5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAA+C;IAE/C,OAAO,oBAAC,gBAAgB,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAiB,IAAG,KAAK,CAAC,QAAQ,CAAoB,CAAC;AAClG,CAAC"}
@@ -0,0 +1,60 @@
1
+ import * as React from 'react';
2
+ import type { BaseListViewCommandSet } from '@microsoft/sp-listview-extensibility';
3
+ /**
4
+ * Props for the SPFx ListView Command Set-specific provider component.
5
+ *
6
+ * @template TProps - The properties type for the ListView Command Set.
7
+ * @public
8
+ */
9
+ export interface SPFxListViewCommandSetProviderProps<TProps extends {} = {}> {
10
+ /**
11
+ * The SPFx ListView Command Set instance.
12
+ */
13
+ instance: BaseListViewCommandSet<TProps>;
14
+ /**
15
+ * The children to render within the provider.
16
+ */
17
+ children?: React.ReactNode;
18
+ }
19
+ /**
20
+ * SPFx context provider specifically for ListView Command Sets.
21
+ *
22
+ * This is a type-safe wrapper around the base provider that accepts a ListView Command Set instance
23
+ * directly without requiring type casting. Use this provider in ListView Command Sets instead of the
24
+ * generic `SPFxProvider`.
25
+ *
26
+ * @param props - The component props.
27
+ * @returns The provider component.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * import { SPFxListViewCommandSetProvider } from 'spfx-react-toolkit';
32
+ * import { Dialog } from '@microsoft/sp-dialog';
33
+ *
34
+ * export default class MyCommandSet extends BaseListViewCommandSet<IMyProps> {
35
+ * public onExecute(event: IListViewCommandSetExecuteEventParameters): void {
36
+ * switch (event.itemId) {
37
+ * case 'COMMAND_1':
38
+ * // Create a dialog container
39
+ * const dialog = Dialog.alert({
40
+ * title: 'Custom Dialog',
41
+ * message: this._renderDialog()
42
+ * });
43
+ * break;
44
+ * }
45
+ * }
46
+ *
47
+ * private _renderDialog(): React.ReactElement {
48
+ * return React.createElement(
49
+ * SPFxListViewCommandSetProvider,
50
+ * { instance: this },
51
+ * React.createElement(MyComponent)
52
+ * );
53
+ * }
54
+ * }
55
+ * ```
56
+ *
57
+ * @public
58
+ */
59
+ export declare function SPFxListViewCommandSetProvider<TProps extends {} = {}>(props: SPFxListViewCommandSetProviderProps<TProps>): JSX.Element;
60
+ //# sourceMappingURL=provider-listview-commandset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-listview-commandset.d.ts","sourceRoot":"","sources":["../../src/core/provider-listview-commandset.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAGnF;;;;;GAKG;AACH,MAAM,WAAW,mCAAmC,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE;IACzE;;OAEG;IACH,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAEzC;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,SAAS,EAAE,GAAG,EAAE,EACnE,KAAK,EAAE,mCAAmC,CAAC,MAAM,CAAC,GACjD,GAAG,CAAC,OAAO,CAEb"}