le-kit 0.2.6 → 0.3.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.
@@ -224,8 +224,8 @@ const LeNavigation$1 = /*@__PURE__*/ proxyCustomElement(class LeNavigation exten
224
224
  requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());
225
225
  };
226
226
  handleBarOverflowChange = (e) => {
227
- this.overflowIds = e.detail.overflowingIds;
228
- this.hamburgerActive = e.detail.hamburgerActive;
227
+ this.overflowIds = e.detail.overflowingIds || [];
228
+ this.hamburgerActive = e.detail.hamburgerActive || false;
229
229
  };
230
230
  openOverflowPopover = () => {
231
231
  this.overflowPopoverOpen = true;
@@ -341,7 +341,7 @@ const LeNavigation$1 = /*@__PURE__*/ proxyCustomElement(class LeNavigation exten
341
341
  }
342
342
  renderOverflowPopover() {
343
343
  const items = this.parsedItems;
344
- const overflowSet = new Set(this.overflowIds);
344
+ const overflowSet = new Set(this.overflowIds || []);
345
345
  // Determine which items to show in the popover
346
346
  let itemsToShow;
347
347
  if (this.hamburgerActive) {
@@ -367,7 +367,7 @@ const LeNavigation$1 = /*@__PURE__*/ proxyCustomElement(class LeNavigation exten
367
367
  renderHorizontal() {
368
368
  const items = this.parsedItems;
369
369
  const overflowMode = this.getOverflowMode();
370
- const showOverflowButton = this.overflowIds.length > 0 || this.hamburgerActive;
370
+ const showOverflowButton = (this.overflowIds?.length ?? 0) > 0 || this.hamburgerActive;
371
371
  return (h("div", { class: "nav-horizontal-wrapper" }, h("le-bar", { class: classnames('nav-bar', {
372
372
  'align-end': this.align === 'end',
373
373
  'align-center': this.align === 'center',
@@ -1 +1 @@
1
- {"file":"le-navigation.js","mappings":"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","names":["LeNavigation","__stencil_proxyCustomElement"],"sources":["src/components/le-navigation/le-navigation.css?tag=le-navigation&encapsulation=shadow","src/components/le-navigation/le-navigation.tsx"],"sourcesContent":[":host {\n display: block;\n\n --le-nav-radius: var(--le-radius-md);\n --le-nav-gap: var(--le-spacing-2);\n --le-nav-item-padding-x: var(--le-spacing-1);\n --le-nav-item-padding-y: var(--le-spacing-2);\n --le-nav-item-gap: var(--le-spacing-2);\n\n --le-nav-color: var(--le-color-text-primary);\n --le-nav-muted: var(--le-color-text-secondary);\n --le-nav-hover-bg: var(--le-color-gray-100);\n --le-nav-selected-bg: var(--le-color-primary);\n --le-nav-selected-color: var(--le-color-primary-contrast);\n}\n\n/*\n * In horizontal nowrap mode, this component is commonly used inside flex layouts\n * (e.g. headers). If the host shrink-wraps to its contents, enabling overflow\n * (moving items into \"More\") changes the host width, which can cause oscillation\n * between states. Make the host participate in flex sizing instead.\n */\n:host([orientation='horizontal']:not([wrap])) {\n flex: 1 1 0%;\n min-width: 0;\n}\n\n/* ==========================================\n * Vertical navigation\n * ========================================== */\n\n.nav-vertical {\n display: flex;\n flex-direction: column;\n gap: var(--le-nav-gap);\n}\n\n.nav-search {\n width: 100%;\n}\n\n.nav-search-input {\n --le-input-radius: var(--le-radius-md);\n}\n\n.nav-empty {\n padding: var(--le-spacing-2);\n color: var(--le-nav-muted);\n font-size: var(--le-font-size-sm);\n}\n\n.nav-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--le-spacing-1);\n}\n\n.nav-row {\n display: flex;\n align-items: stretch;\n gap: var(--le-spacing-1);\n border-radius: var(--le-nav-radius);\n}\n\n.nav-row:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.nav-toggle,\n.nav-toggle-spacer {\n box-sizing: border-box;\n width: var(--le-spacing-4);\n min-width: var(--le-spacing-4);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n border-radius: var(--le-nav-radius);\n color: inherit;\n}\n\n.nav-toggle {\n background: transparent;\n cursor: pointer;\n opacity: 0.4;\n}\n\n.nav-toggle:hover:not(:disabled) {\n opacity: 1;\n}\n\n.nav-toggle:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n opacity: 1;\n}\n\n.nav-chevron {\n display: inline-block;\n transition: transform var(--le-transition-fast);\n}\n\n.nav-chevron svg {\n display: block;\n width: var(--le-spacing-4);\n height: var(--le-spacing-4);\n}\n\n.nav-node > div > button > .nav-chevron {\n transform: rotate(-90deg);\n}\n.nav-node.open > div > button > .nav-chevron {\n transform: rotate(0deg);\n}\n\n.nav-item {\n flex: 1;\n display: inline-flex;\n align-items: center;\n gap: var(--le-nav-item-gap);\n padding: var(--le-nav-item-padding-y) var(--le-nav-item-padding-x) var(--le-nav-item-padding-y) 0;\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n text-decoration: none;\n color: var(--le-nav-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n line-height: var(--le-line-height-tight);\n cursor: pointer;\n}\n\n.nav-item:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.nav-node.selected > .nav-row {\n background: var(--le-nav-selected-bg);\n color: var(--le-nav-selected-color);\n}\n.nav-node.selected > .nav-row > .nav-item {\n color: inherit;\n}\n\n.nav-node.disabled > .nav-row > .nav-item {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.nav-text {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.nav-label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nav-description {\n color: color-mix(in srgb, var(--le-nav-muted) 90%, transparent);\n font-size: var(--le-font-size-sm);\n line-height: var(--le-line-height-tight);\n}\n\n.nav-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.nav-icon-end {\n margin-left: auto;\n}\n\n.nav-children {\n margin-top: var(--le-spacing-1);\n}\n\n/* ==========================================\n * Horizontal navigation (using le-bar)\n * ========================================== */\n\n.nav-horizontal-wrapper {\n display: flex;\n align-items: center;\n gap: var(--le-spacing-2);\n}\n\n.nav-bar {\n flex: 1 1 0%;\n min-width: 0;\n --le-bar-gap: var(--le-spacing-2);\n}\n\n.nav-bar.align-end {\n --le-bar-justify: flex-end;\n}\n\n.nav-bar.align-center {\n --le-bar-justify: center;\n}\n\n.nav-bar.align-space-between {\n --le-bar-justify: space-between;\n}\n\n.h-item {\n display: flex;\n align-items: center;\n}\n\n.h-link {\n display: inline-flex;\n align-items: center;\n gap: var(--le-spacing-2);\n padding: var(--le-spacing-2) var(--le-spacing-3);\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n text-decoration: none;\n color: var(--le-nav-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n cursor: pointer;\n}\n\n.h-link:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.h-link:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.h-link.disabled,\n.h-trigger.disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.h-link.selected,\n.h-trigger.selected {\n background: var(--le-nav-selected-bg);\n color: var(--le-nav-selected-color);\n}\n\n.h-label {\n white-space: nowrap;\n}\n\n.h-trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--le-spacing-1);\n border-radius: var(--le-nav-radius);\n}\n\n.h-submenu-toggle {\n width: var(--le-spacing-3);\n height: var(--le-spacing-3);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n border-radius: var(--le-nav-radius);\n background: transparent;\n color: currentColor;\n cursor: pointer;\n}\n\n.h-submenu-toggle:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.overflow-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--le-spacing-2);\n padding: var(--le-spacing-2) var(--le-spacing-3);\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n color: var(--le-nav-color);\n cursor: pointer;\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n}\n\n.overflow-trigger:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.overflow-trigger:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n/* Overflow trigger wrapper in le-bar slot */\n.nav-overflow-trigger {\n display: flex;\n align-items: center;\n}\n\n/* Popover list container */\nle-popover::part(content) {\n padding: var(--le-spacing-1);\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport { LeOption } from '../../types/options';\nimport { classnames, generateId } from '../../utils/utils';\nimport { LeBarOverflowChangeDetail } from '../le-bar/le-bar';\n\nexport interface LeNavigationItemSelectDetail {\n item: LeOption;\n id: string;\n href?: string;\n originalEvent: MouseEvent;\n}\n\nexport interface LeNavigationItemToggleDetail {\n item: LeOption;\n id: string;\n open: boolean;\n originalEvent: MouseEvent;\n}\n\ninterface VerticalListRenderOptions {\n depth: number;\n pathPrefix: string;\n autoOpenIds?: Set<string>;\n searchable?: boolean;\n searchQuery?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n submenuId?: string;\n closePopover?: () => void;\n}\n\n/**\n * Navigation component with vertical (tree) and horizontal (menu) layouts.\n *\n * - Accepts items as `LeOption[]` or a JSON string.\n * - Supports hierarchical items via `children`.\n * - Supports persisted expansion via `open` on items.\n *\n * @slot hamburger-trigger - Custom trigger contents for the hamburger button\n * @slot more-trigger - Custom trigger contents for the \"More\" button\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-navigation',\n styleUrl: 'le-navigation.css',\n shadow: true,\n})\nexport class LeNavigation {\n @Element() el: HTMLElement;\n\n /**\n * Navigation items.\n * Can be passed as an array or JSON string (same pattern as le-select).\n */\n @Prop() items: LeOption[] | string = [];\n\n /**\n * Layout orientation.\n */\n @Prop({ reflect: true }) orientation: 'vertical' | 'horizontal' = 'horizontal';\n\n /**\n * Horizontal wrapping behavior.\n * If false, overflow behavior depends on `overflowMode`.\n */\n @Prop({ reflect: true }) wrap: boolean = true;\n\n /**\n * Overflow behavior for horizontal, non-wrapping menus.\n * - more: moves overflow items into a \"More\" popover\n * - hamburger: turns the whole nav into a hamburger popover\n */\n @Prop({ reflect: true }) overflowMode: 'more' | 'hamburger' = 'more';\n\n /**\n * Minimum number of visible top-level items required to use the \"More\" overflow.\n * If fewer would be visible, the navigation falls back to hamburger.\n */\n @Prop() minVisibleItemsForMore: number = 2;\n\n /**\n * Alignment of the menu items within the navigation bar.\n */\n @Prop({ reflect: true }) align: 'start' | 'end' | 'center' | 'space-between' = 'start';\n\n /**\n * Active url for automatic selection.\n */\n @Prop() activeUrl: string = '';\n\n /**\n * Enables a search input for the vertical navigation.\n */\n @Prop() searchable: boolean = false;\n\n /**\n * Placeholder text for the search input.\n */\n @Prop() searchPlaceholder: string = 'Search...';\n\n /**\n * Text shown when no items match the filter.\n */\n @Prop() emptyText: string = 'No results found';\n\n /**\n * Whether submenu popovers should include a filter input.\n */\n @Prop() submenuSearchable: boolean = false;\n\n /**\n * Fired when a navigation item is activated.\n *\n * This event is cancelable. Call `event.preventDefault()` to prevent\n * default browser navigation and implement custom routing.\n */\n @Event({ cancelable: true }) leNavItemSelect: EventEmitter<LeNavigationItemSelectDetail>;\n\n /**\n * Fired when a tree branch is toggled.\n */\n @Event() leNavItemToggle: EventEmitter<LeNavigationItemToggleDetail>;\n\n @State() private searchQuery: string = '';\n\n @State() private openState: Record<string, boolean> = {};\n\n /** IDs of items currently in overflow (from le-bar) */\n @State() private overflowIds: string[] = [];\n\n /** Whether hamburger mode is active (from le-bar) */\n @State() private hamburgerActive: boolean = false;\n\n @State() private submenuQueries: Record<string, string> = {};\n\n /** Whether the overflow popover is open */\n @State() private overflowPopoverOpen: boolean = false;\n\n private popoverRefs: Map<string, HTMLLePopoverElement> = new Map();\n\n private instanceId: string = generateId('le-nav');\n\n private partFromOptionPart(base: string, part?: string): string {\n const raw = (part ?? '').trim();\n if (!raw) return base;\n\n const tokens = raw\n .split(/\\s+/)\n .map(t => t.replace(/[^a-zA-Z0-9_-]/g, ''))\n .filter(Boolean);\n\n if (tokens.length === 0) return base;\n\n return [base, ...tokens.map(t => `${base}-${t}`)].join(' ');\n }\n\n @Watch('items')\n @Watch('orientation')\n @Watch('wrap')\n @Watch('overflowMode')\n handleLayoutInputsChange() {\n // Reset overflow state when layout inputs change\n this.overflowIds = [];\n this.hamburgerActive = false;\n }\n\n disconnectedCallback() {\n // Cleanup if needed\n }\n\n private get parsedItems(): LeOption[] {\n if (typeof this.items === 'string') {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n\n return this.items;\n }\n\n private getItemId(item: LeOption, path: string): string {\n return item.id ?? `${this.instanceId}:${path}`;\n }\n\n private getChildItems(item: LeOption): LeOption[] {\n return Array.isArray(item.children) ? item.children : [];\n }\n\n private isOpen(item: LeOption, id: string): boolean {\n const fromState = this.openState[id];\n if (typeof fromState === 'boolean') return fromState;\n return !!item.open;\n }\n\n private setOpen(id: string, open: boolean) {\n if (this.openState[id] === open) return;\n this.openState = {\n ...this.openState,\n [id]: open,\n };\n }\n\n private matchesQuery(option: LeOption, query: string): boolean {\n if (!query) return true;\n\n const q = query.toLowerCase();\n return (\n option.label.toLowerCase().includes(q) ||\n (option.description?.toLowerCase().includes(q) ?? false)\n );\n }\n\n private filterTree(\n items: LeOption[],\n query: string,\n pathPrefix: string,\n autoOpen: Set<string>,\n ): LeOption[] {\n if (!query) return items;\n\n const result: LeOption[] = [];\n\n items.forEach((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n\n const children = this.getChildItems(item);\n const filteredChildren = this.filterTree(children, query, path, autoOpen);\n const selfMatch = this.matchesQuery(item, query);\n const childMatch = filteredChildren.length > 0;\n\n if (selfMatch || childMatch) {\n if (childMatch) {\n autoOpen.add(id);\n }\n\n if (childMatch && filteredChildren !== children) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n } else {\n result.push(item);\n }\n }\n });\n\n return result;\n }\n\n private handleItemSelect = (e: MouseEvent, item: LeOption, id: string) => {\n if (item.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n const emitted = this.leNavItemSelect.emit({\n item,\n id,\n href: item.href,\n originalEvent: e,\n });\n\n if (emitted.defaultPrevented) {\n e.preventDefault();\n }\n };\n\n private handleToggle = (e: MouseEvent, item: LeOption, id: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (item.disabled) return;\n\n const next = !this.isOpen(item, id);\n this.setOpen(id, next);\n\n this.leNavItemToggle.emit({\n item,\n id,\n open: next,\n originalEvent: e,\n });\n };\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n };\n\n private handleSubmenuSearchInput = (submenuId: string, e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target.value;\n\n if (this.submenuQueries[submenuId] === value) return;\n\n this.submenuQueries = {\n ...this.submenuQueries,\n [submenuId]: value,\n };\n\n // Position may change as items filter.\n requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());\n };\n\n private handleBarOverflowChange = (e: CustomEvent<LeBarOverflowChangeDetail>) => {\n this.overflowIds = e.detail.overflowingIds;\n this.hamburgerActive = e.detail.hamburgerActive;\n };\n\n private openOverflowPopover = () => {\n this.overflowPopoverOpen = true;\n };\n\n private closeOverflowPopover = () => {\n this.overflowPopoverOpen = false;\n };\n\n private renderVerticalList(\n items: LeOption[],\n {\n depth,\n pathPrefix,\n autoOpenIds,\n searchable,\n searchQuery,\n searchPlaceholder,\n emptyText,\n submenuId,\n closePopover,\n }: VerticalListRenderOptions,\n ) {\n const query = searchQuery ?? '';\n const openFromSearch = autoOpenIds ?? new Set<string>();\n\n const filtered = query ? this.filterTree(items, query, pathPrefix, openFromSearch) : items;\n\n return (\n <div class={classnames('nav-vertical', { 'is-submenu': !!submenuId })}>\n {searchable && (\n <div class=\"nav-search\">\n <le-string-input\n mode=\"default\"\n class=\"nav-search-input\"\n placeholder={searchPlaceholder ?? 'Search...'}\n value={query}\n onInput={(e: Event) =>\n submenuId ? this.handleSubmenuSearchInput(submenuId, e) : this.handleSearchInput(e)\n }\n />\n </div>\n )}\n\n {filtered.length === 0 ? (\n <div class=\"nav-empty\">{emptyText ?? this.emptyText}</div>\n ) : (\n <ul class=\"nav-list\" role=\"tree\">\n {filtered.map((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n const open = hasChildren && (this.isOpen(item, id) || openFromSearch.has(id));\n\n const paddingLeft = `calc(var(--le-nav-item-padding-x) + ${depth} * var(--le-spacing-4))`;\n\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'treeitem' }\n : { type: 'button', role: 'treeitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <li\n class={classnames('nav-node', {\n 'disabled': item.disabled,\n 'selected': item.selected || (this.activeUrl && item.href === this.activeUrl),\n open,\n 'has-children': hasChildren,\n })}\n key={id}\n role=\"none\"\n >\n <div class=\"nav-row\" style={{ paddingLeft }}>\n {hasChildren ? (\n <button\n type=\"button\"\n class=\"nav-toggle\"\n aria-label={open ? 'Collapse' : 'Expand'}\n aria-expanded={open ? 'true' : 'false'}\n onClick={(e: MouseEvent) => this.handleToggle(e, item, id)}\n disabled={item.disabled}\n >\n <le-icon name=\"chevron-down\" class=\"nav-chevron\" aria-hidden=\"true\" />\n </button>\n ) : (\n <span class=\"nav-toggle-spacer\" aria-hidden=\"true\" />\n )}\n\n <TagType\n class=\"nav-item\"\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // For buttons, also toggle if this is a purely structural node.\n this.handleItemSelect(e, item, id);\n if (!item.href && hasChildren && !item.disabled) {\n this.handleToggle(e, item, id);\n return;\n }\n\n if (!item.disabled && closePopover) {\n closePopover();\n }\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"nav-text\">\n <span class=\"nav-label\">{item.label}</span>\n {item.description && (\n <span class=\"nav-description\">{item.description}</span>\n )}\n </span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n\n {hasChildren && (\n <le-collapse class=\"nav-children\" closed={!open} noFading={true} role=\"group\">\n {this.renderVerticalList(children, {\n depth: depth + 1,\n pathPrefix: path,\n autoOpenIds: openFromSearch,\n submenuId,\n closePopover,\n })}\n </le-collapse>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n }\n\n private renderHorizontalItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n if (!hasChildren) {\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'menuitem' }\n : { type: 'button', role: 'menuitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <TagType\n class={classnames('h-link', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => this.handleItemSelect(e, item, id)}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n );\n }\n\n const submenuId = id;\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <le-popover\n ref={el => {\n if (el) this.popoverRefs.set(submenuId, el);\n }}\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"start\"\n minWidth=\"240px\"\n >\n <div\n slot=\"trigger\"\n class={classnames('h-trigger', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n role=\"menuitem\"\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // Don’t let le-popover auto-toggle from its internal wrapper.\n e.stopPropagation();\n if (item.disabled) return;\n\n if (item.href) {\n this.handleItemSelect(e, item, id);\n this.popoverRefs.get(submenuId)?.hide();\n } else {\n this.popoverRefs.get(submenuId)?.toggle();\n }\n }}\n >\n {item.href ? (\n <a\n class=\"h-link\"\n href={item.href}\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n this.handleItemSelect(e, item, id);\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </a>\n ) : (\n <button\n type=\"button\"\n class=\"h-link\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n this.popoverRefs.get(submenuId)?.toggle();\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </button>\n )}\n </div>\n\n <div class=\"popover-menu\">\n {this.renderVerticalList(children, {\n depth: 0,\n pathPrefix: String(index),\n searchable: this.submenuSearchable,\n searchQuery: this.submenuQueries[submenuId] ?? '',\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n submenuId,\n closePopover: () => this.popoverRefs.get(submenuId)?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n );\n }\n\n private getOverflowMode(): 'more' | 'scroll' | 'hamburger' | 'wrap' {\n if (this.wrap) return 'wrap';\n return this.overflowMode;\n }\n\n private getBarAlignment(): 'start' | 'end' | 'center' | 'stretch' {\n // Map le-navigation align to le-bar alignItems\n // 'space-between' doesn't map directly, use 'stretch' as closest\n if (this.align === 'space-between') return 'stretch';\n return this.align;\n }\n\n private renderOverflowPopover() {\n const items = this.parsedItems;\n const overflowSet = new Set(this.overflowIds);\n\n // Determine which items to show in the popover\n let itemsToShow: LeOption[];\n\n if (this.hamburgerActive) {\n // In hamburger mode, show all items\n itemsToShow = items;\n } else {\n // In \"more\" mode, show only overflow items\n itemsToShow = items.filter((item, index) => {\n const id = this.getItemId(item, String(index));\n return overflowSet.has(id);\n });\n }\n\n if (itemsToShow.length === 0) return null;\n\n const isHamburger = this.hamburgerActive;\n\n return (\n <le-popover\n mode=\"default\"\n open={this.overflowPopoverOpen}\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n onLePopoverClose={this.closeOverflowPopover}\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part={isHamburger ? 'hamburger-trigger' : 'more-trigger'}\n aria-label={isHamburger ? 'Open menu' : 'More'}\n onClick={this.openOverflowPopover}\n >\n <slot name={isHamburger ? 'hamburger-trigger' : 'more-trigger'}>\n <le-icon name={isHamburger ? 'hamburger' : 'ellipsis-horizontal'} />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(itemsToShow, {\n depth: 0,\n pathPrefix: '',\n closePopover: this.closeOverflowPopover,\n })}\n </div>\n </le-popover>\n );\n }\n\n private renderHorizontal() {\n const items = this.parsedItems;\n const overflowMode = this.getOverflowMode();\n const showOverflowButton = this.overflowIds.length > 0 || this.hamburgerActive;\n\n return (\n <div class=\"nav-horizontal-wrapper\">\n <le-bar\n class={classnames('nav-bar', {\n 'align-end': this.align === 'end',\n 'align-center': this.align === 'center',\n 'align-space-between': this.align === 'space-between',\n })}\n overflow={overflowMode}\n alignItems={this.getBarAlignment()}\n disablePopover={true}\n onLeBarOverflowChange={this.handleBarOverflowChange}\n >\n {items.map((item, index) => this.renderHorizontalItem(item, index))}\n </le-bar>\n\n {/* Overflow popover - rendered outside le-bar to have full control over content */}\n {showOverflowButton && this.renderOverflowPopover()}\n </div>\n );\n }\n\n render() {\n const items = this.parsedItems;\n\n if (this.orientation === 'horizontal') {\n return (\n <Host>\n <le-component component=\"le-navigation\">{this.renderHorizontal()}</le-component>\n </Host>\n );\n }\n\n return (\n <Host>\n <le-component component=\"le-navigation\">\n {this.renderVerticalList(items, {\n depth: 0,\n pathPrefix: '',\n searchable: this.searchable,\n searchQuery: this.searchQuery,\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n })}\n </le-component>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"le-navigation.js","mappings":"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","names":["LeNavigation","__stencil_proxyCustomElement"],"sources":["src/components/le-navigation/le-navigation.css?tag=le-navigation&encapsulation=shadow","src/components/le-navigation/le-navigation.tsx"],"sourcesContent":[":host {\n display: block;\n\n --le-nav-radius: var(--le-radius-md);\n --le-nav-gap: var(--le-spacing-2);\n --le-nav-item-padding-x: var(--le-spacing-1);\n --le-nav-item-padding-y: var(--le-spacing-2);\n --le-nav-item-gap: var(--le-spacing-2);\n\n --le-nav-color: var(--le-color-text-primary);\n --le-nav-muted: var(--le-color-text-secondary);\n --le-nav-hover-bg: var(--le-color-gray-100);\n --le-nav-selected-bg: var(--le-color-primary);\n --le-nav-selected-color: var(--le-color-primary-contrast);\n}\n\n/*\n * In horizontal nowrap mode, this component is commonly used inside flex layouts\n * (e.g. headers). If the host shrink-wraps to its contents, enabling overflow\n * (moving items into \"More\") changes the host width, which can cause oscillation\n * between states. Make the host participate in flex sizing instead.\n */\n:host([orientation='horizontal']:not([wrap])) {\n flex: 1 1 0%;\n min-width: 0;\n}\n\n/* ==========================================\n * Vertical navigation\n * ========================================== */\n\n.nav-vertical {\n display: flex;\n flex-direction: column;\n gap: var(--le-nav-gap);\n}\n\n.nav-search {\n width: 100%;\n}\n\n.nav-search-input {\n --le-input-radius: var(--le-radius-md);\n}\n\n.nav-empty {\n padding: var(--le-spacing-2);\n color: var(--le-nav-muted);\n font-size: var(--le-font-size-sm);\n}\n\n.nav-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--le-spacing-1);\n}\n\n.nav-row {\n display: flex;\n align-items: stretch;\n gap: var(--le-spacing-1);\n border-radius: var(--le-nav-radius);\n}\n\n.nav-row:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.nav-toggle,\n.nav-toggle-spacer {\n box-sizing: border-box;\n width: var(--le-spacing-4);\n min-width: var(--le-spacing-4);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n border-radius: var(--le-nav-radius);\n color: inherit;\n}\n\n.nav-toggle {\n background: transparent;\n cursor: pointer;\n opacity: 0.4;\n}\n\n.nav-toggle:hover:not(:disabled) {\n opacity: 1;\n}\n\n.nav-toggle:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n opacity: 1;\n}\n\n.nav-chevron {\n display: inline-block;\n transition: transform var(--le-transition-fast);\n}\n\n.nav-chevron svg {\n display: block;\n width: var(--le-spacing-4);\n height: var(--le-spacing-4);\n}\n\n.nav-node > div > button > .nav-chevron {\n transform: rotate(-90deg);\n}\n.nav-node.open > div > button > .nav-chevron {\n transform: rotate(0deg);\n}\n\n.nav-item {\n flex: 1;\n display: inline-flex;\n align-items: center;\n gap: var(--le-nav-item-gap);\n padding: var(--le-nav-item-padding-y) var(--le-nav-item-padding-x) var(--le-nav-item-padding-y) 0;\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n text-decoration: none;\n color: var(--le-nav-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n line-height: var(--le-line-height-tight);\n cursor: pointer;\n}\n\n.nav-item:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.nav-node.selected > .nav-row {\n background: var(--le-nav-selected-bg);\n color: var(--le-nav-selected-color);\n}\n.nav-node.selected > .nav-row > .nav-item {\n color: inherit;\n}\n\n.nav-node.disabled > .nav-row > .nav-item {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.nav-text {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.nav-label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nav-description {\n color: color-mix(in srgb, var(--le-nav-muted) 90%, transparent);\n font-size: var(--le-font-size-sm);\n line-height: var(--le-line-height-tight);\n}\n\n.nav-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.nav-icon-end {\n margin-left: auto;\n}\n\n.nav-children {\n margin-top: var(--le-spacing-1);\n}\n\n/* ==========================================\n * Horizontal navigation (using le-bar)\n * ========================================== */\n\n.nav-horizontal-wrapper {\n display: flex;\n align-items: center;\n gap: var(--le-spacing-2);\n}\n\n.nav-bar {\n flex: 1 1 0%;\n min-width: 0;\n --le-bar-gap: var(--le-spacing-2);\n}\n\n.nav-bar.align-end {\n --le-bar-justify: flex-end;\n}\n\n.nav-bar.align-center {\n --le-bar-justify: center;\n}\n\n.nav-bar.align-space-between {\n --le-bar-justify: space-between;\n}\n\n.h-item {\n display: flex;\n align-items: center;\n}\n\n.h-link {\n display: inline-flex;\n align-items: center;\n gap: var(--le-spacing-2);\n padding: var(--le-spacing-2) var(--le-spacing-3);\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n text-decoration: none;\n color: var(--le-nav-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n cursor: pointer;\n}\n\n.h-link:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.h-link:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.h-link.disabled,\n.h-trigger.disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.h-link.selected,\n.h-trigger.selected {\n background: var(--le-nav-selected-bg);\n color: var(--le-nav-selected-color);\n}\n\n.h-label {\n white-space: nowrap;\n}\n\n.h-trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--le-spacing-1);\n border-radius: var(--le-nav-radius);\n}\n\n.h-submenu-toggle {\n width: var(--le-spacing-3);\n height: var(--le-spacing-3);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n border-radius: var(--le-nav-radius);\n background: transparent;\n color: currentColor;\n cursor: pointer;\n}\n\n.h-submenu-toggle:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.overflow-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--le-spacing-2);\n padding: var(--le-spacing-2) var(--le-spacing-3);\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n color: var(--le-nav-color);\n cursor: pointer;\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n}\n\n.overflow-trigger:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.overflow-trigger:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n/* Overflow trigger wrapper in le-bar slot */\n.nav-overflow-trigger {\n display: flex;\n align-items: center;\n}\n\n/* Popover list container */\nle-popover::part(content) {\n padding: var(--le-spacing-1);\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport { LeOption } from '../../types/options';\nimport { classnames, generateId } from '../../utils/utils';\nimport { LeBarOverflowChangeDetail } from '../le-bar/le-bar';\n\nexport interface LeNavigationItemSelectDetail {\n item: LeOption;\n id: string;\n href?: string;\n originalEvent: MouseEvent;\n}\n\nexport interface LeNavigationItemToggleDetail {\n item: LeOption;\n id: string;\n open: boolean;\n originalEvent: MouseEvent;\n}\n\ninterface VerticalListRenderOptions {\n depth: number;\n pathPrefix: string;\n autoOpenIds?: Set<string>;\n searchable?: boolean;\n searchQuery?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n submenuId?: string;\n closePopover?: () => void;\n}\n\n/**\n * Navigation component with vertical (tree) and horizontal (menu) layouts.\n *\n * - Accepts items as `LeOption[]` or a JSON string.\n * - Supports hierarchical items via `children`.\n * - Supports persisted expansion via `open` on items.\n *\n * @slot hamburger-trigger - Custom trigger contents for the hamburger button\n * @slot more-trigger - Custom trigger contents for the \"More\" button\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-navigation',\n styleUrl: 'le-navigation.css',\n shadow: true,\n})\nexport class LeNavigation {\n @Element() el: HTMLElement;\n\n /**\n * Navigation items.\n * Can be passed as an array or JSON string (same pattern as le-select).\n */\n @Prop() items: LeOption[] | string = [];\n\n /**\n * Layout orientation.\n */\n @Prop({ reflect: true }) orientation: 'vertical' | 'horizontal' = 'horizontal';\n\n /**\n * Horizontal wrapping behavior.\n * If false, overflow behavior depends on `overflowMode`.\n */\n @Prop({ reflect: true }) wrap: boolean = true;\n\n /**\n * Overflow behavior for horizontal, non-wrapping menus.\n * - more: moves overflow items into a \"More\" popover\n * - hamburger: turns the whole nav into a hamburger popover\n */\n @Prop({ reflect: true }) overflowMode: 'more' | 'hamburger' = 'more';\n\n /**\n * Minimum number of visible top-level items required to use the \"More\" overflow.\n * If fewer would be visible, the navigation falls back to hamburger.\n */\n @Prop() minVisibleItemsForMore: number = 2;\n\n /**\n * Alignment of the menu items within the navigation bar.\n */\n @Prop({ reflect: true }) align: 'start' | 'end' | 'center' | 'space-between' = 'start';\n\n /**\n * Active url for automatic selection.\n */\n @Prop() activeUrl: string = '';\n\n /**\n * Enables a search input for the vertical navigation.\n */\n @Prop() searchable: boolean = false;\n\n /**\n * Placeholder text for the search input.\n */\n @Prop() searchPlaceholder: string = 'Search...';\n\n /**\n * Text shown when no items match the filter.\n */\n @Prop() emptyText: string = 'No results found';\n\n /**\n * Whether submenu popovers should include a filter input.\n */\n @Prop() submenuSearchable: boolean = false;\n\n /**\n * Fired when a navigation item is activated.\n *\n * This event is cancelable. Call `event.preventDefault()` to prevent\n * default browser navigation and implement custom routing.\n */\n @Event({ cancelable: true }) leNavItemSelect: EventEmitter<LeNavigationItemSelectDetail>;\n\n /**\n * Fired when a tree branch is toggled.\n */\n @Event() leNavItemToggle: EventEmitter<LeNavigationItemToggleDetail>;\n\n @State() private searchQuery: string = '';\n\n @State() private openState: Record<string, boolean> = {};\n\n /** IDs of items currently in overflow (from le-bar) */\n @State() private overflowIds: string[] = [];\n\n /** Whether hamburger mode is active (from le-bar) */\n @State() private hamburgerActive: boolean = false;\n\n @State() private submenuQueries: Record<string, string> = {};\n\n /** Whether the overflow popover is open */\n @State() private overflowPopoverOpen: boolean = false;\n\n private popoverRefs: Map<string, HTMLLePopoverElement> = new Map();\n\n private instanceId: string = generateId('le-nav');\n\n private partFromOptionPart(base: string, part?: string): string {\n const raw = (part ?? '').trim();\n if (!raw) return base;\n\n const tokens = raw\n .split(/\\s+/)\n .map(t => t.replace(/[^a-zA-Z0-9_-]/g, ''))\n .filter(Boolean);\n\n if (tokens.length === 0) return base;\n\n return [base, ...tokens.map(t => `${base}-${t}`)].join(' ');\n }\n\n @Watch('items')\n @Watch('orientation')\n @Watch('wrap')\n @Watch('overflowMode')\n handleLayoutInputsChange() {\n // Reset overflow state when layout inputs change\n this.overflowIds = [];\n this.hamburgerActive = false;\n }\n\n disconnectedCallback() {\n // Cleanup if needed\n }\n\n private get parsedItems(): LeOption[] {\n if (typeof this.items === 'string') {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n\n return this.items;\n }\n\n private getItemId(item: LeOption, path: string): string {\n return item.id ?? `${this.instanceId}:${path}`;\n }\n\n private getChildItems(item: LeOption): LeOption[] {\n return Array.isArray(item.children) ? item.children : [];\n }\n\n private isOpen(item: LeOption, id: string): boolean {\n const fromState = this.openState[id];\n if (typeof fromState === 'boolean') return fromState;\n return !!item.open;\n }\n\n private setOpen(id: string, open: boolean) {\n if (this.openState[id] === open) return;\n this.openState = {\n ...this.openState,\n [id]: open,\n };\n }\n\n private matchesQuery(option: LeOption, query: string): boolean {\n if (!query) return true;\n\n const q = query.toLowerCase();\n return (\n option.label.toLowerCase().includes(q) ||\n (option.description?.toLowerCase().includes(q) ?? false)\n );\n }\n\n private filterTree(\n items: LeOption[],\n query: string,\n pathPrefix: string,\n autoOpen: Set<string>,\n ): LeOption[] {\n if (!query) return items;\n\n const result: LeOption[] = [];\n\n items.forEach((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n\n const children = this.getChildItems(item);\n const filteredChildren = this.filterTree(children, query, path, autoOpen);\n const selfMatch = this.matchesQuery(item, query);\n const childMatch = filteredChildren.length > 0;\n\n if (selfMatch || childMatch) {\n if (childMatch) {\n autoOpen.add(id);\n }\n\n if (childMatch && filteredChildren !== children) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n } else {\n result.push(item);\n }\n }\n });\n\n return result;\n }\n\n private handleItemSelect = (e: MouseEvent, item: LeOption, id: string) => {\n if (item.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n const emitted = this.leNavItemSelect.emit({\n item,\n id,\n href: item.href,\n originalEvent: e,\n });\n\n if (emitted.defaultPrevented) {\n e.preventDefault();\n }\n };\n\n private handleToggle = (e: MouseEvent, item: LeOption, id: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (item.disabled) return;\n\n const next = !this.isOpen(item, id);\n this.setOpen(id, next);\n\n this.leNavItemToggle.emit({\n item,\n id,\n open: next,\n originalEvent: e,\n });\n };\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n };\n\n private handleSubmenuSearchInput = (submenuId: string, e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target.value;\n\n if (this.submenuQueries[submenuId] === value) return;\n\n this.submenuQueries = {\n ...this.submenuQueries,\n [submenuId]: value,\n };\n\n // Position may change as items filter.\n requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());\n };\n\n private handleBarOverflowChange = (e: CustomEvent<LeBarOverflowChangeDetail>) => {\n this.overflowIds = e.detail.overflowingIds || [];\n this.hamburgerActive = e.detail.hamburgerActive || false;\n };\n\n private openOverflowPopover = () => {\n this.overflowPopoverOpen = true;\n };\n\n private closeOverflowPopover = () => {\n this.overflowPopoverOpen = false;\n };\n\n private renderVerticalList(\n items: LeOption[],\n {\n depth,\n pathPrefix,\n autoOpenIds,\n searchable,\n searchQuery,\n searchPlaceholder,\n emptyText,\n submenuId,\n closePopover,\n }: VerticalListRenderOptions,\n ) {\n const query = searchQuery ?? '';\n const openFromSearch = autoOpenIds ?? new Set<string>();\n\n const filtered = query ? this.filterTree(items, query, pathPrefix, openFromSearch) : items;\n\n return (\n <div class={classnames('nav-vertical', { 'is-submenu': !!submenuId })}>\n {searchable && (\n <div class=\"nav-search\">\n <le-string-input\n mode=\"default\"\n class=\"nav-search-input\"\n placeholder={searchPlaceholder ?? 'Search...'}\n value={query}\n onInput={(e: Event) =>\n submenuId ? this.handleSubmenuSearchInput(submenuId, e) : this.handleSearchInput(e)\n }\n />\n </div>\n )}\n\n {filtered.length === 0 ? (\n <div class=\"nav-empty\">{emptyText ?? this.emptyText}</div>\n ) : (\n <ul class=\"nav-list\" role=\"tree\">\n {filtered.map((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n const open = hasChildren && (this.isOpen(item, id) || openFromSearch.has(id));\n\n const paddingLeft = `calc(var(--le-nav-item-padding-x) + ${depth} * var(--le-spacing-4))`;\n\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'treeitem' }\n : { type: 'button', role: 'treeitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <li\n class={classnames('nav-node', {\n 'disabled': item.disabled,\n 'selected': item.selected || (this.activeUrl && item.href === this.activeUrl),\n open,\n 'has-children': hasChildren,\n })}\n key={id}\n role=\"none\"\n >\n <div class=\"nav-row\" style={{ paddingLeft }}>\n {hasChildren ? (\n <button\n type=\"button\"\n class=\"nav-toggle\"\n aria-label={open ? 'Collapse' : 'Expand'}\n aria-expanded={open ? 'true' : 'false'}\n onClick={(e: MouseEvent) => this.handleToggle(e, item, id)}\n disabled={item.disabled}\n >\n <le-icon name=\"chevron-down\" class=\"nav-chevron\" aria-hidden=\"true\" />\n </button>\n ) : (\n <span class=\"nav-toggle-spacer\" aria-hidden=\"true\" />\n )}\n\n <TagType\n class=\"nav-item\"\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // For buttons, also toggle if this is a purely structural node.\n this.handleItemSelect(e, item, id);\n if (!item.href && hasChildren && !item.disabled) {\n this.handleToggle(e, item, id);\n return;\n }\n\n if (!item.disabled && closePopover) {\n closePopover();\n }\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"nav-text\">\n <span class=\"nav-label\">{item.label}</span>\n {item.description && (\n <span class=\"nav-description\">{item.description}</span>\n )}\n </span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n\n {hasChildren && (\n <le-collapse class=\"nav-children\" closed={!open} noFading={true} role=\"group\">\n {this.renderVerticalList(children, {\n depth: depth + 1,\n pathPrefix: path,\n autoOpenIds: openFromSearch,\n submenuId,\n closePopover,\n })}\n </le-collapse>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n }\n\n private renderHorizontalItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n if (!hasChildren) {\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'menuitem' }\n : { type: 'button', role: 'menuitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <TagType\n class={classnames('h-link', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => this.handleItemSelect(e, item, id)}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n );\n }\n\n const submenuId = id;\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <le-popover\n ref={el => {\n if (el) this.popoverRefs.set(submenuId, el);\n }}\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"start\"\n minWidth=\"240px\"\n >\n <div\n slot=\"trigger\"\n class={classnames('h-trigger', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n role=\"menuitem\"\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // Don’t let le-popover auto-toggle from its internal wrapper.\n e.stopPropagation();\n if (item.disabled) return;\n\n if (item.href) {\n this.handleItemSelect(e, item, id);\n this.popoverRefs.get(submenuId)?.hide();\n } else {\n this.popoverRefs.get(submenuId)?.toggle();\n }\n }}\n >\n {item.href ? (\n <a\n class=\"h-link\"\n href={item.href}\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n this.handleItemSelect(e, item, id);\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </a>\n ) : (\n <button\n type=\"button\"\n class=\"h-link\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n this.popoverRefs.get(submenuId)?.toggle();\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </button>\n )}\n </div>\n\n <div class=\"popover-menu\">\n {this.renderVerticalList(children, {\n depth: 0,\n pathPrefix: String(index),\n searchable: this.submenuSearchable,\n searchQuery: this.submenuQueries[submenuId] ?? '',\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n submenuId,\n closePopover: () => this.popoverRefs.get(submenuId)?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n );\n }\n\n private getOverflowMode(): 'more' | 'scroll' | 'hamburger' | 'wrap' {\n if (this.wrap) return 'wrap';\n return this.overflowMode;\n }\n\n private getBarAlignment(): 'start' | 'end' | 'center' | 'stretch' {\n // Map le-navigation align to le-bar alignItems\n // 'space-between' doesn't map directly, use 'stretch' as closest\n if (this.align === 'space-between') return 'stretch';\n return this.align;\n }\n\n private renderOverflowPopover() {\n const items = this.parsedItems;\n const overflowSet = new Set(this.overflowIds || []);\n\n // Determine which items to show in the popover\n let itemsToShow: LeOption[];\n\n if (this.hamburgerActive) {\n // In hamburger mode, show all items\n itemsToShow = items;\n } else {\n // In \"more\" mode, show only overflow items\n itemsToShow = items.filter((item, index) => {\n const id = this.getItemId(item, String(index));\n return overflowSet.has(id);\n });\n }\n\n if (itemsToShow.length === 0) return null;\n\n const isHamburger = this.hamburgerActive;\n\n return (\n <le-popover\n mode=\"default\"\n open={this.overflowPopoverOpen}\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n onLePopoverClose={this.closeOverflowPopover}\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part={isHamburger ? 'hamburger-trigger' : 'more-trigger'}\n aria-label={isHamburger ? 'Open menu' : 'More'}\n onClick={this.openOverflowPopover}\n >\n <slot name={isHamburger ? 'hamburger-trigger' : 'more-trigger'}>\n <le-icon name={isHamburger ? 'hamburger' : 'ellipsis-horizontal'} />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(itemsToShow, {\n depth: 0,\n pathPrefix: '',\n closePopover: this.closeOverflowPopover,\n })}\n </div>\n </le-popover>\n );\n }\n\n private renderHorizontal() {\n const items = this.parsedItems;\n const overflowMode = this.getOverflowMode();\n const showOverflowButton = (this.overflowIds?.length ?? 0) > 0 || this.hamburgerActive;\n\n return (\n <div class=\"nav-horizontal-wrapper\">\n <le-bar\n class={classnames('nav-bar', {\n 'align-end': this.align === 'end',\n 'align-center': this.align === 'center',\n 'align-space-between': this.align === 'space-between',\n })}\n overflow={overflowMode}\n alignItems={this.getBarAlignment()}\n disablePopover={true}\n onLeBarOverflowChange={this.handleBarOverflowChange}\n >\n {items.map((item, index) => this.renderHorizontalItem(item, index))}\n </le-bar>\n\n {/* Overflow popover - rendered outside le-bar to have full control over content */}\n {showOverflowButton && this.renderOverflowPopover()}\n </div>\n );\n }\n\n render() {\n const items = this.parsedItems;\n\n if (this.orientation === 'horizontal') {\n return (\n <Host>\n <le-component component=\"le-navigation\">{this.renderHorizontal()}</le-component>\n </Host>\n );\n }\n\n return (\n <Host>\n <le-component component=\"le-navigation\">\n {this.renderVerticalList(items, {\n depth: 0,\n pathPrefix: '',\n searchable: this.searchable,\n searchQuery: this.searchQuery,\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n })}\n </le-component>\n </Host>\n );\n }\n}\n"],"version":3}
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-01-10T11:23:59",
2
+ "timestamp": "2026-01-10T12:12:08",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.39.0",
@@ -214,8 +214,8 @@ const LeNavigation = class {
214
214
  requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());
215
215
  };
216
216
  handleBarOverflowChange = (e) => {
217
- this.overflowIds = e.detail.overflowingIds;
218
- this.hamburgerActive = e.detail.hamburgerActive;
217
+ this.overflowIds = e.detail.overflowingIds || [];
218
+ this.hamburgerActive = e.detail.hamburgerActive || false;
219
219
  };
220
220
  openOverflowPopover = () => {
221
221
  this.overflowPopoverOpen = true;
@@ -331,7 +331,7 @@ const LeNavigation = class {
331
331
  }
332
332
  renderOverflowPopover() {
333
333
  const items = this.parsedItems;
334
- const overflowSet = new Set(this.overflowIds);
334
+ const overflowSet = new Set(this.overflowIds || []);
335
335
  // Determine which items to show in the popover
336
336
  let itemsToShow;
337
337
  if (this.hamburgerActive) {
@@ -357,7 +357,7 @@ const LeNavigation = class {
357
357
  renderHorizontal() {
358
358
  const items = this.parsedItems;
359
359
  const overflowMode = this.getOverflowMode();
360
- const showOverflowButton = this.overflowIds.length > 0 || this.hamburgerActive;
360
+ const showOverflowButton = (this.overflowIds?.length ?? 0) > 0 || this.hamburgerActive;
361
361
  return (h("div", { class: "nav-horizontal-wrapper" }, h("le-bar", { class: classnames('nav-bar', {
362
362
  'align-end': this.align === 'end',
363
363
  'align-center': this.align === 'center',
@@ -1 +1 @@
1
- {"version":3,"file":"le-navigation.entry.js","sources":["src/components/le-navigation/le-navigation.css?tag=le-navigation&encapsulation=shadow","src/components/le-navigation/le-navigation.tsx"],"sourcesContent":[":host {\n display: block;\n\n --le-nav-radius: var(--le-radius-md);\n --le-nav-gap: var(--le-spacing-2);\n --le-nav-item-padding-x: var(--le-spacing-1);\n --le-nav-item-padding-y: var(--le-spacing-2);\n --le-nav-item-gap: var(--le-spacing-2);\n\n --le-nav-color: var(--le-color-text-primary);\n --le-nav-muted: var(--le-color-text-secondary);\n --le-nav-hover-bg: var(--le-color-gray-100);\n --le-nav-selected-bg: var(--le-color-primary);\n --le-nav-selected-color: var(--le-color-primary-contrast);\n}\n\n/*\n * In horizontal nowrap mode, this component is commonly used inside flex layouts\n * (e.g. headers). If the host shrink-wraps to its contents, enabling overflow\n * (moving items into \"More\") changes the host width, which can cause oscillation\n * between states. Make the host participate in flex sizing instead.\n */\n:host([orientation='horizontal']:not([wrap])) {\n flex: 1 1 0%;\n min-width: 0;\n}\n\n/* ==========================================\n * Vertical navigation\n * ========================================== */\n\n.nav-vertical {\n display: flex;\n flex-direction: column;\n gap: var(--le-nav-gap);\n}\n\n.nav-search {\n width: 100%;\n}\n\n.nav-search-input {\n --le-input-radius: var(--le-radius-md);\n}\n\n.nav-empty {\n padding: var(--le-spacing-2);\n color: var(--le-nav-muted);\n font-size: var(--le-font-size-sm);\n}\n\n.nav-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--le-spacing-1);\n}\n\n.nav-row {\n display: flex;\n align-items: stretch;\n gap: var(--le-spacing-1);\n border-radius: var(--le-nav-radius);\n}\n\n.nav-row:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.nav-toggle,\n.nav-toggle-spacer {\n box-sizing: border-box;\n width: var(--le-spacing-4);\n min-width: var(--le-spacing-4);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n border-radius: var(--le-nav-radius);\n color: inherit;\n}\n\n.nav-toggle {\n background: transparent;\n cursor: pointer;\n opacity: 0.4;\n}\n\n.nav-toggle:hover:not(:disabled) {\n opacity: 1;\n}\n\n.nav-toggle:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n opacity: 1;\n}\n\n.nav-chevron {\n display: inline-block;\n transition: transform var(--le-transition-fast);\n}\n\n.nav-chevron svg {\n display: block;\n width: var(--le-spacing-4);\n height: var(--le-spacing-4);\n}\n\n.nav-node > div > button > .nav-chevron {\n transform: rotate(-90deg);\n}\n.nav-node.open > div > button > .nav-chevron {\n transform: rotate(0deg);\n}\n\n.nav-item {\n flex: 1;\n display: inline-flex;\n align-items: center;\n gap: var(--le-nav-item-gap);\n padding: var(--le-nav-item-padding-y) var(--le-nav-item-padding-x) var(--le-nav-item-padding-y) 0;\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n text-decoration: none;\n color: var(--le-nav-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n line-height: var(--le-line-height-tight);\n cursor: pointer;\n}\n\n.nav-item:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.nav-node.selected > .nav-row {\n background: var(--le-nav-selected-bg);\n color: var(--le-nav-selected-color);\n}\n.nav-node.selected > .nav-row > .nav-item {\n color: inherit;\n}\n\n.nav-node.disabled > .nav-row > .nav-item {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.nav-text {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.nav-label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nav-description {\n color: color-mix(in srgb, var(--le-nav-muted) 90%, transparent);\n font-size: var(--le-font-size-sm);\n line-height: var(--le-line-height-tight);\n}\n\n.nav-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.nav-icon-end {\n margin-left: auto;\n}\n\n.nav-children {\n margin-top: var(--le-spacing-1);\n}\n\n/* ==========================================\n * Horizontal navigation (using le-bar)\n * ========================================== */\n\n.nav-horizontal-wrapper {\n display: flex;\n align-items: center;\n gap: var(--le-spacing-2);\n}\n\n.nav-bar {\n flex: 1 1 0%;\n min-width: 0;\n --le-bar-gap: var(--le-spacing-2);\n}\n\n.nav-bar.align-end {\n --le-bar-justify: flex-end;\n}\n\n.nav-bar.align-center {\n --le-bar-justify: center;\n}\n\n.nav-bar.align-space-between {\n --le-bar-justify: space-between;\n}\n\n.h-item {\n display: flex;\n align-items: center;\n}\n\n.h-link {\n display: inline-flex;\n align-items: center;\n gap: var(--le-spacing-2);\n padding: var(--le-spacing-2) var(--le-spacing-3);\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n text-decoration: none;\n color: var(--le-nav-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n cursor: pointer;\n}\n\n.h-link:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.h-link:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.h-link.disabled,\n.h-trigger.disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.h-link.selected,\n.h-trigger.selected {\n background: var(--le-nav-selected-bg);\n color: var(--le-nav-selected-color);\n}\n\n.h-label {\n white-space: nowrap;\n}\n\n.h-trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--le-spacing-1);\n border-radius: var(--le-nav-radius);\n}\n\n.h-submenu-toggle {\n width: var(--le-spacing-3);\n height: var(--le-spacing-3);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n border-radius: var(--le-nav-radius);\n background: transparent;\n color: currentColor;\n cursor: pointer;\n}\n\n.h-submenu-toggle:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.overflow-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--le-spacing-2);\n padding: var(--le-spacing-2) var(--le-spacing-3);\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n color: var(--le-nav-color);\n cursor: pointer;\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n}\n\n.overflow-trigger:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.overflow-trigger:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n/* Overflow trigger wrapper in le-bar slot */\n.nav-overflow-trigger {\n display: flex;\n align-items: center;\n}\n\n/* Popover list container */\nle-popover::part(content) {\n padding: var(--le-spacing-1);\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport { LeOption } from '../../types/options';\nimport { classnames, generateId } from '../../utils/utils';\nimport { LeBarOverflowChangeDetail } from '../le-bar/le-bar';\n\nexport interface LeNavigationItemSelectDetail {\n item: LeOption;\n id: string;\n href?: string;\n originalEvent: MouseEvent;\n}\n\nexport interface LeNavigationItemToggleDetail {\n item: LeOption;\n id: string;\n open: boolean;\n originalEvent: MouseEvent;\n}\n\ninterface VerticalListRenderOptions {\n depth: number;\n pathPrefix: string;\n autoOpenIds?: Set<string>;\n searchable?: boolean;\n searchQuery?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n submenuId?: string;\n closePopover?: () => void;\n}\n\n/**\n * Navigation component with vertical (tree) and horizontal (menu) layouts.\n *\n * - Accepts items as `LeOption[]` or a JSON string.\n * - Supports hierarchical items via `children`.\n * - Supports persisted expansion via `open` on items.\n *\n * @slot hamburger-trigger - Custom trigger contents for the hamburger button\n * @slot more-trigger - Custom trigger contents for the \"More\" button\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-navigation',\n styleUrl: 'le-navigation.css',\n shadow: true,\n})\nexport class LeNavigation {\n @Element() el: HTMLElement;\n\n /**\n * Navigation items.\n * Can be passed as an array or JSON string (same pattern as le-select).\n */\n @Prop() items: LeOption[] | string = [];\n\n /**\n * Layout orientation.\n */\n @Prop({ reflect: true }) orientation: 'vertical' | 'horizontal' = 'horizontal';\n\n /**\n * Horizontal wrapping behavior.\n * If false, overflow behavior depends on `overflowMode`.\n */\n @Prop({ reflect: true }) wrap: boolean = true;\n\n /**\n * Overflow behavior for horizontal, non-wrapping menus.\n * - more: moves overflow items into a \"More\" popover\n * - hamburger: turns the whole nav into a hamburger popover\n */\n @Prop({ reflect: true }) overflowMode: 'more' | 'hamburger' = 'more';\n\n /**\n * Minimum number of visible top-level items required to use the \"More\" overflow.\n * If fewer would be visible, the navigation falls back to hamburger.\n */\n @Prop() minVisibleItemsForMore: number = 2;\n\n /**\n * Alignment of the menu items within the navigation bar.\n */\n @Prop({ reflect: true }) align: 'start' | 'end' | 'center' | 'space-between' = 'start';\n\n /**\n * Active url for automatic selection.\n */\n @Prop() activeUrl: string = '';\n\n /**\n * Enables a search input for the vertical navigation.\n */\n @Prop() searchable: boolean = false;\n\n /**\n * Placeholder text for the search input.\n */\n @Prop() searchPlaceholder: string = 'Search...';\n\n /**\n * Text shown when no items match the filter.\n */\n @Prop() emptyText: string = 'No results found';\n\n /**\n * Whether submenu popovers should include a filter input.\n */\n @Prop() submenuSearchable: boolean = false;\n\n /**\n * Fired when a navigation item is activated.\n *\n * This event is cancelable. Call `event.preventDefault()` to prevent\n * default browser navigation and implement custom routing.\n */\n @Event({ cancelable: true }) leNavItemSelect: EventEmitter<LeNavigationItemSelectDetail>;\n\n /**\n * Fired when a tree branch is toggled.\n */\n @Event() leNavItemToggle: EventEmitter<LeNavigationItemToggleDetail>;\n\n @State() private searchQuery: string = '';\n\n @State() private openState: Record<string, boolean> = {};\n\n /** IDs of items currently in overflow (from le-bar) */\n @State() private overflowIds: string[] = [];\n\n /** Whether hamburger mode is active (from le-bar) */\n @State() private hamburgerActive: boolean = false;\n\n @State() private submenuQueries: Record<string, string> = {};\n\n /** Whether the overflow popover is open */\n @State() private overflowPopoverOpen: boolean = false;\n\n private popoverRefs: Map<string, HTMLLePopoverElement> = new Map();\n\n private instanceId: string = generateId('le-nav');\n\n private partFromOptionPart(base: string, part?: string): string {\n const raw = (part ?? '').trim();\n if (!raw) return base;\n\n const tokens = raw\n .split(/\\s+/)\n .map(t => t.replace(/[^a-zA-Z0-9_-]/g, ''))\n .filter(Boolean);\n\n if (tokens.length === 0) return base;\n\n return [base, ...tokens.map(t => `${base}-${t}`)].join(' ');\n }\n\n @Watch('items')\n @Watch('orientation')\n @Watch('wrap')\n @Watch('overflowMode')\n handleLayoutInputsChange() {\n // Reset overflow state when layout inputs change\n this.overflowIds = [];\n this.hamburgerActive = false;\n }\n\n disconnectedCallback() {\n // Cleanup if needed\n }\n\n private get parsedItems(): LeOption[] {\n if (typeof this.items === 'string') {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n\n return this.items;\n }\n\n private getItemId(item: LeOption, path: string): string {\n return item.id ?? `${this.instanceId}:${path}`;\n }\n\n private getChildItems(item: LeOption): LeOption[] {\n return Array.isArray(item.children) ? item.children : [];\n }\n\n private isOpen(item: LeOption, id: string): boolean {\n const fromState = this.openState[id];\n if (typeof fromState === 'boolean') return fromState;\n return !!item.open;\n }\n\n private setOpen(id: string, open: boolean) {\n if (this.openState[id] === open) return;\n this.openState = {\n ...this.openState,\n [id]: open,\n };\n }\n\n private matchesQuery(option: LeOption, query: string): boolean {\n if (!query) return true;\n\n const q = query.toLowerCase();\n return (\n option.label.toLowerCase().includes(q) ||\n (option.description?.toLowerCase().includes(q) ?? false)\n );\n }\n\n private filterTree(\n items: LeOption[],\n query: string,\n pathPrefix: string,\n autoOpen: Set<string>,\n ): LeOption[] {\n if (!query) return items;\n\n const result: LeOption[] = [];\n\n items.forEach((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n\n const children = this.getChildItems(item);\n const filteredChildren = this.filterTree(children, query, path, autoOpen);\n const selfMatch = this.matchesQuery(item, query);\n const childMatch = filteredChildren.length > 0;\n\n if (selfMatch || childMatch) {\n if (childMatch) {\n autoOpen.add(id);\n }\n\n if (childMatch && filteredChildren !== children) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n } else {\n result.push(item);\n }\n }\n });\n\n return result;\n }\n\n private handleItemSelect = (e: MouseEvent, item: LeOption, id: string) => {\n if (item.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n const emitted = this.leNavItemSelect.emit({\n item,\n id,\n href: item.href,\n originalEvent: e,\n });\n\n if (emitted.defaultPrevented) {\n e.preventDefault();\n }\n };\n\n private handleToggle = (e: MouseEvent, item: LeOption, id: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (item.disabled) return;\n\n const next = !this.isOpen(item, id);\n this.setOpen(id, next);\n\n this.leNavItemToggle.emit({\n item,\n id,\n open: next,\n originalEvent: e,\n });\n };\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n };\n\n private handleSubmenuSearchInput = (submenuId: string, e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target.value;\n\n if (this.submenuQueries[submenuId] === value) return;\n\n this.submenuQueries = {\n ...this.submenuQueries,\n [submenuId]: value,\n };\n\n // Position may change as items filter.\n requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());\n };\n\n private handleBarOverflowChange = (e: CustomEvent<LeBarOverflowChangeDetail>) => {\n this.overflowIds = e.detail.overflowingIds;\n this.hamburgerActive = e.detail.hamburgerActive;\n };\n\n private openOverflowPopover = () => {\n this.overflowPopoverOpen = true;\n };\n\n private closeOverflowPopover = () => {\n this.overflowPopoverOpen = false;\n };\n\n private renderVerticalList(\n items: LeOption[],\n {\n depth,\n pathPrefix,\n autoOpenIds,\n searchable,\n searchQuery,\n searchPlaceholder,\n emptyText,\n submenuId,\n closePopover,\n }: VerticalListRenderOptions,\n ) {\n const query = searchQuery ?? '';\n const openFromSearch = autoOpenIds ?? new Set<string>();\n\n const filtered = query ? this.filterTree(items, query, pathPrefix, openFromSearch) : items;\n\n return (\n <div class={classnames('nav-vertical', { 'is-submenu': !!submenuId })}>\n {searchable && (\n <div class=\"nav-search\">\n <le-string-input\n mode=\"default\"\n class=\"nav-search-input\"\n placeholder={searchPlaceholder ?? 'Search...'}\n value={query}\n onInput={(e: Event) =>\n submenuId ? this.handleSubmenuSearchInput(submenuId, e) : this.handleSearchInput(e)\n }\n />\n </div>\n )}\n\n {filtered.length === 0 ? (\n <div class=\"nav-empty\">{emptyText ?? this.emptyText}</div>\n ) : (\n <ul class=\"nav-list\" role=\"tree\">\n {filtered.map((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n const open = hasChildren && (this.isOpen(item, id) || openFromSearch.has(id));\n\n const paddingLeft = `calc(var(--le-nav-item-padding-x) + ${depth} * var(--le-spacing-4))`;\n\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'treeitem' }\n : { type: 'button', role: 'treeitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <li\n class={classnames('nav-node', {\n 'disabled': item.disabled,\n 'selected': item.selected || (this.activeUrl && item.href === this.activeUrl),\n open,\n 'has-children': hasChildren,\n })}\n key={id}\n role=\"none\"\n >\n <div class=\"nav-row\" style={{ paddingLeft }}>\n {hasChildren ? (\n <button\n type=\"button\"\n class=\"nav-toggle\"\n aria-label={open ? 'Collapse' : 'Expand'}\n aria-expanded={open ? 'true' : 'false'}\n onClick={(e: MouseEvent) => this.handleToggle(e, item, id)}\n disabled={item.disabled}\n >\n <le-icon name=\"chevron-down\" class=\"nav-chevron\" aria-hidden=\"true\" />\n </button>\n ) : (\n <span class=\"nav-toggle-spacer\" aria-hidden=\"true\" />\n )}\n\n <TagType\n class=\"nav-item\"\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // For buttons, also toggle if this is a purely structural node.\n this.handleItemSelect(e, item, id);\n if (!item.href && hasChildren && !item.disabled) {\n this.handleToggle(e, item, id);\n return;\n }\n\n if (!item.disabled && closePopover) {\n closePopover();\n }\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"nav-text\">\n <span class=\"nav-label\">{item.label}</span>\n {item.description && (\n <span class=\"nav-description\">{item.description}</span>\n )}\n </span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n\n {hasChildren && (\n <le-collapse class=\"nav-children\" closed={!open} noFading={true} role=\"group\">\n {this.renderVerticalList(children, {\n depth: depth + 1,\n pathPrefix: path,\n autoOpenIds: openFromSearch,\n submenuId,\n closePopover,\n })}\n </le-collapse>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n }\n\n private renderHorizontalItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n if (!hasChildren) {\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'menuitem' }\n : { type: 'button', role: 'menuitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <TagType\n class={classnames('h-link', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => this.handleItemSelect(e, item, id)}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n );\n }\n\n const submenuId = id;\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <le-popover\n ref={el => {\n if (el) this.popoverRefs.set(submenuId, el);\n }}\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"start\"\n minWidth=\"240px\"\n >\n <div\n slot=\"trigger\"\n class={classnames('h-trigger', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n role=\"menuitem\"\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // Don’t let le-popover auto-toggle from its internal wrapper.\n e.stopPropagation();\n if (item.disabled) return;\n\n if (item.href) {\n this.handleItemSelect(e, item, id);\n this.popoverRefs.get(submenuId)?.hide();\n } else {\n this.popoverRefs.get(submenuId)?.toggle();\n }\n }}\n >\n {item.href ? (\n <a\n class=\"h-link\"\n href={item.href}\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n this.handleItemSelect(e, item, id);\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </a>\n ) : (\n <button\n type=\"button\"\n class=\"h-link\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n this.popoverRefs.get(submenuId)?.toggle();\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </button>\n )}\n </div>\n\n <div class=\"popover-menu\">\n {this.renderVerticalList(children, {\n depth: 0,\n pathPrefix: String(index),\n searchable: this.submenuSearchable,\n searchQuery: this.submenuQueries[submenuId] ?? '',\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n submenuId,\n closePopover: () => this.popoverRefs.get(submenuId)?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n );\n }\n\n private getOverflowMode(): 'more' | 'scroll' | 'hamburger' | 'wrap' {\n if (this.wrap) return 'wrap';\n return this.overflowMode;\n }\n\n private getBarAlignment(): 'start' | 'end' | 'center' | 'stretch' {\n // Map le-navigation align to le-bar alignItems\n // 'space-between' doesn't map directly, use 'stretch' as closest\n if (this.align === 'space-between') return 'stretch';\n return this.align;\n }\n\n private renderOverflowPopover() {\n const items = this.parsedItems;\n const overflowSet = new Set(this.overflowIds);\n\n // Determine which items to show in the popover\n let itemsToShow: LeOption[];\n\n if (this.hamburgerActive) {\n // In hamburger mode, show all items\n itemsToShow = items;\n } else {\n // In \"more\" mode, show only overflow items\n itemsToShow = items.filter((item, index) => {\n const id = this.getItemId(item, String(index));\n return overflowSet.has(id);\n });\n }\n\n if (itemsToShow.length === 0) return null;\n\n const isHamburger = this.hamburgerActive;\n\n return (\n <le-popover\n mode=\"default\"\n open={this.overflowPopoverOpen}\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n onLePopoverClose={this.closeOverflowPopover}\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part={isHamburger ? 'hamburger-trigger' : 'more-trigger'}\n aria-label={isHamburger ? 'Open menu' : 'More'}\n onClick={this.openOverflowPopover}\n >\n <slot name={isHamburger ? 'hamburger-trigger' : 'more-trigger'}>\n <le-icon name={isHamburger ? 'hamburger' : 'ellipsis-horizontal'} />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(itemsToShow, {\n depth: 0,\n pathPrefix: '',\n closePopover: this.closeOverflowPopover,\n })}\n </div>\n </le-popover>\n );\n }\n\n private renderHorizontal() {\n const items = this.parsedItems;\n const overflowMode = this.getOverflowMode();\n const showOverflowButton = this.overflowIds.length > 0 || this.hamburgerActive;\n\n return (\n <div class=\"nav-horizontal-wrapper\">\n <le-bar\n class={classnames('nav-bar', {\n 'align-end': this.align === 'end',\n 'align-center': this.align === 'center',\n 'align-space-between': this.align === 'space-between',\n })}\n overflow={overflowMode}\n alignItems={this.getBarAlignment()}\n disablePopover={true}\n onLeBarOverflowChange={this.handleBarOverflowChange}\n >\n {items.map((item, index) => this.renderHorizontalItem(item, index))}\n </le-bar>\n\n {/* Overflow popover - rendered outside le-bar to have full control over content */}\n {showOverflowButton && this.renderOverflowPopover()}\n </div>\n );\n }\n\n render() {\n const items = this.parsedItems;\n\n if (this.orientation === 'horizontal') {\n return (\n <Host>\n <le-component component=\"le-navigation\">{this.renderHorizontal()}</le-component>\n </Host>\n );\n }\n\n return (\n <Host>\n <le-component component=\"le-navigation\">\n {this.renderVerticalList(items, {\n depth: 0,\n pathPrefix: '',\n searchable: this.searchable,\n searchQuery: this.searchQuery,\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n })}\n </le-component>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"le-navigation.entry.js","sources":["src/components/le-navigation/le-navigation.css?tag=le-navigation&encapsulation=shadow","src/components/le-navigation/le-navigation.tsx"],"sourcesContent":[":host {\n display: block;\n\n --le-nav-radius: var(--le-radius-md);\n --le-nav-gap: var(--le-spacing-2);\n --le-nav-item-padding-x: var(--le-spacing-1);\n --le-nav-item-padding-y: var(--le-spacing-2);\n --le-nav-item-gap: var(--le-spacing-2);\n\n --le-nav-color: var(--le-color-text-primary);\n --le-nav-muted: var(--le-color-text-secondary);\n --le-nav-hover-bg: var(--le-color-gray-100);\n --le-nav-selected-bg: var(--le-color-primary);\n --le-nav-selected-color: var(--le-color-primary-contrast);\n}\n\n/*\n * In horizontal nowrap mode, this component is commonly used inside flex layouts\n * (e.g. headers). If the host shrink-wraps to its contents, enabling overflow\n * (moving items into \"More\") changes the host width, which can cause oscillation\n * between states. Make the host participate in flex sizing instead.\n */\n:host([orientation='horizontal']:not([wrap])) {\n flex: 1 1 0%;\n min-width: 0;\n}\n\n/* ==========================================\n * Vertical navigation\n * ========================================== */\n\n.nav-vertical {\n display: flex;\n flex-direction: column;\n gap: var(--le-nav-gap);\n}\n\n.nav-search {\n width: 100%;\n}\n\n.nav-search-input {\n --le-input-radius: var(--le-radius-md);\n}\n\n.nav-empty {\n padding: var(--le-spacing-2);\n color: var(--le-nav-muted);\n font-size: var(--le-font-size-sm);\n}\n\n.nav-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--le-spacing-1);\n}\n\n.nav-row {\n display: flex;\n align-items: stretch;\n gap: var(--le-spacing-1);\n border-radius: var(--le-nav-radius);\n}\n\n.nav-row:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.nav-toggle,\n.nav-toggle-spacer {\n box-sizing: border-box;\n width: var(--le-spacing-4);\n min-width: var(--le-spacing-4);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n border-radius: var(--le-nav-radius);\n color: inherit;\n}\n\n.nav-toggle {\n background: transparent;\n cursor: pointer;\n opacity: 0.4;\n}\n\n.nav-toggle:hover:not(:disabled) {\n opacity: 1;\n}\n\n.nav-toggle:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n opacity: 1;\n}\n\n.nav-chevron {\n display: inline-block;\n transition: transform var(--le-transition-fast);\n}\n\n.nav-chevron svg {\n display: block;\n width: var(--le-spacing-4);\n height: var(--le-spacing-4);\n}\n\n.nav-node > div > button > .nav-chevron {\n transform: rotate(-90deg);\n}\n.nav-node.open > div > button > .nav-chevron {\n transform: rotate(0deg);\n}\n\n.nav-item {\n flex: 1;\n display: inline-flex;\n align-items: center;\n gap: var(--le-nav-item-gap);\n padding: var(--le-nav-item-padding-y) var(--le-nav-item-padding-x) var(--le-nav-item-padding-y) 0;\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n text-decoration: none;\n color: var(--le-nav-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n line-height: var(--le-line-height-tight);\n cursor: pointer;\n}\n\n.nav-item:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.nav-node.selected > .nav-row {\n background: var(--le-nav-selected-bg);\n color: var(--le-nav-selected-color);\n}\n.nav-node.selected > .nav-row > .nav-item {\n color: inherit;\n}\n\n.nav-node.disabled > .nav-row > .nav-item {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.nav-text {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.nav-label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.nav-description {\n color: color-mix(in srgb, var(--le-nav-muted) 90%, transparent);\n font-size: var(--le-font-size-sm);\n line-height: var(--le-line-height-tight);\n}\n\n.nav-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.nav-icon-end {\n margin-left: auto;\n}\n\n.nav-children {\n margin-top: var(--le-spacing-1);\n}\n\n/* ==========================================\n * Horizontal navigation (using le-bar)\n * ========================================== */\n\n.nav-horizontal-wrapper {\n display: flex;\n align-items: center;\n gap: var(--le-spacing-2);\n}\n\n.nav-bar {\n flex: 1 1 0%;\n min-width: 0;\n --le-bar-gap: var(--le-spacing-2);\n}\n\n.nav-bar.align-end {\n --le-bar-justify: flex-end;\n}\n\n.nav-bar.align-center {\n --le-bar-justify: center;\n}\n\n.nav-bar.align-space-between {\n --le-bar-justify: space-between;\n}\n\n.h-item {\n display: flex;\n align-items: center;\n}\n\n.h-link {\n display: inline-flex;\n align-items: center;\n gap: var(--le-spacing-2);\n padding: var(--le-spacing-2) var(--le-spacing-3);\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n text-decoration: none;\n color: var(--le-nav-color);\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n cursor: pointer;\n}\n\n.h-link:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.h-link:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n.h-link.disabled,\n.h-trigger.disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.h-link.selected,\n.h-trigger.selected {\n background: var(--le-nav-selected-bg);\n color: var(--le-nav-selected-color);\n}\n\n.h-label {\n white-space: nowrap;\n}\n\n.h-trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--le-spacing-1);\n border-radius: var(--le-nav-radius);\n}\n\n.h-submenu-toggle {\n width: var(--le-spacing-3);\n height: var(--le-spacing-3);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid transparent;\n border-radius: var(--le-nav-radius);\n background: transparent;\n color: currentColor;\n cursor: pointer;\n}\n\n.h-submenu-toggle:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.overflow-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--le-spacing-2);\n padding: var(--le-spacing-2) var(--le-spacing-3);\n border-radius: var(--le-nav-radius);\n border: 1px solid transparent;\n background: transparent;\n color: var(--le-nav-color);\n cursor: pointer;\n font-family: var(--le-font-family-base);\n font-size: var(--le-font-size-md);\n}\n\n.overflow-trigger:hover {\n background: var(--le-nav-hover-bg);\n}\n\n.overflow-trigger:focus-visible {\n outline: 2px solid var(--le-color-focus);\n outline-offset: 2px;\n}\n\n/* Overflow trigger wrapper in le-bar slot */\n.nav-overflow-trigger {\n display: flex;\n align-items: center;\n}\n\n/* Popover list container */\nle-popover::part(content) {\n padding: var(--le-spacing-1);\n}\n","import {\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport { LeOption } from '../../types/options';\nimport { classnames, generateId } from '../../utils/utils';\nimport { LeBarOverflowChangeDetail } from '../le-bar/le-bar';\n\nexport interface LeNavigationItemSelectDetail {\n item: LeOption;\n id: string;\n href?: string;\n originalEvent: MouseEvent;\n}\n\nexport interface LeNavigationItemToggleDetail {\n item: LeOption;\n id: string;\n open: boolean;\n originalEvent: MouseEvent;\n}\n\ninterface VerticalListRenderOptions {\n depth: number;\n pathPrefix: string;\n autoOpenIds?: Set<string>;\n searchable?: boolean;\n searchQuery?: string;\n searchPlaceholder?: string;\n emptyText?: string;\n submenuId?: string;\n closePopover?: () => void;\n}\n\n/**\n * Navigation component with vertical (tree) and horizontal (menu) layouts.\n *\n * - Accepts items as `LeOption[]` or a JSON string.\n * - Supports hierarchical items via `children`.\n * - Supports persisted expansion via `open` on items.\n *\n * @slot hamburger-trigger - Custom trigger contents for the hamburger button\n * @slot more-trigger - Custom trigger contents for the \"More\" button\n *\n * @cmsEditable true\n * @cmsCategory Navigation\n */\n@Component({\n tag: 'le-navigation',\n styleUrl: 'le-navigation.css',\n shadow: true,\n})\nexport class LeNavigation {\n @Element() el: HTMLElement;\n\n /**\n * Navigation items.\n * Can be passed as an array or JSON string (same pattern as le-select).\n */\n @Prop() items: LeOption[] | string = [];\n\n /**\n * Layout orientation.\n */\n @Prop({ reflect: true }) orientation: 'vertical' | 'horizontal' = 'horizontal';\n\n /**\n * Horizontal wrapping behavior.\n * If false, overflow behavior depends on `overflowMode`.\n */\n @Prop({ reflect: true }) wrap: boolean = true;\n\n /**\n * Overflow behavior for horizontal, non-wrapping menus.\n * - more: moves overflow items into a \"More\" popover\n * - hamburger: turns the whole nav into a hamburger popover\n */\n @Prop({ reflect: true }) overflowMode: 'more' | 'hamburger' = 'more';\n\n /**\n * Minimum number of visible top-level items required to use the \"More\" overflow.\n * If fewer would be visible, the navigation falls back to hamburger.\n */\n @Prop() minVisibleItemsForMore: number = 2;\n\n /**\n * Alignment of the menu items within the navigation bar.\n */\n @Prop({ reflect: true }) align: 'start' | 'end' | 'center' | 'space-between' = 'start';\n\n /**\n * Active url for automatic selection.\n */\n @Prop() activeUrl: string = '';\n\n /**\n * Enables a search input for the vertical navigation.\n */\n @Prop() searchable: boolean = false;\n\n /**\n * Placeholder text for the search input.\n */\n @Prop() searchPlaceholder: string = 'Search...';\n\n /**\n * Text shown when no items match the filter.\n */\n @Prop() emptyText: string = 'No results found';\n\n /**\n * Whether submenu popovers should include a filter input.\n */\n @Prop() submenuSearchable: boolean = false;\n\n /**\n * Fired when a navigation item is activated.\n *\n * This event is cancelable. Call `event.preventDefault()` to prevent\n * default browser navigation and implement custom routing.\n */\n @Event({ cancelable: true }) leNavItemSelect: EventEmitter<LeNavigationItemSelectDetail>;\n\n /**\n * Fired when a tree branch is toggled.\n */\n @Event() leNavItemToggle: EventEmitter<LeNavigationItemToggleDetail>;\n\n @State() private searchQuery: string = '';\n\n @State() private openState: Record<string, boolean> = {};\n\n /** IDs of items currently in overflow (from le-bar) */\n @State() private overflowIds: string[] = [];\n\n /** Whether hamburger mode is active (from le-bar) */\n @State() private hamburgerActive: boolean = false;\n\n @State() private submenuQueries: Record<string, string> = {};\n\n /** Whether the overflow popover is open */\n @State() private overflowPopoverOpen: boolean = false;\n\n private popoverRefs: Map<string, HTMLLePopoverElement> = new Map();\n\n private instanceId: string = generateId('le-nav');\n\n private partFromOptionPart(base: string, part?: string): string {\n const raw = (part ?? '').trim();\n if (!raw) return base;\n\n const tokens = raw\n .split(/\\s+/)\n .map(t => t.replace(/[^a-zA-Z0-9_-]/g, ''))\n .filter(Boolean);\n\n if (tokens.length === 0) return base;\n\n return [base, ...tokens.map(t => `${base}-${t}`)].join(' ');\n }\n\n @Watch('items')\n @Watch('orientation')\n @Watch('wrap')\n @Watch('overflowMode')\n handleLayoutInputsChange() {\n // Reset overflow state when layout inputs change\n this.overflowIds = [];\n this.hamburgerActive = false;\n }\n\n disconnectedCallback() {\n // Cleanup if needed\n }\n\n private get parsedItems(): LeOption[] {\n if (typeof this.items === 'string') {\n try {\n return JSON.parse(this.items);\n } catch {\n return [];\n }\n }\n\n return this.items;\n }\n\n private getItemId(item: LeOption, path: string): string {\n return item.id ?? `${this.instanceId}:${path}`;\n }\n\n private getChildItems(item: LeOption): LeOption[] {\n return Array.isArray(item.children) ? item.children : [];\n }\n\n private isOpen(item: LeOption, id: string): boolean {\n const fromState = this.openState[id];\n if (typeof fromState === 'boolean') return fromState;\n return !!item.open;\n }\n\n private setOpen(id: string, open: boolean) {\n if (this.openState[id] === open) return;\n this.openState = {\n ...this.openState,\n [id]: open,\n };\n }\n\n private matchesQuery(option: LeOption, query: string): boolean {\n if (!query) return true;\n\n const q = query.toLowerCase();\n return (\n option.label.toLowerCase().includes(q) ||\n (option.description?.toLowerCase().includes(q) ?? false)\n );\n }\n\n private filterTree(\n items: LeOption[],\n query: string,\n pathPrefix: string,\n autoOpen: Set<string>,\n ): LeOption[] {\n if (!query) return items;\n\n const result: LeOption[] = [];\n\n items.forEach((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n\n const children = this.getChildItems(item);\n const filteredChildren = this.filterTree(children, query, path, autoOpen);\n const selfMatch = this.matchesQuery(item, query);\n const childMatch = filteredChildren.length > 0;\n\n if (selfMatch || childMatch) {\n if (childMatch) {\n autoOpen.add(id);\n }\n\n if (childMatch && filteredChildren !== children) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n } else {\n result.push(item);\n }\n }\n });\n\n return result;\n }\n\n private handleItemSelect = (e: MouseEvent, item: LeOption, id: string) => {\n if (item.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n const emitted = this.leNavItemSelect.emit({\n item,\n id,\n href: item.href,\n originalEvent: e,\n });\n\n if (emitted.defaultPrevented) {\n e.preventDefault();\n }\n };\n\n private handleToggle = (e: MouseEvent, item: LeOption, id: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (item.disabled) return;\n\n const next = !this.isOpen(item, id);\n this.setOpen(id, next);\n\n this.leNavItemToggle.emit({\n item,\n id,\n open: next,\n originalEvent: e,\n });\n };\n\n private handleSearchInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n this.searchQuery = target.value;\n };\n\n private handleSubmenuSearchInput = (submenuId: string, e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = target.value;\n\n if (this.submenuQueries[submenuId] === value) return;\n\n this.submenuQueries = {\n ...this.submenuQueries,\n [submenuId]: value,\n };\n\n // Position may change as items filter.\n requestAnimationFrame(() => this.popoverRefs.get(submenuId)?.updatePosition());\n };\n\n private handleBarOverflowChange = (e: CustomEvent<LeBarOverflowChangeDetail>) => {\n this.overflowIds = e.detail.overflowingIds || [];\n this.hamburgerActive = e.detail.hamburgerActive || false;\n };\n\n private openOverflowPopover = () => {\n this.overflowPopoverOpen = true;\n };\n\n private closeOverflowPopover = () => {\n this.overflowPopoverOpen = false;\n };\n\n private renderVerticalList(\n items: LeOption[],\n {\n depth,\n pathPrefix,\n autoOpenIds,\n searchable,\n searchQuery,\n searchPlaceholder,\n emptyText,\n submenuId,\n closePopover,\n }: VerticalListRenderOptions,\n ) {\n const query = searchQuery ?? '';\n const openFromSearch = autoOpenIds ?? new Set<string>();\n\n const filtered = query ? this.filterTree(items, query, pathPrefix, openFromSearch) : items;\n\n return (\n <div class={classnames('nav-vertical', { 'is-submenu': !!submenuId })}>\n {searchable && (\n <div class=\"nav-search\">\n <le-string-input\n mode=\"default\"\n class=\"nav-search-input\"\n placeholder={searchPlaceholder ?? 'Search...'}\n value={query}\n onInput={(e: Event) =>\n submenuId ? this.handleSubmenuSearchInput(submenuId, e) : this.handleSearchInput(e)\n }\n />\n </div>\n )}\n\n {filtered.length === 0 ? (\n <div class=\"nav-empty\">{emptyText ?? this.emptyText}</div>\n ) : (\n <ul class=\"nav-list\" role=\"tree\">\n {filtered.map((item, index) => {\n const path = pathPrefix ? `${pathPrefix}.${index}` : String(index);\n const id = this.getItemId(item, path);\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n const open = hasChildren && (this.isOpen(item, id) || openFromSearch.has(id));\n\n const paddingLeft = `calc(var(--le-nav-item-padding-x) + ${depth} * var(--le-spacing-4))`;\n\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'treeitem' }\n : { type: 'button', role: 'treeitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <li\n class={classnames('nav-node', {\n 'disabled': item.disabled,\n 'selected': item.selected || (this.activeUrl && item.href === this.activeUrl),\n open,\n 'has-children': hasChildren,\n })}\n key={id}\n role=\"none\"\n >\n <div class=\"nav-row\" style={{ paddingLeft }}>\n {hasChildren ? (\n <button\n type=\"button\"\n class=\"nav-toggle\"\n aria-label={open ? 'Collapse' : 'Expand'}\n aria-expanded={open ? 'true' : 'false'}\n onClick={(e: MouseEvent) => this.handleToggle(e, item, id)}\n disabled={item.disabled}\n >\n <le-icon name=\"chevron-down\" class=\"nav-chevron\" aria-hidden=\"true\" />\n </button>\n ) : (\n <span class=\"nav-toggle-spacer\" aria-hidden=\"true\" />\n )}\n\n <TagType\n class=\"nav-item\"\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // For buttons, also toggle if this is a purely structural node.\n this.handleItemSelect(e, item, id);\n if (!item.href && hasChildren && !item.disabled) {\n this.handleToggle(e, item, id);\n return;\n }\n\n if (!item.disabled && closePopover) {\n closePopover();\n }\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"nav-text\">\n <span class=\"nav-label\">{item.label}</span>\n {item.description && (\n <span class=\"nav-description\">{item.description}</span>\n )}\n </span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n\n {hasChildren && (\n <le-collapse class=\"nav-children\" closed={!open} noFading={true} role=\"group\">\n {this.renderVerticalList(children, {\n depth: depth + 1,\n pathPrefix: path,\n autoOpenIds: openFromSearch,\n submenuId,\n closePopover,\n })}\n </le-collapse>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n }\n\n private renderHorizontalItem(item: LeOption, index: number) {\n const id = this.getItemId(item, String(index));\n const children = this.getChildItems(item);\n const hasChildren = children.length > 0;\n\n if (!hasChildren) {\n const TagType = item.href && !item.disabled ? 'a' : 'button';\n const attrs =\n TagType === 'a'\n ? { href: item.href, role: 'menuitem' }\n : { type: 'button', role: 'menuitem' };\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <TagType\n class={classnames('h-link', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n {...attrs}\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => this.handleItemSelect(e, item, id)}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n {item.iconEnd && (\n <span class=\"nav-icon nav-icon-end\" aria-hidden=\"true\">\n {item.iconEnd}\n </span>\n )}\n </TagType>\n </div>\n );\n }\n\n const submenuId = id;\n\n const itemPart = this.partFromOptionPart('item', item.part);\n\n return (\n <div class=\"h-item\" data-bar-id={id}>\n <le-popover\n ref={el => {\n if (el) this.popoverRefs.set(submenuId, el);\n }}\n mode=\"default\"\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"start\"\n minWidth=\"240px\"\n >\n <div\n slot=\"trigger\"\n class={classnames('h-trigger', {\n disabled: item.disabled,\n selected: item.selected || (this.activeUrl && item.href === this.activeUrl),\n })}\n part={itemPart}\n role=\"menuitem\"\n aria-disabled={item.disabled ? 'true' : undefined}\n onClick={(e: MouseEvent) => {\n // Don’t let le-popover auto-toggle from its internal wrapper.\n e.stopPropagation();\n if (item.disabled) return;\n\n if (item.href) {\n this.handleItemSelect(e, item, id);\n this.popoverRefs.get(submenuId)?.hide();\n } else {\n this.popoverRefs.get(submenuId)?.toggle();\n }\n }}\n >\n {item.href ? (\n <a\n class=\"h-link\"\n href={item.href}\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n this.handleItemSelect(e, item, id);\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </a>\n ) : (\n <button\n type=\"button\"\n class=\"h-link\"\n onClick={(e: MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n this.popoverRefs.get(submenuId)?.toggle();\n }}\n >\n {item.iconStart && (\n <span class=\"nav-icon\" aria-hidden=\"true\">\n {item.iconStart}\n </span>\n )}\n <span class=\"h-label\">{item.label}</span>\n <span class=\"nav-chevron\" aria-hidden=\"true\">\n <le-icon name=\"chevron-down\" />\n </span>\n </button>\n )}\n </div>\n\n <div class=\"popover-menu\">\n {this.renderVerticalList(children, {\n depth: 0,\n pathPrefix: String(index),\n searchable: this.submenuSearchable,\n searchQuery: this.submenuQueries[submenuId] ?? '',\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n submenuId,\n closePopover: () => this.popoverRefs.get(submenuId)?.hide(),\n })}\n </div>\n </le-popover>\n </div>\n );\n }\n\n private getOverflowMode(): 'more' | 'scroll' | 'hamburger' | 'wrap' {\n if (this.wrap) return 'wrap';\n return this.overflowMode;\n }\n\n private getBarAlignment(): 'start' | 'end' | 'center' | 'stretch' {\n // Map le-navigation align to le-bar alignItems\n // 'space-between' doesn't map directly, use 'stretch' as closest\n if (this.align === 'space-between') return 'stretch';\n return this.align;\n }\n\n private renderOverflowPopover() {\n const items = this.parsedItems;\n const overflowSet = new Set(this.overflowIds || []);\n\n // Determine which items to show in the popover\n let itemsToShow: LeOption[];\n\n if (this.hamburgerActive) {\n // In hamburger mode, show all items\n itemsToShow = items;\n } else {\n // In \"more\" mode, show only overflow items\n itemsToShow = items.filter((item, index) => {\n const id = this.getItemId(item, String(index));\n return overflowSet.has(id);\n });\n }\n\n if (itemsToShow.length === 0) return null;\n\n const isHamburger = this.hamburgerActive;\n\n return (\n <le-popover\n mode=\"default\"\n open={this.overflowPopoverOpen}\n showClose={false}\n closeOnClickOutside={true}\n closeOnEscape={true}\n position=\"bottom\"\n align=\"end\"\n minWidth=\"260px\"\n onLePopoverClose={this.closeOverflowPopover}\n >\n <button\n slot=\"trigger\"\n type=\"button\"\n class=\"overflow-trigger\"\n part={isHamburger ? 'hamburger-trigger' : 'more-trigger'}\n aria-label={isHamburger ? 'Open menu' : 'More'}\n onClick={this.openOverflowPopover}\n >\n <slot name={isHamburger ? 'hamburger-trigger' : 'more-trigger'}>\n <le-icon name={isHamburger ? 'hamburger' : 'ellipsis-horizontal'} />\n </slot>\n </button>\n <div class=\"popover-menu\">\n {this.renderVerticalList(itemsToShow, {\n depth: 0,\n pathPrefix: '',\n closePopover: this.closeOverflowPopover,\n })}\n </div>\n </le-popover>\n );\n }\n\n private renderHorizontal() {\n const items = this.parsedItems;\n const overflowMode = this.getOverflowMode();\n const showOverflowButton = (this.overflowIds?.length ?? 0) > 0 || this.hamburgerActive;\n\n return (\n <div class=\"nav-horizontal-wrapper\">\n <le-bar\n class={classnames('nav-bar', {\n 'align-end': this.align === 'end',\n 'align-center': this.align === 'center',\n 'align-space-between': this.align === 'space-between',\n })}\n overflow={overflowMode}\n alignItems={this.getBarAlignment()}\n disablePopover={true}\n onLeBarOverflowChange={this.handleBarOverflowChange}\n >\n {items.map((item, index) => this.renderHorizontalItem(item, index))}\n </le-bar>\n\n {/* Overflow popover - rendered outside le-bar to have full control over content */}\n {showOverflowButton && this.renderOverflowPopover()}\n </div>\n );\n }\n\n render() {\n const items = this.parsedItems;\n\n if (this.orientation === 'horizontal') {\n return (\n <Host>\n <le-component component=\"le-navigation\">{this.renderHorizontal()}</le-component>\n </Host>\n );\n }\n\n return (\n <Host>\n <le-component component=\"le-navigation\">\n {this.renderVerticalList(items, {\n depth: 0,\n pathPrefix: '',\n searchable: this.searchable,\n searchQuery: this.searchQuery,\n searchPlaceholder: this.searchPlaceholder,\n emptyText: this.emptyText,\n })}\n </le-component>\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}