@govtechsg/sgds-web-component 3.15.1-rc.2 → 3.16.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 (151) hide show
  1. package/components/Badge/index.umd.min.js +1 -1
  2. package/components/Badge/index.umd.min.js.map +1 -1
  3. package/components/Breadcrumb/index.umd.min.js +6 -6
  4. package/components/Breadcrumb/index.umd.min.js.map +1 -1
  5. package/components/ComboBox/index.umd.min.js +2 -2
  6. package/components/ComboBox/index.umd.min.js.map +1 -1
  7. package/components/Datepicker/index.umd.min.js +1 -1
  8. package/components/Datepicker/index.umd.min.js.map +1 -1
  9. package/components/Drawer/drawer.js +1 -1
  10. package/components/Drawer/index.umd.min.js +1 -1
  11. package/components/Drawer/index.umd.min.js.map +1 -1
  12. package/components/Dropdown/dropdown-menu.js +1 -1
  13. package/components/Dropdown/index.umd.min.js +1 -1
  14. package/components/Dropdown/index.umd.min.js.map +1 -1
  15. package/components/Mainnav/index.umd.min.js +9 -9
  16. package/components/Mainnav/index.umd.min.js.map +1 -1
  17. package/components/Mainnav/mainnav.js +1 -1
  18. package/components/Modal/index.umd.min.js +1 -1
  19. package/components/Modal/index.umd.min.js.map +1 -1
  20. package/components/Modal/modal.js +1 -1
  21. package/components/OverflowMenu/index.umd.min.js +6 -6
  22. package/components/OverflowMenu/index.umd.min.js.map +1 -1
  23. package/components/Select/index.umd.min.js +1 -1
  24. package/components/Select/index.umd.min.js.map +1 -1
  25. package/components/Subnav/index.umd.min.js +1 -1
  26. package/components/Subnav/index.umd.min.js.map +1 -1
  27. package/components/Subnav/subnav.js +1 -1
  28. package/components/Toast/index.umd.min.js +1 -1
  29. package/components/Toast/index.umd.min.js.map +1 -1
  30. package/components/Toast/toast-container.js +1 -1
  31. package/components/Tooltip/index.umd.min.js +1 -1
  32. package/components/Tooltip/index.umd.min.js.map +1 -1
  33. package/components/Tooltip/tooltip.js +1 -1
  34. package/components/index.d.ts +0 -1
  35. package/components/index.js +0 -1
  36. package/components/index.js.map +1 -1
  37. package/components/index.umd.min.js +64 -116
  38. package/components/index.umd.min.js.map +1 -1
  39. package/css/fouc.css +1 -5
  40. package/css/utility.css +0 -14
  41. package/index.d.ts +0 -1
  42. package/index.js +0 -1
  43. package/index.js.map +1 -1
  44. package/index.umd.min.js +63 -194
  45. package/index.umd.min.js.map +1 -1
  46. package/package.json +1 -1
  47. package/react/components/Drawer/drawer.cjs.js +1 -1
  48. package/react/components/Drawer/drawer.js +1 -1
  49. package/react/components/Dropdown/dropdown-menu.cjs.js +1 -1
  50. package/react/components/Dropdown/dropdown-menu.js +1 -1
  51. package/react/components/Mainnav/mainnav.cjs.js +1 -1
  52. package/react/components/Mainnav/mainnav.js +1 -1
  53. package/react/components/Modal/modal.cjs.js +1 -1
  54. package/react/components/Modal/modal.js +1 -1
  55. package/react/components/Subnav/subnav.cjs.js +1 -1
  56. package/react/components/Subnav/subnav.js +1 -1
  57. package/react/components/Toast/toast-container.cjs.js +1 -1
  58. package/react/components/Toast/toast-container.js +1 -1
  59. package/react/components/Tooltip/tooltip.cjs.js +1 -1
  60. package/react/components/Tooltip/tooltip.js +1 -1
  61. package/react/index.cjs.js +54 -62
  62. package/react/index.cjs.js.map +1 -1
  63. package/react/index.d.ts +1 -5
  64. package/react/index.js +1 -5
  65. package/react/index.js.map +1 -1
  66. package/themes/root.css +0 -13
  67. package/components/Sidebar/index.d.ts +0 -16
  68. package/components/Sidebar/index.js +0 -10
  69. package/components/Sidebar/index.js.map +0 -1
  70. package/components/Sidebar/index.umd.min.js +0 -2501
  71. package/components/Sidebar/index.umd.min.js.map +0 -1
  72. package/components/Sidebar/sgds-sidebar-group.d.ts +0 -51
  73. package/components/Sidebar/sgds-sidebar-group.js +0 -123
  74. package/components/Sidebar/sgds-sidebar-group.js.map +0 -1
  75. package/components/Sidebar/sgds-sidebar-item.d.ts +0 -17
  76. package/components/Sidebar/sgds-sidebar-item.js +0 -61
  77. package/components/Sidebar/sgds-sidebar-item.js.map +0 -1
  78. package/components/Sidebar/sgds-sidebar-section.d.ts +0 -56
  79. package/components/Sidebar/sgds-sidebar-section.js +0 -125
  80. package/components/Sidebar/sgds-sidebar-section.js.map +0 -1
  81. package/components/Sidebar/sgds-sidebar.d.ts +0 -161
  82. package/components/Sidebar/sgds-sidebar.js +0 -424
  83. package/components/Sidebar/sgds-sidebar.js.map +0 -1
  84. package/components/Sidebar/sidebar-context.d.ts +0 -51
  85. package/components/Sidebar/sidebar-context.js +0 -45
  86. package/components/Sidebar/sidebar-context.js.map +0 -1
  87. package/components/Sidebar/sidebar-element.d.ts +0 -112
  88. package/components/Sidebar/sidebar-element.js +0 -280
  89. package/components/Sidebar/sidebar-element.js.map +0 -1
  90. package/components/Sidebar/sidebar-item.js +0 -6
  91. package/components/Sidebar/sidebar-item.js.map +0 -1
  92. package/components/Sidebar/sidebar-section.js +0 -6
  93. package/components/Sidebar/sidebar-section.js.map +0 -1
  94. package/components/Sidebar/sidebar.js +0 -6
  95. package/components/Sidebar/sidebar.js.map +0 -1
  96. package/react/components/Sidebar/sgds-sidebar-group.cjs.js +0 -129
  97. package/react/components/Sidebar/sgds-sidebar-group.cjs.js.map +0 -1
  98. package/react/components/Sidebar/sgds-sidebar-group.js +0 -124
  99. package/react/components/Sidebar/sgds-sidebar-group.js.map +0 -1
  100. package/react/components/Sidebar/sgds-sidebar-item.cjs.js +0 -67
  101. package/react/components/Sidebar/sgds-sidebar-item.cjs.js.map +0 -1
  102. package/react/components/Sidebar/sgds-sidebar-item.js +0 -62
  103. package/react/components/Sidebar/sgds-sidebar-item.js.map +0 -1
  104. package/react/components/Sidebar/sgds-sidebar-section.cjs.js +0 -131
  105. package/react/components/Sidebar/sgds-sidebar-section.cjs.js.map +0 -1
  106. package/react/components/Sidebar/sgds-sidebar-section.js +0 -126
  107. package/react/components/Sidebar/sgds-sidebar-section.js.map +0 -1
  108. package/react/components/Sidebar/sgds-sidebar.cjs.js +0 -430
  109. package/react/components/Sidebar/sgds-sidebar.cjs.js.map +0 -1
  110. package/react/components/Sidebar/sgds-sidebar.js +0 -425
  111. package/react/components/Sidebar/sgds-sidebar.js.map +0 -1
  112. package/react/components/Sidebar/sidebar-context.cjs.js +0 -54
  113. package/react/components/Sidebar/sidebar-context.cjs.js.map +0 -1
  114. package/react/components/Sidebar/sidebar-context.js +0 -46
  115. package/react/components/Sidebar/sidebar-context.js.map +0 -1
  116. package/react/components/Sidebar/sidebar-element.cjs.js +0 -285
  117. package/react/components/Sidebar/sidebar-element.cjs.js.map +0 -1
  118. package/react/components/Sidebar/sidebar-element.js +0 -281
  119. package/react/components/Sidebar/sidebar-element.js.map +0 -1
  120. package/react/components/Sidebar/sidebar-item.cjs.js +0 -11
  121. package/react/components/Sidebar/sidebar-item.cjs.js.map +0 -1
  122. package/react/components/Sidebar/sidebar-item.js +0 -7
  123. package/react/components/Sidebar/sidebar-item.js.map +0 -1
  124. package/react/components/Sidebar/sidebar-section.cjs.js +0 -11
  125. package/react/components/Sidebar/sidebar-section.cjs.js.map +0 -1
  126. package/react/components/Sidebar/sidebar-section.js +0 -7
  127. package/react/components/Sidebar/sidebar-section.js.map +0 -1
  128. package/react/components/Sidebar/sidebar.cjs.js +0 -11
  129. package/react/components/Sidebar/sidebar.cjs.js.map +0 -1
  130. package/react/components/Sidebar/sidebar.js +0 -7
  131. package/react/components/Sidebar/sidebar.js.map +0 -1
  132. package/react/sidebar/index.cjs.js +0 -42
  133. package/react/sidebar/index.cjs.js.map +0 -1
  134. package/react/sidebar/index.d.ts +0 -2
  135. package/react/sidebar/index.js +0 -18
  136. package/react/sidebar/index.js.map +0 -1
  137. package/react/sidebar-group/index.cjs.js +0 -40
  138. package/react/sidebar-group/index.cjs.js.map +0 -1
  139. package/react/sidebar-group/index.d.ts +0 -2
  140. package/react/sidebar-group/index.js +0 -16
  141. package/react/sidebar-group/index.js.map +0 -1
  142. package/react/sidebar-item/index.cjs.js +0 -40
  143. package/react/sidebar-item/index.cjs.js.map +0 -1
  144. package/react/sidebar-item/index.d.ts +0 -2
  145. package/react/sidebar-item/index.js +0 -16
  146. package/react/sidebar-item/index.js.map +0 -1
  147. package/react/sidebar-section/index.cjs.js +0 -40
  148. package/react/sidebar-section/index.cjs.js.map +0 -1
  149. package/react/sidebar-section/index.d.ts +0 -2
  150. package/react/sidebar-section/index.js +0 -16
  151. package/react/sidebar-section/index.js.map +0 -1
