@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,112 +0,0 @@
1
- import { PropertyValueMap } from "lit";
2
- import SgdsElement from "../../base/sgds-element";
3
- /**
4
- * @summary Base class for sidebar navigation components.
5
- * Provides core functionality for sidebar items and groups including keyboard navigation,
6
- * selection state management, and nesting support. This class manages hierarchical navigation,
7
- * active state tracking, and drawer overlay coordination through context providers.
8
- *
9
- * Features:
10
- * - Multi-level keyboard navigation (Arrow keys, Enter)
11
- * - Active state management via Lit context subscription
12
- * - Support for nested hierarchies up to 3 levels deep
13
- * - Focus management and full ARIA attribute support
14
- * - Event emission for sidebar coordination (i-sgds-click)
15
- * - Automatic child element tracking and nesting level detection
16
- *
17
- * Keyboard Navigation:
18
- * - Arrow Up/Down: Navigate between siblings in the same level
19
- * - Arrow Left/Right: Navigate hierarchically (collapse/expand or move in drawer)
20
- * - Enter: Activate focused item or toggle group
21
- *
22
- * Context Management:
23
- * - Consumes: SidebarCollapsed, SidebarActiveItem, SidebarActiveGroup, SidebarDrawerItems
24
- * - Updates state based on context changes for responsive UI updates
25
- *
26
- * @internal
27
- */
28
- export declare class SidebarElement extends SgdsElement {
29
- static styles: import("lit").CSSResult[];
30
- /**
31
- * The display title/label for the sidebar element.
32
- * Shown in the UI and used for accessibility labels (aria-label).
33
- * @attribute title
34
- * @type {string}
35
- * @default ""
36
- */
37
- title: string;
38
- /**
39
- * The unique name identifier for the sidebar element.
40
- * Used to identify selections in sgds-select events and manage active states.
41
- * Should be unique among siblings in the same navigation level.
42
- * @attribute name
43
- * @type {string}
44
- * @default ""
45
- */
46
- name: string;
47
- /** @internal */
48
- _sidebarCollapsed: boolean;
49
- /** @internal */
50
- _sidebarActiveItem: SidebarElement | null;
51
- /** @internal */
52
- _sidebarActiveGroup: SidebarElement | null;
53
- /** @internal */
54
- _drawerItems: SidebarElement[] | null;
55
- /** @internal Tracks whether a drawer overlay is currently open */
56
- _showDrawer: boolean;
57
- /** @internal */
58
- _childLevel: number;
59
- /**
60
- * Indicates whether this element is currently selected/active.
61
- * @internal
62
- */
63
- _selected: boolean;
64
- /**
65
- * Indicates whether this element should be hidden based on nesting context.
66
- * @internal
67
- */
68
- _hidden: boolean;
69
- /**
70
- * List of child elements assigned to this component.
71
- * @internal
72
- */
73
- _childElements: SidebarElement[];
74
- /** @internal */
75
- _childActive: boolean;
76
- /** @internal */
77
- private _defaultNodes;
78
- connectedCallback(): void;
79
- disconnectedCallback(): void;
80
- firstUpdated(changedProperties: PropertyValueMap<this>): void;
81
- updated(): void;
82
- /**
83
- * Handles slot change events and updates child elements list.
84
- * @internal
85
- * @returns {void}
86
- */
87
- _handleSlotChange(): void;
88
- /**
89
- * Handles click/activation events on the sidebar element.
90
- * Emits internal click event for parent sidebar to handle selection.
91
- * @internal
92
- * @param {SidebarElement} [element] - Optional element parameter (for keyboard compatibility)
93
- * @returns {void}
94
- */
95
- protected _handleClick(): void;
96
- /**
97
- * Handles keyboard navigation events for sidebar elements.
98
- * Supports Arrow Up/Down for navigation and Arrow Left/Right for drawer management.
99
- * @internal
100
- * @param {KeyboardEvent} event - The keyboard event object
101
- * @returns {void}
102
- */
103
- private _handleKeyDown;
104
- /**
105
- * Calculates the nesting level by counting parent sgds-sidebar-group ancestors.
106
- * Level 1 = top-level element, Level 2+ = nested within another group.
107
- * Updates the _childLevel state property.
108
- * @internal
109
- * @returns {void}
110
- */
111
- private getChildLevel;
112
- }
@@ -1,280 +0,0 @@
1
- import { __decorate } from 'tslib';
2
- import { property, state, queryAssignedElements } from 'lit/decorators.js';
3
- import { DropdownElement } from '../../base/dropdown-element.js';
4
- import SgdsElement from '../../base/sgds-element.js';
5
- import { consume } from '@lit/context';
6
- import { SidebarCollapsed, SidebarActiveItem, SidebarActiveGroup, SidebarDrawerItems, SidebarDrawerOpen } from './sidebar-context.js';
7
-
8
- const ARROW_DOWN = "ArrowDown";
9
- const ARROW_UP = "ArrowUp";
10
- const ARROW_LEFT = "ArrowLeft";
11
- const ARROW_RIGHT = "ArrowRight";
12
- const ENTER = "Enter";
13
- /**
14
- * @summary Base class for sidebar navigation components.
15
- * Provides core functionality for sidebar items and groups including keyboard navigation,
16
- * selection state management, and nesting support. This class manages hierarchical navigation,
17
- * active state tracking, and drawer overlay coordination through context providers.
18
- *
19
- * Features:
20
- * - Multi-level keyboard navigation (Arrow keys, Enter)
21
- * - Active state management via Lit context subscription
22
- * - Support for nested hierarchies up to 3 levels deep
23
- * - Focus management and full ARIA attribute support
24
- * - Event emission for sidebar coordination (i-sgds-click)
25
- * - Automatic child element tracking and nesting level detection
26
- *
27
- * Keyboard Navigation:
28
- * - Arrow Up/Down: Navigate between siblings in the same level
29
- * - Arrow Left/Right: Navigate hierarchically (collapse/expand or move in drawer)
30
- * - Enter: Activate focused item or toggle group
31
- *
32
- * Context Management:
33
- * - Consumes: SidebarCollapsed, SidebarActiveItem, SidebarActiveGroup, SidebarDrawerItems
34
- * - Updates state based on context changes for responsive UI updates
35
- *
36
- * @internal
37
- */
38
- class SidebarElement extends SgdsElement {
39
- constructor() {
40
- super(...arguments);
41
- /**
42
- * The display title/label for the sidebar element.
43
- * Shown in the UI and used for accessibility labels (aria-label).
44
- * @attribute title
45
- * @type {string}
46
- * @default ""
47
- */
48
- this.title = "";
49
- /**
50
- * The unique name identifier for the sidebar element.
51
- * Used to identify selections in sgds-select events and manage active states.
52
- * Should be unique among siblings in the same navigation level.
53
- * @attribute name
54
- * @type {string}
55
- * @default ""
56
- */
57
- this.name = "";
58
- /** @internal */
59
- this._sidebarCollapsed = false;
60
- /** @internal */
61
- this._sidebarActiveItem = null;
62
- /** @internal */
63
- this._sidebarActiveGroup = null;
64
- /** @internal */
65
- this._drawerItems = null;
66
- /** @internal Tracks whether a drawer overlay is currently open */
67
- this._showDrawer = false;
68
- /** @internal */
69
- this._childLevel = 1;
70
- /**
71
- * Indicates whether this element is currently selected/active.
72
- * @internal
73
- */
74
- this._selected = false;
75
- /**
76
- * Indicates whether this element should be hidden based on nesting context.
77
- * @internal
78
- */
79
- this._hidden = false;
80
- /**
81
- * List of child elements assigned to this component.
82
- * @internal
83
- */
84
- this._childElements = [];
85
- /** @internal */
86
- this._childActive = false;
87
- }
88
- connectedCallback() {
89
- super.connectedCallback();
90
- this.getChildLevel();
91
- this.setAttribute("role", "navigation");
92
- this.addEventListener("keydown", this._handleKeyDown);
93
- }
94
- disconnectedCallback() {
95
- super.disconnectedCallback();
96
- this.removeEventListener("keydown", this._handleKeyDown);
97
- }
98
- firstUpdated(changedProperties) {
99
- super.firstUpdated(changedProperties);
100
- this.getChildLevel();
101
- }
102
- updated() {
103
- if (this._childLevel === 2) {
104
- this._hidden = !this.closest(".sidebar-nested-overlay");
105
- }
106
- }
107
- /**
108
- * Handles slot change events and updates child elements list.
109
- * @internal
110
- * @returns {void}
111
- */
112
- _handleSlotChange() {
113
- this._childElements = this._defaultNodes;
114
- }
115
- /**
116
- * Handles click/activation events on the sidebar element.
117
- * Emits internal click event for parent sidebar to handle selection.
118
- * @internal
119
- * @param {SidebarElement} [element] - Optional element parameter (for keyboard compatibility)
120
- * @returns {void}
121
- */
122
- _handleClick() {
123
- this.emit("i-sgds-click", { detail: { element: this, level: this._childLevel } });
124
- }
125
- /**
126
- * Handles keyboard navigation events for sidebar elements.
127
- * Supports Arrow Up/Down for navigation and Arrow Left/Right for drawer management.
128
- * @internal
129
- * @param {KeyboardEvent} event - The keyboard event object
130
- * @returns {void}
131
- */
132
- _handleKeyDown(event) {
133
- var _a, _b, _c;
134
- const target = event.target;
135
- switch (event.key) {
136
- case ENTER: {
137
- event.preventDefault();
138
- event.stopPropagation();
139
- if (event.target === this)
140
- this._handleClick();
141
- return;
142
- }
143
- case ARROW_DOWN: {
144
- event.preventDefault();
145
- event.stopPropagation();
146
- const child = target._childElements[0];
147
- const isChildHidden = child === null || child === void 0 ? void 0 : child._hidden;
148
- const childElement = !isChildHidden ? child : null;
149
- const nextElement = childElement || target.nextElementSibling || target.parentElement.nextElementSibling;
150
- if (nextElement === null || nextElement === void 0 ? void 0 : nextElement.shadowRoot) {
151
- const focusTarget = nextElement.shadowRoot.querySelector("[tabindex]");
152
- focusTarget === null || focusTarget === void 0 ? void 0 : focusTarget.focus();
153
- }
154
- return;
155
- }
156
- case ARROW_UP: {
157
- event.preventDefault();
158
- event.stopPropagation();
159
- const prevSiblingChildren = (_a = target.previousElementSibling) === null || _a === void 0 ? void 0 : _a._childElements;
160
- const lastChild = prevSiblingChildren ? prevSiblingChildren[(prevSiblingChildren === null || prevSiblingChildren === void 0 ? void 0 : prevSiblingChildren.length) - 1] : null;
161
- const isChildHidden = lastChild === null || lastChild === void 0 ? void 0 : lastChild._hidden;
162
- const childElement = !isChildHidden ? lastChild : null;
163
- const prevElement = childElement || target.previousElementSibling || target.parentElement;
164
- if (prevElement === null || prevElement === void 0 ? void 0 : prevElement.shadowRoot) {
165
- const focusTarget = prevElement.shadowRoot.querySelector("[tabindex]");
166
- focusTarget === null || focusTarget === void 0 ? void 0 : focusTarget.focus();
167
- }
168
- return;
169
- }
170
- case ARROW_LEFT: {
171
- event.preventDefault();
172
- event.stopPropagation();
173
- if (this._sidebarActiveGroup === this) {
174
- // when drawer is open, close it
175
- if (this._showDrawer)
176
- this._handleClick();
177
- }
178
- else {
179
- // check if we are on the drawer, if so move back to parent
180
- const childLevel = target._childLevel;
181
- if (childLevel >= 2 && ((_b = this._sidebarActiveGroup) === null || _b === void 0 ? void 0 : _b.shadowRoot)) {
182
- const focusTarget = this._sidebarActiveGroup.shadowRoot.querySelector("[tabindex]");
183
- focusTarget === null || focusTarget === void 0 ? void 0 : focusTarget.focus();
184
- }
185
- }
186
- return;
187
- }
188
- case ARROW_RIGHT: {
189
- event.preventDefault();
190
- event.stopPropagation();
191
- if (this._sidebarActiveGroup === this) {
192
- if ((_c = this._drawerItems) === null || _c === void 0 ? void 0 : _c.length) {
193
- if (this._showDrawer) {
194
- const drawerItem = this._drawerItems[0];
195
- if (drawerItem === null || drawerItem === void 0 ? void 0 : drawerItem.shadowRoot) {
196
- const focusTarget = drawerItem.shadowRoot.querySelector("[tabindex]");
197
- focusTarget === null || focusTarget === void 0 ? void 0 : focusTarget.focus();
198
- }
199
- }
200
- else {
201
- this._handleClick();
202
- }
203
- }
204
- }
205
- else {
206
- if (this._childLevel === 1 && this._childElements.length > 0) {
207
- // when there is nested, we trigger click to show drawer
208
- this._handleClick();
209
- }
210
- }
211
- return;
212
- }
213
- }
214
- }
215
- /**
216
- * Calculates the nesting level by counting parent sgds-sidebar-group ancestors.
217
- * Level 1 = top-level element, Level 2+ = nested within another group.
218
- * Updates the _childLevel state property.
219
- * @internal
220
- * @returns {void}
221
- */
222
- getChildLevel() {
223
- let currentEle = this.parentElement;
224
- let level = 1;
225
- while (currentEle.tagName.toLowerCase() === "sgds-sidebar-group") {
226
- level += 1;
227
- currentEle = currentEle.parentElement;
228
- }
229
- const isInDrawer = currentEle.classList.contains("sidebar-nested-overlay");
230
- this._childLevel = isInDrawer ? level + 1 : level;
231
- }
232
- }
233
- SidebarElement.styles = DropdownElement.styles;
234
- __decorate([
235
- property({ type: String, reflect: true })
236
- ], SidebarElement.prototype, "title", void 0);
237
- __decorate([
238
- property({ type: String, reflect: true })
239
- ], SidebarElement.prototype, "name", void 0);
240
- __decorate([
241
- consume({ context: SidebarCollapsed, subscribe: true }),
242
- state()
243
- ], SidebarElement.prototype, "_sidebarCollapsed", void 0);
244
- __decorate([
245
- consume({ context: SidebarActiveItem, subscribe: true }),
246
- state()
247
- ], SidebarElement.prototype, "_sidebarActiveItem", void 0);
248
- __decorate([
249
- consume({ context: SidebarActiveGroup, subscribe: true }),
250
- state()
251
- ], SidebarElement.prototype, "_sidebarActiveGroup", void 0);
252
- __decorate([
253
- consume({ context: SidebarDrawerItems, subscribe: true }),
254
- state()
255
- ], SidebarElement.prototype, "_drawerItems", void 0);
256
- __decorate([
257
- consume({ context: SidebarDrawerOpen, subscribe: true }),
258
- state()
259
- ], SidebarElement.prototype, "_showDrawer", void 0);
260
- __decorate([
261
- state()
262
- ], SidebarElement.prototype, "_childLevel", void 0);
263
- __decorate([
264
- state()
265
- ], SidebarElement.prototype, "_selected", void 0);
266
- __decorate([
267
- state()
268
- ], SidebarElement.prototype, "_hidden", void 0);
269
- __decorate([
270
- state()
271
- ], SidebarElement.prototype, "_childElements", void 0);
272
- __decorate([
273
- state()
274
- ], SidebarElement.prototype, "_childActive", void 0);
275
- __decorate([
276
- queryAssignedElements({ flatten: true })
277
- ], SidebarElement.prototype, "_defaultNodes", void 0);
278
-
279
- export { SidebarElement };
280
- //# sourceMappingURL=sidebar-element.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar-element.js","sources":["../../../src/components/Sidebar/sidebar-element.ts"],"sourcesContent":["import { property, queryAssignedElements, state } from \"lit/decorators.js\";\nimport { DropdownElement } from \"../../base/dropdown-element\";\nimport { PropertyValueMap } from \"lit\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport { consume } from \"@lit/context\";\nimport {\n SidebarActiveGroup,\n SidebarActiveItem,\n SidebarCollapsed,\n SidebarDrawerItems,\n SidebarDrawerOpen\n} from \"./sidebar-context\";\n\nconst ARROW_DOWN = \"ArrowDown\";\nconst ARROW_UP = \"ArrowUp\";\nconst ARROW_LEFT = \"ArrowLeft\";\nconst ARROW_RIGHT = \"ArrowRight\";\nconst ENTER = \"Enter\";\n\n/**\n * @summary Base class for sidebar navigation components.\n * Provides core functionality for sidebar items and groups including keyboard navigation,\n * selection state management, and nesting support. This class manages hierarchical navigation,\n * active state tracking, and drawer overlay coordination through context providers.\n *\n * Features:\n * - Multi-level keyboard navigation (Arrow keys, Enter)\n * - Active state management via Lit context subscription\n * - Support for nested hierarchies up to 3 levels deep\n * - Focus management and full ARIA attribute support\n * - Event emission for sidebar coordination (i-sgds-click)\n * - Automatic child element tracking and nesting level detection\n *\n * Keyboard Navigation:\n * - Arrow Up/Down: Navigate between siblings in the same level\n * - Arrow Left/Right: Navigate hierarchically (collapse/expand or move in drawer)\n * - Enter: Activate focused item or toggle group\n *\n * Context Management:\n * - Consumes: SidebarCollapsed, SidebarActiveItem, SidebarActiveGroup, SidebarDrawerItems\n * - Updates state based on context changes for responsive UI updates\n *\n * @internal\n */\nexport class SidebarElement extends SgdsElement {\n static styles = DropdownElement.styles;\n\n /**\n * The display title/label for the sidebar element.\n * Shown in the UI and used for accessibility labels (aria-label).\n * @attribute title\n * @type {string}\n * @default \"\"\n */\n @property({ type: String, reflect: true }) title = \"\";\n\n /**\n * The unique name identifier for the sidebar element.\n * Used to identify selections in sgds-select events and manage active states.\n * Should be unique among siblings in the same navigation level.\n * @attribute name\n * @type {string}\n * @default \"\"\n */\n @property({ type: String, reflect: true }) name = \"\";\n\n /** @internal */\n @consume({ context: SidebarCollapsed, subscribe: true })\n @state()\n _sidebarCollapsed = false;\n\n /** @internal */\n @consume({ context: SidebarActiveItem, subscribe: true })\n @state()\n _sidebarActiveItem: SidebarElement | null = null;\n\n /** @internal */\n @consume({ context: SidebarActiveGroup, subscribe: true })\n @state()\n _sidebarActiveGroup: SidebarElement | null = null;\n\n /** @internal */\n @consume({ context: SidebarDrawerItems, subscribe: true })\n @state()\n _drawerItems: SidebarElement[] | null = null;\n\n /** @internal Tracks whether a drawer overlay is currently open */\n @consume({ context: SidebarDrawerOpen, subscribe: true })\n @state()\n _showDrawer = false;\n\n /** @internal */\n @state() _childLevel = 1;\n\n /**\n * Indicates whether this element is currently selected/active.\n * @internal\n */\n @state() _selected = false;\n\n /**\n * Indicates whether this element should be hidden based on nesting context.\n * @internal\n */\n @state() _hidden = false;\n\n /**\n * List of child elements assigned to this component.\n * @internal\n */\n @state()\n _childElements: SidebarElement[] = [];\n\n /** @internal */\n @state() _childActive = false;\n\n /** @internal */\n @queryAssignedElements({ flatten: true })\n private _defaultNodes!: SidebarElement[];\n\n connectedCallback() {\n super.connectedCallback();\n this.getChildLevel();\n this.setAttribute(\"role\", \"navigation\");\n this.addEventListener(\"keydown\", this._handleKeyDown);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"keydown\", this._handleKeyDown);\n }\n\n firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n this.getChildLevel();\n }\n\n updated() {\n if (this._childLevel === 2) {\n this._hidden = !this.closest(\".sidebar-nested-overlay\");\n }\n }\n\n /**\n * Handles slot change events and updates child elements list.\n * @internal\n * @returns {void}\n */\n _handleSlotChange() {\n this._childElements = this._defaultNodes;\n }\n\n /**\n * Handles click/activation events on the sidebar element.\n * Emits internal click event for parent sidebar to handle selection.\n * @internal\n * @param {SidebarElement} [element] - Optional element parameter (for keyboard compatibility)\n * @returns {void}\n */\n protected _handleClick() {\n this.emit(\"i-sgds-click\", { detail: { element: this, level: this._childLevel } });\n }\n\n /**\n * Handles keyboard navigation events for sidebar elements.\n * Supports Arrow Up/Down for navigation and Arrow Left/Right for drawer management.\n * @internal\n * @param {KeyboardEvent} event - The keyboard event object\n * @returns {void}\n */\n private _handleKeyDown(event: KeyboardEvent) {\n const target = event.target as HTMLElement;\n\n switch (event.key) {\n case ENTER: {\n event.preventDefault();\n event.stopPropagation();\n if (event.target === this) this._handleClick();\n return;\n }\n case ARROW_DOWN: {\n event.preventDefault();\n event.stopPropagation();\n\n const child = (target as SidebarElement)._childElements[0];\n\n const isChildHidden = child?._hidden;\n const childElement = !isChildHidden ? child : null;\n const nextElement = childElement || target.nextElementSibling || target.parentElement.nextElementSibling;\n\n if (nextElement?.shadowRoot) {\n const focusTarget = nextElement.shadowRoot.querySelector(\"[tabindex]\") as HTMLElement | null;\n focusTarget?.focus();\n }\n\n return;\n }\n case ARROW_UP: {\n event.preventDefault();\n event.stopPropagation();\n\n const prevSiblingChildren = (target.previousElementSibling as SidebarElement)?._childElements;\n const lastChild = prevSiblingChildren ? prevSiblingChildren[prevSiblingChildren?.length - 1] : null;\n const isChildHidden = lastChild?._hidden;\n\n const childElement = !isChildHidden ? lastChild : null;\n const prevElement = childElement || target.previousElementSibling || target.parentElement;\n\n if (prevElement?.shadowRoot) {\n const focusTarget = prevElement.shadowRoot.querySelector(\"[tabindex]\") as HTMLElement | null;\n focusTarget?.focus();\n }\n return;\n }\n case ARROW_LEFT: {\n event.preventDefault();\n event.stopPropagation();\n\n if (this._sidebarActiveGroup === this) {\n // when drawer is open, close it\n if (this._showDrawer) this._handleClick();\n } else {\n // check if we are on the drawer, if so move back to parent\n const childLevel = (target as SidebarElement)._childLevel;\n if (childLevel >= 2 && this._sidebarActiveGroup?.shadowRoot) {\n const focusTarget = this._sidebarActiveGroup.shadowRoot.querySelector(\"[tabindex]\") as HTMLElement | null;\n focusTarget?.focus();\n }\n }\n\n return;\n }\n case ARROW_RIGHT: {\n event.preventDefault();\n event.stopPropagation();\n\n if (this._sidebarActiveGroup === this) {\n if (this._drawerItems?.length) {\n if (this._showDrawer) {\n const drawerItem = this._drawerItems[0];\n if (drawerItem?.shadowRoot) {\n const focusTarget = drawerItem.shadowRoot.querySelector(\"[tabindex]\") as HTMLElement | null;\n focusTarget?.focus();\n }\n } else {\n this._handleClick();\n }\n }\n } else {\n if (this._childLevel === 1 && this._childElements.length > 0) {\n // when there is nested, we trigger click to show drawer\n this._handleClick();\n }\n }\n\n return;\n }\n }\n }\n\n /**\n * Calculates the nesting level by counting parent sgds-sidebar-group ancestors.\n * Level 1 = top-level element, Level 2+ = nested within another group.\n * Updates the _childLevel state property.\n * @internal\n * @returns {void}\n */\n private getChildLevel() {\n let currentEle = this.parentElement;\n let level = 1;\n\n while (currentEle.tagName.toLowerCase() === \"sgds-sidebar-group\") {\n level += 1;\n currentEle = currentEle.parentElement;\n }\n\n const isInDrawer = currentEle.classList.contains(\"sidebar-nested-overlay\");\n this._childLevel = isInDrawer ? level + 1 : level;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { css } from 'lit';
2
-
3
- var css_248z = css`.sidebar-item{border-radius:var(--sgds-border-radius-md);cursor:pointer;padding:var(--sgds-padding-xs);transition:background-color .15s ease-in-out,color .15s ease-in-out}.sidebar-item.active,.sidebar-item:hover{background-color:var(--sgds-bg-translucent-subtle)}.sidebar-item:focus,.sidebar-item:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.sidebar-item-label-wrapper,.sidebar-item-label-wrapper>div{align-items:center;display:flex;gap:var(--sgds-gap-xs)}.sidebar-item-label-wrapper{justify-content:space-between}.sidebar-item-label{-webkit-line-clamp:2;-webkit-box-orient:vertical;line-clamp:2;display:-webkit-box;font-size:var(--sgds-font-size-1);line-height:var(--sgds-line-height-20);max-height:calc(var(--sgds-line-height-20, 20px)*2);overflow:hidden}.sidebar-item-label.offset{margin-left:var(--sgds-margin-2-xl)}.sidebar-item-label-wrapper .sidebar-item.active{background-color:var(--sgds-surface-raised);color:var(--sgds-primary-color-default)}.sidebar-item-label-wrapper .sidebar-item-trailingIcon{align-items:center;display:flex;gap:var(--sgds-gap-2-xs)}.sidebar-item--collapsed .sidebar-item-label,.sidebar-item--collapsed .sidebar-item-trailingIcon{display:none}.sidebar-item--collapsed .sidebar-item-label-wrapper{justify-content:center}.sidebar-submenu{overflow:hidden}.sidebar-submenu>div{margin-top:-100%;opacity:0;pointer-events:none;transition:all var(--sgds-motion-duration-standard) var(--sgds-motion-easing-standard)}.sidebar-submenu.show>div{margin-top:0;opacity:1;pointer-events:auto}.sidebar-submenu--collapsed{display:none}`;
4
-
5
- export { css_248z as default };
6
- //# sourceMappingURL=sidebar-item.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar-item.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,6 +0,0 @@
1
- import { css } from 'lit';
2
-
3
- var css_248z = css`.sidebar-section{display:flex;flex-direction:column}.sidebar-section-label{align-items:center;border-radius:var(--sgds-border-radius-md);color:var(--sgds-label-color-subtle);cursor:pointer;display:flex;font-size:var(--sgds-font-size-0);gap:var(--sgds-gap-2-xs);line-height:var(--sgds-line-height-20);padding:var(--sgds-padding-xs) var(--sgds-padding-sm)}.sidebar-section-label:hover{color:var(--sgds-label-color-default)}.sidebar-section-label:focus,.sidebar-section-label:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.sidebar-section--collapsed .sidebar-section-label{height:0;margin:0;opacity:0;overflow:hidden;padding:0;pointer-events:none;width:0}.sidebar-section-content{overflow:hidden;padding:0 var(--sgds-padding-xs)}.sidebar-section-content>div{margin-top:0;pointer-events:auto;transition:all var(--sgds-motion-duration-slow) var(--sgds-motion-easing-standard)}.sidebar-section-content.sidebar-section-content--collapsed>div{margin-top:-100%;pointer-events:none}.sidebar-section--collapsed .sidebar-section-content--collapsed>div{margin-top:0}.sidebar-section-seperator{margin-bottom:var(--sgds-margin-md)}`;
4
-
5
- export { css_248z as default };
6
- //# sourceMappingURL=sidebar-section.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar-section.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,6 +0,0 @@
1
- import { css } from 'lit';
2
-
3
- var css_248z = css`.sidebar{display:flex;flex-direction:column;height:100%;position:relative;transition:width var(--sgds-motion-duration-standard) var(--sgds-motion-easing-standard);z-index:1100}.sidebar--expanded{width:var(--sgds-dimension-288)}.sidebar--collapsed{width:var(--sgds-dimension-72)}.sidebar-top{align-items:center;display:flex;gap:var(--sgds-gap-md);justify-content:space-between;padding:0 var(--sgds-padding-xs)}.sidebar--collapsed .sidebar-brand-name{display:none}.sidebar--collapsed .sidebar-top{justify-content:center}.sidebar-main{background-color:var(--sgds-bg-default);border-right:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);height:100%;overflow-x:hidden;overflow-y:auto;padding:var(--sgds-padding-lg) 0;position:relative;z-index:1}.sidebar-wrapper{display:flex;flex-direction:column;height:100%;justify-content:space-between}.sidebar-content{display:flex;flex:1;flex-direction:column;gap:var(--sgds-gap-md);overflow-y:auto}.sidebar-nested-overlay{background-color:var(--sgds-surface-raised);overflow-y:scroll;padding:var(--sgds-padding-md) var(--sgds-padding-xs);transition:all var(--sgds-motion-duration-standard) var(--sgds-motion-easing-standard);transition-property:opacity left;width:var(--sgds-dimension-288);z-index:0}.sidebar--overlay,.sidebar-nested-overlay{bottom:0;left:0;opacity:0;pointer-events:none;position:absolute;top:0}.sidebar--overlay{background-color:var(--sgds-bg-overlay);content:"";transition:all var(--sgds-motion-duration-standard) var(--sgds-motion-easing-standard);width:100dvw}.sidebar--overlay.show{opacity:1;pointer-events:unset}.sidebar-nested-overlay.show{border-right:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);left:var(--sgds-dimension-288);opacity:1;pointer-events:auto}.sidebar--collapsed .sidebar-nested-overlay.show{left:var(--sgds-dimension-72)}.sidebar-nested-overlay sgds-icon-button{display:none}.sidebar::-webkit-scrollbar{width:var(--sgds-dimension-2)}.sidebar::-webkit-scrollbar-track{background:transparent}.sidebar::-webkit-scrollbar-thumb{background:var(--sgds-border-color-muted);border-radius:var(--sgds-border-radius-xs)}.sidebar::-webkit-scrollbar-thumb:hover{background:var(--sgds-color-subtle)}@media screen and (max-width:767px){.sidebar-nested-overlay sgds-icon-button{display:block}.sidebar--expanded,.sidebar-nested-overlay{width:var(--sgds-dimension-256)}.sidebar-nested-overlay,.sidebar-nested-overlay.show{left:var(--sgds-dimension-256)}}@media screen and (max-width:511px){.sidebar--overlay{display:none}.sidebar--expanded{position:absolute;width:100dvw}.sidebar-nested-overlay{left:-100dvw;width:100dvw;z-index:2}.sidebar--collapsed .sidebar-nested-overlay.show,.sidebar-nested-overlay.show{left:0}}`;
4
-
5
- export { css_248z as default };
6
- //# sourceMappingURL=sidebar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,129 +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 sidebarItem = require('./sidebar-item.cjs.js');
12
- var sgdsIcon = require('../Icon/sgds-icon.cjs.js');
13
- var sidebarElement = require('./sidebar-element.cjs.js');
14
-
15
- /**
16
- * @summary Sidebar group represents a navigable parent item within the sidebar that can have nested children.
17
- * Groups support multiple levels of nesting and show nested items in a drawer overlay or submenu.
18
- * Groups can be used to organize related sidebar items into expanding/collapsing sections.
19
- *
20
- * Behavior varies by nesting level:
21
- * - Level 1 (root): Clicking opens drawer overlay showing all nested children. Keyboard: ArrowRight opens drawer.
22
- * - Level 2+ (nested): Clicking toggles submenu visibility. Keyboard: ArrowRight toggles submenu.
23
- *
24
- * @slot default - Insert sgds-sidebar-group or sgds-sidebar-item elements as nested children
25
- * @slot trailingIcon - Icon to display after the label text. A chevron is auto-appended.
26
- *
27
- */
28
- class SgdsSidebarGroup extends sidebarElement.SidebarElement {
29
- constructor() {
30
- super(...arguments);
31
- /**
32
- * Manages submenu visibility state for nested groups.
33
- * When true, the submenu is displayed showing nested children.
34
- * When false, the submenu is hidden.
35
- * Only used for nested groups (level 2+). Root-level groups use drawer overlay instead.
36
- * @internal
37
- */
38
- this._showMenu = false;
39
- }
40
- /**
41
- * Reports the visibility state of the submenu for nested groups.
42
- * Returns true when the submenu is displayed showing child items, false when hidden.
43
- * Only applicable for nested groups (level 2+). Root-level groups use drawer overlay instead.
44
- * @readonly
45
- * @type {boolean}
46
- */
47
- get showMenu() {
48
- return this._showMenu;
49
- }
50
- /** @internal */
51
- _handleClick() {
52
- if (this._childLevel !== 1) {
53
- this._showMenu = !this._showMenu;
54
- this._childElements.forEach(v => {
55
- v._hidden = !this._showMenu;
56
- });
57
- }
58
- else {
59
- super._handleClick();
60
- }
61
- }
62
- /**
63
- * Determines the appropriate chevron icon based on nesting level and menu visibility.
64
- * Icon changes provide visual feedback on expandable/collapsible state:
65
- * - Level 1: chevron-right (closed drawer) or chevron-right (no change - drawer controlled by parent)
66
- * - Level 2+: chevron-down (submenu open) or chevron-up (submenu closed)
67
- * @private
68
- * @returns {string} The icon name to display (e.g., 'chevron-right', 'chevron-down')
69
- */
70
- _getIcon() {
71
- if (this._childLevel === 1) {
72
- return "chevron-right";
73
- }
74
- else {
75
- return this._showMenu ? "chevron-down" : "chevron-up";
76
- }
77
- }
78
- render() {
79
- return lit.html `
80
- <div
81
- class=${classMap_js.classMap({
82
- "sidebar-item": true,
83
- "sidebar-item--collapsed": this._sidebarCollapsed && this._childLevel === 1,
84
- active: this._selected
85
- })}
86
- @click=${() => this._handleClick()}
87
- aria-level=${this._childLevel}
88
- .aria-expanded=${this._showMenu}
89
- tabindex=${this._childLevel > 2 && !this._showMenu ? -1 : 0}
90
- >
91
- <div class="sidebar-item-label-wrapper">
92
- <div>
93
- <slot name="leadingIcon"></slot>
94
- <span class="sidebar-item-label">${this.title}</span>
95
- </div>
96
-
97
- <span class="sidebar-item-trailingIcon">
98
- <slot name="trailingIcon"></slot>
99
- <sgds-icon aria-label=${this.title || this.name} name=${this._getIcon()} size="sm"></sgds-icon>
100
- </span>
101
- </div>
102
- </div>
103
-
104
- <div
105
- class=${classMap_js.classMap({
106
- "sidebar-submenu": true,
107
- "sidebar-submenu--collapsed": this._sidebarCollapsed && this._childLevel == 1,
108
- show: this._showMenu
109
- })}
110
- >
111
- <div>
112
- <slot @slotchange=${this._handleSlotChange}></slot>
113
- </div>
114
- </div>
115
- `;
116
- }
117
- }
118
- SgdsSidebarGroup.styles = [...sgdsElement["default"].styles, sidebarItem["default"]];
119
- /** @internal */
120
- SgdsSidebarGroup.dependencies = {
121
- "sgds-icon": sgdsIcon.SgdsIcon
122
- };
123
- tslib.__decorate([
124
- decorators_js.state()
125
- ], SgdsSidebarGroup.prototype, "_showMenu", void 0);
126
-
127
- exports.SgdsSidebarGroup = SgdsSidebarGroup;
128
- exports["default"] = SgdsSidebarGroup;
129
- //# sourceMappingURL=sgds-sidebar-group.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sgds-sidebar-group.cjs.js","sources":["../../../../src/components/Sidebar/sgds-sidebar-group.ts"],"sourcesContent":["import { html } from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport sidebarOptionStyle from \"./sidebar-item.css\";\nimport SgdsIcon from \"../Icon/sgds-icon\";\n\nimport { SidebarElement } from \"./sidebar-element\";\n\n/**\n * @summary Sidebar group represents a navigable parent item within the sidebar that can have nested children.\n * Groups support multiple levels of nesting and show nested items in a drawer overlay or submenu.\n * Groups can be used to organize related sidebar items into expanding/collapsing sections.\n *\n * Behavior varies by nesting level:\n * - Level 1 (root): Clicking opens drawer overlay showing all nested children. Keyboard: ArrowRight opens drawer.\n * - Level 2+ (nested): Clicking toggles submenu visibility. Keyboard: ArrowRight toggles submenu.\n *\n * @slot default - Insert sgds-sidebar-group or sgds-sidebar-item elements as nested children\n * @slot trailingIcon - Icon to display after the label text. A chevron is auto-appended.\n *\n */\nexport class SgdsSidebarGroup extends SidebarElement {\n static styles = [...SgdsElement.styles, sidebarOptionStyle];\n\n /** @internal */\n static dependencies = {\n \"sgds-icon\": SgdsIcon\n };\n\n /**\n * Manages submenu visibility state for nested groups.\n * When true, the submenu is displayed showing nested children.\n * When false, the submenu is hidden.\n * Only used for nested groups (level 2+). Root-level groups use drawer overlay instead.\n * @internal\n */\n @state() _showMenu = false;\n\n /**\n * Reports the visibility state of the submenu for nested groups.\n * Returns true when the submenu is displayed showing child items, false when hidden.\n * Only applicable for nested groups (level 2+). Root-level groups use drawer overlay instead.\n * @readonly\n * @type {boolean}\n */\n get showMenu(): boolean {\n return this._showMenu;\n }\n\n /** @internal */\n protected override _handleClick(): void {\n if (this._childLevel !== 1) {\n this._showMenu = !this._showMenu;\n this._childElements.forEach(v => {\n v._hidden = !this._showMenu;\n });\n } else {\n super._handleClick();\n }\n }\n /**\n * Determines the appropriate chevron icon based on nesting level and menu visibility.\n * Icon changes provide visual feedback on expandable/collapsible state:\n * - Level 1: chevron-right (closed drawer) or chevron-right (no change - drawer controlled by parent)\n * - Level 2+: chevron-down (submenu open) or chevron-up (submenu closed)\n * @private\n * @returns {string} The icon name to display (e.g., 'chevron-right', 'chevron-down')\n */\n private _getIcon() {\n if (this._childLevel === 1) {\n return \"chevron-right\";\n } else {\n return this._showMenu ? \"chevron-down\" : \"chevron-up\";\n }\n }\n\n render() {\n return html`\n <div\n class=${classMap({\n \"sidebar-item\": true,\n \"sidebar-item--collapsed\": this._sidebarCollapsed && this._childLevel === 1,\n active: this._selected\n })}\n @click=${() => this._handleClick()}\n aria-level=${this._childLevel}\n .aria-expanded=${this._showMenu}\n tabindex=${this._childLevel > 2 && !this._showMenu ? -1 : 0}\n >\n <div class=\"sidebar-item-label-wrapper\">\n <div>\n <slot name=\"leadingIcon\"></slot>\n <span class=\"sidebar-item-label\">${this.title}</span>\n </div>\n\n <span class=\"sidebar-item-trailingIcon\">\n <slot name=\"trailingIcon\"></slot>\n <sgds-icon aria-label=${this.title || this.name} name=${this._getIcon()} size=\"sm\"></sgds-icon>\n </span>\n </div>\n </div>\n\n <div\n class=${classMap({\n \"sidebar-submenu\": true,\n \"sidebar-submenu--collapsed\": this._sidebarCollapsed && this._childLevel == 1,\n show: this._showMenu\n })}\n >\n <div>\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n </div>\n `;\n }\n}\n\nexport default SgdsSidebarGroup;\n"],"names":["SidebarElement","html","classMap","SgdsElement","sidebarOptionStyle","SgdsIcon","__decorate","state"],"mappings":";;;;;;;;;;;;;;AASA;;;;;;;;;;;;AAYG;AACG,MAAO,gBAAiB,SAAQA,6BAAc,CAAA;AAApD,IAAA,WAAA,GAAA;;AAQE;;;;;;AAMG;QACM,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;KA+E5B;AA7EC;;;;;;AAMG;AACH,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;;IAGkB,YAAY,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;AAC9B,gBAAA,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAC,CAAC,CAAC;SACJ;aAAM;YACL,KAAK,CAAC,YAAY,EAAE,CAAC;SACtB;KACF;AACD;;;;;;;AAOG;IACK,QAAQ,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE;AAC1B,YAAA,OAAO,eAAe,CAAC;SACxB;aAAM;YACL,OAAO,IAAI,CAAC,SAAS,GAAG,cAAc,GAAG,YAAY,CAAC;SACvD;KACF;IAED,MAAM,GAAA;AACJ,QAAA,OAAOC,QAAI,CAAA,CAAA;;AAEC,cAAA,EAAAC,oBAAQ,CAAC;AACf,YAAA,cAAc,EAAE,IAAI;YACpB,yBAAyB,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC;YAC3E,MAAM,EAAE,IAAI,CAAC,SAAS;SACvB,CAAC,CAAA;AACO,eAAA,EAAA,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;AACrB,mBAAA,EAAA,IAAI,CAAC,WAAW,CAAA;AACZ,uBAAA,EAAA,IAAI,CAAC,SAAS,CAAA;AACpB,iBAAA,EAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;;;;;AAKpB,6CAAA,EAAA,IAAI,CAAC,KAAK,CAAA;;;;;oCAKrB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAS,MAAA,EAAA,IAAI,CAAC,QAAQ,EAAE,CAAA;;;;;;AAMnE,cAAA,EAAAA,oBAAQ,CAAC;AACf,YAAA,iBAAiB,EAAE,IAAI;YACvB,4BAA4B,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC;YAC7E,IAAI,EAAE,IAAI,CAAC,SAAS;SACrB,CAAC,CAAA;;;AAGoB,4BAAA,EAAA,IAAI,CAAC,iBAAiB,CAAA;;;KAG/C,CAAC;KACH;;AA5FM,gBAAM,CAAA,MAAA,GAAG,CAAC,GAAGC,sBAAW,CAAC,MAAM,EAAEC,sBAAkB,CAA7C,CAA+C;AAE5D;AACO,gBAAA,CAAA,YAAY,GAAG;AACpB,IAAA,WAAW,EAAEC,iBAAQ;AACtB,CAFkB,CAEjB;AASOC,gBAAA,CAAA;AAAR,IAAAC,mBAAK,EAAE;AAAmB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA;;;;;"}