@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,109 @@
1
+ // useSPFxSiteInfo.ts
2
+ // Hook to access site collection and web information
3
+ import { useSPFxPageContext } from './useSPFxPageContext';
4
+ /**
5
+ * Hook to access site collection and web information
6
+ *
7
+ * Provides comprehensive information about the current SharePoint web (site/subsite)
8
+ * and parent site collection in a unified, flat structure.
9
+ *
10
+ * **Property naming pattern**:
11
+ * - **Identity properties** (id, url, serverRelativeUrl): Prefixed with `web` or `site` for clarity
12
+ * - **Web metadata** (title, languageId, logoUrl): No prefix (unique to web, most commonly used)
13
+ * - **Site properties**: All prefixed with `site` for consistency
14
+ *
15
+ * **Web properties** (primary context - 90% use case):
16
+ * - webId, webUrl, webServerRelativeUrl: Web identity
17
+ * - title: Web display name (most commonly used)
18
+ * - languageId: Web language (LCID)
19
+ * - logoUrl: Site logo URL (for branding)
20
+ *
21
+ * **Site collection properties** (parent context - 30-40% specialized):
22
+ * - siteId, siteUrl, siteServerRelativeUrl: Site collection identity
23
+ * - siteClassification: Enterprise classification label (e.g., "Confidential", "Public")
24
+ * - siteGroup: Microsoft 365 Group information (if group-connected)
25
+ *
26
+ * Note: In most cases (90%), you'll use web properties. Site collection properties
27
+ * are for specialized scenarios like subsites navigation, classification displays,
28
+ * or Microsoft 365 Group detection.
29
+ *
30
+ * @returns Site collection and web information
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * function MyComponent() {
35
+ * const {
36
+ * webUrl, // Web URL (identity)
37
+ * title, // Web title (most common)
38
+ * languageId, // Web language
39
+ * logoUrl, // Site logo (branding)
40
+ * siteClassification, // Site classification (enterprise)
41
+ * siteGroup // M365 Group info (if group-connected)
42
+ * } = useSPFxSiteInfo();
43
+ *
44
+ * return (
45
+ * <header>
46
+ * {logoUrl && <img src={logoUrl} alt="Site logo" />}
47
+ * <h1>{title}</h1>
48
+ * <a href={webUrl}>Visit Site</a>
49
+ *
50
+ * {siteClassification && (
51
+ * <Label>Classification: {siteClassification}</Label>
52
+ * )}
53
+ *
54
+ * {siteGroup && (
55
+ * <Badge>
56
+ * {siteGroup.isPublic ? 'Public Team' : 'Private Team'}
57
+ * </Badge>
58
+ * )}
59
+ *
60
+ * <p>Language ID: {languageId}</p>
61
+ * </header>
62
+ * );
63
+ * }
64
+ * ```
65
+ *
66
+ * @example
67
+ * ```tsx
68
+ * // Cross-site navigation (subsite scenario)
69
+ * function Navigation() {
70
+ * const { webUrl, siteUrl, title } = useSPFxSiteInfo();
71
+ *
72
+ * return (
73
+ * <nav>
74
+ * <a href={siteUrl}>Site Collection Home</a>
75
+ * <span> / </span>
76
+ * <a href={webUrl}>{title}</a>
77
+ * </nav>
78
+ * );
79
+ * }
80
+ * ```
81
+ */
82
+ export function useSPFxSiteInfo() {
83
+ var _a, _b;
84
+ var pageContext = useSPFxPageContext();
85
+ var siteObj = pageContext.site;
86
+ var webObj = pageContext.web;
87
+ // Try to get additional properties from legacy context
88
+ var legacy = pageContext.legacyPageContext;
89
+ return {
90
+ // Web identity (prefixed)
91
+ webId: webObj.id.toString(),
92
+ webUrl: webObj.absoluteUrl,
93
+ webServerRelativeUrl: webObj.serverRelativeUrl,
94
+ // Web metadata (no prefix - unique, most common)
95
+ title: webObj.title,
96
+ languageId: (_a = webObj.language) !== null && _a !== void 0 ? _a : 1033, // Default to English
97
+ logoUrl: webObj.logoUrl,
98
+ // Site collection (all prefixed)
99
+ siteId: siteObj.id.toString(),
100
+ siteUrl: siteObj.absoluteUrl,
101
+ siteServerRelativeUrl: siteObj.serverRelativeUrl,
102
+ siteClassification: legacy === null || legacy === void 0 ? void 0 : legacy.siteClassification,
103
+ siteGroup: siteObj.group ? {
104
+ id: siteObj.group.id.toString(),
105
+ isPublic: (_b = siteObj.group.isPublic) !== null && _b !== void 0 ? _b : false,
106
+ } : undefined,
107
+ };
108
+ }
109
+ //# sourceMappingURL=useSPFxSiteInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxSiteInfo.js","sourceRoot":"","sources":["../../src/hooks/useSPFxSiteInfo.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,qDAAqD;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAsD1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,MAAM,UAAU,eAAe;;IAC7B,IAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IAEzC,IAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;IACjC,IAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC;IAE/B,uDAAuD;IACvD,IAAM,MAAM,GAAI,WAId,CAAC,iBAAiB,CAAC;IAErB,OAAO;QACL,0BAA0B;QAC1B,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC,WAAW;QAC1B,oBAAoB,EAAE,MAAM,CAAC,iBAAiB;QAE9C,iDAAiD;QACjD,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAA,MAAM,CAAC,QAAQ,mCAAI,IAAI,EAAE,qBAAqB;QAC1D,OAAO,EAAG,MAA0C,CAAC,OAAO;QAE5D,iCAAiC;QACjC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE;QAC7B,OAAO,EAAE,OAAO,CAAC,WAAW;QAC5B,qBAAqB,EAAE,OAAO,CAAC,iBAAiB;QAChD,kBAAkB,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,kBAAkB;QAC9C,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACzB,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE;YAC/B,QAAQ,EAAE,MAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,mCAAI,KAAK;SAC1C,CAAC,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Return type for storage hooks
3
+ */
4
+ export interface SPFxStorageHook<T> {
5
+ /** Current value */
6
+ readonly value: T;
7
+ /** Set new value */
8
+ readonly setValue: (value: T | ((prev: T) => T)) => void;
9
+ /** Remove value (reset to default) */
10
+ readonly remove: () => void;
11
+ }
12
+ /**
13
+ * Hook to use localStorage scoped to SPFx instance
14
+ *
15
+ * Creates a persisted state atom using Jotai's atomWithStorage.
16
+ * The storage key is automatically scoped to the SPFx instance ID,
17
+ * ensuring isolation between different web parts/extensions.
18
+ *
19
+ * Data persists across page reloads and sessions.
20
+ *
21
+ * Use for:
22
+ * - User preferences
23
+ * - Form drafts
24
+ * - Long-lived cache
25
+ * - Settings
26
+ *
27
+ * @param key - Storage key (will be prefixed with instance ID)
28
+ * @param defaultValue - Default value if not in storage
29
+ * @returns Storage hook with value, setValue, and remove
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * function MyComponent() {
34
+ * const { value, setValue } = useSPFxLocalStorage('view-mode', 'grid');
35
+ *
36
+ * return (
37
+ * <div>
38
+ * <p>View: {value}</p>
39
+ * <button onClick={() => setValue('list')}>List View</button>
40
+ * <button onClick={() => setValue('grid')}>Grid View</button>
41
+ * </div>
42
+ * );
43
+ * }
44
+ * ```
45
+ */
46
+ export declare function useSPFxLocalStorage<T>(key: string, defaultValue: T): SPFxStorageHook<T>;
47
+ /**
48
+ * Hook to use sessionStorage scoped to SPFx instance
49
+ *
50
+ * Creates a persisted state atom using Jotai's atomWithStorage.
51
+ * The storage key is automatically scoped to the SPFx instance ID,
52
+ * ensuring isolation between different web parts/extensions.
53
+ *
54
+ * Data persists only for the current browser session/tab.
55
+ *
56
+ * Use for:
57
+ * - Temporary state
58
+ * - Session-specific cache
59
+ * - Tab-specific settings
60
+ * - Wizard state
61
+ *
62
+ * @param key - Storage key (will be prefixed with instance ID)
63
+ * @param defaultValue - Default value if not in storage
64
+ * @returns Storage hook with value, setValue, and remove
65
+ *
66
+ * @example
67
+ * ```tsx
68
+ * function WizardComponent() {
69
+ * const { value: step, setValue: setStep } = useSPFxSessionStorage('wizard-step', 1);
70
+ *
71
+ * return (
72
+ * <div>
73
+ * <p>Step: {step}</p>
74
+ * <button onClick={() => setStep(s => s + 1)}>Next</button>
75
+ * </div>
76
+ * );
77
+ * }
78
+ * ```
79
+ */
80
+ export declare function useSPFxSessionStorage<T>(key: string, defaultValue: T): SPFxStorageHook<T>;
81
+ //# sourceMappingURL=useSPFxStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxStorage.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxStorage.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,oBAAoB;IACpB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAElB,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC;IAEzD,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,GACd,eAAe,CAAC,CAAC,CAAC,CA2BpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,GACd,eAAe,CAAC,CAAC,CAAC,CAwDpB"}
@@ -0,0 +1,140 @@
1
+ // useSPFxStorage.ts
2
+ // Hooks for persisted storage scoped to SPFx instance
3
+ import { atomWithStorage } from 'jotai/utils';
4
+ import { useAtom } from 'jotai';
5
+ import { useMemo } from 'react';
6
+ import { useSPFxInstanceInfo } from './useSPFxInstanceInfo';
7
+ /**
8
+ * Hook to use localStorage scoped to SPFx instance
9
+ *
10
+ * Creates a persisted state atom using Jotai's atomWithStorage.
11
+ * The storage key is automatically scoped to the SPFx instance ID,
12
+ * ensuring isolation between different web parts/extensions.
13
+ *
14
+ * Data persists across page reloads and sessions.
15
+ *
16
+ * Use for:
17
+ * - User preferences
18
+ * - Form drafts
19
+ * - Long-lived cache
20
+ * - Settings
21
+ *
22
+ * @param key - Storage key (will be prefixed with instance ID)
23
+ * @param defaultValue - Default value if not in storage
24
+ * @returns Storage hook with value, setValue, and remove
25
+ *
26
+ * @example
27
+ * ```tsx
28
+ * function MyComponent() {
29
+ * const { value, setValue } = useSPFxLocalStorage('view-mode', 'grid');
30
+ *
31
+ * return (
32
+ * <div>
33
+ * <p>View: {value}</p>
34
+ * <button onClick={() => setValue('list')}>List View</button>
35
+ * <button onClick={() => setValue('grid')}>Grid View</button>
36
+ * </div>
37
+ * );
38
+ * }
39
+ * ```
40
+ */
41
+ export function useSPFxLocalStorage(key, defaultValue) {
42
+ var instanceId = useSPFxInstanceInfo().id;
43
+ // Create scoped storage key
44
+ var scopedKey = 'spfx:' + instanceId + ':' + key;
45
+ // Create atom with storage (memoized to avoid recreation)
46
+ var storageAtom = useMemo(function () { return atomWithStorage(scopedKey, defaultValue); }, [scopedKey, defaultValue]);
47
+ var _a = useAtom(storageAtom), value = _a[0], setValue = _a[1];
48
+ // Remove function (reset to default)
49
+ var remove = function () {
50
+ setValue(defaultValue);
51
+ if (typeof localStorage !== 'undefined') {
52
+ localStorage.removeItem(scopedKey);
53
+ }
54
+ };
55
+ return {
56
+ value: value,
57
+ setValue: setValue,
58
+ remove: remove,
59
+ };
60
+ }
61
+ /**
62
+ * Hook to use sessionStorage scoped to SPFx instance
63
+ *
64
+ * Creates a persisted state atom using Jotai's atomWithStorage.
65
+ * The storage key is automatically scoped to the SPFx instance ID,
66
+ * ensuring isolation between different web parts/extensions.
67
+ *
68
+ * Data persists only for the current browser session/tab.
69
+ *
70
+ * Use for:
71
+ * - Temporary state
72
+ * - Session-specific cache
73
+ * - Tab-specific settings
74
+ * - Wizard state
75
+ *
76
+ * @param key - Storage key (will be prefixed with instance ID)
77
+ * @param defaultValue - Default value if not in storage
78
+ * @returns Storage hook with value, setValue, and remove
79
+ *
80
+ * @example
81
+ * ```tsx
82
+ * function WizardComponent() {
83
+ * const { value: step, setValue: setStep } = useSPFxSessionStorage('wizard-step', 1);
84
+ *
85
+ * return (
86
+ * <div>
87
+ * <p>Step: {step}</p>
88
+ * <button onClick={() => setStep(s => s + 1)}>Next</button>
89
+ * </div>
90
+ * );
91
+ * }
92
+ * ```
93
+ */
94
+ export function useSPFxSessionStorage(key, defaultValue) {
95
+ var instanceId = useSPFxInstanceInfo().id;
96
+ // Create scoped storage key
97
+ var scopedKey = 'spfx:' + instanceId + ':' + key;
98
+ // Create atom with session storage
99
+ var storageAtom = useMemo(function () { return atomWithStorage(scopedKey, defaultValue, {
100
+ getItem: function (key) {
101
+ if (typeof sessionStorage === 'undefined') {
102
+ return defaultValue;
103
+ }
104
+ var item = sessionStorage.getItem(key);
105
+ if (item === null) {
106
+ return defaultValue;
107
+ }
108
+ try {
109
+ return JSON.parse(item);
110
+ }
111
+ catch (_a) {
112
+ return defaultValue;
113
+ }
114
+ },
115
+ setItem: function (key, value) {
116
+ if (typeof sessionStorage !== 'undefined') {
117
+ sessionStorage.setItem(key, JSON.stringify(value));
118
+ }
119
+ },
120
+ removeItem: function (key) {
121
+ if (typeof sessionStorage !== 'undefined') {
122
+ sessionStorage.removeItem(key);
123
+ }
124
+ },
125
+ }); }, [scopedKey, defaultValue]);
126
+ var _a = useAtom(storageAtom), value = _a[0], setValue = _a[1];
127
+ // Remove function (reset to default)
128
+ var remove = function () {
129
+ setValue(defaultValue);
130
+ if (typeof sessionStorage !== 'undefined') {
131
+ sessionStorage.removeItem(scopedKey);
132
+ }
133
+ };
134
+ return {
135
+ value: value,
136
+ setValue: setValue,
137
+ remove: remove,
138
+ };
139
+ }
140
+ //# sourceMappingURL=useSPFxStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxStorage.js","sourceRoot":"","sources":["../../src/hooks/useSPFxStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Teams theme type
3
+ */
4
+ export type TeamsTheme = 'default' | 'dark' | 'highContrast';
5
+ /**
6
+ * Return type for useSPFxTeams hook
7
+ */
8
+ export interface SPFxTeamsInfo {
9
+ /** Whether Teams context is supported/available */
10
+ readonly supported: boolean;
11
+ /** Teams context object (if available) */
12
+ readonly context: unknown | undefined;
13
+ /** Current Teams theme */
14
+ readonly theme: TeamsTheme | undefined;
15
+ }
16
+ /**
17
+ * Hook for Microsoft Teams context integration
18
+ *
19
+ * Provides access to Microsoft Teams context when SPFx component
20
+ * is running in Teams environment.
21
+ *
22
+ * Automatically initializes Teams SDK (supports both v1 and v2 APIs)
23
+ * and provides:
24
+ * - Teams context (team, channel, user info, etc.)
25
+ * - Teams theme (default, dark, high contrast)
26
+ * - Supported flag
27
+ *
28
+ * The initialization happens asynchronously on first mount.
29
+ *
30
+ * Useful for:
31
+ * - Teams-specific features
32
+ * - Theme synchronization
33
+ * - User context access
34
+ * - Channel/team information
35
+ * - Teams app integration
36
+ *
37
+ * @returns Teams context information
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * function MyComponent() {
42
+ * const { supported, context, theme } = useSPFxTeams();
43
+ *
44
+ * if (!supported) {
45
+ * return <div>Not in Teams</div>;
46
+ * }
47
+ *
48
+ * const teamsContext = context as {
49
+ * user?: { id: string };
50
+ * team?: { displayName: string };
51
+ * };
52
+ *
53
+ * return (
54
+ * <div className={`teams-theme-${theme}`}>
55
+ * <p>Team: {teamsContext.team?.displayName}</p>
56
+ * <p>Theme: {theme}</p>
57
+ * </div>
58
+ * );
59
+ * }
60
+ * ```
61
+ */
62
+ export declare function useSPFxTeams(): SPFxTeamsInfo;
63
+ //# sourceMappingURL=useSPFxTeams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxTeams.d.ts","sourceRoot":"","sources":["../../src/hooks/useSPFxTeams.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,cAAc,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAEtC,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,YAAY,IAAI,aAAa,CA2G5C"}
@@ -0,0 +1,198 @@
1
+ // useSPFxTeams.ts
2
+ // Hook for Microsoft Teams context integration
3
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
+ return new (P || (P = Promise))(function (resolve, reject) {
6
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
10
+ });
11
+ };
12
+ var __generator = (this && this.__generator) || function (thisArg, body) {
13
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
14
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
15
+ function verb(n) { return function (v) { return step([n, v]); }; }
16
+ function step(op) {
17
+ if (f) throw new TypeError("Generator is already executing.");
18
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
19
+ 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;
20
+ if (y = 0, t) op = [op[0] & 2, t.value];
21
+ switch (op[0]) {
22
+ case 0: case 1: t = op; break;
23
+ case 4: _.label++; return { value: op[1], done: false };
24
+ case 5: _.label++; y = op[1]; op = [0]; continue;
25
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
26
+ default:
27
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
28
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
29
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
30
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
31
+ if (t[2]) _.ops.pop();
32
+ _.trys.pop(); continue;
33
+ }
34
+ op = body.call(thisArg, _);
35
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
36
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
37
+ }
38
+ };
39
+ import { useEffect } from 'react';
40
+ import { useAtom } from 'jotai';
41
+ import { spfxAtoms } from '../core/atoms.internal';
42
+ import { useSPFxContext } from './useSPFxContext';
43
+ /**
44
+ * Hook for Microsoft Teams context integration
45
+ *
46
+ * Provides access to Microsoft Teams context when SPFx component
47
+ * is running in Teams environment.
48
+ *
49
+ * Automatically initializes Teams SDK (supports both v1 and v2 APIs)
50
+ * and provides:
51
+ * - Teams context (team, channel, user info, etc.)
52
+ * - Teams theme (default, dark, high contrast)
53
+ * - Supported flag
54
+ *
55
+ * The initialization happens asynchronously on first mount.
56
+ *
57
+ * Useful for:
58
+ * - Teams-specific features
59
+ * - Theme synchronization
60
+ * - User context access
61
+ * - Channel/team information
62
+ * - Teams app integration
63
+ *
64
+ * @returns Teams context information
65
+ *
66
+ * @example
67
+ * ```tsx
68
+ * function MyComponent() {
69
+ * const { supported, context, theme } = useSPFxTeams();
70
+ *
71
+ * if (!supported) {
72
+ * return <div>Not in Teams</div>;
73
+ * }
74
+ *
75
+ * const teamsContext = context as {
76
+ * user?: { id: string };
77
+ * team?: { displayName: string };
78
+ * };
79
+ *
80
+ * return (
81
+ * <div className={`teams-theme-${theme}`}>
82
+ * <p>Team: {teamsContext.team?.displayName}</p>
83
+ * <p>Theme: {theme}</p>
84
+ * </div>
85
+ * );
86
+ * }
87
+ * ```
88
+ */
89
+ export function useSPFxTeams() {
90
+ var _this = this;
91
+ var spfxContext = useSPFxContext().spfxContext;
92
+ var _a = useAtom(spfxAtoms.teams), state = _a[0], setState = _a[1];
93
+ useEffect(function () {
94
+ // Skip if already initialized
95
+ if (state.initialized) {
96
+ return;
97
+ }
98
+ // Extract Teams SDK from context
99
+ var ctx = spfxContext;
100
+ var sdks = ctx.sdks;
101
+ var teamsSDK = sdks === null || sdks === void 0 ? void 0 : sdks.microsoftTeams;
102
+ if (!teamsSDK) {
103
+ setState({ supported: false, initialized: true });
104
+ return;
105
+ }
106
+ var disposed = false;
107
+ // Helper to apply context and theme
108
+ var apply = function (context, themeValue) {
109
+ if (disposed) {
110
+ return;
111
+ }
112
+ var normalizedTheme = ((themeValue === null || themeValue === void 0 ? void 0 : themeValue.toLowerCase()) === 'dark' ? 'dark' :
113
+ (themeValue === null || themeValue === void 0 ? void 0 : themeValue.toLowerCase()) === 'contrast' || (themeValue === null || themeValue === void 0 ? void 0 : themeValue.toLowerCase()) === 'highcontrast' ? 'highContrast' :
114
+ 'default');
115
+ setState({
116
+ supported: true,
117
+ context: context,
118
+ theme: normalizedTheme,
119
+ initialized: true,
120
+ });
121
+ };
122
+ // Try v2 API (teams 2.0+)
123
+ var tryV2 = function () { return __awaiter(_this, void 0, void 0, function () {
124
+ var context, themeValue, _a;
125
+ var _b, _c;
126
+ return __generator(this, function (_d) {
127
+ switch (_d.label) {
128
+ case 0:
129
+ _d.trys.push([0, 3, , 4]);
130
+ if (!((_b = teamsSDK.app) === null || _b === void 0 ? void 0 : _b.getContext)) return [3 /*break*/, 2];
131
+ return [4 /*yield*/, teamsSDK.app.getContext()];
132
+ case 1:
133
+ context = _d.sent();
134
+ themeValue = (_c = context === null || context === void 0 ? void 0 : context.app) === null || _c === void 0 ? void 0 : _c.theme;
135
+ apply(context, themeValue);
136
+ return [2 /*return*/, true];
137
+ case 2: return [2 /*return*/, false];
138
+ case 3:
139
+ _a = _d.sent();
140
+ return [2 /*return*/, false];
141
+ case 4: return [2 /*return*/];
142
+ }
143
+ });
144
+ }); };
145
+ // Try v1 API (teams 1.x)
146
+ var tryV1 = function () {
147
+ return new Promise(function (resolve) {
148
+ try {
149
+ if (teamsSDK.getContext) {
150
+ teamsSDK.getContext(function (context) {
151
+ var themeValue = context === null || context === void 0 ? void 0 : context.theme;
152
+ apply(context, themeValue);
153
+ resolve(true);
154
+ });
155
+ }
156
+ else {
157
+ resolve(false);
158
+ }
159
+ }
160
+ catch (_a) {
161
+ resolve(false);
162
+ }
163
+ });
164
+ };
165
+ // Initialize async
166
+ var init = function () { return __awaiter(_this, void 0, void 0, function () {
167
+ var v2Success;
168
+ return __generator(this, function (_a) {
169
+ switch (_a.label) {
170
+ case 0: return [4 /*yield*/, tryV2()];
171
+ case 1:
172
+ v2Success = _a.sent();
173
+ if (!!v2Success) return [3 /*break*/, 3];
174
+ return [4 /*yield*/, tryV1()];
175
+ case 2:
176
+ _a.sent();
177
+ _a.label = 3;
178
+ case 3: return [2 /*return*/];
179
+ }
180
+ });
181
+ }); };
182
+ init().catch(function () {
183
+ // Fallback: mark as not supported
184
+ if (!disposed) {
185
+ setState({ supported: false, initialized: true });
186
+ }
187
+ });
188
+ return function () {
189
+ disposed = true;
190
+ };
191
+ }, [spfxContext, setState, state.initialized]);
192
+ return {
193
+ supported: state.supported,
194
+ context: state.context,
195
+ theme: state.theme,
196
+ };
197
+ }
198
+ //# sourceMappingURL=useSPFxTeams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSPFxTeams.js","sourceRoot":"","sources":["../../src/hooks/useSPFxTeams.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAClB,+CAA+C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAqBlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,MAAM,UAAU,YAAY;IAA5B,iBA2GC;IA1GS,IAAA,WAAW,GAAK,cAAc,EAAE,YAArB,CAAsB;IACnC,IAAA,KAAoB,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAA3C,KAAK,QAAA,EAAE,QAAQ,QAA4B,CAAC;IAEnD,SAAS,CAAC;QACR,8BAA8B;QAC9B,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,iCAAiC;QACjC,IAAM,GAAG,GAAG,WAAsD,CAAC;QACnE,IAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAM,QAAQ,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAMV,CAAC;QAEd,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,oCAAoC;QACpC,IAAM,KAAK,GAAG,UAAC,OAAgB,EAAE,UAAmB;YAClD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YAED,IAAM,eAAe,GAAG,CACtB,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,EAAE,MAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC/C,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,EAAE,MAAK,UAAU,IAAK,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,EAAE,MAAK,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;oBAC5G,SAAS,CACI,CAAC;YAEhB,QAAQ,CAAC;gBACP,SAAS,EAAE,IAAI;gBACf,OAAO,SAAA;gBACP,KAAK,EAAE,eAAe;gBACtB,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,0BAA0B;QAC1B,IAAM,KAAK,GAAG;;;;;;;6BAEN,CAAA,MAAA,QAAQ,CAAC,GAAG,0CAAE,UAAU,CAAA,EAAxB,wBAAwB;wBACV,qBAAM,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,EAAA;;wBAAzC,OAAO,GAAG,SAA+B;wBACzC,UAAU,GAAG,MAAC,OAAwC,aAAxC,OAAO,uBAAP,OAAO,CAAmC,GAAG,0CAAE,KAAK,CAAC;wBACzE,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC3B,sBAAO,IAAI,EAAC;4BAEd,sBAAO,KAAK,EAAC;;;wBAEb,sBAAO,KAAK,EAAC;;;;aAEhB,CAAC;QAEF,yBAAyB;QACzB,IAAM,KAAK,GAAG;YACZ,OAAO,IAAI,OAAO,CAAU,UAAC,OAAO;gBAClC,IAAI,CAAC;oBACH,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;wBACxB,QAAQ,CAAC,UAAU,CAAC,UAAC,OAAgB;4BACnC,IAAM,UAAU,GAAI,OAA8B,aAA9B,OAAO,uBAAP,OAAO,CAAyB,KAAK,CAAC;4BAC1D,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;4BAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;wBAChB,CAAC,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC;gBACH,CAAC;gBAAC,WAAM,CAAC;oBACP,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,mBAAmB;QACnB,IAAM,IAAI,GAAG;;;;4BACO,qBAAM,KAAK,EAAE,EAAA;;wBAAzB,SAAS,GAAG,SAAa;6BAC3B,CAAC,SAAS,EAAV,wBAAU;wBACZ,qBAAM,KAAK,EAAE,EAAA;;wBAAb,SAAa,CAAC;;;;;aAEjB,CAAC;QAEF,IAAI,EAAE,CAAC,KAAK,CAAC;YACX,kCAAkC;YAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAE/C,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;AACJ,CAAC"}