@govtechsg/sgds-web-component 3.26.1 → 3.27.0-rc.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 (243) hide show
  1. package/base/dropdown-list-element.js +9 -2
  2. package/base/dropdown-list-element.js.map +1 -1
  3. package/base/nav-element.d.ts +64 -0
  4. package/base/nav-element.js +263 -0
  5. package/base/nav-element.js.map +1 -0
  6. package/base/nav-profile-element.d.ts +47 -0
  7. package/base/nav-profile-element.js +191 -0
  8. package/base/nav-profile-element.js.map +1 -0
  9. package/base/nav-profile.js +6 -0
  10. package/base/nav-profile.js.map +1 -0
  11. package/components/Appnav/appnav-context.d.ts +6 -0
  12. package/components/Appnav/appnav-context.js +7 -0
  13. package/components/Appnav/appnav-context.js.map +1 -0
  14. package/components/Appnav/appnav.js +6 -0
  15. package/components/Appnav/appnav.js.map +1 -0
  16. package/components/Appnav/index.d.ts +9 -0
  17. package/components/Appnav/index.js +8 -0
  18. package/components/Appnav/index.js.map +1 -0
  19. package/components/Appnav/index.umd.min.js +2542 -0
  20. package/components/Appnav/index.umd.min.js.map +1 -0
  21. package/components/Appnav/sgds-appnav-profile.d.ts +17 -0
  22. package/components/Appnav/sgds-appnav-profile.js +31 -0
  23. package/components/Appnav/sgds-appnav-profile.js.map +1 -0
  24. package/components/Appnav/sgds-appnav.d.ts +44 -0
  25. package/components/Appnav/sgds-appnav.js +183 -0
  26. package/components/Appnav/sgds-appnav.js.map +1 -0
  27. package/components/Breadcrumb/index.umd.min.js +25 -25
  28. package/components/Breadcrumb/index.umd.min.js.map +1 -1
  29. package/components/Checkbox/index.umd.min.js +233 -233
  30. package/components/Checkbox/index.umd.min.js.map +1 -1
  31. package/components/Checkbox/sgds-checkbox.d.ts +1 -0
  32. package/components/Checkbox/sgds-checkbox.js +6 -1
  33. package/components/Checkbox/sgds-checkbox.js.map +1 -1
  34. package/components/ComboBox/index.umd.min.js +254 -254
  35. package/components/ComboBox/index.umd.min.js.map +1 -1
  36. package/components/DataTable/data-table.js +6 -0
  37. package/components/DataTable/data-table.js.map +1 -0
  38. package/components/DataTable/index.d.ts +12 -0
  39. package/components/DataTable/index.js +11 -0
  40. package/components/DataTable/index.js.map +1 -0
  41. package/components/DataTable/index.umd.min.js +2634 -0
  42. package/components/DataTable/index.umd.min.js.map +1 -0
  43. package/components/DataTable/sgds-data-table-cell.d.ts +15 -0
  44. package/components/DataTable/sgds-data-table-cell.js +32 -0
  45. package/components/DataTable/sgds-data-table-cell.js.map +1 -0
  46. package/components/DataTable/sgds-data-table-head.d.ts +28 -0
  47. package/components/DataTable/sgds-data-table-head.js +69 -0
  48. package/components/DataTable/sgds-data-table-head.js.map +1 -0
  49. package/components/DataTable/sgds-data-table-row.d.ts +76 -0
  50. package/components/DataTable/sgds-data-table-row.js +333 -0
  51. package/components/DataTable/sgds-data-table-row.js.map +1 -0
  52. package/components/DataTable/sgds-data-table.d.ts +82 -0
  53. package/components/DataTable/sgds-data-table.js +405 -0
  54. package/components/DataTable/sgds-data-table.js.map +1 -0
  55. package/components/Datepicker/index.umd.min.js +86 -86
  56. package/components/Datepicker/index.umd.min.js.map +1 -1
  57. package/components/Dropdown/dropdown-item.js +1 -1
  58. package/components/Dropdown/index.umd.min.js +5 -5
  59. package/components/Dropdown/index.umd.min.js.map +1 -1
  60. package/components/Dropdown/sgds-dropdown-item.d.ts +2 -0
  61. package/components/Dropdown/sgds-dropdown-item.js +8 -2
  62. package/components/Dropdown/sgds-dropdown-item.js.map +1 -1
  63. package/components/Input/index.umd.min.js +2 -2
  64. package/components/Input/index.umd.min.js.map +1 -1
  65. package/components/Input/input.js +1 -1
  66. package/components/Mainnav/index.d.ts +2 -0
  67. package/components/Mainnav/index.js +2 -0
  68. package/components/Mainnav/index.js.map +1 -1
  69. package/components/Mainnav/index.umd.min.js +339 -286
  70. package/components/Mainnav/index.umd.min.js.map +1 -1
  71. package/components/Mainnav/mainnav-dropdown.js +1 -1
  72. package/components/Mainnav/mainnav-item.js +1 -1
  73. package/components/Mainnav/mainnav.js +1 -1
  74. package/components/Mainnav/sgds-mainnav-profile.d.ts +15 -0
  75. package/components/Mainnav/sgds-mainnav-profile.js +29 -0
  76. package/components/Mainnav/sgds-mainnav-profile.js.map +1 -0
  77. package/components/Mainnav/sgds-mainnav.d.ts +8 -51
  78. package/components/Mainnav/sgds-mainnav.js +40 -238
  79. package/components/Mainnav/sgds-mainnav.js.map +1 -1
  80. package/components/OverflowMenu/index.umd.min.js +25 -25
  81. package/components/OverflowMenu/index.umd.min.js.map +1 -1
  82. package/components/QuantityToggle/index.umd.min.js +1 -1
  83. package/components/QuantityToggle/index.umd.min.js.map +1 -1
  84. package/components/Select/index.umd.min.js +1 -1
  85. package/components/Select/index.umd.min.js.map +1 -1
  86. package/components/Tab/index.umd.min.js +1 -1
  87. package/components/Tab/index.umd.min.js.map +1 -1
  88. package/components/Tab/tab-panel.js +1 -1
  89. package/components/Textarea/index.umd.min.js +1 -1
  90. package/components/Textarea/index.umd.min.js.map +1 -1
  91. package/components/Textarea/textarea.js +1 -1
  92. package/components/index.d.ts +7 -0
  93. package/components/index.js +7 -0
  94. package/components/index.js.map +1 -1
  95. package/components/index.umd.min.js +812 -628
  96. package/components/index.umd.min.js.map +1 -1
  97. package/css/fouc.css +9 -2
  98. package/custom-elements.json +11501 -7967
  99. package/index.d.ts +2 -0
  100. package/index.js +2 -0
  101. package/index.js.map +1 -1
  102. package/index.umd.min.js +699 -510
  103. package/index.umd.min.js.map +1 -1
  104. package/package.json +1 -1
  105. package/react/appnav/index.cjs.js +45 -0
  106. package/react/appnav/index.cjs.js.map +1 -0
  107. package/react/appnav/index.d.ts +4 -0
  108. package/react/appnav/index.js +21 -0
  109. package/react/appnav/index.js.map +1 -0
  110. package/react/appnav-profile/index.cjs.js +40 -0
  111. package/react/appnav-profile/index.cjs.js.map +1 -0
  112. package/react/appnav-profile/index.d.ts +4 -0
  113. package/react/appnav-profile/index.js +16 -0
  114. package/react/appnav-profile/index.js.map +1 -0
  115. package/react/base/dropdown-list-element.cjs.js +9 -2
  116. package/react/base/dropdown-list-element.cjs.js.map +1 -1
  117. package/react/base/dropdown-list-element.js +9 -2
  118. package/react/base/dropdown-list-element.js.map +1 -1
  119. package/react/base/nav-element.cjs.js +268 -0
  120. package/react/base/nav-element.cjs.js.map +1 -0
  121. package/react/base/nav-element.js +264 -0
  122. package/react/base/nav-element.js.map +1 -0
  123. package/react/base/nav-profile-element.cjs.js +196 -0
  124. package/react/base/nav-profile-element.cjs.js.map +1 -0
  125. package/react/base/nav-profile-element.js +192 -0
  126. package/react/base/nav-profile-element.js.map +1 -0
  127. package/react/base/nav-profile.cjs.js +11 -0
  128. package/react/base/nav-profile.cjs.js.map +1 -0
  129. package/react/base/nav-profile.js +7 -0
  130. package/react/base/nav-profile.js.map +1 -0
  131. package/react/components/Appnav/appnav-context.cjs.js +13 -0
  132. package/react/components/Appnav/appnav-context.cjs.js.map +1 -0
  133. package/react/components/Appnav/appnav-context.js +8 -0
  134. package/react/components/Appnav/appnav-context.js.map +1 -0
  135. package/react/components/Appnav/appnav.cjs.js +11 -0
  136. package/react/components/Appnav/appnav.cjs.js.map +1 -0
  137. package/react/components/Appnav/appnav.js +7 -0
  138. package/react/components/Appnav/appnav.js.map +1 -0
  139. package/react/components/Appnav/sgds-appnav-profile.cjs.js +37 -0
  140. package/react/components/Appnav/sgds-appnav-profile.cjs.js.map +1 -0
  141. package/react/components/Appnav/sgds-appnav-profile.js +32 -0
  142. package/react/components/Appnav/sgds-appnav-profile.js.map +1 -0
  143. package/react/components/Appnav/sgds-appnav.cjs.js +189 -0
  144. package/react/components/Appnav/sgds-appnav.cjs.js.map +1 -0
  145. package/react/components/Appnav/sgds-appnav.js +184 -0
  146. package/react/components/Appnav/sgds-appnav.js.map +1 -0
  147. package/react/components/Checkbox/sgds-checkbox.cjs.js +6 -1
  148. package/react/components/Checkbox/sgds-checkbox.cjs.js.map +1 -1
  149. package/react/components/Checkbox/sgds-checkbox.js +6 -1
  150. package/react/components/Checkbox/sgds-checkbox.js.map +1 -1
  151. package/react/components/DataTable/data-table.cjs.js +11 -0
  152. package/react/components/DataTable/data-table.cjs.js.map +1 -0
  153. package/react/components/DataTable/data-table.js +7 -0
  154. package/react/components/DataTable/data-table.js.map +1 -0
  155. package/react/components/DataTable/sgds-data-table-cell.cjs.js +38 -0
  156. package/react/components/DataTable/sgds-data-table-cell.cjs.js.map +1 -0
  157. package/react/components/DataTable/sgds-data-table-cell.js +33 -0
  158. package/react/components/DataTable/sgds-data-table-cell.js.map +1 -0
  159. package/react/components/DataTable/sgds-data-table-head.cjs.js +75 -0
  160. package/react/components/DataTable/sgds-data-table-head.cjs.js.map +1 -0
  161. package/react/components/DataTable/sgds-data-table-head.js +70 -0
  162. package/react/components/DataTable/sgds-data-table-head.js.map +1 -0
  163. package/react/components/DataTable/sgds-data-table-row.cjs.js +339 -0
  164. package/react/components/DataTable/sgds-data-table-row.cjs.js.map +1 -0
  165. package/react/components/DataTable/sgds-data-table-row.js +334 -0
  166. package/react/components/DataTable/sgds-data-table-row.js.map +1 -0
  167. package/react/components/DataTable/sgds-data-table.cjs.js +411 -0
  168. package/react/components/DataTable/sgds-data-table.cjs.js.map +1 -0
  169. package/react/components/DataTable/sgds-data-table.js +406 -0
  170. package/react/components/DataTable/sgds-data-table.js.map +1 -0
  171. package/react/components/Dropdown/dropdown-item.cjs.js +1 -1
  172. package/react/components/Dropdown/dropdown-item.js +1 -1
  173. package/react/components/Dropdown/sgds-dropdown-item.cjs.js +8 -2
  174. package/react/components/Dropdown/sgds-dropdown-item.cjs.js.map +1 -1
  175. package/react/components/Dropdown/sgds-dropdown-item.js +8 -2
  176. package/react/components/Dropdown/sgds-dropdown-item.js.map +1 -1
  177. package/react/components/Input/input.cjs.js +1 -1
  178. package/react/components/Input/input.js +1 -1
  179. package/react/components/Mainnav/mainnav-dropdown.cjs.js +1 -1
  180. package/react/components/Mainnav/mainnav-dropdown.js +1 -1
  181. package/react/components/Mainnav/mainnav-item.cjs.js +1 -1
  182. package/react/components/Mainnav/mainnav-item.js +1 -1
  183. package/react/components/Mainnav/mainnav.cjs.js +1 -1
  184. package/react/components/Mainnav/mainnav.js +1 -1
  185. package/react/components/Mainnav/sgds-mainnav-profile.cjs.js +35 -0
  186. package/react/components/Mainnav/sgds-mainnav-profile.cjs.js.map +1 -0
  187. package/react/components/Mainnav/sgds-mainnav-profile.js +30 -0
  188. package/react/components/Mainnav/sgds-mainnav-profile.js.map +1 -0
  189. package/react/components/Mainnav/sgds-mainnav.cjs.js +39 -237
  190. package/react/components/Mainnav/sgds-mainnav.cjs.js.map +1 -1
  191. package/react/components/Mainnav/sgds-mainnav.js +40 -238
  192. package/react/components/Mainnav/sgds-mainnav.js.map +1 -1
  193. package/react/components/Tab/tab-panel.cjs.js +1 -1
  194. package/react/components/Tab/tab-panel.js +1 -1
  195. package/react/components/Textarea/textarea.cjs.js +1 -1
  196. package/react/components/Textarea/textarea.js +1 -1
  197. package/react/data-table/index.cjs.js +44 -0
  198. package/react/data-table/index.cjs.js.map +1 -0
  199. package/react/data-table/index.d.ts +4 -0
  200. package/react/data-table/index.js +20 -0
  201. package/react/data-table/index.js.map +1 -0
  202. package/react/data-table-cell/index.cjs.js +40 -0
  203. package/react/data-table-cell/index.cjs.js.map +1 -0
  204. package/react/data-table-cell/index.d.ts +4 -0
  205. package/react/data-table-cell/index.js +16 -0
  206. package/react/data-table-cell/index.js.map +1 -0
  207. package/react/data-table-head/index.cjs.js +40 -0
  208. package/react/data-table-head/index.cjs.js.map +1 -0
  209. package/react/data-table-head/index.d.ts +4 -0
  210. package/react/data-table-head/index.js +16 -0
  211. package/react/data-table-head/index.js.map +1 -0
  212. package/react/data-table-row/index.cjs.js +45 -0
  213. package/react/data-table-row/index.cjs.js.map +1 -0
  214. package/react/data-table-row/index.d.ts +4 -0
  215. package/react/data-table-row/index.js +21 -0
  216. package/react/data-table-row/index.js.map +1 -0
  217. package/react/index.cjs.js +152 -138
  218. package/react/index.cjs.js.map +1 -1
  219. package/react/index.d.ts +9 -2
  220. package/react/index.js +9 -2
  221. package/react/index.js.map +1 -1
  222. package/react/mainnav-profile/index.cjs.js +40 -0
  223. package/react/mainnav-profile/index.cjs.js.map +1 -0
  224. package/react/mainnav-profile/index.d.ts +4 -0
  225. package/react/mainnav-profile/index.js +16 -0
  226. package/react/mainnav-profile/index.js.map +1 -0
  227. package/react/styles/form-text-control.cjs.js +1 -1
  228. package/react/styles/form-text-control.js +1 -1
  229. package/styles/form-text-control.js +1 -1
  230. package/themes/blue.css +11 -11
  231. package/themes/cyan.css +10 -10
  232. package/themes/gt/blue.css +11 -11
  233. package/themes/gt/cyan.css +10 -10
  234. package/themes/gt/magenta.css +11 -11
  235. package/themes/gt/pink.css +11 -11
  236. package/themes/gt/purple.css +11 -11
  237. package/themes/gt/red.css +11 -11
  238. package/themes/magenta.css +11 -11
  239. package/themes/pink.css +11 -11
  240. package/themes/purple.css +11 -11
  241. package/themes/red.css +11 -11
  242. package/themes/root.css +5 -0
  243. package/types/react.d.ts +244 -92
