@govtechsg/sgds-web-component 3.25.1-rc.0 → 3.25.1-rc.1

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.
@@ -2,6 +2,7 @@ import SgdsElement from "../../base/sgds-element";
2
2
  import SgdsIconButton from "../IconButton/sgds-icon-button";
3
3
  import type { ISgdsSidebarSelectEventDetail } from "./types";
4
4
  export type { ISgdsSidebarSelectEventDetail };
5
+ type SidebarVariant = "persistent" | "overlay" | "collapsible";
5
6
  /**
6
7
  * @summary Sidebar is a collapsible navigation component that displays menu items and groups.
7
8
  * Users can expand and collapse the sidebar to save screen space while navigating through organized menu items.
@@ -27,7 +28,6 @@ export type { ISgdsSidebarSelectEventDetail };
27
28
  * @eventDetail {ISgdsSidebarSelectEventDetail} sgds-select
28
29
  *
29
30
  */
30
- type SidebarVariant = "persistent" | "overlay" | "collapsible";
31
31
  export declare class SgdsSidebar extends SgdsElement {
32
32
  static styles: import("lit").CSSResult[];
33
33
  static dependencies: {
@@ -11,6 +11,31 @@ import { SgdsSidebarGroup } from './sgds-sidebar-group.js';
11
11
  import { SgdsIconButton } from '../IconButton/sgds-icon-button.js';
12
12
  import { MD_BREAKPOINT, XL_BREAKPOINT } from '../../utils/breakpoints.js';
13
13
 
14
+ /**
15
+ * @summary Sidebar is a collapsible navigation component that displays menu items and groups.
16
+ * Users can expand and collapse the sidebar to save screen space while navigating through organized menu items.
17
+ * The sidebar coordinates selection and navigation across nested items using context providers and custom events.
18
+ *
19
+ * Features:
20
+ * - Collapsible state for space-saving layouts with icon-only mode
21
+ * - Multi-level nesting (up to 3 levels) with drawer overlay for root-level groups
22
+ * - Keyboard navigation with full ARIA support for accessibility
23
+ * - Programmatic link navigation support with anchor elements
24
+ * - Active item tracking and synchronized state management
25
+ *
26
+ * Keyboard Navigation:
27
+ * - Tab/Shift+Tab: Navigate between visible sidebar items and groups
28
+ * - Arrow Left/Right: Collapse/expand groups or navigate drawer overlays
29
+ * - Enter/Space: Activate focused item or toggle group
30
+ *
31
+ * @slot default - Insert sgds-sidebar-item, sgds-sidebar-group, and sgds-sidebar-section elements
32
+ * @slot upper - Insert brand/logo content in sidebar header
33
+ * @slot lower - Insert content in sidebar footer
34
+ *
35
+ * @event sgds-select - Emitted when a sidebar item or group is selected.
36
+ * @eventDetail {ISgdsSidebarSelectEventDetail} sgds-select
37
+ *
38
+ */
14
39
  class SgdsSidebar extends SgdsElement {
15
40
  constructor() {
16
41
  super(...arguments);
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-sidebar.js","sources":["../../../src/components/Sidebar/sgds-sidebar.ts"],"sourcesContent":["import { html, nothing } 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 SidebarDrawerOverlay\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 { XL_BREAKPOINT, MD_BREAKPOINT } from \"../../utils/breakpoints\";\nimport type { ISgdsSidebarSelectEventDetail } from \"./types\";\nexport type { ISgdsSidebarSelectEventDetail };\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 * - Tab/Shift+Tab: Navigate between visible 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 *\n * @slot default - Insert sgds-sidebar-item, sgds-sidebar-group, and sgds-sidebar-section elements\n * @slot upper - Insert brand/logo content in sidebar header\n * @slot lower - Insert content in sidebar footer\n *\n * @event sgds-select - Emitted when a sidebar item or group is selected.\n * @eventDetail {ISgdsSidebarSelectEventDetail} sgds-select\n *\n */\n\ntype SidebarVariant = \"persistent\" | \"overlay\" | \"collapsible\";\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 to save screen space.\n * When true, sidebar displays icon-only mode for root items. When false, full labels and content are shown.\n * On mobile devices (width <= 576px), this is automatically toggled based on screen size.\n * Collapsing propagates to child items, affecting label visibility and 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 for programmatic control.\n * Setting this property programmatically selects the item with the matching `name` attribute.\n * Automatically expands parent groups to reveal nested items and syncs the active state throughout the hierarchy.\n * Clearing this property (setting to empty string) deselects all items.\n * @attribute active\n * @type {string}\n * @default \"\"\n */\n @property({ type: String, reflect: true }) active = \"\";\n\n /**\n * Shows a scrim/overlay background behind the drawer or sidebar in overlay mode.\n * When true, displays a semi-transparent dark overlay behind the drawer to focus user attention.\n * Only visible when drawer is open or in overlay mode with sidebar not collapsed.\n * @attribute scrim\n * @type {boolean}\n * @default false\n */\n @property({ type: Boolean, reflect: true }) scrim = false;\n\n /**\n * Controls the sidebar's collapse behaviour.\n * - `\"collapsible\"` (default): shows a toggle button that collapses/expands the sidebar.\n * - `\"persistent\"`: sidebar is always visible and cannot be collapsed.\n * - `\"overlay\"`: sidebar slides over the content as a drawer on smaller viewports.\n * @attribute variant\n * @type {\"collapsible\" | \"persistent\" | \"overlay\"}\n * @default \"collapsible\"\n */\n @property({ type: String, reflect: true }) variant: SidebarVariant = \"collapsible\";\n\n /**\n * Accessible label for the sidebar navigation landmark.\n * Passed to the `<nav>` element's `aria-label` attribute so screen readers can distinguish\n * this sidebar from other navigation regions on the page (e.g. a top mainnav).\n * Override when your page uses a more specific term (e.g. `\"Dashboard navigation\"`).\n * @attribute aria-label\n * @type {string}\n * @default \"Sidebar navigation\"\n */\n @property({ type: String }) ariaLabel = \"Sidebar navigation\";\n\n /** @internal Tracks the currently active group and provides it via context to all child elements */\n @provide({ context: SidebarActiveGroup })\n @state()\n private _sidebarActiveGroup: SgdsSidebarGroup | null = null;\n\n /** @internal Syncs collapsed state to all descendants via context */\n @provide({ context: SidebarCollapsed })\n @state()\n private _sidebarCollapsed = false;\n\n /** @internal Syncs active item selection to all descendants via context */\n @provide({ context: SidebarActiveItem })\n @state()\n private _sidebarActiveItem: SidebarElement | null = null;\n\n /** @internal Provides drawer items to descendants via context */\n @provide({ context: SidebarDrawerItems })\n @state()\n private _drawerItems: Element[] = [];\n\n /** @internal Provides drawer open/closed state to descendants via context */\n @provide({ context: SidebarDrawerOpen })\n @state()\n private _showDrawer = false;\n\n /** @internal Provides overlay mode state to descendants via context */\n @provide({ context: SidebarDrawerOverlay })\n @state()\n private _isOverlay = false;\n\n /** @internal */\n @queryAssignedElements()\n private _defaultNodes!: SidebarElement[];\n\n /** @internal */\n @state()\n private _isNarrowViewport = false;\n\n /** @internal Bound resize handler for proper event listener removal */\n private _boundHandleResize = this._handleResize.bind(this);\n\n /** @internal Bound i-sgds-click handler for proper event listener removal */\n private _boundHandleItemClick = this._handleItemClick.bind(this);\n\n connectedCallback() {\n super.connectedCallback();\n this.updateComplete.then(() => {\n this._handleActive();\n });\n\n window?.addEventListener(\"resize\", this._boundHandleResize);\n this._handleResize();\n this.addEventListener(\"i-sgds-click\", this._boundHandleItemClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document?.removeEventListener(\"click\", this._handleClickOutOfElement);\n window?.removeEventListener(\"resize\", this._boundHandleResize);\n this.removeEventListener(\"i-sgds-click\", this._boundHandleItemClick);\n }\n\n firstUpdated() {\n document?.addEventListener(\"click\", this._handleClickOutOfElement);\n this._updateOverlayState();\n }\n\n updated() {\n this._handleActive();\n }\n\n /**\n * Syncs collapsed property changes to all child items through context provider.\n * Updates internal state and triggers re-render with appropriate CSS classes.\n * @internal\n * @returns {void}\n */\n @watch(\"collapsed\")\n _handleCollapsed() {\n if (this.variant !== \"persistent\") {\n this._sidebarCollapsed = this.collapsed;\n }\n }\n\n /**\n * Updates sidebar state when active item changes via context provider.\n * Marks items as selected and handles drawer overlay visibility based on nesting level.\n * Root-level items with children trigger drawer display. Nested selections expand parent groups.\n * @internal\n * @returns {void}\n */\n @watch(\"_sidebarActiveItem\")\n _handleActiveItem(oldItem?: unknown) {\n if (!this._sidebarActiveItem) return;\n\n const allItems = this._getAllItems();\n allItems.forEach(item => (item._selected = false));\n (this._drawerItems as SidebarElement[]).forEach(item => (item._selected = false));\n if (oldItem) (oldItem as SidebarElement)._selected = false;\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 instanceof SgdsSidebarGroup && parentEle._childLevel >= 1) {\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 = parentEle.parentElement as SgdsSidebarGroup;\n }\n\n if (this._sidebarActiveGroup) {\n this._sidebarActiveGroup._selected = true;\n }\n }\n }\n\n /**\n * Finds and activates sidebar items matching the active property name.\n * Recursively searches the hierarchy for the target item. Clears selection when active is empty.\n * @internal\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 all nesting levels for a sidebar element matching the active name.\n * Traverses the complete hierarchy to support selection of deeply nested items.\n * @internal\n * @returns {SidebarElement | null} The matching 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) ?? findByName(this._drawerItems as SidebarElement[]);\n }\n /**\n * Manages responsive behavior on window resize.\n * Auto-collapses sidebar on narrow viewports (< XL_BREAKPOINT).\n * Switches collapsible variant to overlay mode on screens below MD_BREAKPOINT.\n * @internal\n * @returns {void}\n */\n private _handleResize() {\n const isNarrowViewport = window.innerWidth < XL_BREAKPOINT;\n\n if (isNarrowViewport !== this._isNarrowViewport) {\n this._isNarrowViewport = isNarrowViewport;\n this.collapsed = this._isNarrowViewport;\n }\n\n this._updateOverlayState();\n }\n\n /**\n * Updates overlay state based on variant and screen size.\n * Collapsible variant switches to overlay mode on screens below MD_BREAKPOINT (768px).\n * @internal\n * @returns {void}\n */\n private _updateOverlayState() {\n if (this.variant === \"overlay\") {\n this._isOverlay = true;\n } else if (this.variant === \"collapsible\") {\n this._isOverlay = window.innerWidth < MD_BREAKPOINT;\n } else {\n this._isOverlay = false;\n }\n }\n\n /**\n * Populates drawer overlay with children of the specified parent group.\n * Clears previous drawer content before adding new items. Reverts previous group's items to parent.\n * @internal\n * @param {SgdsSidebarGroup} element - The parent group whose children to display in 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 = [...this._sidebarActiveGroup._childElements];\n }\n\n /**\n * Returns drawer items to their original parent element and clears the drawer.\n * Called when closing the drawer or switching active groups.\n * @internal\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 * Recursively collects all descendant sidebar elements via slot assignments.\n * Traverses _defaultNodes and their _childElements to build a flat list of all items and groups.\n * @internal\n * @returns {SidebarElement[]} All descendant sidebar elements\n */\n private _getAllItems(): SidebarElement[] {\n const collect = (elements: SidebarElement[]): SidebarElement[] => {\n const result: SidebarElement[] = [];\n for (const el of elements) {\n result.push(el);\n if (el._childElements?.length) {\n result.push(...collect(el._childElements));\n }\n }\n return result;\n };\n return collect(this._defaultNodes ?? []);\n }\n\n /**\n * Handles item click events via delegation on the sidebar root.\n * Manages selection state, drawer visibility, anchor navigation, and sgds-select emission.\n * @internal\n * @param {Event} e - The bubbled i-sgds-click event\n * @returns {void}\n */\n private _handleItemClick(e: Event) {\n const element = (e as CustomEvent).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 const allItems = this._getAllItems();\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 = element.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<ISgdsSidebarSelectEventDetail>(\"sgds-select\", { detail: { activeItem: element.name } });\n }\n }\n\n /**\n * Toggles the sidebar between collapsed and expanded display modes.\n * Updates labels visibility and spacing accordingly. Called when user clicks collapse button.\n * @public\n * @returns {void}\n */\n public toggleCollapsed() {\n if (this.variant !== \"persistent\") this.collapsed = !this.collapsed;\n }\n\n /**\n * Closes drawer when user clicks outside the sidebar.\n * Also collapses overlay sidebar when clicking outside (if in overlay mode).\n * @internal\n * @param {MouseEvent} e - The click event from document\n * @returns {void}\n */\n private _handleClickOutOfElement = (e: MouseEvent) => {\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 if (this._isOverlay) {\n const toggler = (e.target as HTMLElement).getAttribute(\"data-sidebar-toggler\");\n\n if (!toggler) this.collapsed = true;\n }\n }\n };\n\n render() {\n return html`\n <nav\n class=${classMap({\n sidebar: true,\n \"sidebar--collapsed\": this._sidebarCollapsed,\n overlay: this._isOverlay\n })}\n aria-label=${this.ariaLabel}\n >\n <div\n class=${classMap({\n \"sidebar--overlay\": this.scrim,\n show: this.scrim && (this._showDrawer || (this._isOverlay && !this._sidebarCollapsed))\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=\"upper\"></slot>\n </div>\n\n ${this.variant === \"collapsible\"\n ? html`<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 .ariaLabel=${this._sidebarCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n ></sgds-icon-button>`\n : nothing}\n </div>\n\n <div class=\"sidebar-content\">\n <slot></slot>\n </div>\n\n <slot name=\"lower\"></slot>\n </div>\n </div>\n\n <div\n class=${classMap({\n \"sidebar-nested-overlay\": true,\n show: this._showDrawer\n })}\n >\n ${this._isNarrowViewport\n ? html`<sgds-icon-button\n name=\"chevron-left\"\n variant=\"ghost\"\n tone=\"neutral\"\n size=\"sm\"\n @click=${() => (this._showDrawer = false)}\n .ariaLabel=${\"Close drawer\"}\n ></sgds-icon-button>`\n : nothing}\n ${this._drawerItems}\n </div>\n </nav>\n `;\n }\n}\n\nexport default SgdsSidebar;\n"],"names":["sidebarStyle"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-sidebar.js","sources":["../../../src/components/Sidebar/sgds-sidebar.ts"],"sourcesContent":["import { html, nothing } 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 SidebarDrawerOverlay\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 { XL_BREAKPOINT, MD_BREAKPOINT } from \"../../utils/breakpoints\";\nimport type { ISgdsSidebarSelectEventDetail } from \"./types\";\nexport type { ISgdsSidebarSelectEventDetail };\n\ntype SidebarVariant = \"persistent\" | \"overlay\" | \"collapsible\";\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 * - Tab/Shift+Tab: Navigate between visible 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 *\n * @slot default - Insert sgds-sidebar-item, sgds-sidebar-group, and sgds-sidebar-section elements\n * @slot upper - Insert brand/logo content in sidebar header\n * @slot lower - Insert content in sidebar footer\n *\n * @event sgds-select - Emitted when a sidebar item or group is selected.\n * @eventDetail {ISgdsSidebarSelectEventDetail} sgds-select\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 to save screen space.\n * When true, sidebar displays icon-only mode for root items. When false, full labels and content are shown.\n * On mobile devices (width <= 576px), this is automatically toggled based on screen size.\n * Collapsing propagates to child items, affecting label visibility and 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 for programmatic control.\n * Setting this property programmatically selects the item with the matching `name` attribute.\n * Automatically expands parent groups to reveal nested items and syncs the active state throughout the hierarchy.\n * Clearing this property (setting to empty string) deselects all items.\n * @attribute active\n * @type {string}\n * @default \"\"\n */\n @property({ type: String, reflect: true }) active = \"\";\n\n /**\n * Shows a scrim/overlay background behind the drawer or sidebar in overlay mode.\n * When true, displays a semi-transparent dark overlay behind the drawer to focus user attention.\n * Only visible when drawer is open or in overlay mode with sidebar not collapsed.\n * @attribute scrim\n * @type {boolean}\n * @default false\n */\n @property({ type: Boolean, reflect: true }) scrim = false;\n\n /**\n * Controls the sidebar's collapse behaviour.\n * - `\"collapsible\"` (default): shows a toggle button that collapses/expands the sidebar.\n * - `\"persistent\"`: sidebar is always visible and cannot be collapsed.\n * - `\"overlay\"`: sidebar slides over the content as a drawer on smaller viewports.\n * @attribute variant\n * @type {\"collapsible\" | \"persistent\" | \"overlay\"}\n * @default \"collapsible\"\n */\n @property({ type: String, reflect: true }) variant: SidebarVariant = \"collapsible\";\n\n /**\n * Accessible label for the sidebar navigation landmark.\n * Passed to the `<nav>` element's `aria-label` attribute so screen readers can distinguish\n * this sidebar from other navigation regions on the page (e.g. a top mainnav).\n * Override when your page uses a more specific term (e.g. `\"Dashboard navigation\"`).\n * @attribute aria-label\n * @type {string}\n * @default \"Sidebar navigation\"\n */\n @property({ type: String }) ariaLabel = \"Sidebar navigation\";\n\n /** @internal Tracks the currently active group and provides it via context to all child elements */\n @provide({ context: SidebarActiveGroup })\n @state()\n private _sidebarActiveGroup: SgdsSidebarGroup | null = null;\n\n /** @internal Syncs collapsed state to all descendants via context */\n @provide({ context: SidebarCollapsed })\n @state()\n private _sidebarCollapsed = false;\n\n /** @internal Syncs active item selection to all descendants via context */\n @provide({ context: SidebarActiveItem })\n @state()\n private _sidebarActiveItem: SidebarElement | null = null;\n\n /** @internal Provides drawer items to descendants via context */\n @provide({ context: SidebarDrawerItems })\n @state()\n private _drawerItems: Element[] = [];\n\n /** @internal Provides drawer open/closed state to descendants via context */\n @provide({ context: SidebarDrawerOpen })\n @state()\n private _showDrawer = false;\n\n /** @internal Provides overlay mode state to descendants via context */\n @provide({ context: SidebarDrawerOverlay })\n @state()\n private _isOverlay = false;\n\n /** @internal */\n @queryAssignedElements()\n private _defaultNodes!: SidebarElement[];\n\n /** @internal */\n @state()\n private _isNarrowViewport = false;\n\n /** @internal Bound resize handler for proper event listener removal */\n private _boundHandleResize = this._handleResize.bind(this);\n\n /** @internal Bound i-sgds-click handler for proper event listener removal */\n private _boundHandleItemClick = this._handleItemClick.bind(this);\n\n connectedCallback() {\n super.connectedCallback();\n this.updateComplete.then(() => {\n this._handleActive();\n });\n\n window?.addEventListener(\"resize\", this._boundHandleResize);\n this._handleResize();\n this.addEventListener(\"i-sgds-click\", this._boundHandleItemClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document?.removeEventListener(\"click\", this._handleClickOutOfElement);\n window?.removeEventListener(\"resize\", this._boundHandleResize);\n this.removeEventListener(\"i-sgds-click\", this._boundHandleItemClick);\n }\n\n firstUpdated() {\n document?.addEventListener(\"click\", this._handleClickOutOfElement);\n this._updateOverlayState();\n }\n\n updated() {\n this._handleActive();\n }\n\n /**\n * Syncs collapsed property changes to all child items through context provider.\n * Updates internal state and triggers re-render with appropriate CSS classes.\n * @internal\n * @returns {void}\n */\n @watch(\"collapsed\")\n _handleCollapsed() {\n if (this.variant !== \"persistent\") {\n this._sidebarCollapsed = this.collapsed;\n }\n }\n\n /**\n * Updates sidebar state when active item changes via context provider.\n * Marks items as selected and handles drawer overlay visibility based on nesting level.\n * Root-level items with children trigger drawer display. Nested selections expand parent groups.\n * @internal\n * @returns {void}\n */\n @watch(\"_sidebarActiveItem\")\n _handleActiveItem(oldItem?: unknown) {\n if (!this._sidebarActiveItem) return;\n\n const allItems = this._getAllItems();\n allItems.forEach(item => (item._selected = false));\n (this._drawerItems as SidebarElement[]).forEach(item => (item._selected = false));\n if (oldItem) (oldItem as SidebarElement)._selected = false;\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 instanceof SgdsSidebarGroup && parentEle._childLevel >= 1) {\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 = parentEle.parentElement as SgdsSidebarGroup;\n }\n\n if (this._sidebarActiveGroup) {\n this._sidebarActiveGroup._selected = true;\n }\n }\n }\n\n /**\n * Finds and activates sidebar items matching the active property name.\n * Recursively searches the hierarchy for the target item. Clears selection when active is empty.\n * @internal\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 all nesting levels for a sidebar element matching the active name.\n * Traverses the complete hierarchy to support selection of deeply nested items.\n * @internal\n * @returns {SidebarElement | null} The matching 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) ?? findByName(this._drawerItems as SidebarElement[]);\n }\n /**\n * Manages responsive behavior on window resize.\n * Auto-collapses sidebar on narrow viewports (< XL_BREAKPOINT).\n * Switches collapsible variant to overlay mode on screens below MD_BREAKPOINT.\n * @internal\n * @returns {void}\n */\n private _handleResize() {\n const isNarrowViewport = window.innerWidth < XL_BREAKPOINT;\n\n if (isNarrowViewport !== this._isNarrowViewport) {\n this._isNarrowViewport = isNarrowViewport;\n this.collapsed = this._isNarrowViewport;\n }\n\n this._updateOverlayState();\n }\n\n /**\n * Updates overlay state based on variant and screen size.\n * Collapsible variant switches to overlay mode on screens below MD_BREAKPOINT (768px).\n * @internal\n * @returns {void}\n */\n private _updateOverlayState() {\n if (this.variant === \"overlay\") {\n this._isOverlay = true;\n } else if (this.variant === \"collapsible\") {\n this._isOverlay = window.innerWidth < MD_BREAKPOINT;\n } else {\n this._isOverlay = false;\n }\n }\n\n /**\n * Populates drawer overlay with children of the specified parent group.\n * Clears previous drawer content before adding new items. Reverts previous group's items to parent.\n * @internal\n * @param {SgdsSidebarGroup} element - The parent group whose children to display in 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 = [...this._sidebarActiveGroup._childElements];\n }\n\n /**\n * Returns drawer items to their original parent element and clears the drawer.\n * Called when closing the drawer or switching active groups.\n * @internal\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 * Recursively collects all descendant sidebar elements via slot assignments.\n * Traverses _defaultNodes and their _childElements to build a flat list of all items and groups.\n * @internal\n * @returns {SidebarElement[]} All descendant sidebar elements\n */\n private _getAllItems(): SidebarElement[] {\n const collect = (elements: SidebarElement[]): SidebarElement[] => {\n const result: SidebarElement[] = [];\n for (const el of elements) {\n result.push(el);\n if (el._childElements?.length) {\n result.push(...collect(el._childElements));\n }\n }\n return result;\n };\n return collect(this._defaultNodes ?? []);\n }\n\n /**\n * Handles item click events via delegation on the sidebar root.\n * Manages selection state, drawer visibility, anchor navigation, and sgds-select emission.\n * @internal\n * @param {Event} e - The bubbled i-sgds-click event\n * @returns {void}\n */\n private _handleItemClick(e: Event) {\n const element = (e as CustomEvent).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 const allItems = this._getAllItems();\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 = element.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<ISgdsSidebarSelectEventDetail>(\"sgds-select\", { detail: { activeItem: element.name } });\n }\n }\n\n /**\n * Toggles the sidebar between collapsed and expanded display modes.\n * Updates labels visibility and spacing accordingly. Called when user clicks collapse button.\n * @public\n * @returns {void}\n */\n public toggleCollapsed() {\n if (this.variant !== \"persistent\") this.collapsed = !this.collapsed;\n }\n\n /**\n * Closes drawer when user clicks outside the sidebar.\n * Also collapses overlay sidebar when clicking outside (if in overlay mode).\n * @internal\n * @param {MouseEvent} e - The click event from document\n * @returns {void}\n */\n private _handleClickOutOfElement = (e: MouseEvent) => {\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 if (this._isOverlay) {\n const toggler = (e.target as HTMLElement).getAttribute(\"data-sidebar-toggler\");\n\n if (!toggler) this.collapsed = true;\n }\n }\n };\n\n render() {\n return html`\n <nav\n class=${classMap({\n sidebar: true,\n \"sidebar--collapsed\": this._sidebarCollapsed,\n overlay: this._isOverlay\n })}\n aria-label=${this.ariaLabel}\n >\n <div\n class=${classMap({\n \"sidebar--overlay\": this.scrim,\n show: this.scrim && (this._showDrawer || (this._isOverlay && !this._sidebarCollapsed))\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=\"upper\"></slot>\n </div>\n\n ${this.variant === \"collapsible\"\n ? html`<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 .ariaLabel=${this._sidebarCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n ></sgds-icon-button>`\n : nothing}\n </div>\n\n <div class=\"sidebar-content\">\n <slot></slot>\n </div>\n\n <slot name=\"lower\"></slot>\n </div>\n </div>\n\n <div\n class=${classMap({\n \"sidebar-nested-overlay\": true,\n show: this._showDrawer\n })}\n >\n ${this._isNarrowViewport\n ? html`<sgds-icon-button\n name=\"chevron-left\"\n variant=\"ghost\"\n tone=\"neutral\"\n size=\"sm\"\n @click=${() => (this._showDrawer = false)}\n .ariaLabel=${\"Close drawer\"}\n ></sgds-icon-button>`\n : nothing}\n ${this._drawerItems}\n </div>\n </nav>\n `;\n }\n}\n\nexport default SgdsSidebar;\n"],"names":["sidebarStyle"],"mappings":"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"}