@@ -1,430 +0,0 @@
1
- 'use client';
2
- 'use strict';
3
-
4
- Object.defineProperty(exports, '__esModule', { value: true });
5
-
6
- var tslib = require('tslib');
7
- var lit = require('lit');
8
- var decorators_js = require('lit/decorators.js');
9
- var classMap_js = require('lit/directives/class-map.js');
10
- var sgdsElement = require('../../base/sgds-element.cjs.js');
11
- var sidebar = require('./sidebar.cjs.js');
12
- var context = require('@lit/context');
13
- var sidebarContext = require('./sidebar-context.cjs.js');
14
- var watch = require('../../utils/watch.cjs.js');
15
- var sgdsIconButton = require('../IconButton/sgds-icon-button.cjs.js');
16
- var breakpoints = require('../../utils/breakpoints.cjs.js');
17
-
18
- const SGDS_SIDEBAR_GROUP = "sgds-sidebar-group";
19
- /**
20
- * @summary Sidebar is a collapsible navigation component that displays menu items and groups.
21
- * Users can expand and collapse the sidebar to save screen space while navigating through organized menu items.
22
- * The sidebar coordinates selection and navigation across nested items using context providers and custom events.
23
- *
24
- * Features:
25
- * - Collapsible state for space-saving layouts with icon-only mode
26
- * - Multi-level nesting (up to 3 levels) with drawer overlay for root-level groups
27
- * - Keyboard navigation with full ARIA support for accessibility
28
- * - Programmatic link navigation support with anchor elements
29
- * - Active item tracking and synchronized state management
30
- *
31
- * Keyboard Navigation:
32
- * - Arrow Up/Down: Navigate between sidebar items and groups
33
- * - Arrow Left/Right: Collapse/expand groups or navigate drawer overlays
34
- * - Enter/Space: Activate focused item or toggle group
35
- * - Tab: Standard focus management to interactive elements
36
- *
37
- * @slot default - Insert sgds-sidebar-item, sgds-sidebar-group, and sgds-sidebar-section elements
38
- * @slot top - Insert brand/logo content in sidebar header
39
- * @slot bottom - Insert content in sidebar footer
40
- *
41
- * @fires sgds-select - Emitted when a sidebar item or group is selected.
42
- * Event detail: { activeItem: string } - name of the selected item
43
- *
44
- */
45
- class SgdsSidebar extends sgdsElement["default"] {
46
- constructor() {
47
- super(...arguments);
48
- /**
49
- * Controls whether the sidebar is collapsed or expanded.
50
- * When true, the sidebar is in collapsed state showing only icons.
51
- * When false, the sidebar is expanded displaying full labels and content.
52
- * Affects all child items by toggling visibility of labels and adjusting spacing.
53
- * @attribute collapsed
54
- * @type {boolean}
55
- * @default false
56
- */
57
- this.collapsed = false;
58
- /**
59
- * The name of the currently active sidebar item or group.
60
- * Reflects the selected item and allows external control of sidebar selection.
61
- * Used to synchronize sidebar state with external navigation state or programmatic selection.
62
- * When set, the corresponding item with matching `name` attribute will be highlighted as active.
63
- * @attribute active
64
- * @type {string}
65
- * @default ""
66
- */
67
- this.active = "";
68
- /** @internal Tracks the currently active group and provides it via context to all child elements */
69
- this._sidebarActiveGroup = null;
70
- /** @internal Tracks the currently active item and provides it via context to all child elements */
71
- this._sidebarActiveItem = null;
72
- /** @internal Provides the list of items shown in the drawer overlay */
73
- this._drawerItems = [];
74
- /** @internal Indicates whether a drawer overlay is currently open */
75
- this._showDrawer = false;
76
- /** @internal */
77
- this._isMobile = false;
78
- /** @internal Bound resize handler for proper event listener removal */
79
- this._boundHandleResize = this._handleResize.bind(this);
80
- this._handleSlotChange = () => {
81
- this.addItemListeners();
82
- };
83
- /**
84
- * Handles clicks outside the sidebar to close the drawer overlay.
85
- * Closes the nested items drawer when user clicks outside the sidebar.
86
- * Maintains drawer visibility when clicking within sidebar boundaries.
87
- * @private
88
- * @param {MouseEvent} e - The click event from the document
89
- * @returns {void}
90
- */
91
- this._handleClickOutOfElement = (e) => {
92
- if (!this._sidebarActiveGroup)
93
- return;
94
- const overlay = e.composedPath().find(e => { var _a; return (_a = e === null || e === void 0 ? void 0 : e.classList) === null || _a === void 0 ? void 0 : _a.contains("sidebar--overlay"); });
95
- if (overlay || !e.composedPath().includes(this)) {
96
- this._showDrawer = false;
97
- }
98
- };
99
- }
100
- connectedCallback() {
101
- super.connectedCallback();
102
- this.setAttribute("role", "navigation");
103
- this.setAttribute("aria-label", "Main navigation");
104
- this.updateComplete.then(() => {
105
- this._handleActive();
106
- });
107
- window === null || window === void 0 ? void 0 : window.addEventListener("resize", this._boundHandleResize);
108
- this._handleResize();
109
- }
110
- disconnectedCallback() {
111
- super.disconnectedCallback();
112
- document === null || document === void 0 ? void 0 : document.removeEventListener("click", this._handleClickOutOfElement);
113
- window === null || window === void 0 ? void 0 : window.removeEventListener("resize", this._boundHandleResize);
114
- }
115
- firstUpdated() {
116
- document === null || document === void 0 ? void 0 : document.addEventListener("click", this._handleClickOutOfElement);
117
- }
118
- updated() {
119
- this._handleActive();
120
- }
121
- /**
122
- * Watch handler for the collapsed property.
123
- * Syncs the internal collapsed state with the property value.
124
- * Triggers re-render and updates all child items' collapsed styling.
125
- * @private
126
- * @returns {void}
127
- */
128
- _handleCollapsed() {
129
- this._sidebarCollapsed = this.collapsed;
130
- }
131
- /**
132
- * Handles changes to the active item selection.
133
- * Updates selection state and manages drawer overlay visibility based on the active item's nesting level.
134
- * For root-level items with children, opens the drawer overlay.
135
- * For nested items, expands parent groups and opens the appropriate drawer if needed.
136
- * @private
137
- * @returns {void}
138
- */
139
- _handleActiveItem() {
140
- if (!this._sidebarActiveItem)
141
- return;
142
- const childLevel = this._sidebarActiveItem._childLevel;
143
- this._sidebarActiveItem._selected = true;
144
- if (childLevel === 1) {
145
- // First level of navigation, check if need to open drawer or not.
146
- if (this._sidebarActiveItem._childElements.length > 0) {
147
- this._setNodesToDrawer(this._sidebarActiveItem);
148
- }
149
- else {
150
- this._revertNodesToParent();
151
- }
152
- }
153
- else {
154
- // when nested, we will find the top level of parent
155
- let parentEle = this._sidebarActiveItem.parentElement;
156
- while (parentEle._childLevel >= 1 && parentEle.tagName.toLowerCase() === SGDS_SIDEBAR_GROUP) {
157
- if (parentEle.tagName.toLowerCase() === SGDS_SIDEBAR_GROUP) {
158
- if (parentEle._childLevel === 1) {
159
- // when active item not in drawer, set nodes into drawer.
160
- if (!parentEle.classList.contains("sidebar-nested-overlay")) {
161
- this._setNodesToDrawer(parentEle);
162
- }
163
- }
164
- parentEle._selected = true;
165
- parentEle._showMenu = parentEle._childLevel > 1; // setting this to true as the child is active
166
- parentEle = parentEle.parentElement;
167
- }
168
- }
169
- if (this._sidebarActiveGroup) {
170
- this._sidebarActiveGroup._selected = true;
171
- }
172
- }
173
- }
174
- /**
175
- * Watch handler for the active property.
176
- * Finds and sets the active item by name from the sidebar hierarchy.
177
- * Clears active state when active property is empty.
178
- * @private
179
- * @returns {void}
180
- */
181
- _handleActive() {
182
- // Return early if active is empty
183
- if (!this.active) {
184
- this._sidebarActiveItem = null;
185
- return;
186
- }
187
- this._sidebarActiveItem = this._getActiveChild();
188
- }
189
- /**
190
- * Recursively searches the sidebar hierarchy for an item matching the active name.
191
- * Traverses through all nested levels to find the target element.
192
- * Used to support programmatic selection of deeply nested items.
193
- * @private
194
- * @returns {SidebarElement | null} The matching sidebar element or null if not found
195
- */
196
- _getActiveChild() {
197
- const findByName = (elements) => {
198
- var _a;
199
- for (const element of elements) {
200
- if (element.name === this.active) {
201
- return element;
202
- }
203
- if ((_a = element._childElements) === null || _a === void 0 ? void 0 : _a.length) {
204
- const found = findByName(element._childElements);
205
- if (found)
206
- return found;
207
- }
208
- }
209
- return null;
210
- };
211
- return findByName(this._defaultNodes);
212
- }
213
- /**
214
- * Handles window resize events to manage responsive behavior.
215
- * Automatically collapses sidebar on mobile devices (width <= SM_BREAKPOINT).
216
- * Expands sidebar on larger screens.
217
- * @private
218
- * @returns {void}
219
- */ _handleResize() {
220
- const isMobile = window.innerWidth <= breakpoints.SM_BREAKPOINT;
221
- if (isMobile !== this._isMobile) {
222
- this._isMobile = isMobile;
223
- this.collapsed = this._isMobile;
224
- }
225
- }
226
- /**
227
- * Manages the drawer overlay content based on the selected parent item.
228
- * If element is provided: Opens drawer for that element's children.
229
- * If element is undefined: Closes drawer and reverts items to their parent.
230
- * @private
231
- * @param {SgdsSidebarGroup} [element] - The parent item to display in drawer. Undefined closes drawer.
232
- * @returns {void}
233
- */
234
- _setNodesToDrawer(element) {
235
- if (!element)
236
- return;
237
- // when there is element, we will revert the nodes of the previous active group before setting new value into the active group
238
- if (this._sidebarActiveGroup && element !== this._sidebarActiveGroup) {
239
- this._revertNodesToParent();
240
- }
241
- this._sidebarActiveGroup = element;
242
- // when there is an active group set, always set new menu items
243
- this._drawerItems = []; // always set to empty to prevent duplicate
244
- const menuItems = this._sidebarActiveGroup.querySelectorAll(":scope > sgds-sidebar-group, :scope > sgds-sidebar-item");
245
- menuItems.forEach(e => {
246
- this._drawerItems.push(e);
247
- });
248
- }
249
- /**
250
- * Reverts nested items back to their original parent element.
251
- * Clears the drawer overlay content and updates selected attributes.
252
- * Called when closing the drawer or switching to a different parent item.
253
- * @private
254
- * @param {SgdsSidebarItem} element - The parent item to return nodes to
255
- * @returns {void}
256
- */
257
- _revertNodesToParent() {
258
- if (this._sidebarActiveGroup) {
259
- this._drawerItems.forEach(e => {
260
- this._sidebarActiveGroup.append(e);
261
- });
262
- this._drawerItems = [];
263
- }
264
- this._sidebarActiveGroup = null;
265
- }
266
- /**
267
- * Attaches event listeners to all direct child sidebar items.
268
- * Handles item selection events and drawer overlay state management.
269
- * Manages emitting sgds-select custom events for external components.
270
- * @private
271
- * @returns {void}
272
- */
273
- addItemListeners() {
274
- const items = this.querySelectorAll("sgds-sidebar-item");
275
- const groups = this.querySelectorAll(SGDS_SIDEBAR_GROUP);
276
- const allItems = [...items, ...groups];
277
- allItems.forEach(item => {
278
- item.addEventListener("i-sgds-click", (e) => {
279
- const element = e.detail.element;
280
- if (element === this._sidebarActiveGroup) {
281
- // just toggle drawer
282
- this._showDrawer = !this._showDrawer;
283
- }
284
- else {
285
- if (this.active !== element.name) {
286
- this.active = element.name;
287
- allItems.forEach(item => (item._selected = false));
288
- }
289
- if (element._childElements.length > 0) {
290
- this._showDrawer = true;
291
- }
292
- else {
293
- this._showDrawer = false;
294
- // when there is anchorLink we will trigger click to redirect and allow user to handle the navigation themselves
295
- const anchorLink = item.querySelector(":scope > a");
296
- if (anchorLink)
297
- anchorLink.click();
298
- }
299
- // Emit sgds-select event when an item is selected
300
- this.emit("sgds-select", { detail: { activeItem: element.name } });
301
- }
302
- });
303
- });
304
- }
305
- /**
306
- * Toggles the sidebar between collapsed and expanded states.
307
- * Updates the collapsed property to show/hide labels and adjust item spacing.
308
- * Called when user clicks the collapse/expand button in the sidebar header.
309
- * @private
310
- * @returns {void}
311
- */
312
- toggleCollapsed() {
313
- this.collapsed = !this.collapsed;
314
- }
315
- render() {
316
- var _a, _b;
317
- return lit.html `
318
- <div
319
- class=${classMap_js.classMap({
320
- sidebar: true,
321
- "sidebar--expanded": !this._sidebarCollapsed,
322
- "sidebar--collapsed": this._sidebarCollapsed
323
- })}
324
- >
325
- <div
326
- class=${classMap_js.classMap({
327
- "sidebar--overlay": true,
328
- show: this._showDrawer
329
- })}
330
- ></div>
331
-
332
- <div class="sidebar-main">
333
- <div class="sidebar-wrapper">
334
- <div class="sidebar-top">
335
- <div class="sidebar-brand-name">
336
- <slot name="top"></slot>
337
- </div>
338
-
339
- <sgds-icon-button
340
- name=${this._sidebarCollapsed ? "sidebar-expand" : "sidebar-collapse"}
341
- variant="ghost"
342
- tone="neutral"
343
- size="sm"
344
- @click=${this.toggleCollapsed}
345
- aria-label=${this._sidebarCollapsed ? "Expand sidebar" : "Collapse sidebar"}
346
- aria-expanded=${!this._sidebarCollapsed}
347
- ></sgds-icon-button>
348
- </div>
349
-
350
- <nav class="sidebar-content" aria-activedescendant=${((_a = this._sidebarActiveItem) === null || _a === void 0 ? void 0 : _a.name) || ""}>
351
- <slot @slotchange=${this._handleSlotChange}></slot>
352
- </nav>
353
-
354
- <slot name="bottom"></slot>
355
- </div>
356
- </div>
357
-
358
- <div
359
- class=${classMap_js.classMap({
360
- "sidebar-nested-overlay": true,
361
- show: this._showDrawer
362
- })}
363
- role="dialog"
364
- aria-label=${((_b = this._sidebarActiveGroup) === null || _b === void 0 ? void 0 : _b.title) ? `Nested items for ${this._sidebarActiveGroup.title}` : ""}
365
- >
366
- <sgds-icon-button
367
- name="chevron-left"
368
- variant="ghost"
369
- tone="neutral"
370
- size="sm"
371
- @click=${() => (this._showDrawer = false)}
372
- aria-label=${"Close drawer"}
373
- aria-expanded=${this._showDrawer}
374
- ></sgds-icon-button>
375
-
376
- ${this._drawerItems}
377
- </div>
378
- </div>
379
- `;
380
- }
381
- }
382
- SgdsSidebar.styles = [...sgdsElement["default"].styles, sidebar["default"]];
383
- SgdsSidebar.dependencies = {
384
- "sgds-icon-button": sgdsIconButton.SgdsIconButton
385
- };
386
- tslib.__decorate([
387
- decorators_js.property({ type: Boolean, reflect: true })
388
- ], SgdsSidebar.prototype, "collapsed", void 0);
389
- tslib.__decorate([
390
- decorators_js.property({ type: String, reflect: true })
391
- ], SgdsSidebar.prototype, "active", void 0);
392
- tslib.__decorate([
393
- context.provide({ context: sidebarContext.SidebarActiveGroup }),
394
- decorators_js.state()
395
- ], SgdsSidebar.prototype, "_sidebarActiveGroup", void 0);
396
- tslib.__decorate([
397
- context.provide({ context: sidebarContext.SidebarCollapsed }),
398
- decorators_js.state()
399
- ], SgdsSidebar.prototype, "_sidebarCollapsed", void 0);
400
- tslib.__decorate([
401
- context.provide({ context: sidebarContext.SidebarActiveItem }),
402
- decorators_js.state()
403
- ], SgdsSidebar.prototype, "_sidebarActiveItem", void 0);
404
- tslib.__decorate([
405
- context.provide({ context: sidebarContext.SidebarDrawerItems }),
406
- decorators_js.state()
407
- ], SgdsSidebar.prototype, "_drawerItems", void 0);
408
- tslib.__decorate([
409
- context.provide({ context: sidebarContext.SidebarDrawerOpen }),
410
- decorators_js.state()
411
- ], SgdsSidebar.prototype, "_showDrawer", void 0);
412
- tslib.__decorate([
413
- decorators_js.queryAssignedElements()
414
- ], SgdsSidebar.prototype, "_defaultNodes", void 0);
415
- tslib.__decorate([
416
- decorators_js.state()
417
- ], SgdsSidebar.prototype, "_isMobile", void 0);
418
- tslib.__decorate([
419
- watch.watch("collapsed")
420
- ], SgdsSidebar.prototype, "_handleCollapsed", null);
421
- tslib.__decorate([
422
- watch.watch("_sidebarActiveItem")
423
- ], SgdsSidebar.prototype, "_handleActiveItem", null);
424
- tslib.__decorate([
425
- watch.watch("active")
426
- ], SgdsSidebar.prototype, "_handleActive", null);
427
-
428
- exports.SgdsSidebar = SgdsSidebar;
429
- exports["default"] = SgdsSidebar;
430
- //# sourceMappingURL=sgds-sidebar.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sgds-sidebar.cjs.js","sources":["../../../../src/components/Sidebar/sgds-sidebar.ts"],"sourcesContent":["import { html, LitElement, PropertyValues } from \"lit\";\nimport { property, queryAssignedElements, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport sidebarStyle from \"./sidebar.css\";\n\nimport { provide } from \"@lit/context\";\nimport {\n SidebarCollapsed,\n SidebarActiveItem,\n SidebarActiveGroup,\n SidebarDrawerItems,\n SidebarDrawerOpen\n} from \"./sidebar-context\";\nimport { watch } from \"../../utils/watch\";\nimport { SidebarElement } from \"./sidebar-element\";\nimport SgdsSidebarGroup from \"./sgds-sidebar-group\";\nimport SgdsIconButton from \"../IconButton/sgds-icon-button\";\nimport { SM_BREAKPOINT } from \"../../utils/breakpoints\";\n\nconst SGDS_SIDEBAR_GROUP = \"sgds-sidebar-group\";\n\n/**\n * @summary Sidebar is a collapsible navigation component that displays menu items and groups.\n * Users can expand and collapse the sidebar to save screen space while navigating through organized menu items.\n * The sidebar coordinates selection and navigation across nested items using context providers and custom events.\n *\n * Features:\n * - Collapsible state for space-saving layouts with icon-only mode\n * - Multi-level nesting (up to 3 levels) with drawer overlay for root-level groups\n * - Keyboard navigation with full ARIA support for accessibility\n * - Programmatic link navigation support with anchor elements\n * - Active item tracking and synchronized state management\n *\n * Keyboard Navigation:\n * - Arrow Up/Down: Navigate between sidebar items and groups\n * - Arrow Left/Right: Collapse/expand groups or navigate drawer overlays\n * - Enter/Space: Activate focused item or toggle group\n * - Tab: Standard focus management to interactive elements\n *\n * @slot default - Insert sgds-sidebar-item, sgds-sidebar-group, and sgds-sidebar-section elements\n * @slot top - Insert brand/logo content in sidebar header\n * @slot bottom - Insert content in sidebar footer\n *\n * @fires sgds-select - Emitted when a sidebar item or group is selected.\n * Event detail: { activeItem: string } - name of the selected item\n *\n */\n\nexport class SgdsSidebar extends SgdsElement {\n static styles = [...SgdsElement.styles, sidebarStyle];\n\n static dependencies = {\n \"sgds-icon-button\": SgdsIconButton\n };\n /**\n * Controls whether the sidebar is collapsed or expanded.\n * When true, the sidebar is in collapsed state showing only icons.\n * When false, the sidebar is expanded displaying full labels and content.\n * Affects all child items by toggling visibility of labels and adjusting spacing.\n * @attribute collapsed\n * @type {boolean}\n * @default false\n */\n @property({ type: Boolean, reflect: true }) collapsed = false;\n\n /**\n * The name of the currently active sidebar item or group.\n * Reflects the selected item and allows external control of sidebar selection.\n * Used to synchronize sidebar state with external navigation state or programmatic selection.\n * When set, the corresponding item with matching `name` attribute will be highlighted as active.\n * @attribute active\n * @type {string}\n * @default \"\"\n */\n @property({ type: String, reflect: true }) active = \"\";\n\n /** @internal Tracks the currently active group and provides it via context to all child elements */\n @provide({ context: SidebarActiveGroup })\n @state()\n _sidebarActiveGroup: SgdsSidebarGroup | null = null;\n\n /** @internal Tracks the collapsed state and provides it via context to all child elements */\n @provide({ context: SidebarCollapsed })\n @state()\n private _sidebarCollapsed: boolean;\n\n /** @internal Tracks the currently active item and provides it via context to all child elements */\n @provide({ context: SidebarActiveItem })\n @state()\n private _sidebarActiveItem: SidebarElement | null = null;\n\n /** @internal Provides the list of items shown in the drawer overlay */\n @provide({ context: SidebarDrawerItems })\n @state()\n private _drawerItems = [];\n\n /** @internal Indicates whether a drawer overlay is currently open */\n @provide({ context: SidebarDrawerOpen })\n @state()\n private _showDrawer = false;\n\n /** @internal */\n @queryAssignedElements()\n private _defaultNodes!: SidebarElement[];\n\n /** @internal */\n @state()\n private _isMobile = false;\n\n /** @internal Bound resize handler for proper event listener removal */\n private _boundHandleResize = this._handleResize.bind(this);\n\n connectedCallback() {\n super.connectedCallback();\n this.setAttribute(\"role\", \"navigation\");\n this.setAttribute(\"aria-label\", \"Main navigation\");\n\n this.updateComplete.then(() => {\n this._handleActive();\n });\n\n window?.addEventListener(\"resize\", this._boundHandleResize);\n this._handleResize();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document?.removeEventListener(\"click\", this._handleClickOutOfElement);\n window?.removeEventListener(\"resize\", this._boundHandleResize);\n }\n\n firstUpdated() {\n document?.addEventListener(\"click\", this._handleClickOutOfElement);\n }\n\n updated() {\n this._handleActive();\n }\n\n private _handleSlotChange = () => {\n this.addItemListeners();\n };\n /**\n * Watch handler for the collapsed property.\n * Syncs the internal collapsed state with the property value.\n * Triggers re-render and updates all child items' collapsed styling.\n * @private\n * @returns {void}\n */\n @watch(\"collapsed\")\n _handleCollapsed() {\n this._sidebarCollapsed = this.collapsed;\n }\n\n /**\n * Handles changes to the active item selection.\n * Updates selection state and manages drawer overlay visibility based on the active item's nesting level.\n * For root-level items with children, opens the drawer overlay.\n * For nested items, expands parent groups and opens the appropriate drawer if needed.\n * @private\n * @returns {void}\n */\n @watch(\"_sidebarActiveItem\")\n _handleActiveItem() {\n if (!this._sidebarActiveItem) return;\n\n const childLevel = this._sidebarActiveItem._childLevel;\n this._sidebarActiveItem._selected = true;\n\n if (childLevel === 1) {\n // First level of navigation, check if need to open drawer or not.\n if (this._sidebarActiveItem._childElements.length > 0) {\n this._setNodesToDrawer(this._sidebarActiveItem as SgdsSidebarGroup);\n } else {\n this._revertNodesToParent();\n }\n } else {\n // when nested, we will find the top level of parent\n let parentEle = this._sidebarActiveItem.parentElement as SgdsSidebarGroup;\n\n while (parentEle._childLevel >= 1 && parentEle.tagName.toLowerCase() === SGDS_SIDEBAR_GROUP) {\n if (parentEle.tagName.toLowerCase() === SGDS_SIDEBAR_GROUP) {\n if (parentEle._childLevel === 1) {\n // when active item not in drawer, set nodes into drawer.\n if (!parentEle.classList.contains(\"sidebar-nested-overlay\")) {\n this._setNodesToDrawer(parentEle);\n }\n }\n\n parentEle._selected = true;\n\n parentEle._showMenu = parentEle._childLevel > 1; // setting this to true as the child is active\n parentEle = parentEle.parentElement as SgdsSidebarGroup;\n }\n }\n\n if (this._sidebarActiveGroup) {\n this._sidebarActiveGroup._selected = true;\n }\n }\n }\n\n /**\n * Watch handler for the active property.\n * Finds and sets the active item by name from the sidebar hierarchy.\n * Clears active state when active property is empty.\n * @private\n * @returns {void}\n */\n @watch(\"active\")\n _handleActive() {\n // Return early if active is empty\n if (!this.active) {\n this._sidebarActiveItem = null;\n return;\n }\n\n this._sidebarActiveItem = this._getActiveChild();\n }\n\n /**\n * Recursively searches the sidebar hierarchy for an item matching the active name.\n * Traverses through all nested levels to find the target element.\n * Used to support programmatic selection of deeply nested items.\n * @private\n * @returns {SidebarElement | null} The matching sidebar element or null if not found\n */\n private _getActiveChild() {\n const findByName = (elements: SidebarElement[]): SidebarElement | null => {\n for (const element of elements) {\n if (element.name === this.active) {\n return element;\n }\n if (element._childElements?.length) {\n const found = findByName(element._childElements);\n if (found) return found;\n }\n }\n return null;\n };\n\n return findByName(this._defaultNodes);\n }\n /**\n * Handles window resize events to manage responsive behavior.\n * Automatically collapses sidebar on mobile devices (width <= SM_BREAKPOINT).\n * Expands sidebar on larger screens.\n * @private\n * @returns {void}\n */ private _handleResize() {\n const isMobile = window.innerWidth <= SM_BREAKPOINT;\n\n if (isMobile !== this._isMobile) {\n this._isMobile = isMobile;\n this.collapsed = this._isMobile;\n }\n }\n\n /**\n * Manages the drawer overlay content based on the selected parent item.\n * If element is provided: Opens drawer for that element's children.\n * If element is undefined: Closes drawer and reverts items to their parent.\n * @private\n * @param {SgdsSidebarGroup} [element] - The parent item to display in drawer. Undefined closes drawer.\n * @returns {void}\n */\n private _setNodesToDrawer(element: SgdsSidebarGroup) {\n if (!element) return;\n\n // when there is element, we will revert the nodes of the previous active group before setting new value into the active group\n if (this._sidebarActiveGroup && element !== this._sidebarActiveGroup) {\n this._revertNodesToParent();\n }\n\n this._sidebarActiveGroup = element;\n\n // when there is an active group set, always set new menu items\n this._drawerItems = []; // always set to empty to prevent duplicate\n const menuItems = this._sidebarActiveGroup.querySelectorAll(\n \":scope > sgds-sidebar-group, :scope > sgds-sidebar-item\"\n );\n menuItems.forEach(e => {\n this._drawerItems.push(e);\n });\n }\n\n /**\n * Reverts nested items back to their original parent element.\n * Clears the drawer overlay content and updates selected attributes.\n * Called when closing the drawer or switching to a different parent item.\n * @private\n * @param {SgdsSidebarItem} element - The parent item to return nodes to\n * @returns {void}\n */\n private _revertNodesToParent() {\n if (this._sidebarActiveGroup) {\n this._drawerItems.forEach(e => {\n this._sidebarActiveGroup.append(e);\n });\n\n this._drawerItems = [];\n }\n\n this._sidebarActiveGroup = null;\n }\n\n /**\n * Attaches event listeners to all direct child sidebar items.\n * Handles item selection events and drawer overlay state management.\n * Manages emitting sgds-select custom events for external components.\n * @private\n * @returns {void}\n */\n private addItemListeners() {\n const items = this.querySelectorAll(\"sgds-sidebar-item\");\n const groups = this.querySelectorAll(SGDS_SIDEBAR_GROUP);\n const allItems = [...items, ...groups] as SidebarElement[];\n\n allItems.forEach(item => {\n item.addEventListener(\"i-sgds-click\", (e: CustomEvent) => {\n const element = e.detail.element as SidebarElement;\n\n if (element === this._sidebarActiveGroup) {\n // just toggle drawer\n this._showDrawer = !this._showDrawer;\n } else {\n if (this.active !== element.name) {\n this.active = element.name;\n allItems.forEach(item => (item._selected = false));\n }\n\n if (element._childElements.length > 0) {\n this._showDrawer = true;\n } else {\n this._showDrawer = false;\n\n // when there is anchorLink we will trigger click to redirect and allow user to handle the navigation themselves\n const anchorLink = item.querySelector(\":scope > a\") as HTMLAnchorElement;\n if (anchorLink) anchorLink.click();\n }\n\n // Emit sgds-select event when an item is selected\n this.emit(\"sgds-select\", { detail: { activeItem: element.name } });\n }\n });\n });\n }\n\n /**\n * Toggles the sidebar between collapsed and expanded states.\n * Updates the collapsed property to show/hide labels and adjust item spacing.\n * Called when user clicks the collapse/expand button in the sidebar header.\n * @private\n * @returns {void}\n */\n private toggleCollapsed() {\n this.collapsed = !this.collapsed;\n }\n\n /**\n * Handles clicks outside the sidebar to close the drawer overlay.\n * Closes the nested items drawer when user clicks outside the sidebar.\n * Maintains drawer visibility when clicking within sidebar boundaries.\n * @private\n * @param {MouseEvent} e - The click event from the document\n * @returns {void}\n */\n private _handleClickOutOfElement = (e: MouseEvent) => {\n if (!this._sidebarActiveGroup) return;\n\n const overlay = e.composedPath().find(e => (e as HTMLElement)?.classList?.contains(\"sidebar--overlay\"));\n if (overlay || !e.composedPath().includes(this)) {\n this._showDrawer = false;\n }\n };\n\n render() {\n return html`\n <div\n class=${classMap({\n sidebar: true,\n \"sidebar--expanded\": !this._sidebarCollapsed,\n \"sidebar--collapsed\": this._sidebarCollapsed\n })}\n >\n <div\n class=${classMap({\n \"sidebar--overlay\": true,\n show: this._showDrawer\n })}\n ></div>\n\n <div class=\"sidebar-main\">\n <div class=\"sidebar-wrapper\">\n <div class=\"sidebar-top\">\n <div class=\"sidebar-brand-name\">\n <slot name=\"top\"></slot>\n </div>\n\n <sgds-icon-button\n name=${this._sidebarCollapsed ? \"sidebar-expand\" : \"sidebar-collapse\"}\n variant=\"ghost\"\n tone=\"neutral\"\n size=\"sm\"\n @click=${this.toggleCollapsed}\n aria-label=${this._sidebarCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n aria-expanded=${!this._sidebarCollapsed}\n ></sgds-icon-button>\n </div>\n\n <nav class=\"sidebar-content\" aria-activedescendant=${this._sidebarActiveItem?.name || \"\"}>\n <slot @slotchange=${this._handleSlotChange}></slot>\n </nav>\n\n <slot name=\"bottom\"></slot>\n </div>\n </div>\n\n <div\n class=${classMap({\n \"sidebar-nested-overlay\": true,\n show: this._showDrawer\n })}\n role=\"dialog\"\n aria-label=${this._sidebarActiveGroup?.title ? `Nested items for ${this._sidebarActiveGroup.title}` : \"\"}\n >\n <sgds-icon-button\n name=\"chevron-left\"\n variant=\"ghost\"\n tone=\"neutral\"\n size=\"sm\"\n @click=${() => (this._showDrawer = false)}\n aria-label=${\"Close drawer\"}\n aria-expanded=${this._showDrawer}\n ></sgds-icon-button>\n\n ${this._drawerItems}\n </div>\n </div>\n `;\n }\n}\n\nexport default SgdsSidebar;\n"],"names":["SgdsElement","SM_BREAKPOINT","html","classMap","sidebarStyle","SgdsIconButton","__decorate","property","provide","SidebarActiveGroup","state","SidebarCollapsed","SidebarActiveItem","SidebarDrawerItems","SidebarDrawerOpen","queryAssignedElements","watch"],"mappings":"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"}