@@ -0,0 +1,17 @@
1
+ import NavProfileElement from "../../base/nav-profile-element";
2
+ /**
3
+ * @summary `SgdsAppnavProfile` is a profile component for the appnav that shows a full dropdown in desktop and handles its own mobile menu.
4
+ * In desktop: renders avatar + label + secondaryText with a dropdown.
5
+ * In mobile: renders the avatar as a toggler that opens a self-contained mobile panel with profile items.
6
+ * When no dropdown items are slotted, renders as a non-interactive read-only element (no caret, no pointer cursor, not focusable).
7
+ * When present, it disables the appnav's default hamburger toggler.
8
+ *
9
+ * @storyOrder 2
10
+ *
11
+ * @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)
12
+ * @slot default - Profile menu items (sgds-dropdown-item elements). When empty, the component becomes read-only.
13
+ */
14
+ export declare class SgdsAppnavProfile extends NavProfileElement {
15
+ protected _breakpointReached: boolean;
16
+ }
17
+ export default SgdsAppnavProfile;
@@ -0,0 +1,31 @@
1
+ import { __decorate } from 'tslib';
2
+ import { consume } from '@lit/context';
3
+ import { state } from 'lit/decorators.js';
4
+ import NavProfileElement from '../../base/nav-profile-element.js';
5
+ import { AppnavBreakpointContext } from './appnav-context.js';
6
+
7
+ /**
8
+ * @summary `SgdsAppnavProfile` is a profile component for the appnav that shows a full dropdown in desktop and handles its own mobile menu.
9
+ * In desktop: renders avatar + label + secondaryText with a dropdown.
10
+ * In mobile: renders the avatar as a toggler that opens a self-contained mobile panel with profile items.
11
+ * When no dropdown items are slotted, renders as a non-interactive read-only element (no caret, no pointer cursor, not focusable).
12
+ * When present, it disables the appnav's default hamburger toggler.
13
+ *
14
+ * @storyOrder 2
15
+ *
16
+ * @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)
17
+ * @slot default - Profile menu items (sgds-dropdown-item elements). When empty, the component becomes read-only.
18
+ */
19
+ class SgdsAppnavProfile extends NavProfileElement {
20
+ constructor() {
21
+ super(...arguments);
22
+ this._breakpointReached = true;
23
+ }
24
+ }
25
+ __decorate([
26
+ consume({ context: AppnavBreakpointContext, subscribe: true }),
27
+ state()
28
+ ], SgdsAppnavProfile.prototype, "_breakpointReached", void 0);
29
+
30
+ export { SgdsAppnavProfile, SgdsAppnavProfile as default };
31
+ //# sourceMappingURL=sgds-appnav-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sgds-appnav-profile.js","sources":["../../../src/components/Appnav/sgds-appnav-profile.ts"],"sourcesContent":["import { consume } from \"@lit/context\";\nimport { state } from \"lit/decorators.js\";\nimport NavProfileElement from \"../../base/nav-profile-element\";\nimport { AppnavBreakpointContext } from \"./appnav-context\";\n\n/**\n * @summary `SgdsAppnavProfile` is a profile component for the appnav that shows a full dropdown in desktop and handles its own mobile menu.\n * In desktop: renders avatar + label + secondaryText with a dropdown.\n * In mobile: renders the avatar as a toggler that opens a self-contained mobile panel with profile items.\n * When no dropdown items are slotted, renders as a non-interactive read-only element (no caret, no pointer cursor, not focusable).\n * When present, it disables the appnav's default hamburger toggler.\n *\n * @storyOrder 2\n *\n * @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)\n * @slot default - Profile menu items (sgds-dropdown-item elements). When empty, the component becomes read-only.\n */\nexport class SgdsAppnavProfile extends NavProfileElement {\n @consume({ context: AppnavBreakpointContext, subscribe: true })\n @state()\n protected override _breakpointReached = true;\n}\n\nexport default SgdsAppnavProfile;\n"],"names":[],"mappings":";;;;;;AAKA;;;;;;;;;;;AAWG;AACG,MAAO,iBAAkB,SAAQ,iBAAiB,CAAA;AAAxD,IAAA,WAAA,GAAA;;QAGqB,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC;KAC9C;AAAA,CAAA;AADoB,UAAA,CAAA;IAFlB,OAAO,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC9D,IAAA,KAAK,EAAE;AACqC,CAAA,EAAA,iBAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA;;;;"}
@@ -0,0 +1,44 @@
1
+ import NavElement from "../../base/nav-element";
2
+ export type AppnavTone = "brand" | "gradient-1" | "gradient-2" | "gradient-3" | "gradient-4";
3
+ /**
4
+ * @summary `SgdsAppnav` is a application navigation bar for operational apps. Accepts icon-buttons and profile in a fluid layout with collapse/expand behavior.
5
+ *
6
+ * @storyOrder 1
7
+ *
8
+ * @event sgds-show - Emitted on show. Only for collapsed menu.
9
+ * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.
10
+ * @event sgds-hide - Emitted on hide. Only for collapsed menu.
11
+ * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.
12
+ *
13
+ * @slot default - Elements in this slot collapse into the mobile menu as text items. Accepts sgds-icon-button and other elements. Uses ariaLabel as menu item text.
14
+ * @slot start - Elements in this slot will be positioned to the left of the brand.
15
+ * @slot brand - Brand slot of SgdsAppnav. Pass in brand logo img here
16
+ * @slot profile - Profile slot. sgds-appnav-profile goes here. Positioned to the right of the toggler.
17
+ *
18
+ */
19
+ export declare class SgdsAppnav extends NavElement {
20
+ static styles: import("lit").CSSResult[];
21
+ private _breakpointReached;
22
+ private _expanded;
23
+ /** Sets the visual tone of the navigation bar */
24
+ tone: AppnavTone;
25
+ /** Used only for SSR to indicate the presence of the `start` slot. */
26
+ hasStartSlot: boolean;
27
+ private readonly hasSlotController;
28
+ /** @internal Whether the default slot has assigned elements */
29
+ private _hasDefaultSlotItems;
30
+ /** @internal Whether the profile slot has assigned elements */
31
+ private _hasProfileSlotItems;
32
+ /** @internal Stored default slot items for mobile menu rendering */
33
+ private _defaultSlotItems;
34
+ updated(): void;
35
+ protected _onBreakpointReached(reached: boolean): void;
36
+ protected _isBreakpointReached(): boolean;
37
+ private _handleTogglerKeydown;
38
+ private _handleDefaultSlotChange;
39
+ private _handleMobileItemClick;
40
+ private _renderAppnavToggler;
41
+ private _handleProfileSlotChange;
42
+ render(): import("lit").TemplateResult<1>;
43
+ }
44
+ export default SgdsAppnav;
@@ -0,0 +1,183 @@
1
+ import { __decorate } from 'tslib';
2
+ import { provide } from '@lit/context';
3
+ import { html, nothing } from 'lit';
4
+ import { state, property } from 'lit/decorators.js';
5
+ import { classMap } from 'lit/directives/class-map.js';
6
+ import NavElement from '../../base/nav-element.js';
7
+ import { HasSlotController } from '../../utils/slot.js';
8
+ import { AppnavBreakpointContext, AppnavExpandedContext } from './appnav-context.js';
9
+ import css_248z from './appnav.js';
10
+
11
+ /**
12
+ * @summary `SgdsAppnav` is a application navigation bar for operational apps. Accepts icon-buttons and profile in a fluid layout with collapse/expand behavior.
13
+ *
14
+ * @storyOrder 1
15
+ *
16
+ * @event sgds-show - Emitted on show. Only for collapsed menu.
17
+ * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.
18
+ * @event sgds-hide - Emitted on hide. Only for collapsed menu.
19
+ * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.
20
+ *
21
+ * @slot default - Elements in this slot collapse into the mobile menu as text items. Accepts sgds-icon-button and other elements. Uses ariaLabel as menu item text.
22
+ * @slot start - Elements in this slot will be positioned to the left of the brand.
23
+ * @slot brand - Brand slot of SgdsAppnav. Pass in brand logo img here
24
+ * @slot profile - Profile slot. sgds-appnav-profile goes here. Positioned to the right of the toggler.
25
+ *
26
+ */
27
+ class SgdsAppnav extends NavElement {
28
+ constructor() {
29
+ super(...arguments);
30
+ this._breakpointReached = false;
31
+ this._expanded = false;
32
+ /** Sets the visual tone of the navigation bar */
33
+ this.tone = "brand";
34
+ /** Used only for SSR to indicate the presence of the `start` slot. */
35
+ this.hasStartSlot = false;
36
+ this.hasSlotController = new HasSlotController(this, "start");
37
+ /** @internal Whether the default slot has assigned elements */
38
+ this._hasDefaultSlotItems = false;
39
+ /** @internal Whether the profile slot has assigned elements */
40
+ this._hasProfileSlotItems = false;
41
+ /** @internal Stored default slot items for mobile menu rendering */
42
+ this._defaultSlotItems = [];
43
+ }
44
+ updated() {
45
+ if (!this.hasStartSlot)
46
+ this.hasStartSlot = this.hasSlotController.test("start");
47
+ this._expanded = this.expanded;
48
+ }
49
+ _onBreakpointReached(reached) {
50
+ this._breakpointReached = reached;
51
+ }
52
+ _isBreakpointReached() {
53
+ return this._breakpointReached;
54
+ }
55
+ _handleTogglerKeydown(e) {
56
+ var _a;
57
+ if (e.key === "Tab" && !e.shiftKey && this.expanded) {
58
+ e.preventDefault();
59
+ const firstItem = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(".appnav-menu-item");
60
+ firstItem === null || firstItem === void 0 ? void 0 : firstItem.focus();
61
+ }
62
+ }
63
+ _handleDefaultSlotChange(e) {
64
+ const childElements = e.target.assignedElements({ flatten: true });
65
+ this._hasDefaultSlotItems = childElements.length > 0;
66
+ this._defaultSlotItems = childElements
67
+ .filter(el => typeof el.tagName !== "undefined")
68
+ .map(el => {
69
+ var _a;
70
+ return ({
71
+ label: el.getAttribute("ariaLabel") || el.getAttribute("aria-label") || ((_a = el.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || "",
72
+ element: el
73
+ });
74
+ });
75
+ childElements.forEach(el => {
76
+ el.setAttribute("expand", this.expand);
77
+ });
78
+ }
79
+ _handleMobileItemClick(item) {
80
+ item.element.click();
81
+ this.hide();
82
+ }
83
+ _renderAppnavToggler() {
84
+ return html `<sgds-icon-button
85
+ name="three-dots-vertical"
86
+ variant="ghost"
87
+ size="sm"
88
+ tone="fixed-light"
89
+ class="navbar-toggler"
90
+ @click=${this._handleSummaryClick}
91
+ @keydown=${this._handleTogglerKeydown}
92
+ aria-controls="${this.collapseId}"
93
+ aria-expanded="${this.expanded}"
94
+ .ariaLabel=${"Toggle navigation"}
95
+ ></sgds-icon-button>`;
96
+ }
97
+ _handleProfileSlotChange(e) {
98
+ const childElements = e.target.assignedElements({ flatten: true });
99
+ this._hasProfileSlotItems = childElements.length > 0;
100
+ childElements.forEach(el => {
101
+ el.setAttribute("expand", this.expand);
102
+ el.setAttribute("tone", this.tone);
103
+ });
104
+ }
105
+ render() {
106
+ this.breakpointReached =
107
+ window.innerWidth <
108
+ (this.expand === "always"
109
+ ? -1
110
+ : this.expand === "never"
111
+ ? Infinity
112
+ : { sm: 512, md: 768, lg: 1024, xl: 1280, xxl: 1440 }[this.expand]);
113
+ return html `
114
+ <nav>
115
+ <div class="navbar ${this._expandClass()}">
116
+ <slot name="start" class=${classMap({ "slot-empty": !this.hasStartSlot })}></slot>
117
+ <a class="navbar-brand" href=${this.brandHref} aria-label="brand-link">
118
+ <slot name="brand"></slot>
119
+ </a>
120
+ <div class="navbar-body navbar-collapse" id=${this.collapseId}>
121
+ <div class="navbar-nav navbar-nav-scroll">
122
+ <slot
123
+ class=${classMap({ "slot-desktop-only": this.breakpointReached })}
124
+ @slotchange=${this._handleDefaultSlotChange}
125
+ ></slot>
126
+ ${this.breakpointReached
127
+ ? this._defaultSlotItems.map(item => html `<a
128
+ class="appnav-menu-item"
129
+ role="button"
130
+ tabindex="0"
131
+ @click=${() => this._handleMobileItemClick(item)}
132
+ @keydown=${(e) => {
133
+ if (e.key === "Enter" || e.key === " ") {
134
+ e.preventDefault();
135
+ this._handleMobileItemClick(item);
136
+ }
137
+ }}
138
+ >${item.label}</a
139
+ >`)
140
+ : nothing}
141
+ </div>
142
+ </div>
143
+ <div
144
+ class="navbar-end ${this._hasProfileSlotItems || (this._hasDefaultSlotItems && this.breakpointReached)
145
+ ? ""
146
+ : "slot-empty"}"
147
+ >
148
+ ${this._hasDefaultSlotItems && this.breakpointReached ? this._renderAppnavToggler() : nothing}
149
+ <slot name="profile" @slotchange=${this._handleProfileSlotChange}></slot>
150
+ </div>
151
+ </div>
152
+ </nav>
153
+ `;
154
+ }
155
+ }
156
+ SgdsAppnav.styles = [...NavElement.styles, css_248z];
157
+ __decorate([
158
+ provide({ context: AppnavBreakpointContext }),
159
+ state()
160
+ ], SgdsAppnav.prototype, "_breakpointReached", void 0);
161
+ __decorate([
162
+ provide({ context: AppnavExpandedContext }),
163
+ state()
164
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
165
+ ], SgdsAppnav.prototype, "_expanded", void 0);
166
+ __decorate([
167
+ property({ type: String, reflect: true })
168
+ ], SgdsAppnav.prototype, "tone", void 0);
169
+ __decorate([
170
+ property({ type: Boolean })
171
+ ], SgdsAppnav.prototype, "hasStartSlot", void 0);
172
+ __decorate([
173
+ state()
174
+ ], SgdsAppnav.prototype, "_hasDefaultSlotItems", void 0);
175
+ __decorate([
176
+ state()
177
+ ], SgdsAppnav.prototype, "_hasProfileSlotItems", void 0);
178
+ __decorate([
179
+ state()
180
+ ], SgdsAppnav.prototype, "_defaultSlotItems", void 0);
181
+
182
+ export { SgdsAppnav, SgdsAppnav as default };
183
+ //# sourceMappingURL=sgds-appnav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sgds-appnav.js","sources":["../../../src/components/Appnav/sgds-appnav.ts"],"sourcesContent":["import { provide } from \"@lit/context\";\nimport { html, nothing } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport NavElement from \"../../base/nav-element\";\nimport { HasSlotController } from \"../../utils/slot\";\nimport { AppnavBreakpointContext, AppnavExpandedContext } from \"./appnav-context\";\nimport appnavStyle from \"./appnav.css\";\n\nexport type AppnavTone = \"brand\" | \"gradient-1\" | \"gradient-2\" | \"gradient-3\" | \"gradient-4\";\n\ninterface DefaultSlotItem {\n label: string;\n element: HTMLElement;\n}\n\n/**\n * @summary `SgdsAppnav` is a application navigation bar for operational apps. Accepts icon-buttons and profile in a fluid layout with collapse/expand behavior.\n *\n * @storyOrder 1\n *\n * @event sgds-show - Emitted on show. Only for collapsed menu.\n * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.\n * @event sgds-hide - Emitted on hide. Only for collapsed menu.\n * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.\n *\n * @slot default - Elements in this slot collapse into the mobile menu as text items. Accepts sgds-icon-button and other elements. Uses ariaLabel as menu item text.\n * @slot start - Elements in this slot will be positioned to the left of the brand.\n * @slot brand - Brand slot of SgdsAppnav. Pass in brand logo img here\n * @slot profile - Profile slot. sgds-appnav-profile goes here. Positioned to the right of the toggler.\n *\n */\nexport class SgdsAppnav extends NavElement {\n static styles = [...NavElement.styles, appnavStyle];\n\n @provide({ context: AppnavBreakpointContext })\n @state()\n private _breakpointReached = false;\n\n @provide({ context: AppnavExpandedContext })\n @state()\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private _expanded = false;\n\n /** Sets the visual tone of the navigation bar */\n @property({ type: String, reflect: true })\n tone: AppnavTone = \"brand\";\n\n /** Used only for SSR to indicate the presence of the `start` slot. */\n @property({ type: Boolean }) hasStartSlot = false;\n\n private readonly hasSlotController = new HasSlotController(this, \"start\");\n\n /** @internal Whether the default slot has assigned elements */\n @state()\n private _hasDefaultSlotItems = false;\n\n /** @internal Whether the profile slot has assigned elements */\n @state()\n private _hasProfileSlotItems = false;\n\n /** @internal Stored default slot items for mobile menu rendering */\n @state()\n private _defaultSlotItems: DefaultSlotItem[] = [];\n\n updated() {\n if (!this.hasStartSlot) this.hasStartSlot = this.hasSlotController.test(\"start\");\n this._expanded = this.expanded;\n }\n\n protected _onBreakpointReached(reached: boolean): void {\n this._breakpointReached = reached;\n }\n\n protected _isBreakpointReached(): boolean {\n return this._breakpointReached;\n }\n\n private _handleTogglerKeydown(e: KeyboardEvent) {\n if (e.key === \"Tab\" && !e.shiftKey && this.expanded) {\n e.preventDefault();\n const firstItem = this.shadowRoot?.querySelector(\".appnav-menu-item\") as HTMLElement | null;\n firstItem?.focus();\n }\n }\n\n private _handleDefaultSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true }) as HTMLElement[];\n this._hasDefaultSlotItems = childElements.length > 0;\n this._defaultSlotItems = childElements\n .filter(el => typeof el.tagName !== \"undefined\")\n .map(el => ({\n label: el.getAttribute(\"ariaLabel\") || el.getAttribute(\"aria-label\") || el.textContent?.trim() || \"\",\n element: el\n }));\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n });\n }\n\n private _handleMobileItemClick(item: DefaultSlotItem) {\n item.element.click();\n this.hide();\n }\n\n private _renderAppnavToggler() {\n return html`<sgds-icon-button\n name=\"three-dots-vertical\"\n variant=\"ghost\"\n size=\"sm\"\n tone=\"fixed-light\"\n class=\"navbar-toggler\"\n @click=${this._handleSummaryClick}\n @keydown=${this._handleTogglerKeydown}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n .ariaLabel=${\"Toggle navigation\"}\n ></sgds-icon-button>`;\n }\n\n private _handleProfileSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n this._hasProfileSlotItems = childElements.length > 0;\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n el.setAttribute(\"tone\", this.tone);\n });\n }\n\n render() {\n this.breakpointReached =\n window.innerWidth <\n (this.expand === \"always\"\n ? -1\n : this.expand === \"never\"\n ? Infinity\n : { sm: 512, md: 768, lg: 1024, xl: 1280, xxl: 1440 }[this.expand]);\n\n return html`\n <nav>\n <div class=\"navbar ${this._expandClass()}\">\n <slot name=\"start\" class=${classMap({ \"slot-empty\": !this.hasStartSlot })}></slot>\n <a class=\"navbar-brand\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <div class=\"navbar-body navbar-collapse\" id=${this.collapseId}>\n <div class=\"navbar-nav navbar-nav-scroll\">\n <slot\n class=${classMap({ \"slot-desktop-only\": this.breakpointReached })}\n @slotchange=${this._handleDefaultSlotChange}\n ></slot>\n ${this.breakpointReached\n ? this._defaultSlotItems.map(\n item => html`<a\n class=\"appnav-menu-item\"\n role=\"button\"\n tabindex=\"0\"\n @click=${() => this._handleMobileItemClick(item)}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this._handleMobileItemClick(item);\n }\n }}\n >${item.label}</a\n >`\n )\n : nothing}\n </div>\n </div>\n <div\n class=\"navbar-end ${this._hasProfileSlotItems || (this._hasDefaultSlotItems && this.breakpointReached)\n ? \"\"\n : \"slot-empty\"}\"\n >\n ${this._hasDefaultSlotItems && this.breakpointReached ? this._renderAppnavToggler() : nothing}\n <slot name=\"profile\" @slotchange=${this._handleProfileSlotChange}></slot>\n </div>\n </div>\n </nav>\n `;\n }\n}\n\nexport default SgdsAppnav;\n"],"names":["appnavStyle"],"mappings":";;;;;;;;;;AAgBA;;;;;;;;;;;;;;;AAeG;AACG,MAAO,UAAW,SAAQ,UAAU,CAAA;AAA1C,IAAA,WAAA,GAAA;;QAKU,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;QAK3B,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;;QAI1B,IAAI,CAAA,IAAA,GAAe,OAAO,CAAC;;QAGE,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QAEjC,IAAiB,CAAA,iBAAA,GAAG,IAAI,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;;QAIlE,IAAoB,CAAA,oBAAA,GAAG,KAAK,CAAC;;QAI7B,IAAoB,CAAA,oBAAA,GAAG,KAAK,CAAC;;QAI7B,IAAiB,CAAA,iBAAA,GAAsB,EAAE,CAAC;KAuHnD;IArHC,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;KAChC;AAES,IAAA,oBAAoB,CAAC,OAAgB,EAAA;AAC7C,QAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;KACnC;IAES,oBAAoB,GAAA;QAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAChC;AAEO,IAAA,qBAAqB,CAAC,CAAgB,EAAA;;AAC5C,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,mBAAmB,CAAuB,CAAC;AAC5F,YAAA,SAAS,aAAT,SAAS,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAT,SAAS,CAAE,KAAK,EAAE,CAAC;SACpB;KACF;AAEO,IAAA,wBAAwB,CAAC,CAAQ,EAAA;AACvC,QAAA,MAAM,aAAa,GAAI,CAAC,CAAC,MAA0B,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAkB,CAAC;QACzG,IAAI,CAAC,oBAAoB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,iBAAiB,GAAG,aAAa;aACnC,MAAM,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,WAAW,CAAC;aAC/C,GAAG,CAAC,EAAE,IAAG;;AAAC,YAAA,QAAC;gBACV,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,KAAI,CAAA,EAAA,GAAA,EAAE,CAAC,WAAW,0CAAE,IAAI,EAAE,CAAA,IAAI,EAAE;AACpG,gBAAA,OAAO,EAAE,EAAE;AACZ,aAAA,EAAC;AAAA,SAAA,CAAC,CAAC;AACN,QAAA,aAAa,CAAC,OAAO,CAAC,EAAE,IAAG;YACzB,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACzC,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,sBAAsB,CAAC,IAAqB,EAAA;AAClD,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;IAEO,oBAAoB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAA,CAAA;;;;;;AAMA,aAAA,EAAA,IAAI,CAAC,mBAAmB,CAAA;AACtB,eAAA,EAAA,IAAI,CAAC,qBAAqB,CAAA;AACpB,qBAAA,EAAA,IAAI,CAAC,UAAU,CAAA;AACf,qBAAA,EAAA,IAAI,CAAC,QAAQ,CAAA;mBACjB,mBAAmB,CAAA;yBACb,CAAC;KACvB;AAEO,IAAA,wBAAwB,CAAC,CAAQ,EAAA;AACvC,QAAA,MAAM,aAAa,GAAI,CAAC,CAAC,MAA0B,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,oBAAoB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;AACrD,QAAA,aAAa,CAAC,OAAO,CAAC,EAAE,IAAG;YACzB,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,SAAC,CAAC,CAAC;KACJ;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,iBAAiB;AACpB,YAAA,MAAM,CAAC,UAAU;AACjB,iBAAC,IAAI,CAAC,MAAM,KAAK,QAAQ;sBACrB,CAAC,CAAC;AACJ,sBAAE,IAAI,CAAC,MAAM,KAAK,OAAO;AACzB,0BAAE,QAAQ;AACV,0BAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAExE,QAAA,OAAO,IAAI,CAAA,CAAA;;6BAEc,IAAI,CAAC,YAAY,EAAE,CAAA;qCACX,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAA;AAC1C,uCAAA,EAAA,IAAI,CAAC,SAAS,CAAA;;;AAGC,sDAAA,EAAA,IAAI,CAAC,UAAU,CAAA;;;wBAG/C,QAAQ,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;AACnD,4BAAA,EAAA,IAAI,CAAC,wBAAwB,CAAA;;AAE3C,cAAA,EAAA,IAAI,CAAC,iBAAiB;AACtB,cAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CACxB,IAAI,IAAI,IAAI,CAAA,CAAA;;;;AAID,6BAAA,EAAA,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;iCACrC,CAAC,CAAgB,KAAI;AAC9B,gBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;oBACtC,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,oBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;iBACnC;aACF,CAAA;AACE,uBAAA,EAAA,IAAI,CAAC,KAAK,CAAA;sBACb,CACH;AACH,cAAE,OAAO,CAAA;;;;gCAIO,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,iBAAiB,CAAC;AACpG,cAAE,EAAE;AACJ,cAAE,YAAY,CAAA;;AAEd,YAAA,EAAA,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,OAAO,CAAA;AAC1D,6CAAA,EAAA,IAAI,CAAC,wBAAwB,CAAA;;;;KAIvE,CAAC;KACH;;AApJM,UAAM,CAAA,MAAA,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAEA,QAAW,CAArC,CAAuC;AAI5C,UAAA,CAAA;AAFP,IAAA,OAAO,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAC7C,IAAA,KAAK,EAAE;AAC2B,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAK3B,UAAA,CAAA;AAHP,IAAA,OAAO,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAC3C,IAAA,KAAK,EAAE;;AAEkB,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAI1B,UAAA,CAAA;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACf,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAGE,UAAA,CAAA;AAA5B,IAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAAsB,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAM1C,UAAA,CAAA;AADP,IAAA,KAAK,EAAE;AAC6B,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAI7B,UAAA,CAAA;AADP,IAAA,KAAK,EAAE;AAC6B,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAI7B,UAAA,CAAA;AADP,IAAA,KAAK,EAAE;AAC0C,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA;;;;"}