@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,37 @@
1
+ import type { PageContext } from '@microsoft/sp-page-context';
2
+ /**
3
+ * Hook to access SharePoint page context
4
+ *
5
+ * Provides access to SharePoint page context containing information about:
6
+ * - Site collection and web
7
+ * - Current user
8
+ * - Current list and list item (if applicable)
9
+ * - Teams context (if running in Teams)
10
+ * - Culture and locale settings
11
+ * - Permissions and capabilities
12
+ *
13
+ * @returns SharePoint page context object
14
+ *
15
+ * @remarks
16
+ * This hook extracts and returns the `pageContext` property from the SPFx context.
17
+ * If you need access to the full SPFx context object, use `useSPFxContext` instead.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * function MyComponent() {
22
+ * const pageContext = useSPFxPageContext();
23
+ *
24
+ * return (
25
+ * <div>
26
+ * <p>Site: {pageContext.web.title}</p>
27
+ * <p>User: {pageContext.user.displayName}</p>
28
+ * <p>Locale: {pageContext.cultureInfo.currentUICultureName}</p>
29
+ * </div>
30
+ * );
31
+ * }
32
+ * ```
33
+ *
34
+ * @see {@link useSPFxContext} for accessing the full SPFx context
35
+ */
36
+ export declare function useSPFxPageContext(): PageContext;
37
+ //# sourceMappingURL=useSPFxPageContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxPageContext.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxPageContext.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,kBAAkB,IAAI,WAAW,CAehD"}
@@ -0,0 +1,49 @@
1
+ // useSPFxPageContext.ts
2
+ // Hook to access SharePoint page context
3
+ import { useSPFxContext } from './useSPFxContext';
4
+ /**
5
+ * Hook to access SharePoint page context
6
+ *
7
+ * Provides access to SharePoint page context containing information about:
8
+ * - Site collection and web
9
+ * - Current user
10
+ * - Current list and list item (if applicable)
11
+ * - Teams context (if running in Teams)
12
+ * - Culture and locale settings
13
+ * - Permissions and capabilities
14
+ *
15
+ * @returns SharePoint page context object
16
+ *
17
+ * @remarks
18
+ * This hook extracts and returns the `pageContext` property from the SPFx context.
19
+ * If you need access to the full SPFx context object, use `useSPFxContext` instead.
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * function MyComponent() {
24
+ * const pageContext = useSPFxPageContext();
25
+ *
26
+ * return (
27
+ * <div>
28
+ * <p>Site: {pageContext.web.title}</p>
29
+ * <p>User: {pageContext.user.displayName}</p>
30
+ * <p>Locale: {pageContext.cultureInfo.currentUICultureName}</p>
31
+ * </div>
32
+ * );
33
+ * }
34
+ * ```
35
+ *
36
+ * @see {@link useSPFxContext} for accessing the full SPFx context
37
+ */
38
+ export function useSPFxPageContext() {
39
+ var spfxContext = useSPFxContext().spfxContext;
40
+ // Extract pageContext from SPFx context
41
+ // All SPFx contexts have pageContext property
42
+ var ctx = spfxContext;
43
+ if (!ctx.pageContext) {
44
+ throw new Error('SPFx context does not contain pageContext. ' +
45
+ 'This should never happen with valid SPFx contexts.');
46
+ }
47
+ return ctx.pageContext;
48
+ }
49
+ //# sourceMappingURL=useSPFxPageContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxPageContext.js","sourceRoot":"","sources":["../../src/hooks/useSPFxPageContext.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,yCAAyC;AAGzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,kBAAkB;IACxB,IAAA,WAAW,GAAK,cAAc,EAAE,YAArB,CAAsB;IAEzC,wCAAwC;IACxC,8CAA8C;IAC9C,IAAM,GAAG,GAAG,WAA4C,CAAC;IAEzD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,6CAA6C;YAC7C,oDAAoD,CACrD,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC,WAAW,CAAC;AACzB,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * SharePoint page types
3
+ */
4
+ export type SPFxPageType = 'sitePage' | 'webPartPage' | 'listPage' | 'listFormPage' | 'profilePage' | 'searchPage' | 'unknown';
5
+ /**
6
+ * Return type for useSPFxPageType hook
7
+ */
8
+ export interface SPFxPageTypeInfo {
9
+ /** Current page type */
10
+ readonly pageType: SPFxPageType;
11
+ /** Whether the page is a modern site page */
12
+ readonly isModernPage: boolean;
13
+ /** Whether the page is a site page (modern) */
14
+ readonly isSitePage: boolean;
15
+ /** Whether the page is a list page (list view) */
16
+ readonly isListPage: boolean;
17
+ /** Whether the page is a list form page */
18
+ readonly isListFormPage: boolean;
19
+ /** Whether the page is a classic web part page */
20
+ readonly isWebPartPage: boolean;
21
+ }
22
+ /**
23
+ * Hook for SharePoint page type detection
24
+ *
25
+ * Detects the current SharePoint page type:
26
+ * - sitePage: Modern site page (Site Pages library)
27
+ * - webPartPage: Classic web part page
28
+ * - listPage: List view page
29
+ * - listFormPage: List form (new/edit/display item)
30
+ * - profilePage: User profile page
31
+ * - searchPage: Search results page
32
+ * - unknown: Unable to determine
33
+ *
34
+ * Helper flags provided:
35
+ * - isModernPage: True for modern site pages
36
+ * - isSitePage: True for site pages
37
+ * - isListPage: True for list views
38
+ * - isListFormPage: True for list forms
39
+ * - isWebPartPage: True for classic web part pages
40
+ *
41
+ * Use this hook for:
42
+ * - Conditional rendering based on page type
43
+ * - Feature availability checks (e.g., modern-only features)
44
+ * - Page-specific behavior
45
+ * - Analytics/telemetry
46
+ *
47
+ * @returns Page type information
48
+ *
49
+ * @example
50
+ * ```tsx
51
+ * function MyComponent() {
52
+ * const { pageType, isModernPage, isSitePage } = useSPFxPageType();
53
+ *
54
+ * if (!isModernPage) {
55
+ * return <div>This feature requires a modern page</div>;
56
+ * }
57
+ *
58
+ * return (
59
+ * <div>
60
+ * <h3>Page Type: {pageType}</h3>
61
+ * {isSitePage && <ModernPageFeature />}
62
+ * </div>
63
+ * );
64
+ * }
65
+ * ```
66
+ *
67
+ * @example Conditional features
68
+ * ```tsx
69
+ * function ConditionalUI() {
70
+ * const { isListPage, isListFormPage } = useSPFxPageType();
71
+ *
72
+ * return (
73
+ * <div>
74
+ * {isListPage && <ListViewCustomizer />}
75
+ * {isListFormPage && <FormFieldCustomizer />}
76
+ * </div>
77
+ * );
78
+ * }
79
+ * ```
80
+ */
81
+ export declare function useSPFxPageType(): SPFxPageTypeInfo;
82
+ //# sourceMappingURL=useSPFxPageType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxPageType.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxPageType.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,aAAa,GACb,UAAU,GACV,cAAc,GACd,aAAa,GACb,YAAY,GACZ,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wBAAwB;IACxB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEhC,6CAA6C;IAC7C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAE/B,+CAA+C;IAC/C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,kDAAkD;IAClD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,2CAA2C;IAC3C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IAEjC,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,wBAAgB,eAAe,IAAI,gBAAgB,CAoFlD"}
@@ -0,0 +1,137 @@
1
+ // useSPFxPageType.ts
2
+ // Hook for SharePoint page type detection
3
+ import { useSPFxPageContext } from './useSPFxPageContext';
4
+ /**
5
+ * Hook for SharePoint page type detection
6
+ *
7
+ * Detects the current SharePoint page type:
8
+ * - sitePage: Modern site page (Site Pages library)
9
+ * - webPartPage: Classic web part page
10
+ * - listPage: List view page
11
+ * - listFormPage: List form (new/edit/display item)
12
+ * - profilePage: User profile page
13
+ * - searchPage: Search results page
14
+ * - unknown: Unable to determine
15
+ *
16
+ * Helper flags provided:
17
+ * - isModernPage: True for modern site pages
18
+ * - isSitePage: True for site pages
19
+ * - isListPage: True for list views
20
+ * - isListFormPage: True for list forms
21
+ * - isWebPartPage: True for classic web part pages
22
+ *
23
+ * Use this hook for:
24
+ * - Conditional rendering based on page type
25
+ * - Feature availability checks (e.g., modern-only features)
26
+ * - Page-specific behavior
27
+ * - Analytics/telemetry
28
+ *
29
+ * @returns Page type information
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * function MyComponent() {
34
+ * const { pageType, isModernPage, isSitePage } = useSPFxPageType();
35
+ *
36
+ * if (!isModernPage) {
37
+ * return <div>This feature requires a modern page</div>;
38
+ * }
39
+ *
40
+ * return (
41
+ * <div>
42
+ * <h3>Page Type: {pageType}</h3>
43
+ * {isSitePage && <ModernPageFeature />}
44
+ * </div>
45
+ * );
46
+ * }
47
+ * ```
48
+ *
49
+ * @example Conditional features
50
+ * ```tsx
51
+ * function ConditionalUI() {
52
+ * const { isListPage, isListFormPage } = useSPFxPageType();
53
+ *
54
+ * return (
55
+ * <div>
56
+ * {isListPage && <ListViewCustomizer />}
57
+ * {isListFormPage && <FormFieldCustomizer />}
58
+ * </div>
59
+ * );
60
+ * }
61
+ * ```
62
+ */
63
+ export function useSPFxPageType() {
64
+ var _a, _b;
65
+ var pageContext = useSPFxPageContext();
66
+ // Try to get page type from modern pageContext
67
+ var modernPage = pageContext.page;
68
+ // Try to get page type from legacy context
69
+ var legacy = pageContext.legacyPageContext;
70
+ // Determine page type
71
+ var pageType = 'unknown';
72
+ // Check modern page type first
73
+ var modernPageType = (_a = modernPage === null || modernPage === void 0 ? void 0 : modernPage.type) === null || _a === void 0 ? void 0 : _a.toLowerCase();
74
+ if (modernPageType) {
75
+ if (modernPageType.indexOf('sitepage') !== -1) {
76
+ pageType = 'sitePage';
77
+ }
78
+ else if (modernPageType.indexOf('webpartpage') !== -1) {
79
+ pageType = 'webPartPage';
80
+ }
81
+ }
82
+ // Check legacy page type
83
+ if (pageType === 'unknown') {
84
+ var legacyPageType = (_b = legacy === null || legacy === void 0 ? void 0 : legacy.pageType) === null || _b === void 0 ? void 0 : _b.toLowerCase();
85
+ if (legacyPageType) {
86
+ if (legacyPageType.indexOf('sitepage') !== -1) {
87
+ pageType = 'sitePage';
88
+ }
89
+ else if (legacyPageType.indexOf('webpartpage') !== -1) {
90
+ pageType = 'webPartPage';
91
+ }
92
+ else if (legacyPageType.indexOf('list') !== -1) {
93
+ // Check if it's a form or list view
94
+ if ((legacy === null || legacy === void 0 ? void 0 : legacy.formType) !== undefined && legacy.formType !== null) {
95
+ pageType = 'listFormPage';
96
+ }
97
+ else {
98
+ pageType = 'listPage';
99
+ }
100
+ }
101
+ else if (legacyPageType.indexOf('profile') !== -1) {
102
+ pageType = 'profilePage';
103
+ }
104
+ else if (legacyPageType.indexOf('search') !== -1) {
105
+ pageType = 'searchPage';
106
+ }
107
+ }
108
+ }
109
+ // If still unknown, try to infer from context
110
+ if (pageType === 'unknown') {
111
+ // If we have a list ID, likely a list page
112
+ if (legacy === null || legacy === void 0 ? void 0 : legacy.listId) {
113
+ if (legacy.formType !== undefined && legacy.formType !== null) {
114
+ pageType = 'listFormPage';
115
+ }
116
+ else {
117
+ pageType = 'listPage';
118
+ }
119
+ }
120
+ }
121
+ // Calculate helper flags
122
+ var isSitePage = pageType === 'sitePage';
123
+ var isWebPartPage = pageType === 'webPartPage';
124
+ var isListPage = pageType === 'listPage';
125
+ var isListFormPage = pageType === 'listFormPage';
126
+ // Modern page = site page (not classic web part page)
127
+ var isModernPage = isSitePage;
128
+ return {
129
+ pageType: pageType,
130
+ isModernPage: isModernPage,
131
+ isSitePage: isSitePage,
132
+ isListPage: isListPage,
133
+ isListFormPage: isListFormPage,
134
+ isWebPartPage: isWebPartPage,
135
+ };
136
+ }
137
+ //# sourceMappingURL=useSPFxPageType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxPageType.js","sourceRoot":"","sources":["../../src/hooks/useSPFxPageType.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Performance result type
3
+ */
4
+ export interface SPFxPerfResult<T = unknown> {
5
+ /** Measurement name */
6
+ readonly name: string;
7
+ /** Duration in milliseconds */
8
+ readonly durationMs: number;
9
+ /** Optional result from timed operation */
10
+ readonly result?: T;
11
+ /** SPFx instance ID */
12
+ readonly instanceId: string;
13
+ /** Host kind */
14
+ readonly host: string;
15
+ /** Correlation ID for tracking */
16
+ readonly correlationId: string | undefined;
17
+ }
18
+ /**
19
+ * Return type for useSPFxPerformance hook
20
+ */
21
+ export interface SPFxPerformanceInfo {
22
+ /** Create a performance mark */
23
+ readonly mark: (name: string) => void;
24
+ /** Measure duration between two marks */
25
+ readonly measure: (name: string, startMark: string, endMark?: string) => SPFxPerfResult;
26
+ /** Time an async operation */
27
+ readonly time: <T>(name: string, fn: () => Promise<T> | T) => Promise<SPFxPerfResult<T>>;
28
+ }
29
+ /**
30
+ * Hook for performance measurement and monitoring
31
+ *
32
+ * Provides access to the Performance API for measuring code execution time.
33
+ *
34
+ * Methods:
35
+ * - mark(): Create named performance marks
36
+ * - measure(): Calculate duration between marks
37
+ * - time(): Wrap async operations with automatic timing
38
+ *
39
+ * All measurements include SPFx context (instanceId, correlationId) for
40
+ * integration with logging and monitoring systems.
41
+ *
42
+ * Useful for:
43
+ * - Performance profiling
44
+ * - Identifying bottlenecks
45
+ * - Monitoring real-world performance
46
+ * - Integration with Application Insights
47
+ * - Custom performance dashboards
48
+ *
49
+ * @returns Performance measurement methods
50
+ *
51
+ * @example
52
+ * ```tsx
53
+ * function MyComponent() {
54
+ * const { mark, measure, time } = useSPFxPerformance();
55
+ * const [data, setData] = useState(null);
56
+ *
57
+ * const fetchData = async () => {
58
+ * const result = await time('fetch-data', async () => {
59
+ * const response = await fetch('/api/data');
60
+ * return response.json();
61
+ * });
62
+ *
63
+ * console.log(`Fetch took ${result.durationMs}ms`);
64
+ * setData(result.result);
65
+ * };
66
+ *
67
+ * return <button onClick={fetchData}>Load Data</button>;
68
+ * }
69
+ * ```
70
+ */
71
+ export declare function useSPFxPerformance(): SPFxPerformanceInfo;
72
+ //# sourceMappingURL=useSPFxPerformance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxPerformance.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxPerformance.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEpB,uBAAuB;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,gBAAgB;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,kCAAkC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,cAAc,CAAC;IAExF,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CA+ExD"}
@@ -0,0 +1,167 @@
1
+ // useSPFxPerformance.ts
2
+ // Hook for performance measurement and monitoring
3
+ var __assign = (this && this.__assign) || function () {
4
+ __assign = Object.assign || function(t) {
5
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
6
+ s = arguments[i];
7
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
8
+ t[p] = s[p];
9
+ }
10
+ return t;
11
+ };
12
+ return __assign.apply(this, arguments);
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var __generator = (this && this.__generator) || function (thisArg, body) {
24
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
25
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
26
+ function verb(n) { return function (v) { return step([n, v]); }; }
27
+ function step(op) {
28
+ if (f) throw new TypeError("Generator is already executing.");
29
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
30
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
31
+ if (y = 0, t) op = [op[0] & 2, t.value];
32
+ switch (op[0]) {
33
+ case 0: case 1: t = op; break;
34
+ case 4: _.label++; return { value: op[1], done: false };
35
+ case 5: _.label++; y = op[1]; op = [0]; continue;
36
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
37
+ default:
38
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
39
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
40
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
41
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
42
+ if (t[2]) _.ops.pop();
43
+ _.trys.pop(); continue;
44
+ }
45
+ op = body.call(thisArg, _);
46
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
47
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
48
+ }
49
+ };
50
+ import { useCallback } from 'react';
51
+ import { useSPFxInstanceInfo } from './useSPFxInstanceInfo';
52
+ import { useSPFxCorrelationInfo } from './useSPFxCorrelationInfo';
53
+ /**
54
+ * Hook for performance measurement and monitoring
55
+ *
56
+ * Provides access to the Performance API for measuring code execution time.
57
+ *
58
+ * Methods:
59
+ * - mark(): Create named performance marks
60
+ * - measure(): Calculate duration between marks
61
+ * - time(): Wrap async operations with automatic timing
62
+ *
63
+ * All measurements include SPFx context (instanceId, correlationId) for
64
+ * integration with logging and monitoring systems.
65
+ *
66
+ * Useful for:
67
+ * - Performance profiling
68
+ * - Identifying bottlenecks
69
+ * - Monitoring real-world performance
70
+ * - Integration with Application Insights
71
+ * - Custom performance dashboards
72
+ *
73
+ * @returns Performance measurement methods
74
+ *
75
+ * @example
76
+ * ```tsx
77
+ * function MyComponent() {
78
+ * const { mark, measure, time } = useSPFxPerformance();
79
+ * const [data, setData] = useState(null);
80
+ *
81
+ * const fetchData = async () => {
82
+ * const result = await time('fetch-data', async () => {
83
+ * const response = await fetch('/api/data');
84
+ * return response.json();
85
+ * });
86
+ *
87
+ * console.log(`Fetch took ${result.durationMs}ms`);
88
+ * setData(result.result);
89
+ * };
90
+ *
91
+ * return <button onClick={fetchData}>Load Data</button>;
92
+ * }
93
+ * ```
94
+ */
95
+ export function useSPFxPerformance() {
96
+ var _this = this;
97
+ var _a = useSPFxInstanceInfo(), instanceId = _a.id, host = _a.kind;
98
+ var correlationId = useSPFxCorrelationInfo().correlationId;
99
+ // Create a performance mark
100
+ var mark = useCallback(function (name) {
101
+ if (typeof (performance === null || performance === void 0 ? void 0 : performance.mark) === 'function') {
102
+ try {
103
+ performance.mark(name);
104
+ }
105
+ catch (_a) {
106
+ // Swallow errors (e.g., invalid mark name)
107
+ }
108
+ }
109
+ }, []);
110
+ // Measure duration between marks
111
+ var measure = useCallback(function (name, startMark, endMark) {
112
+ var _a;
113
+ try {
114
+ // Create end mark if provided
115
+ if (endMark && typeof (performance === null || performance === void 0 ? void 0 : performance.mark) === 'function') {
116
+ performance.mark(endMark);
117
+ }
118
+ // Create measure
119
+ if (typeof (performance === null || performance === void 0 ? void 0 : performance.measure) === 'function') {
120
+ performance.measure(name, startMark, endMark);
121
+ // Get the measurement
122
+ var entries = performance.getEntriesByName(name, 'measure');
123
+ var lastEntry = entries[entries.length - 1];
124
+ return {
125
+ name: name,
126
+ durationMs: (_a = lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.duration) !== null && _a !== void 0 ? _a : 0,
127
+ instanceId: instanceId,
128
+ host: host,
129
+ correlationId: correlationId,
130
+ };
131
+ }
132
+ }
133
+ catch (_b) {
134
+ // Swallow errors
135
+ }
136
+ // Fallback result
137
+ return {
138
+ name: name,
139
+ durationMs: 0,
140
+ instanceId: instanceId,
141
+ host: host,
142
+ correlationId: correlationId,
143
+ };
144
+ }, [instanceId, host, correlationId]);
145
+ // Time an async operation
146
+ var time = useCallback(function (name, fn) { return __awaiter(_this, void 0, void 0, function () {
147
+ var startMark, result, measurement;
148
+ return __generator(this, function (_a) {
149
+ switch (_a.label) {
150
+ case 0:
151
+ startMark = name + '-start';
152
+ mark(startMark);
153
+ return [4 /*yield*/, Promise.resolve().then(fn)];
154
+ case 1:
155
+ result = _a.sent();
156
+ measurement = measure(name, startMark);
157
+ return [2 /*return*/, __assign(__assign({}, measurement), { result: result })];
158
+ }
159
+ });
160
+ }); }, [mark, measure]);
161
+ return {
162
+ mark: mark,
163
+ measure: measure,
164
+ time: time,
165
+ };
166
+ }
167
+ //# sourceMappingURL=useSPFxPerformance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxPerformance.js","sourceRoot":"","sources":["../../src/hooks/useSPFxPerformance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { SPPermission } from '@microsoft/sp-page-context';
2
+ /**
3
+ * Return type for useSPFxPermissions hook
4
+ */
5
+ export interface SPFxPermissionsInfo {
6
+ /** Site collection permissions */
7
+ readonly sitePermissions: SPPermission | undefined;
8
+ /** Web permissions */
9
+ readonly webPermissions: SPPermission | undefined;
10
+ /** List permissions (if in list context) */
11
+ readonly listPermissions: SPPermission | undefined;
12
+ /** Check if user has specific web permission */
13
+ readonly hasWebPermission: (permission: SPPermission) => boolean;
14
+ /** Check if user has specific site permission */
15
+ readonly hasSitePermission: (permission: SPPermission) => boolean;
16
+ /** Check if user has specific list permission */
17
+ readonly hasListPermission: (permission: SPPermission) => boolean;
18
+ }
19
+ /**
20
+ * Hook for SharePoint permissions checking
21
+ *
22
+ * Provides access to current user's permissions at different scopes:
23
+ * - Site collection level
24
+ * - Web (subsite) level
25
+ * - List level (if applicable)
26
+ *
27
+ * Includes helper methods for permission checks using SPPermission enum.
28
+ *
29
+ * Common permissions to check:
30
+ * - SPPermission.manageWeb
31
+ * - SPPermission.addListItems
32
+ * - SPPermission.editListItems
33
+ * - SPPermission.deleteListItems
34
+ * - SPPermission.viewListItems
35
+ * - SPPermission.managePermissions
36
+ *
37
+ * Useful for:
38
+ * - Conditional UI rendering
39
+ * - Feature availability
40
+ * - Security trimming
41
+ * - Authorization checks
42
+ *
43
+ * @returns Permissions and helper methods
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * function MyComponent() {
48
+ * const { web, hasWebPermission } = useSPFxPermissions();
49
+ * const canManage = hasWebPermission(SPPermission.manageWeb);
50
+ *
51
+ * return (
52
+ * <div>
53
+ * {canManage && <button>Manage Settings</button>}
54
+ * <p>Can manage: {canManage ? 'Yes' : 'No'}</p>
55
+ * </div>
56
+ * );
57
+ * }
58
+ * ```
59
+ */
60
+ export declare function useSPFxPermissions(): SPFxPermissionsInfo;
61
+ //# sourceMappingURL=useSPFxPermissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxPermissions.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxPermissions.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,QAAQ,CAAC,eAAe,EAAE,YAAY,GAAG,SAAS,CAAC;IAEnD,sBAAsB;IACtB,QAAQ,CAAC,cAAc,EAAE,YAAY,GAAG,SAAS,CAAC;IAElD,4CAA4C;IAC5C,QAAQ,CAAC,eAAe,EAAE,YAAY,GAAG,SAAS,CAAC;IAEnD,gDAAgD;IAChD,QAAQ,CAAC,gBAAgB,EAAE,CAAC,UAAU,EAAE,YAAY,KAAK,OAAO,CAAC;IAEjE,iDAAiD;IACjD,QAAQ,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,YAAY,KAAK,OAAO,CAAC;IAElE,iDAAiD;IACjD,QAAQ,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,YAAY,KAAK,OAAO,CAAC;CACnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CA2CxD"}