@hypoth-ui/wc 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +60 -0
  3. package/dist/button-MKQKTC5Q.js +10 -0
  4. package/dist/button-MKQKTC5Q.js.map +1 -0
  5. package/dist/chunk-4HLM6DBG.js +910 -0
  6. package/dist/chunk-4HLM6DBG.js.map +1 -0
  7. package/dist/chunk-55ID7LJL.js +3602 -0
  8. package/dist/chunk-55ID7LJL.js.map +1 -0
  9. package/dist/chunk-66HFYJD7.js +86 -0
  10. package/dist/chunk-66HFYJD7.js.map +1 -0
  11. package/dist/chunk-CZOXIJVS.js +70 -0
  12. package/dist/chunk-CZOXIJVS.js.map +1 -0
  13. package/dist/chunk-DHUM4Q5Y.js +495 -0
  14. package/dist/chunk-DHUM4Q5Y.js.map +1 -0
  15. package/dist/chunk-DNNI5BDE.js +1842 -0
  16. package/dist/chunk-DNNI5BDE.js.map +1 -0
  17. package/dist/chunk-GXKZ6E6K.js +99 -0
  18. package/dist/chunk-GXKZ6E6K.js.map +1 -0
  19. package/dist/chunk-H4GJJZ3N.js +51 -0
  20. package/dist/chunk-H4GJJZ3N.js.map +1 -0
  21. package/dist/chunk-JMPTFALJ.js +175 -0
  22. package/dist/chunk-JMPTFALJ.js.map +1 -0
  23. package/dist/chunk-MYQWCLUJ.js +45 -0
  24. package/dist/chunk-MYQWCLUJ.js.map +1 -0
  25. package/dist/chunk-QZSPWT7L.js +183 -0
  26. package/dist/chunk-QZSPWT7L.js.map +1 -0
  27. package/dist/chunk-TSKBQCTR.js +5137 -0
  28. package/dist/chunk-TSKBQCTR.js.map +1 -0
  29. package/dist/chunk-TXIIUVL3.js +130 -0
  30. package/dist/chunk-TXIIUVL3.js.map +1 -0
  31. package/dist/chunk-UM7WRO7W.js +237 -0
  32. package/dist/chunk-UM7WRO7W.js.map +1 -0
  33. package/dist/chunk-VPXL4RB3.js +202 -0
  34. package/dist/chunk-VPXL4RB3.js.map +1 -0
  35. package/dist/chunk-VX5CKSMN.js +39 -0
  36. package/dist/chunk-VX5CKSMN.js.map +1 -0
  37. package/dist/chunk-WQ5BEP3E.js +2845 -0
  38. package/dist/chunk-WQ5BEP3E.js.map +1 -0
  39. package/dist/chunk-YDQ434UH.js +60 -0
  40. package/dist/chunk-YDQ434UH.js.map +1 -0
  41. package/dist/chunk-ZWV4VI6D.js +153 -0
  42. package/dist/chunk-ZWV4VI6D.js.map +1 -0
  43. package/dist/core.d.ts +127 -0
  44. package/dist/core.js +38 -0
  45. package/dist/core.js.map +1 -0
  46. package/dist/data-display.d.ts +872 -0
  47. package/dist/data-display.js +57 -0
  48. package/dist/data-display.js.map +1 -0
  49. package/dist/ds-element-Db0LMfxI.d.ts +43 -0
  50. package/dist/feedback.d.ts +292 -0
  51. package/dist/feedback.js +31 -0
  52. package/dist/feedback.js.map +1 -0
  53. package/dist/form-controls.d.ts +1713 -0
  54. package/dist/form-controls.js +63 -0
  55. package/dist/form-controls.js.map +1 -0
  56. package/dist/icon-7IZTJ5WT.js +8 -0
  57. package/dist/icon-7IZTJ5WT.js.map +1 -0
  58. package/dist/index.d.ts +15 -0
  59. package/dist/index.js +423 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/input-LB6UR37A.js +10 -0
  62. package/dist/input-LB6UR37A.js.map +1 -0
  63. package/dist/layout.d.ts +504 -0
  64. package/dist/layout.js +34 -0
  65. package/dist/layout.js.map +1 -0
  66. package/dist/link-NHDJ6SFY.js +9 -0
  67. package/dist/link-NHDJ6SFY.js.map +1 -0
  68. package/dist/navigation.d.ts +255 -0
  69. package/dist/navigation.js +111 -0
  70. package/dist/navigation.js.map +1 -0
  71. package/dist/overlays.d.ts +1291 -0
  72. package/dist/overlays.js +106 -0
  73. package/dist/overlays.js.map +1 -0
  74. package/dist/primitives.d.ts +230 -0
  75. package/dist/primitives.js +26 -0
  76. package/dist/primitives.js.map +1 -0
  77. package/dist/registry-Bns0t11H.d.ts +233 -0
  78. package/dist/skeleton-MUdd2029.d.ts +109 -0
  79. package/dist/spinner-BWaNlc-Y.d.ts +45 -0
  80. package/dist/spinner-UIYDUVBZ.js +8 -0
  81. package/dist/spinner-UIYDUVBZ.js.map +1 -0
  82. package/dist/stepper-CCRwcQOe.d.ts +851 -0
  83. package/dist/text-MT3S3EMU.js +8 -0
  84. package/dist/text-MT3S3EMU.js.map +1 -0
  85. package/dist/visually-hidden-MW2XY4CS.js +8 -0
  86. package/dist/visually-hidden-MW2XY4CS.js.map +1 -0
  87. package/package.json +92 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/collapsible/collapsible-content.ts","../src/components/collapsible/collapsible-trigger.ts","../src/components/collapsible/collapsible.ts","../src/components/tabs/tabs-list.ts","../src/components/tabs/tabs-trigger.ts","../src/components/tabs/tabs-content.ts","../src/components/tabs/tabs.ts","../src/components/accordion/accordion-item.ts","../src/components/accordion/accordion-trigger.ts","../src/components/accordion/accordion-content.ts","../src/components/accordion/accordion.ts","../src/components/navigation-menu/navigation-menu-list.ts","../src/components/navigation-menu/navigation-menu-item.ts","../src/components/navigation-menu/navigation-menu-trigger.ts","../src/components/navigation-menu/navigation-menu-content.ts","../src/components/navigation-menu/navigation-menu-link.ts","../src/components/navigation-menu/navigation-menu-indicator.ts","../src/components/navigation-menu/navigation-menu-viewport.ts","../src/components/navigation-menu/navigation-menu.ts","../src/components/scroll-area/scroll-area-viewport.ts","../src/components/scroll-area/scroll-area-scrollbar.ts","../src/components/scroll-area/scroll-area-thumb.ts","../src/components/scroll-area/scroll-area.ts","../src/components/breadcrumb/breadcrumb-list.ts","../src/components/breadcrumb/breadcrumb-item.ts","../src/components/breadcrumb/breadcrumb-link.ts","../src/components/breadcrumb/breadcrumb-page.ts","../src/components/breadcrumb/breadcrumb-separator.ts","../src/components/breadcrumb/breadcrumb.ts","../src/components/pagination/pagination-content.ts","../src/components/pagination/pagination-item.ts","../src/components/pagination/pagination-link.ts","../src/components/pagination/pagination-previous.ts","../src/components/pagination/pagination-next.ts","../src/components/pagination/pagination-ellipsis.ts","../src/components/pagination/pagination.ts","../src/components/stepper/stepper-item.ts","../src/components/stepper/stepper-trigger.ts","../src/components/stepper/stepper-indicator.ts","../src/components/stepper/stepper-title.ts","../src/components/stepper/stepper-description.ts","../src/components/stepper/stepper-separator.ts","../src/components/stepper/stepper-content.ts","../src/components/stepper/stepper.ts","../src/components/command/command.ts","../src/components/command/command-input.ts","../src/components/command/command-list.ts","../src/components/command/command-item.ts","../src/components/command/command-group.ts","../src/components/command/command-separator.ts","../src/components/command/command-empty.ts","../src/components/command/command-loading.ts"],"sourcesContent":["/**\n * Collapsible Content component - content section that expands/collapses.\n *\n * @element ds-collapsible-content\n *\n * @slot - Content to show/hide\n */\n\nimport { type Presence, createPresence, prefersReducedMotion } from \"@hypoth-ui/primitives-dom\";\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsCollapsibleContent extends DSElement {\n /** Keep mounted when collapsed (for animations) */\n @property({ type: Boolean, attribute: \"force-mount\" })\n forceMount = false;\n\n /** Current state for animations */\n @state()\n dataState: \"open\" | \"closed\" = \"closed\";\n\n /** Whether we're currently animating out */\n @state()\n private isAnimatingOut = false;\n\n private presence: Presence | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"region\");\n this.updateVisibility();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.presence?.destroy();\n this.presence = null;\n }\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"dataState\")) {\n this.handleStateChange();\n }\n }\n\n private handleStateChange(): void {\n this.setAttribute(\"data-state\", this.dataState);\n\n if (this.dataState === \"open\") {\n this.isAnimatingOut = false;\n this.updateVisibility();\n } else if (!this.forceMount && !prefersReducedMotion()) {\n // Animate out before hiding\n this.isAnimatingOut = true;\n\n this.presence?.destroy();\n this.presence = createPresence({\n onExitComplete: () => {\n this.isAnimatingOut = false;\n this.updateVisibility();\n },\n });\n this.presence.hide(this);\n } else {\n this.updateVisibility();\n }\n }\n\n private updateVisibility(): void {\n if (this.forceMount) {\n this.hidden = false;\n return;\n }\n\n // Stay visible during exit animation\n if (this.isAnimatingOut) {\n this.hidden = false;\n return;\n }\n\n this.hidden = this.dataState === \"closed\";\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-collapsible-content\", DsCollapsibleContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-collapsible-content\": DsCollapsibleContent;\n }\n}\n","/**\n * Collapsible Trigger component - button that toggles collapsible.\n *\n * @element ds-collapsible-trigger\n *\n * @slot - Trigger content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsCollapsibleTrigger extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Ensure focusability\n if (!this.hasAttribute(\"tabindex\")) {\n this.setAttribute(\"tabindex\", \"0\");\n }\n\n // Set button role if not already set\n if (!this.hasAttribute(\"role\")) {\n this.setAttribute(\"role\", \"button\");\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-collapsible-trigger\", DsCollapsibleTrigger);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-collapsible-trigger\": DsCollapsibleTrigger;\n }\n}\n","/**\n * Collapsible component - toggleable content visibility.\n *\n * Provides an expandable/collapsible content section with animation support.\n *\n * @element ds-collapsible\n *\n * @slot trigger - Button or element that toggles the collapsible\n * @slot - Collapsible content (ds-collapsible-content)\n *\n * @fires ds:open - Fired when collapsible opens\n * @fires ds:close - Fired when collapsible closes\n *\n * @example\n * ```html\n * <ds-collapsible>\n * <button slot=\"trigger\">Toggle Content</button>\n * <ds-collapsible-content>\n * <p>Collapsible content here.</p>\n * </ds-collapsible-content>\n * </ds-collapsible>\n * ```\n */\n\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { StandardEvents, emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\n// Import child components\nimport type { DsCollapsibleContent } from \"./collapsible-content.js\";\nimport \"./collapsible-content.js\";\nimport \"./collapsible-trigger.js\";\n\nexport class DsCollapsible extends DSElement {\n /** Whether the collapsible is open */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Disable the collapsible */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Internal ID for ARIA relationships */\n @state()\n private contentId = `collapsible-${crypto.randomUUID().slice(0, 8)}`;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener(\"click\", this.handleTriggerClick);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleTriggerClick);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n /**\n * Toggle the open state.\n */\n public toggle(): void {\n if (this.disabled) return;\n this.setOpen(!this.open);\n }\n\n /**\n * Set the open state.\n */\n public setOpen(open: boolean): void {\n if (this.disabled || this.open === open) return;\n\n this.open = open;\n emitEvent(this, open ? StandardEvents.OPEN : StandardEvents.CLOSE);\n this.updateContent();\n }\n\n private handleTriggerClick = (event: Event): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"], ds-collapsible-trigger');\n\n if (trigger && this.contains(trigger)) {\n this.toggle();\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"], ds-collapsible-trigger');\n\n if (trigger && this.contains(trigger)) {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this.toggle();\n }\n }\n };\n\n override updated(): void {\n this.updateContent();\n this.updateTrigger();\n }\n\n private updateContent(): void {\n const content = this.querySelector(\"ds-collapsible-content\") as DsCollapsibleContent | null;\n if (content) {\n content.id = this.contentId;\n content.dataState = this.open ? \"open\" : \"closed\";\n }\n }\n\n private updateTrigger(): void {\n const trigger =\n this.querySelector('[slot=\"trigger\"]') || this.querySelector(\"ds-collapsible-trigger\");\n\n if (trigger) {\n trigger.setAttribute(\"aria-expanded\", String(this.open));\n trigger.setAttribute(\"aria-controls\", this.contentId);\n if (this.disabled) {\n trigger.setAttribute(\"aria-disabled\", \"true\");\n } else {\n trigger.removeAttribute(\"aria-disabled\");\n }\n }\n }\n\n override render() {\n return html`\n <slot name=\"trigger\"></slot>\n <slot></slot>\n `;\n }\n}\n\ndefine(\"ds-collapsible\", DsCollapsible);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-collapsible\": DsCollapsible;\n }\n}\n","/**\n * Tabs List component - container for tab triggers.\n *\n * Implements keyboard navigation with arrow keys via behavior primitive.\n *\n * @element ds-tabs-list\n *\n * @slot - Tab triggers (ds-tabs-trigger)\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\nimport type { DsTabs } from \"./tabs.js\";\n\nexport class DsTabsList extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Initialize after DOM is ready\n requestAnimationFrame(() => {\n this.setupBehavior();\n });\n }\n\n /**\n * Setup behavior connection (called by parent when options change).\n */\n public setupBehavior(): void {\n const tabsRoot = this.closest(\"ds-tabs\") as DsTabs | null;\n const tabsBehavior = tabsRoot?.getTabsBehavior();\n\n if (!tabsBehavior) return;\n\n // Apply tablist props from behavior\n const tablistProps = tabsBehavior.getTabListProps();\n this.setAttribute(\"id\", tablistProps.id);\n this.setAttribute(\"role\", tablistProps.role);\n this.setAttribute(\"aria-orientation\", tablistProps[\"aria-orientation\"]);\n\n // Set tablist element to activate roving focus\n tabsBehavior.setTablistElement(this);\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-tabs-list\", DsTabsList);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-tabs-list\": DsTabsList;\n }\n}\n","/**\n * Tabs Trigger component - button that activates a tab panel.\n *\n * @element ds-tabs-trigger\n *\n * @slot - Trigger label content\n */\n\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\nimport type { DsTabs } from \"./tabs.js\";\n\nexport class DsTabsTrigger extends DSElement {\n /** Unique value identifying this tab */\n @property({ reflect: true })\n value = \"\";\n\n /** Disable this tab */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Internal selected state */\n @state()\n private selected = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Handle interactions\n this.addEventListener(\"click\", this.handleClick);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n this.addEventListener(\"focus\", this.handleFocus);\n\n // Register with behavior after DOM is ready\n requestAnimationFrame(() => {\n this.registerWithBehavior();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n this.removeEventListener(\"focus\", this.handleFocus);\n\n // Unregister from behavior\n const tabsRoot = this.closest(\"ds-tabs\") as DsTabs | null;\n tabsRoot?.getTabsBehavior()?.unregisterTab(this.value);\n }\n\n private registerWithBehavior(): void {\n const tabsRoot = this.closest(\"ds-tabs\") as DsTabs | null;\n const tabsBehavior = tabsRoot?.getTabsBehavior();\n\n if (!tabsBehavior) return;\n\n // Register this tab\n tabsBehavior.registerTab(this.value, { disabled: this.disabled });\n\n // Apply trigger props from behavior\n this.applyBehaviorProps();\n }\n\n private applyBehaviorProps(): void {\n const tabsRoot = this.closest(\"ds-tabs\") as DsTabs | null;\n const tabsBehavior = tabsRoot?.getTabsBehavior();\n\n if (!tabsBehavior) return;\n\n const triggerProps = tabsBehavior.getTriggerProps(this.value, { disabled: this.disabled });\n this.id = triggerProps.id;\n this.setAttribute(\"role\", triggerProps.role);\n this.setAttribute(\"tabindex\", String(triggerProps.tabIndex));\n this.setAttribute(\"aria-selected\", triggerProps[\"aria-selected\"]);\n this.setAttribute(\"aria-controls\", triggerProps[\"aria-controls\"]);\n\n if (triggerProps[\"aria-disabled\"]) {\n this.setAttribute(\"aria-disabled\", triggerProps[\"aria-disabled\"]);\n } else {\n this.removeAttribute(\"aria-disabled\");\n }\n }\n\n /**\n * Update from behavior (called by parent).\n */\n public updateFromBehavior(selected: boolean): void {\n this.selected = selected;\n this.applyBehaviorProps();\n }\n\n private handleClick = (): void => {\n const tabsRoot = this.closest(\"ds-tabs\") as DsTabs | null;\n const tabsBehavior = tabsRoot?.getTabsBehavior();\n tabsBehavior?.handleTriggerClick(this.value);\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n const tabsRoot = this.closest(\"ds-tabs\") as DsTabs | null;\n const tabsBehavior = tabsRoot?.getTabsBehavior();\n tabsBehavior?.handleTriggerKeyDown(event, this.value);\n };\n\n private handleFocus = (): void => {\n const tabsRoot = this.closest(\"ds-tabs\") as DsTabs | null;\n const tabsBehavior = tabsRoot?.getTabsBehavior();\n tabsBehavior?.handleTriggerFocus(this.value);\n };\n\n override updated(changedProperties: Map<string, unknown>): void {\n // Re-register if disabled state changes\n if (changedProperties.has(\"disabled\")) {\n const tabsRoot = this.closest(\"ds-tabs\") as DsTabs | null;\n const tabsBehavior = tabsRoot?.getTabsBehavior();\n if (tabsBehavior) {\n tabsBehavior.unregisterTab(this.value);\n tabsBehavior.registerTab(this.value, { disabled: this.disabled });\n this.applyBehaviorProps();\n }\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-tabs-trigger\", DsTabsTrigger);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-tabs-trigger\": DsTabsTrigger;\n }\n}\n","/**\n * Tabs Content component - panel content for a tab.\n *\n * @element ds-tabs-content\n *\n * @slot - Tab panel content\n */\n\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\nimport type { DsTabs } from \"./tabs.js\";\n\nexport class DsTabsContent extends DSElement {\n /** Value of associated tab */\n @property({ reflect: true })\n value = \"\";\n\n /** Keep mounted when inactive (for animations) */\n @property({ type: Boolean, attribute: \"force-mount\" })\n forceMount = false;\n\n /** Internal active state */\n @state()\n private active = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Apply panel props after DOM is ready\n requestAnimationFrame(() => {\n this.applyBehaviorProps();\n });\n }\n\n private applyBehaviorProps(): void {\n const tabsRoot = this.closest(\"ds-tabs\") as DsTabs | null;\n const tabsBehavior = tabsRoot?.getTabsBehavior();\n\n if (!tabsBehavior) {\n // Fallback for standalone usage\n this.setAttribute(\"role\", \"tabpanel\");\n return;\n }\n\n const panelProps = tabsBehavior.getPanelProps(this.value);\n this.id = panelProps.id;\n this.setAttribute(\"role\", panelProps.role);\n this.setAttribute(\"aria-labelledby\", panelProps[\"aria-labelledby\"]);\n this.setAttribute(\"tabindex\", String(panelProps.tabIndex));\n\n // Handle visibility (respecting forceMount)\n if (this.forceMount) {\n this.hidden = false;\n } else {\n this.hidden = panelProps.hidden;\n }\n\n this.setAttribute(\"data-state\", panelProps.hidden ? \"inactive\" : \"active\");\n }\n\n /**\n * Update from behavior (called by parent).\n */\n public updateFromBehavior(active: boolean): void {\n this.active = active;\n this.applyBehaviorProps();\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-tabs-content\", DsTabsContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-tabs-content\": DsTabsContent;\n }\n}\n","/**\n * Tabs component - tabbed interface for organizing content.\n *\n * Implements WAI-ARIA Tabs pattern with keyboard navigation.\n *\n * @element ds-tabs\n *\n * @slot - Tabs content (ds-tabs-list, ds-tabs-content)\n *\n * @fires ds:change - Fired when selected tab changes\n *\n * @example\n * ```html\n * <ds-tabs default-value=\"tab1\">\n * <ds-tabs-list>\n * <ds-tabs-trigger value=\"tab1\">Tab 1</ds-tabs-trigger>\n * <ds-tabs-trigger value=\"tab2\">Tab 2</ds-tabs-trigger>\n * </ds-tabs-list>\n * <ds-tabs-content value=\"tab1\">Content 1</ds-tabs-content>\n * <ds-tabs-content value=\"tab2\">Content 2</ds-tabs-content>\n * </ds-tabs>\n * ```\n */\n\nimport {\n type TabsBehavior,\n type TabsOrientation as BehaviorTabsOrientation,\n type TabsActivationMode as BehaviorTabsActivationMode,\n createTabsBehavior,\n} from \"@hypoth-ui/primitives-dom\";\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\n// Import child components\nimport type { DsTabsContent } from \"./tabs-content.js\";\nimport type { DsTabsList } from \"./tabs-list.js\";\nimport type { DsTabsTrigger } from \"./tabs-trigger.js\";\nimport \"./tabs-list.js\";\nimport \"./tabs-trigger.js\";\nimport \"./tabs-content.js\";\n\nexport type TabsOrientation = BehaviorTabsOrientation;\nexport type TabsActivationMode = BehaviorTabsActivationMode;\n\nexport class DsTabs extends DSElement {\n /** Controlled value */\n @property()\n value: string | undefined;\n\n /** Default value (uncontrolled) */\n @property({ attribute: \"default-value\" })\n defaultValue: string | undefined;\n\n /** Keyboard navigation orientation */\n @property({ reflect: true })\n orientation: TabsOrientation = \"horizontal\";\n\n /**\n * Activation mode:\n * - automatic: selection follows focus\n * - manual: selection requires Enter/Space\n */\n @property({ attribute: \"activation-mode\" })\n activationMode: TabsActivationMode = \"automatic\";\n\n /** Loop keyboard navigation at ends */\n @property({ type: Boolean })\n loop = true;\n\n /** Internal tracked value */\n @state()\n private internalValue: string | undefined;\n\n /** Behavior primitive instance */\n private tabsBehavior: TabsBehavior | null = null;\n\n /** Whether we're in controlled mode */\n private get isControlled(): boolean {\n return this.value !== undefined;\n }\n\n /** Current active value */\n get activeValue(): string | undefined {\n return this.isControlled ? this.value : this.internalValue;\n }\n\n /** Get the tabs behavior (for child components) */\n getTabsBehavior(): TabsBehavior | null {\n return this.tabsBehavior;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Initialize internal value from default\n if (!this.isControlled && this.defaultValue) {\n this.internalValue = this.defaultValue;\n }\n\n // Initialize behavior\n this.initTabsBehavior();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.tabsBehavior?.destroy();\n this.tabsBehavior = null;\n }\n\n private initTabsBehavior(): void {\n this.tabsBehavior = createTabsBehavior({\n defaultValue: this.activeValue ?? this.defaultValue ?? \"\",\n orientation: this.orientation,\n activationMode: this.activationMode,\n loop: this.loop,\n onValueChange: (newValue) => {\n if (!this.isControlled) {\n this.internalValue = newValue;\n }\n emitEvent(this, \"ds:change\", { detail: { value: newValue } });\n this.updateTabsState();\n },\n });\n }\n\n /**\n * Select a tab by value.\n */\n public selectTab(value: string): void {\n if (this.activeValue === value) return;\n this.tabsBehavior?.select(value);\n }\n\n override updated(changedProperties: Map<string, unknown>): void {\n // Handle controlled value changes\n if (changedProperties.has(\"value\") && this.isControlled && this.value) {\n this.tabsBehavior?.select(this.value);\n this.updateTabsState();\n }\n\n // Handle internal value changes\n if (changedProperties.has(\"internalValue\")) {\n this.updateTabsState();\n }\n\n // Initial update when defaultValue is set\n if (changedProperties.has(\"defaultValue\") && !this.isControlled && !this.internalValue) {\n this.internalValue = this.defaultValue;\n this.tabsBehavior?.select(this.defaultValue ?? \"\");\n this.updateTabsState();\n }\n\n // Re-create behavior if orientation/activationMode/loop change\n if (\n changedProperties.has(\"orientation\") ||\n changedProperties.has(\"activationMode\") ||\n changedProperties.has(\"loop\")\n ) {\n const currentValue = this.activeValue;\n this.tabsBehavior?.destroy();\n this.initTabsBehavior();\n if (currentValue) {\n this.tabsBehavior?.select(currentValue);\n }\n // Re-setup tablist element\n const tabsList = this.querySelector(\"ds-tabs-list\") as DsTabsList | null;\n tabsList?.setupBehavior();\n this.updateTabsState();\n }\n }\n\n private updateTabsState(): void {\n const activeValue = this.activeValue;\n\n // Update triggers\n const triggers = this.querySelectorAll(\"ds-tabs-trigger\") as NodeListOf<DsTabsTrigger>;\n for (const trigger of triggers) {\n trigger.updateFromBehavior(trigger.value === activeValue);\n }\n\n // Update content panels\n const contents = this.querySelectorAll(\"ds-tabs-content\") as NodeListOf<DsTabsContent>;\n for (const content of contents) {\n content.updateFromBehavior(content.value === activeValue);\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-tabs\", DsTabs);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-tabs\": DsTabs;\n }\n}\n","/**\n * Accordion Item component - container for trigger and content.\n *\n * @element ds-accordion-item\n *\n * @slot - Accordion trigger and content\n */\n\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\nimport type { DsAccordionContent } from \"./accordion-content.js\";\nimport type { DsAccordionTrigger } from \"./accordion-trigger.js\";\n\nexport class DsAccordionItem extends DSElement {\n /** Unique value identifying this item */\n @property({ reflect: true })\n value = \"\";\n\n /** Disable this item */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Internal expanded state */\n @state()\n private expanded = false;\n\n /** ID for ARIA relationships */\n private contentId = \"\";\n private triggerId = \"\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate IDs\n const id = crypto.randomUUID().slice(0, 8);\n this.contentId = `accordion-content-${this.value}-${id}`;\n this.triggerId = `accordion-trigger-${this.value}-${id}`;\n\n this.setAttribute(\"data-state\", \"closed\");\n }\n\n /**\n * Set the expanded state (called by parent).\n */\n public setExpanded(expanded: boolean): void {\n this.expanded = expanded;\n this.setAttribute(\"data-state\", expanded ? \"open\" : \"closed\");\n this.updateChildren();\n }\n\n /**\n * Get whether the item is expanded.\n */\n public isExpanded(): boolean {\n return this.expanded;\n }\n\n /**\n * Get the content ID.\n */\n public getContentId(): string {\n return this.contentId;\n }\n\n /**\n * Get the trigger ID.\n */\n public getTriggerId(): string {\n return this.triggerId;\n }\n\n private updateChildren(): void {\n const trigger = this.querySelector(\"ds-accordion-trigger\") as DsAccordionTrigger | null;\n const content = this.querySelector(\"ds-accordion-content\") as DsAccordionContent | null;\n\n if (trigger) {\n trigger.id = this.triggerId;\n trigger.setExpanded(this.expanded);\n trigger.setContentId(this.contentId);\n if (this.disabled) {\n trigger.setAttribute(\"aria-disabled\", \"true\");\n } else {\n trigger.removeAttribute(\"aria-disabled\");\n }\n }\n\n if (content) {\n content.id = this.contentId;\n content.setExpanded(this.expanded);\n content.setTriggerId(this.triggerId);\n }\n }\n\n override updated(): void {\n this.updateChildren();\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-accordion-item\", DsAccordionItem);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-accordion-item\": DsAccordionItem;\n }\n}\n","/**\n * Accordion Trigger component - button that toggles accordion item.\n *\n * @element ds-accordion-trigger\n *\n * @slot - Trigger label content\n */\n\nimport { html } from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\nimport type { DsAccordionItem } from \"./accordion-item.js\";\n\nexport class DsAccordionTrigger extends DSElement {\n /** Internal expanded state */\n @state()\n private expanded = false;\n\n /** Content panel ID */\n @state()\n private contentId = \"\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Set ARIA role and attributes\n this.setAttribute(\"role\", \"button\");\n this.setAttribute(\"tabindex\", \"0\");\n\n // Handle click and keyboard\n this.addEventListener(\"click\", this.handleClick);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n /**\n * Set the expanded state (called by parent).\n */\n public setExpanded(expanded: boolean): void {\n this.expanded = expanded;\n this.updateAccessibility();\n }\n\n /**\n * Set the content ID for aria-controls.\n */\n public setContentId(id: string): void {\n this.contentId = id;\n this.updateAccessibility();\n }\n\n private handleClick = (): void => {\n if (this.hasAttribute(\"aria-disabled\")) return;\n this.toggle();\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if (this.hasAttribute(\"aria-disabled\")) return;\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this.toggle();\n }\n };\n\n private toggle(): void {\n const item = this.closest(\"ds-accordion-item\") as DsAccordionItem | null;\n if (!item) return;\n\n emitEvent(this, \"ds:accordion-toggle\", {\n detail: { value: item.value },\n bubbles: true,\n });\n }\n\n private updateAccessibility(): void {\n this.setAttribute(\"aria-expanded\", String(this.expanded));\n if (this.contentId) {\n this.setAttribute(\"aria-controls\", this.contentId);\n }\n }\n\n override updated(): void {\n this.updateAccessibility();\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-accordion-trigger\", DsAccordionTrigger);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-accordion-trigger\": DsAccordionTrigger;\n }\n}\n","/**\n * Accordion Content component - expandable content section.\n *\n * @element ds-accordion-content\n *\n * @slot - Accordion content\n */\n\nimport { type Presence, createPresence, prefersReducedMotion } from \"@hypoth-ui/primitives-dom\";\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsAccordionContent extends DSElement {\n /** Keep mounted when collapsed (for animations) */\n @property({ type: Boolean, attribute: \"force-mount\" })\n forceMount = false;\n\n /** Internal expanded state */\n @state()\n private expanded = false;\n\n /** Trigger ID for aria-labelledby */\n @state()\n private triggerId = \"\";\n\n /** Whether we're animating out */\n @state()\n private isAnimatingOut = false;\n\n private presence: Presence | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"region\");\n this.updateVisibility();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.presence?.destroy();\n this.presence = null;\n }\n\n /**\n * Set the expanded state (called by parent).\n */\n public setExpanded(expanded: boolean): void {\n const wasExpanded = this.expanded;\n this.expanded = expanded;\n this.setAttribute(\"data-state\", expanded ? \"open\" : \"closed\");\n\n if (wasExpanded && !expanded) {\n // Collapsing - animate out\n this.handleCollapse();\n } else {\n this.isAnimatingOut = false;\n this.updateVisibility();\n }\n }\n\n /**\n * Set the trigger ID for aria-labelledby.\n */\n public setTriggerId(id: string): void {\n this.triggerId = id;\n this.setAttribute(\"aria-labelledby\", id);\n }\n\n private handleCollapse(): void {\n if (!this.forceMount && !prefersReducedMotion()) {\n this.isAnimatingOut = true;\n\n this.presence?.destroy();\n this.presence = createPresence({\n onExitComplete: () => {\n this.isAnimatingOut = false;\n this.updateVisibility();\n },\n });\n this.presence.hide(this);\n } else {\n this.updateVisibility();\n }\n }\n\n private updateVisibility(): void {\n if (this.forceMount) {\n this.hidden = false;\n return;\n }\n\n if (this.isAnimatingOut) {\n this.hidden = false;\n return;\n }\n\n this.hidden = !this.expanded;\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-accordion-content\", DsAccordionContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-accordion-content\": DsAccordionContent;\n }\n}\n","/**\n * Accordion component - collapsible sections for organizing content.\n *\n * Implements WAI-ARIA Accordion pattern with keyboard navigation.\n *\n * @element ds-accordion\n *\n * @slot - Accordion items (ds-accordion-item)\n *\n * @fires ds:change - Fired when expanded items change\n *\n * @example\n * ```html\n * <ds-accordion type=\"single\" default-value=\"item-1\" collapsible>\n * <ds-accordion-item value=\"item-1\">\n * <ds-accordion-trigger>Section 1</ds-accordion-trigger>\n * <ds-accordion-content>Content 1</ds-accordion-content>\n * </ds-accordion-item>\n * <ds-accordion-item value=\"item-2\">\n * <ds-accordion-trigger>Section 2</ds-accordion-trigger>\n * <ds-accordion-content>Content 2</ds-accordion-content>\n * </ds-accordion-item>\n * </ds-accordion>\n * ```\n */\n\nimport { type RovingFocus, createRovingFocus } from \"@hypoth-ui/primitives-dom\";\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\n// Import child components\nimport type { DsAccordionItem } from \"./accordion-item.js\";\nimport \"./accordion-item.js\";\nimport \"./accordion-trigger.js\";\nimport \"./accordion-content.js\";\n\nexport type AccordionType = \"single\" | \"multiple\";\nexport type AccordionOrientation = \"horizontal\" | \"vertical\";\n\nexport class DsAccordion extends DSElement {\n /** Type: single (one open) or multiple (many open) */\n @property({ reflect: true })\n type: AccordionType = \"single\";\n\n /** Controlled value (string for single, JSON array for multiple) */\n @property()\n value: string | undefined;\n\n /** Default value (string for single, JSON array for multiple) */\n @property({ attribute: \"default-value\" })\n defaultValue: string | undefined;\n\n /** Allow collapsing all items in single mode */\n @property({ type: Boolean, reflect: true })\n collapsible = false;\n\n /** Keyboard navigation orientation */\n @property({ reflect: true })\n orientation: AccordionOrientation = \"vertical\";\n\n /** Internal tracked value(s) */\n @state()\n private internalValue: Set<string> = new Set();\n\n private rovingFocus: RovingFocus | null = null;\n\n /** Whether we're in controlled mode */\n private get isControlled(): boolean {\n return this.value !== undefined;\n }\n\n /** Current expanded values */\n get expandedValues(): Set<string> {\n if (this.isControlled) {\n return this.parseValue(this.value);\n }\n return this.internalValue;\n }\n\n private parseValue(value: string | undefined): Set<string> {\n if (!value) return new Set();\n\n // Try parsing as JSON array\n if (value.startsWith(\"[\")) {\n try {\n const arr = JSON.parse(value);\n return new Set(Array.isArray(arr) ? arr : []);\n } catch {\n return new Set();\n }\n }\n\n // Single value\n return new Set([value]);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Initialize internal value from default\n if (!this.isControlled && this.defaultValue) {\n this.internalValue = this.parseValue(this.defaultValue);\n }\n\n // Listen for item toggle events\n this.addEventListener(\"ds:accordion-toggle\", this.handleItemToggle as EventListener);\n\n // Setup roving focus after DOM is ready\n requestAnimationFrame(() => {\n this.setupRovingFocus();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"ds:accordion-toggle\", this.handleItemToggle as EventListener);\n this.rovingFocus?.destroy();\n this.rovingFocus = null;\n }\n\n private setupRovingFocus(): void {\n this.rovingFocus = createRovingFocus({\n container: this,\n selector: \"ds-accordion-trigger:not([aria-disabled='true'])\",\n direction: this.orientation,\n loop: true,\n });\n }\n\n /**\n * Toggle an item's expanded state.\n */\n public toggleItem(value: string): void {\n const items = this.querySelectorAll(\"ds-accordion-item\") as NodeListOf<DsAccordionItem>;\n const item = Array.from(items).find((i) => i.value === value);\n if (!item || item.disabled) return;\n\n const currentExpanded = this.expandedValues;\n const isExpanded = currentExpanded.has(value);\n\n let newValue: Set<string>;\n\n if (this.type === \"single\") {\n if (isExpanded) {\n // Collapse if collapsible is true\n newValue = this.collapsible ? new Set() : currentExpanded;\n } else {\n // Expand this item (collapse others)\n newValue = new Set([value]);\n }\n } else {\n // Multiple mode\n newValue = new Set(currentExpanded);\n if (isExpanded) {\n newValue.delete(value);\n } else {\n newValue.add(value);\n }\n }\n\n // Update state\n if (!this.isControlled) {\n this.internalValue = newValue;\n }\n\n // Emit change event\n const eventValue =\n this.type === \"single\"\n ? (Array.from(newValue)[0] ?? \"\")\n : JSON.stringify(Array.from(newValue));\n\n emitEvent(this, \"ds:change\", { detail: { value: eventValue } });\n this.updateItems();\n }\n\n private handleItemToggle = (event: CustomEvent<{ value: string }>): void => {\n this.toggleItem(event.detail.value);\n };\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (\n changedProperties.has(\"value\") ||\n changedProperties.has(\"internalValue\") ||\n changedProperties.has(\"defaultValue\")\n ) {\n this.updateItems();\n }\n }\n\n private updateItems(): void {\n const expanded = this.expandedValues;\n\n const items = this.querySelectorAll(\"ds-accordion-item\") as NodeListOf<DsAccordionItem>;\n for (const item of items) {\n item.setExpanded(expanded.has(item.value));\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-accordion\", DsAccordion);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-accordion\": DsAccordion;\n }\n}\n","/**\n * NavigationMenuList component - container for navigation items.\n *\n * @element ds-navigation-menu-list\n *\n * @slot - Navigation menu items\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsNavigationMenuList extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"menubar\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-navigation-menu-list\", DsNavigationMenuList);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-navigation-menu-list\": DsNavigationMenuList;\n }\n}\n","/**\n * NavigationMenuItem component - wrapper for trigger and content.\n *\n * @element ds-navigation-menu-item\n *\n * @slot - Trigger and content\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsNavigationMenuItem extends DSElement {\n /** Unique value for this item */\n @property({ type: String, reflect: true })\n value = \"\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"none\");\n this.setAttribute(\"data-state\", \"closed\");\n\n this.addEventListener(\"mouseenter\", this.handleMouseEnter);\n this.addEventListener(\"mouseleave\", this.handleMouseLeave);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"mouseenter\", this.handleMouseEnter);\n this.removeEventListener(\"mouseleave\", this.handleMouseLeave);\n }\n\n private handleMouseEnter = (): void => {\n emitEvent(this, \"ds:navigation-item-enter\", {\n detail: { value: this.value },\n bubbles: true,\n });\n };\n\n private handleMouseLeave = (): void => {\n emitEvent(this, \"ds:navigation-item-leave\", {\n detail: { value: this.value },\n bubbles: true,\n });\n };\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-navigation-menu-item\", DsNavigationMenuItem);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-navigation-menu-item\": DsNavigationMenuItem;\n }\n}\n","/**\n * NavigationMenuTrigger component - button that opens content panel.\n *\n * @element ds-navigation-menu-trigger\n *\n * @slot - Trigger content\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsNavigationMenuTrigger extends DSElement {\n /** Disabled state */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n private observer: MutationObserver | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.setAttribute(\"role\", \"menuitem\");\n this.setAttribute(\"tabindex\", \"0\");\n this.setAttribute(\"aria-haspopup\", \"menu\");\n this.updateAriaExpanded();\n\n // Observe parent item's data-state changes to update aria-expanded\n const item = this.closest(\"ds-navigation-menu-item\");\n if (item) {\n this.observer = new MutationObserver(() => {\n this.updateAriaExpanded();\n });\n this.observer.observe(item, { attributes: true, attributeFilter: [\"data-state\"] });\n }\n\n this.addEventListener(\"click\", this.handleClick);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n this.observer?.disconnect();\n this.observer = null;\n }\n\n /**\n * Update aria-expanded based on parent item's state.\n * Per APG, menuitem with submenu should have aria-expanded.\n */\n private updateAriaExpanded(): void {\n const item = this.closest(\"ds-navigation-menu-item\");\n const isOpen = item?.getAttribute(\"data-state\") === \"open\";\n this.setAttribute(\"aria-expanded\", String(isOpen));\n }\n\n private getItemValue(): string {\n const item = this.closest(\"ds-navigation-menu-item\");\n return item?.getAttribute(\"value\") || \"\";\n }\n\n private handleClick = (): void => {\n if (this.disabled) return;\n\n const value = this.getItemValue();\n emitEvent(this, \"ds:navigation-trigger\", {\n detail: { value, type: \"click\" },\n bubbles: true,\n });\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if (this.disabled) return;\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this.handleClick();\n } else if (event.key === \"ArrowDown\") {\n event.preventDefault();\n const value = this.getItemValue();\n emitEvent(this, \"ds:navigation-trigger\", {\n detail: { value, type: \"focus\" },\n bubbles: true,\n });\n }\n };\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"disabled\")) {\n this.setAttribute(\"aria-disabled\", String(this.disabled));\n this.setAttribute(\"tabindex\", this.disabled ? \"-1\" : \"0\");\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-navigation-menu-trigger\", DsNavigationMenuTrigger);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-navigation-menu-trigger\": DsNavigationMenuTrigger;\n }\n}\n","/**\n * NavigationMenuContent component - dropdown content panel.\n *\n * @element ds-navigation-menu-content\n *\n * @slot - Content (links, cards, etc.)\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsNavigationMenuContent extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"menu\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-navigation-menu-content\", DsNavigationMenuContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-navigation-menu-content\": DsNavigationMenuContent;\n }\n}\n","/**\n * NavigationMenuLink component - navigation link.\n *\n * @element ds-navigation-menu-link\n *\n * @slot - Link content\n *\n * @fires ds:navigate - Fired when link is clicked (for SPA navigation)\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsNavigationMenuLink extends DSElement {\n /** URL to navigate to */\n @property({ type: String, reflect: true })\n href = \"\";\n\n /** Whether this link is currently active */\n @property({ type: Boolean, reflect: true })\n active = false;\n\n /** Disabled state */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.setAttribute(\"role\", \"menuitem\");\n this.setAttribute(\"tabindex\", \"0\");\n\n this.addEventListener(\"click\", this.handleClick);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n private handleClick = (event: MouseEvent): void => {\n if (this.disabled) return;\n\n // Emit navigate event for SPA handling\n const navigateEvent = emitEvent(this, \"ds:navigate\", {\n detail: { href: this.href },\n bubbles: true,\n cancelable: true,\n });\n\n // If not canceled and has href, do native navigation\n if (!navigateEvent.defaultPrevented && this.href) {\n // Allow Ctrl/Cmd+click for new tab\n if (event.ctrlKey || event.metaKey) {\n window.open(this.href, \"_blank\");\n } else {\n window.location.href = this.href;\n }\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if (this.disabled) return;\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this.handleClick(new MouseEvent(\"click\"));\n }\n };\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"active\")) {\n this.setAttribute(\"aria-current\", this.active ? \"page\" : \"false\");\n }\n if (changedProperties.has(\"disabled\")) {\n this.setAttribute(\"aria-disabled\", String(this.disabled));\n this.setAttribute(\"tabindex\", this.disabled ? \"-1\" : \"0\");\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-navigation-menu-link\", DsNavigationMenuLink);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-navigation-menu-link\": DsNavigationMenuLink;\n }\n}\n","/**\n * NavigationMenuIndicator component - visual indicator for active item.\n *\n * Shows which navigation item is currently active/hovered.\n *\n * @element ds-navigation-menu-indicator\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsNavigationMenuIndicator extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"aria-hidden\", \"true\");\n }\n\n override render() {\n return html`<div class=\"ds-navigation-menu-indicator__arrow\"></div>`;\n }\n}\n\ndefine(\"ds-navigation-menu-indicator\", DsNavigationMenuIndicator);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-navigation-menu-indicator\": DsNavigationMenuIndicator;\n }\n}\n","/**\n * NavigationMenuViewport component - container for content panels.\n *\n * Renders the active content panel with smooth transitions.\n *\n * @element ds-navigation-menu-viewport\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsNavigationMenuViewport extends DSElement {\n private contentObserver: MutationObserver | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"hidden\", \"\");\n this.setAttribute(\"data-state\", \"closed\");\n\n // Observe parent for content changes\n this.setupContentObserver();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.contentObserver?.disconnect();\n this.contentObserver = null;\n }\n\n private setupContentObserver(): void {\n const menu = this.closest(\"ds-navigation-menu\");\n if (!menu) return;\n\n // Update viewport content when menu value changes\n this.contentObserver = new MutationObserver(() => {\n this.updateContent();\n });\n\n this.contentObserver.observe(menu, {\n attributes: true,\n attributeFilter: [\"value\"],\n });\n\n // Initial update\n this.updateContent();\n }\n\n private updateContent(): void {\n const menu = this.closest(\"ds-navigation-menu\");\n if (!menu) return;\n\n const value = menu.getAttribute(\"value\");\n\n // Move active content into viewport\n const items = menu.querySelectorAll(\"ds-navigation-menu-item\");\n\n // Clear viewport\n this.innerHTML = \"\";\n\n for (const item of items) {\n const itemValue = item.getAttribute(\"value\");\n const content = item.querySelector(\"ds-navigation-menu-content\");\n\n if (itemValue === value && content) {\n // Clone content to viewport\n const clone = content.cloneNode(true) as HTMLElement;\n clone.setAttribute(\"data-value\", itemValue || \"\");\n this.appendChild(clone);\n }\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-navigation-menu-viewport\", DsNavigationMenuViewport);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-navigation-menu-viewport\": DsNavigationMenuViewport;\n }\n}\n","/**\n * NavigationMenu component - mega-menu style navigation.\n *\n * Provides a horizontal navigation bar with dropdown content panels\n * that transition smoothly between items.\n *\n * @element ds-navigation-menu\n *\n * @slot - Navigation menu content (ds-navigation-menu-list)\n *\n * @fires ds:value-change - Fired when active menu item changes\n *\n * @example\n * ```html\n * <ds-navigation-menu>\n * <ds-navigation-menu-list>\n * <ds-navigation-menu-item>\n * <ds-navigation-menu-trigger>Products</ds-navigation-menu-trigger>\n * <ds-navigation-menu-content>\n * <ds-navigation-menu-link href=\"/products/a\">Product A</ds-navigation-menu-link>\n * </ds-navigation-menu-content>\n * </ds-navigation-menu-item>\n * </ds-navigation-menu-list>\n * <ds-navigation-menu-viewport></ds-navigation-menu-viewport>\n * </ds-navigation-menu>\n * ```\n */\n\nimport {\n type DismissableLayer,\n type RovingFocus,\n createDismissableLayer,\n createRovingFocus,\n} from \"@hypoth-ui/primitives-dom\";\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\n// Import child components to ensure they're registered\nimport \"./navigation-menu-list.js\";\nimport \"./navigation-menu-item.js\";\nimport \"./navigation-menu-trigger.js\";\nimport \"./navigation-menu-content.js\";\nimport \"./navigation-menu-link.js\";\nimport \"./navigation-menu-indicator.js\";\nimport \"./navigation-menu-viewport.js\";\n\nexport class DsNavigationMenu extends DSElement {\n /** Currently active item value */\n @property({ type: String, reflect: true })\n value = \"\";\n\n /** Delay in ms before opening on hover */\n @property({ type: Number, attribute: \"delay-duration\" })\n delayDuration = 200;\n\n /** Delay in ms before closing when pointer leaves */\n @property({ type: Number, attribute: \"skip-delay-duration\" })\n skipDelayDuration = 300;\n\n /** Orientation (horizontal or vertical) */\n @property({ type: String, reflect: true })\n orientation: \"horizontal\" | \"vertical\" = \"horizontal\";\n\n private rovingFocus: RovingFocus | null = null;\n private dismissLayer: DismissableLayer | null = null;\n private openTimer: ReturnType<typeof setTimeout> | null = null;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private previousValue = \"\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.setAttribute(\"role\", \"navigation\");\n this.setAttribute(\"aria-label\", \"Main\");\n\n // Listen for trigger interactions\n this.addEventListener(\"ds:navigation-trigger\", this.handleTriggerInteraction as EventListener);\n this.addEventListener(\"ds:navigation-item-enter\", this.handleItemEnter as EventListener);\n this.addEventListener(\"ds:navigation-item-leave\", this.handleItemLeave as EventListener);\n\n this.updateComplete.then(() => {\n this.setupRovingFocus();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\n \"ds:navigation-trigger\",\n this.handleTriggerInteraction as EventListener\n );\n this.removeEventListener(\"ds:navigation-item-enter\", this.handleItemEnter as EventListener);\n this.removeEventListener(\"ds:navigation-item-leave\", this.handleItemLeave as EventListener);\n this.cleanup();\n }\n\n /**\n * Opens a navigation item by value.\n */\n public open(itemValue: string): void {\n if (this.value === itemValue) return;\n\n this.clearTimers();\n this.previousValue = this.value;\n this.value = itemValue;\n this.updateActiveItem();\n this.setupDismissLayer();\n\n emitEvent(this, \"ds:value-change\", {\n detail: { value: this.value },\n bubbles: true,\n });\n }\n\n /**\n * Closes the navigation menu.\n */\n public close(): void {\n if (!this.value) return;\n\n this.clearTimers();\n this.previousValue = this.value;\n this.value = \"\";\n this.updateActiveItem();\n this.dismissLayer?.deactivate();\n this.dismissLayer = null;\n\n emitEvent(this, \"ds:value-change\", {\n detail: { value: \"\" },\n bubbles: true,\n });\n }\n\n private clearTimers(): void {\n if (this.openTimer) {\n clearTimeout(this.openTimer);\n this.openTimer = null;\n }\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private handleTriggerInteraction = (\n event: CustomEvent<{ value: string; type: \"click\" | \"focus\" }>\n ): void => {\n const { value } = event.detail;\n\n if (this.value === value) {\n // Toggle off if clicking same item\n this.close();\n } else {\n this.open(value);\n }\n };\n\n private handleItemEnter = (event: CustomEvent<{ value: string }>): void => {\n const { value } = event.detail;\n this.clearTimers();\n\n // Use skip delay if switching between items\n const delay = this.value ? 0 : this.delayDuration;\n\n this.openTimer = setTimeout(() => {\n this.open(value);\n }, delay);\n };\n\n private handleItemLeave = (): void => {\n this.clearTimers();\n\n this.closeTimer = setTimeout(() => {\n this.close();\n }, this.skipDelayDuration);\n };\n\n private handleDismiss = (): void => {\n this.close();\n };\n\n private setupRovingFocus(): void {\n const list = this.querySelector(\"ds-navigation-menu-list\");\n if (!list) return;\n\n this.rovingFocus = createRovingFocus({\n container: list as HTMLElement,\n selector: \"ds-navigation-menu-trigger, ds-navigation-menu-link:not([disabled])\",\n direction: this.orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\n loop: true,\n skipDisabled: true,\n });\n }\n\n private setupDismissLayer(): void {\n if (this.dismissLayer) {\n this.dismissLayer.deactivate();\n }\n\n const viewport = this.querySelector(\"ds-navigation-menu-viewport\");\n if (!viewport) return;\n\n this.dismissLayer = createDismissableLayer({\n container: viewport as HTMLElement,\n excludeElements: [this],\n onDismiss: this.handleDismiss,\n closeOnEscape: true,\n closeOnOutsideClick: true,\n });\n this.dismissLayer.activate();\n }\n\n private updateActiveItem(): void {\n const items = this.querySelectorAll(\"ds-navigation-menu-item\");\n for (const item of items) {\n const itemValue = item.getAttribute(\"value\") || \"\";\n const isActive = itemValue === this.value;\n\n if (isActive) {\n item.setAttribute(\"data-state\", \"open\");\n } else {\n item.setAttribute(\"data-state\", \"closed\");\n }\n }\n\n // Update viewport\n const viewport = this.querySelector(\"ds-navigation-menu-viewport\") as HTMLElement | null;\n if (viewport) {\n if (this.value) {\n viewport.removeAttribute(\"hidden\");\n viewport.setAttribute(\"data-state\", \"open\");\n } else {\n viewport.setAttribute(\"data-state\", \"closed\");\n // Wait for animation before hiding\n setTimeout(() => {\n if (!this.value) {\n viewport.setAttribute(\"hidden\", \"\");\n }\n }, 200);\n }\n }\n }\n\n private cleanup(): void {\n this.clearTimers();\n this.rovingFocus?.destroy();\n this.rovingFocus = null;\n this.dismissLayer?.deactivate();\n this.dismissLayer = null;\n }\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"value\")) {\n this.updateActiveItem();\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-navigation-menu\", DsNavigationMenu);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-navigation-menu\": DsNavigationMenu;\n }\n}\n","/**\n * ScrollAreaViewport component - scrollable content container.\n *\n * @element ds-scroll-area-viewport\n *\n * @slot - Scrollable content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsScrollAreaViewport extends DSElement {\n private resizeObserver: ResizeObserver | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"tabindex\", \"0\");\n\n this.addEventListener(\"scroll\", this.handleScroll);\n\n // Observe for overflow changes\n this.resizeObserver = new ResizeObserver(() => {\n this.updateOverflowState();\n });\n this.resizeObserver.observe(this);\n\n this.updateComplete.then(() => {\n this.updateOverflowState();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"scroll\", this.handleScroll);\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private handleScroll = (): void => {\n this.updateScrollbarPositions();\n\n emitEvent(this, \"ds:scroll\", {\n detail: {\n scrollTop: this.scrollTop,\n scrollLeft: this.scrollLeft,\n scrollHeight: this.scrollHeight,\n scrollWidth: this.scrollWidth,\n },\n bubbles: true,\n });\n };\n\n private updateOverflowState(): void {\n const hasVerticalOverflow = this.scrollHeight > this.clientHeight;\n const hasHorizontalOverflow = this.scrollWidth > this.clientWidth;\n\n this.toggleAttribute(\"data-overflow-y\", hasVerticalOverflow);\n this.toggleAttribute(\"data-overflow-x\", hasHorizontalOverflow);\n\n // Update scrollbar visibility\n const scrollArea = this.closest(\"ds-scroll-area\");\n if (scrollArea) {\n scrollArea.toggleAttribute(\"data-overflow-y\", hasVerticalOverflow);\n scrollArea.toggleAttribute(\"data-overflow-x\", hasHorizontalOverflow);\n }\n\n this.updateScrollbarPositions();\n }\n\n private updateScrollbarPositions(): void {\n const scrollArea = this.closest(\"ds-scroll-area\");\n if (!scrollArea) return;\n\n const scrollbars = scrollArea.querySelectorAll(\"ds-scroll-area-scrollbar\");\n\n for (const scrollbar of scrollbars) {\n const orientation = scrollbar.getAttribute(\"orientation\") || \"vertical\";\n const thumb = scrollbar.querySelector(\"ds-scroll-area-thumb\");\n\n if (!thumb) continue;\n\n if (orientation === \"vertical\") {\n const scrollRatio = this.scrollTop / (this.scrollHeight - this.clientHeight);\n const thumbHeight = (this.clientHeight / this.scrollHeight) * 100;\n const thumbTop = scrollRatio * (100 - thumbHeight);\n\n (thumb as HTMLElement).style.height = `${Math.max(10, thumbHeight)}%`;\n (thumb as HTMLElement).style.top = `${thumbTop}%`;\n } else {\n const scrollRatio = this.scrollLeft / (this.scrollWidth - this.clientWidth);\n const thumbWidth = (this.clientWidth / this.scrollWidth) * 100;\n const thumbLeft = scrollRatio * (100 - thumbWidth);\n\n (thumb as HTMLElement).style.width = `${Math.max(10, thumbWidth)}%`;\n (thumb as HTMLElement).style.left = `${thumbLeft}%`;\n }\n }\n }\n\n /**\n * Scrolls to a specific position.\n */\n public scrollToPosition(options: ScrollToOptions): void {\n this.scrollTo(options);\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-scroll-area-viewport\", DsScrollAreaViewport);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-scroll-area-viewport\": DsScrollAreaViewport;\n }\n}\n","/**\n * ScrollAreaScrollbar component - scrollbar track.\n *\n * @element ds-scroll-area-scrollbar\n *\n * @slot - Scrollbar thumb\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsScrollAreaScrollbar extends DSElement {\n /** Scrollbar orientation */\n @property({ type: String, reflect: true })\n orientation: \"vertical\" | \"horizontal\" = \"vertical\";\n\n private hideTimer: ReturnType<typeof setTimeout> | null = null;\n private isHovered = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.setAttribute(\"role\", \"scrollbar\");\n this.setAttribute(\"aria-orientation\", this.orientation);\n\n // Handle track click\n this.addEventListener(\"mousedown\", this.handleTrackClick);\n this.addEventListener(\"mouseenter\", this.handleMouseEnter);\n this.addEventListener(\"mouseleave\", this.handleMouseLeave);\n\n // Listen for viewport scroll\n const scrollArea = this.closest(\"ds-scroll-area\");\n const viewport = scrollArea?.querySelector(\"ds-scroll-area-viewport\");\n if (viewport) {\n viewport.addEventListener(\"scroll\", this.handleViewportScroll);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"mousedown\", this.handleTrackClick);\n this.removeEventListener(\"mouseenter\", this.handleMouseEnter);\n this.removeEventListener(\"mouseleave\", this.handleMouseLeave);\n\n if (this.hideTimer) {\n clearTimeout(this.hideTimer);\n }\n\n const scrollArea = this.closest(\"ds-scroll-area\");\n const viewport = scrollArea?.querySelector(\"ds-scroll-area-viewport\");\n if (viewport) {\n viewport.removeEventListener(\"scroll\", this.handleViewportScroll);\n }\n }\n\n private handleTrackClick = (event: MouseEvent): void => {\n // Ignore if clicking on thumb\n const thumb = event.target as HTMLElement;\n if (thumb.tagName === \"DS-SCROLL-AREA-THUMB\") return;\n\n const scrollArea = this.closest(\"ds-scroll-area\");\n const viewport = scrollArea?.querySelector(\"ds-scroll-area-viewport\");\n if (!viewport) return;\n\n const rect = this.getBoundingClientRect();\n\n if (this.orientation === \"vertical\") {\n const clickRatio = (event.clientY - rect.top) / rect.height;\n const scrollHeight = viewport.scrollHeight - viewport.clientHeight;\n viewport.scrollTo({\n top: clickRatio * scrollHeight,\n behavior: \"smooth\",\n });\n } else {\n const clickRatio = (event.clientX - rect.left) / rect.width;\n const scrollWidth = viewport.scrollWidth - viewport.clientWidth;\n viewport.scrollTo({\n left: clickRatio * scrollWidth,\n behavior: \"smooth\",\n });\n }\n };\n\n private handleViewportScroll = (): void => {\n // Show scrollbar\n this.setAttribute(\"data-state\", \"visible\");\n\n // Schedule hide (for hover type)\n this.scheduleHide();\n };\n\n private handleMouseEnter = (): void => {\n this.isHovered = true;\n if (this.hideTimer) {\n clearTimeout(this.hideTimer);\n this.hideTimer = null;\n }\n };\n\n private handleMouseLeave = (): void => {\n this.isHovered = false;\n this.scheduleHide();\n };\n\n private scheduleHide(): void {\n const scrollArea = this.closest(\"ds-scroll-area\");\n const type = scrollArea?.getAttribute(\"type\") || \"hover\";\n\n if (type !== \"hover\") return;\n\n if (this.hideTimer) {\n clearTimeout(this.hideTimer);\n }\n\n const delay = Number(scrollArea?.getAttribute(\"scroll-hide-delay\")) || 600;\n\n this.hideTimer = setTimeout(() => {\n if (!this.isHovered) {\n this.setAttribute(\"data-state\", \"hidden\");\n }\n }, delay);\n }\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"orientation\")) {\n this.setAttribute(\"aria-orientation\", this.orientation);\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-scroll-area-scrollbar\", DsScrollAreaScrollbar);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-scroll-area-scrollbar\": DsScrollAreaScrollbar;\n }\n}\n","/**\n * ScrollAreaThumb component - draggable scrollbar thumb.\n *\n * @element ds-scroll-area-thumb\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\n/**\n * Cached dimensions for scrollbar track to avoid layout thrashing.\n * Updated via ResizeObserver instead of per-frame getBoundingClientRect calls.\n */\ninterface CachedDimensions {\n width: number;\n height: number;\n}\n\nexport class DsScrollAreaThumb extends DSElement {\n private isDragging = false;\n private startY = 0;\n private startX = 0;\n private startScrollTop = 0;\n private startScrollLeft = 0;\n\n /** Cached scrollbar dimensions to avoid layout thrashing during drag */\n private cachedDimensions: CachedDimensions = { width: 0, height: 0 };\n\n /** ResizeObserver for tracking scrollbar size changes */\n private resizeObserver: ResizeObserver | null = null;\n\n /** Scrollbar element reference for ResizeObserver */\n private scrollbarElement: HTMLElement | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.addEventListener(\"mousedown\", this.handleMouseDown);\n this.addEventListener(\"touchstart\", this.handleTouchStart, { passive: false });\n\n // Set up ResizeObserver for dimension caching\n this.setupResizeObserver();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"mousedown\", this.handleMouseDown);\n this.removeEventListener(\"touchstart\", this.handleTouchStart);\n this.cleanupDrag();\n this.cleanupResizeObserver();\n }\n\n /**\n * Set up ResizeObserver to cache scrollbar dimensions.\n * This avoids calling getBoundingClientRect on every drag event.\n */\n private setupResizeObserver(): void {\n // Clean up any existing observer\n this.cleanupResizeObserver();\n\n const scrollbar = this.closest(\"ds-scroll-area-scrollbar\") as HTMLElement | null;\n if (!scrollbar) return;\n\n this.scrollbarElement = scrollbar;\n\n // Create ResizeObserver to update cached dimensions on resize\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.target === this.scrollbarElement) {\n // Use contentRect for dimensions (avoids additional layout)\n this.cachedDimensions = {\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n };\n }\n }\n });\n\n this.resizeObserver.observe(scrollbar);\n\n // Initialize cached dimensions\n const rect = scrollbar.getBoundingClientRect();\n this.cachedDimensions = {\n width: rect.width,\n height: rect.height,\n };\n }\n\n /**\n * Clean up ResizeObserver on disconnect.\n */\n private cleanupResizeObserver(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n this.scrollbarElement = null;\n }\n\n private getViewport(): HTMLElement | null {\n const scrollArea = this.closest(\"ds-scroll-area\");\n return scrollArea?.querySelector(\"ds-scroll-area-viewport\") || null;\n }\n\n private getOrientation(): \"vertical\" | \"horizontal\" {\n const scrollbar = this.closest(\"ds-scroll-area-scrollbar\");\n return (scrollbar?.getAttribute(\"orientation\") as \"vertical\" | \"horizontal\") || \"vertical\";\n }\n\n private handleMouseDown = (event: MouseEvent): void => {\n event.preventDefault();\n this.startDrag(event.clientX, event.clientY);\n\n document.addEventListener(\"mousemove\", this.handleMouseMove);\n document.addEventListener(\"mouseup\", this.handleMouseUp);\n };\n\n private handleMouseMove = (event: MouseEvent): void => {\n if (!this.isDragging) return;\n this.drag(event.clientX, event.clientY);\n };\n\n private handleMouseUp = (): void => {\n this.cleanupDrag();\n };\n\n private handleTouchStart = (event: TouchEvent): void => {\n const touch = event.touches[0];\n if (!touch) return;\n\n event.preventDefault();\n this.startDrag(touch.clientX, touch.clientY);\n\n document.addEventListener(\"touchmove\", this.handleTouchMove, { passive: false });\n document.addEventListener(\"touchend\", this.handleTouchEnd);\n };\n\n private handleTouchMove = (event: TouchEvent): void => {\n if (!this.isDragging) return;\n\n const touch = event.touches[0];\n if (!touch) return;\n\n event.preventDefault();\n this.drag(touch.clientX, touch.clientY);\n };\n\n private handleTouchEnd = (): void => {\n this.cleanupDrag();\n };\n\n private startDrag(clientX: number, clientY: number): void {\n const viewport = this.getViewport();\n if (!viewport) return;\n\n this.isDragging = true;\n this.startX = clientX;\n this.startY = clientY;\n this.startScrollTop = viewport.scrollTop;\n this.startScrollLeft = viewport.scrollLeft;\n\n this.setAttribute(\"data-dragging\", \"\");\n document.body.style.userSelect = \"none\";\n }\n\n /**\n * Handle drag movement using cached dimensions.\n * Uses ResizeObserver-cached values instead of getBoundingClientRect\n * to avoid layout thrashing during drag operations.\n */\n private drag(clientX: number, clientY: number): void {\n const viewport = this.getViewport();\n if (!viewport) return;\n\n const orientation = this.getOrientation();\n\n // Use cached dimensions instead of calling getBoundingClientRect\n // This prevents layout thrashing during high-frequency drag events\n const { width: trackWidth, height: trackHeight } = this.cachedDimensions;\n\n if (orientation === \"vertical\") {\n const deltaY = clientY - this.startY;\n const scrollableHeight = viewport.scrollHeight - viewport.clientHeight;\n\n // Guard against division by zero\n if (trackHeight > 0 && scrollableHeight > 0) {\n const scrollDelta = (deltaY / trackHeight) * scrollableHeight;\n viewport.scrollTop = this.startScrollTop + scrollDelta;\n }\n } else {\n const deltaX = clientX - this.startX;\n const scrollableWidth = viewport.scrollWidth - viewport.clientWidth;\n\n // Guard against division by zero\n if (trackWidth > 0 && scrollableWidth > 0) {\n const scrollDelta = (deltaX / trackWidth) * scrollableWidth;\n viewport.scrollLeft = this.startScrollLeft + scrollDelta;\n }\n }\n }\n\n private cleanupDrag(): void {\n this.isDragging = false;\n this.removeAttribute(\"data-dragging\");\n document.body.style.userSelect = \"\";\n\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\n document.removeEventListener(\"touchmove\", this.handleTouchMove);\n document.removeEventListener(\"touchend\", this.handleTouchEnd);\n }\n\n override render() {\n return html``;\n }\n}\n\ndefine(\"ds-scroll-area-thumb\", DsScrollAreaThumb);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-scroll-area-thumb\": DsScrollAreaThumb;\n }\n}\n","/**\n * ScrollArea component - custom scrollbar container.\n *\n * Provides styled scrollbars with consistent appearance across browsers.\n *\n * @element ds-scroll-area\n *\n * @slot - Scrollable content\n *\n * @example\n * ```html\n * <ds-scroll-area style=\"height: 200px\">\n * <ds-scroll-area-viewport>\n * <!-- Long content here -->\n * </ds-scroll-area-viewport>\n * <ds-scroll-area-scrollbar orientation=\"vertical\">\n * <ds-scroll-area-thumb></ds-scroll-area-thumb>\n * </ds-scroll-area-scrollbar>\n * </ds-scroll-area>\n * ```\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\n// Import child components\nimport \"./scroll-area-viewport.js\";\nimport \"./scroll-area-scrollbar.js\";\nimport \"./scroll-area-thumb.js\";\n\nexport type ScrollAreaType = \"auto\" | \"always\" | \"scroll\" | \"hover\";\n\nexport class DsScrollArea extends DSElement {\n /** When scrollbars are visible */\n @property({ type: String, reflect: true })\n type: ScrollAreaType = \"hover\";\n\n /** Scroll hide delay in ms (for hover type) */\n @property({ type: Number, attribute: \"scroll-hide-delay\" })\n scrollHideDelay = 600;\n\n /** Orientation for which to show scrollbar */\n @property({ type: String, reflect: true })\n orientation: \"vertical\" | \"horizontal\" | \"both\" = \"vertical\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-scroll-area\", DsScrollArea);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-scroll-area\": DsScrollArea;\n }\n}\n","/**\n * BreadcrumbList component - ordered list container.\n *\n * @element ds-breadcrumb-list\n *\n * @slot - Breadcrumb items and separators\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsBreadcrumbList extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"list\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-breadcrumb-list\", DsBreadcrumbList);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-breadcrumb-list\": DsBreadcrumbList;\n }\n}\n","/**\n * BreadcrumbItem component - individual breadcrumb item.\n *\n * @element ds-breadcrumb-item\n *\n * @slot - Link or page content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsBreadcrumbItem extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"listitem\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-breadcrumb-item\", DsBreadcrumbItem);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-breadcrumb-item\": DsBreadcrumbItem;\n }\n}\n","/**\n * BreadcrumbLink component - navigable breadcrumb link.\n *\n * @element ds-breadcrumb-link\n *\n * @slot - Link content\n *\n * @fires ds:navigate - Fired when link is clicked (for SPA navigation)\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsBreadcrumbLink extends DSElement {\n /** URL to navigate to */\n @property({ type: String, reflect: true })\n href = \"\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"tabindex\", \"0\");\n\n this.addEventListener(\"click\", this.handleClick);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n private handleClick = (event: MouseEvent): void => {\n const navigateEvent = emitEvent(this, \"ds:navigate\", {\n detail: { href: this.href },\n bubbles: true,\n cancelable: true,\n });\n\n if (!navigateEvent.defaultPrevented && this.href) {\n if (event.ctrlKey || event.metaKey) {\n window.open(this.href, \"_blank\");\n } else {\n window.location.href = this.href;\n }\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n this.handleClick(new MouseEvent(\"click\"));\n }\n };\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-breadcrumb-link\", DsBreadcrumbLink);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-breadcrumb-link\": DsBreadcrumbLink;\n }\n}\n","/**\n * BreadcrumbPage component - current page (non-navigable).\n *\n * @element ds-breadcrumb-page\n *\n * @slot - Page content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsBreadcrumbPage extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"link\");\n this.setAttribute(\"aria-current\", \"page\");\n this.setAttribute(\"aria-disabled\", \"true\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-breadcrumb-page\", DsBreadcrumbPage);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-breadcrumb-page\": DsBreadcrumbPage;\n }\n}\n","/**\n * BreadcrumbSeparator component - visual separator between items.\n *\n * @element ds-breadcrumb-separator\n *\n * @slot - Separator content (defaults to /)\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsBreadcrumbSeparator extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"presentation\");\n this.setAttribute(\"aria-hidden\", \"true\");\n }\n\n override render() {\n return html`<slot>/</slot>`;\n }\n}\n\ndefine(\"ds-breadcrumb-separator\", DsBreadcrumbSeparator);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-breadcrumb-separator\": DsBreadcrumbSeparator;\n }\n}\n","/**\n * Breadcrumb component - navigation trail.\n *\n * Shows the current page location within a navigational hierarchy.\n *\n * @element ds-breadcrumb\n *\n * @slot - Breadcrumb list\n *\n * @example\n * ```html\n * <ds-breadcrumb>\n * <ds-breadcrumb-list>\n * <ds-breadcrumb-item>\n * <ds-breadcrumb-link href=\"/\">Home</ds-breadcrumb-link>\n * </ds-breadcrumb-item>\n * <ds-breadcrumb-separator>/</ds-breadcrumb-separator>\n * <ds-breadcrumb-item>\n * <ds-breadcrumb-page>Current</ds-breadcrumb-page>\n * </ds-breadcrumb-item>\n * </ds-breadcrumb-list>\n * </ds-breadcrumb>\n * ```\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\n// Import child components\nimport \"./breadcrumb-list.js\";\nimport \"./breadcrumb-item.js\";\nimport \"./breadcrumb-link.js\";\nimport \"./breadcrumb-page.js\";\nimport \"./breadcrumb-separator.js\";\n\nexport class DsBreadcrumb extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"navigation\");\n this.setAttribute(\"aria-label\", \"Breadcrumb\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-breadcrumb\", DsBreadcrumb);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-breadcrumb\": DsBreadcrumb;\n }\n}\n","/**\n * PaginationContent component - container for pagination items.\n *\n * @element ds-pagination-content\n *\n * @slot - Pagination items\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsPaginationContent extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"list\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-pagination-content\", DsPaginationContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-pagination-content\": DsPaginationContent;\n }\n}\n","/**\n * PaginationItem component - wrapper for pagination link.\n *\n * @element ds-pagination-item\n *\n * @slot - Pagination link\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsPaginationItem extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"listitem\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-pagination-item\", DsPaginationItem);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-pagination-item\": DsPaginationItem;\n }\n}\n","/**\n * PaginationLink component - page number link.\n *\n * @element ds-pagination-link\n *\n * @slot - Page number content\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsPaginationLink extends DSElement {\n /** Page number */\n @property({ type: Number, reflect: true })\n page = 1;\n\n /** Whether this is the current page */\n @property({ type: Boolean, reflect: true })\n active = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"button\");\n this.setAttribute(\"tabindex\", \"0\");\n\n this.addEventListener(\"click\", this.handleClick);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n private handleClick = (): void => {\n if (this.active) return;\n\n emitEvent(this, \"ds:page-select\", {\n detail: { page: this.page },\n bubbles: true,\n });\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this.handleClick();\n }\n };\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"active\")) {\n if (this.active) {\n this.setAttribute(\"aria-current\", \"page\");\n } else {\n this.removeAttribute(\"aria-current\");\n }\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-pagination-link\", DsPaginationLink);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-pagination-link\": DsPaginationLink;\n }\n}\n","/**\n * PaginationPrevious component - go to previous page button.\n *\n * @element ds-pagination-previous\n *\n * @slot - Button content (defaults to \"Previous\")\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsPaginationPrevious extends DSElement {\n /** Disabled state */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"button\");\n this.setAttribute(\"tabindex\", \"0\");\n this.setAttribute(\"aria-label\", \"Go to previous page\");\n\n this.addEventListener(\"click\", this.handleClick);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n private handleClick = (): void => {\n if (this.disabled) return;\n\n const pagination = this.closest(\"ds-pagination\") as\n | (HTMLElement & { previousPage: () => void })\n | null;\n pagination?.previousPage();\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this.handleClick();\n }\n };\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"disabled\")) {\n this.setAttribute(\"aria-disabled\", String(this.disabled));\n this.setAttribute(\"tabindex\", this.disabled ? \"-1\" : \"0\");\n }\n }\n\n override render() {\n return html`<slot>Previous</slot>`;\n }\n}\n\ndefine(\"ds-pagination-previous\", DsPaginationPrevious);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-pagination-previous\": DsPaginationPrevious;\n }\n}\n","/**\n * PaginationNext component - go to next page button.\n *\n * @element ds-pagination-next\n *\n * @slot - Button content (defaults to \"Next\")\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsPaginationNext extends DSElement {\n /** Disabled state */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"button\");\n this.setAttribute(\"tabindex\", \"0\");\n this.setAttribute(\"aria-label\", \"Go to next page\");\n\n this.addEventListener(\"click\", this.handleClick);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n private handleClick = (): void => {\n if (this.disabled) return;\n\n const pagination = this.closest(\"ds-pagination\") as\n | (HTMLElement & { nextPage: () => void })\n | null;\n pagination?.nextPage();\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this.handleClick();\n }\n };\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"disabled\")) {\n this.setAttribute(\"aria-disabled\", String(this.disabled));\n this.setAttribute(\"tabindex\", this.disabled ? \"-1\" : \"0\");\n }\n }\n\n override render() {\n return html`<slot>Next</slot>`;\n }\n}\n\ndefine(\"ds-pagination-next\", DsPaginationNext);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-pagination-next\": DsPaginationNext;\n }\n}\n","/**\n * PaginationEllipsis component - indicates more pages.\n *\n * @element ds-pagination-ellipsis\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsPaginationEllipsis extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"aria-hidden\", \"true\");\n }\n\n override render() {\n return html`<span>...</span>`;\n }\n}\n\ndefine(\"ds-pagination-ellipsis\", DsPaginationEllipsis);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-pagination-ellipsis\": DsPaginationEllipsis;\n }\n}\n","/**\n * Pagination component - page navigation.\n *\n * @element ds-pagination\n *\n * @slot - Pagination content\n *\n * @fires ds:page-change - Fired when page changes\n *\n * @example\n * ```html\n * <ds-pagination page=\"1\" total-pages=\"10\">\n * <ds-pagination-content>\n * <ds-pagination-previous></ds-pagination-previous>\n * <ds-pagination-item>\n * <ds-pagination-link page=\"1\">1</ds-pagination-link>\n * </ds-pagination-item>\n * <ds-pagination-ellipsis></ds-pagination-ellipsis>\n * <ds-pagination-next></ds-pagination-next>\n * </ds-pagination-content>\n * </ds-pagination>\n * ```\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\n// Import child components\nimport \"./pagination-content.js\";\nimport \"./pagination-item.js\";\nimport \"./pagination-link.js\";\nimport \"./pagination-previous.js\";\nimport \"./pagination-next.js\";\nimport \"./pagination-ellipsis.js\";\n\nexport class DsPagination extends DSElement {\n /** Current page (1-indexed) */\n @property({ type: Number, reflect: true })\n page = 1;\n\n /** Total number of pages */\n @property({ type: Number, attribute: \"total-pages\" })\n totalPages = 1;\n\n /** Number of sibling pages to show */\n @property({ type: Number, attribute: \"sibling-count\" })\n siblingCount = 1;\n\n /** Number of boundary pages to show */\n @property({ type: Number, attribute: \"boundary-count\" })\n boundaryCount = 1;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"navigation\");\n this.setAttribute(\"aria-label\", \"Pagination\");\n\n this.addEventListener(\"ds:page-select\", this.handlePageSelect as EventListener);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"ds:page-select\", this.handlePageSelect as EventListener);\n }\n\n /**\n * Navigate to a specific page.\n */\n public goToPage(newPage: number): void {\n const clampedPage = Math.max(1, Math.min(newPage, this.totalPages));\n\n if (clampedPage !== this.page) {\n this.page = clampedPage;\n this.updateActiveState();\n\n emitEvent(this, \"ds:page-change\", {\n detail: { page: this.page },\n bubbles: true,\n });\n }\n }\n\n /**\n * Go to previous page.\n */\n public previousPage(): void {\n this.goToPage(this.page - 1);\n }\n\n /**\n * Go to next page.\n */\n public nextPage(): void {\n this.goToPage(this.page + 1);\n }\n\n private handlePageSelect = (event: CustomEvent<{ page: number }>): void => {\n event.stopPropagation();\n this.goToPage(event.detail.page);\n };\n\n private updateActiveState(): void {\n const links = this.querySelectorAll(\"ds-pagination-link\");\n for (const link of links) {\n const linkPage = Number(link.getAttribute(\"page\"));\n if (linkPage === this.page) {\n link.setAttribute(\"aria-current\", \"page\");\n link.setAttribute(\"active\", \"\");\n } else {\n link.removeAttribute(\"aria-current\");\n link.removeAttribute(\"active\");\n }\n }\n\n // Update prev/next disabled state\n const prevButton = this.querySelector(\"ds-pagination-previous\");\n const nextButton = this.querySelector(\"ds-pagination-next\");\n\n if (prevButton) {\n if (this.page <= 1) {\n prevButton.setAttribute(\"disabled\", \"\");\n } else {\n prevButton.removeAttribute(\"disabled\");\n }\n }\n\n if (nextButton) {\n if (this.page >= this.totalPages) {\n nextButton.setAttribute(\"disabled\", \"\");\n } else {\n nextButton.removeAttribute(\"disabled\");\n }\n }\n }\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"page\") || changedProperties.has(\"totalPages\")) {\n this.updateActiveState();\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-pagination\", DsPagination);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-pagination\": DsPagination;\n }\n}\n","/**\n * StepperItem component - individual step container.\n *\n * @element ds-stepper-item\n *\n * @slot - Trigger and content\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsStepperItem extends DSElement {\n /** Step number (1-indexed) */\n @property({ type: Number, reflect: true })\n step = 1;\n\n /** Whether this step is completed */\n @property({ type: Boolean, reflect: true })\n completed = false;\n\n /** Whether this step is disabled */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"listitem\");\n this.setAttribute(\"data-state\", \"pending\");\n }\n\n override updated(_changedProperties: Map<string, unknown>): void {\n // Update aria-current when state changes\n // Per APG, aria-current=\"step\" indicates the current step in a process\n const state = this.getAttribute(\"data-state\");\n if (state === \"active\") {\n this.setAttribute(\"aria-current\", \"step\");\n } else {\n this.removeAttribute(\"aria-current\");\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-stepper-item\", DsStepperItem);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-stepper-item\": DsStepperItem;\n }\n}\n","/**\n * StepperTrigger component - clickable step button.\n *\n * @element ds-stepper-trigger\n *\n * @slot - Indicator and title\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsStepperTrigger extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"button\");\n this.setAttribute(\"tabindex\", \"0\");\n\n this.addEventListener(\"click\", this.handleClick);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n private getStep(): number {\n const item = this.closest(\"ds-stepper-item\");\n return Number(item?.getAttribute(\"step\")) || 1;\n }\n\n private isDisabled(): boolean {\n const item = this.closest(\"ds-stepper-item\");\n return item?.hasAttribute(\"disabled\") || false;\n }\n\n private handleClick = (): void => {\n if (this.isDisabled()) return;\n\n emitEvent(this, \"ds:step-select\", {\n detail: { step: this.getStep() },\n bubbles: true,\n });\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this.handleClick();\n }\n };\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-stepper-trigger\", DsStepperTrigger);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-stepper-trigger\": DsStepperTrigger;\n }\n}\n","/**\n * StepperIndicator component - visual step number/icon.\n *\n * @element ds-stepper-indicator\n *\n * @slot - Step number or icon\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsStepperIndicator extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"aria-hidden\", \"true\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-stepper-indicator\", DsStepperIndicator);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-stepper-indicator\": DsStepperIndicator;\n }\n}\n","/**\n * StepperTitle component - step title text.\n *\n * @element ds-stepper-title\n *\n * @slot - Title text\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsStepperTitle extends DSElement {\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-stepper-title\", DsStepperTitle);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-stepper-title\": DsStepperTitle;\n }\n}\n","/**\n * StepperDescription component - optional step description.\n *\n * @element ds-stepper-description\n *\n * @slot - Description text\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsStepperDescription extends DSElement {\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-stepper-description\", DsStepperDescription);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-stepper-description\": DsStepperDescription;\n }\n}\n","/**\n * StepperSeparator component - line between steps.\n *\n * @element ds-stepper-separator\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsStepperSeparator extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"separator\");\n this.setAttribute(\"aria-hidden\", \"true\");\n }\n\n override render() {\n return html``;\n }\n}\n\ndefine(\"ds-stepper-separator\", DsStepperSeparator);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-stepper-separator\": DsStepperSeparator;\n }\n}\n","/**\n * StepperContent component - step panel content.\n *\n * @element ds-stepper-content\n *\n * @slot - Step content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsStepperContent extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"tabpanel\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-stepper-content\", DsStepperContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-stepper-content\": DsStepperContent;\n }\n}\n","/**\n * Stepper component - step-by-step progress indicator.\n *\n * @element ds-stepper\n *\n * @slot - Stepper items\n *\n * @fires ds:step-change - Fired when active step changes\n *\n * @example\n * ```html\n * <ds-stepper value=\"2\">\n * <ds-stepper-item step=\"1\" completed>\n * <ds-stepper-trigger>\n * <ds-stepper-indicator>1</ds-stepper-indicator>\n * <ds-stepper-title>Account</ds-stepper-title>\n * </ds-stepper-trigger>\n * </ds-stepper-item>\n * <ds-stepper-separator></ds-stepper-separator>\n * <ds-stepper-item step=\"2\">\n * <ds-stepper-trigger>\n * <ds-stepper-indicator>2</ds-stepper-indicator>\n * <ds-stepper-title>Profile</ds-stepper-title>\n * </ds-stepper-trigger>\n * </ds-stepper-item>\n * </ds-stepper>\n * ```\n */\n\nimport { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\n// Import child components\nimport \"./stepper-item.js\";\nimport \"./stepper-trigger.js\";\nimport \"./stepper-indicator.js\";\nimport \"./stepper-title.js\";\nimport \"./stepper-description.js\";\nimport \"./stepper-separator.js\";\nimport \"./stepper-content.js\";\n\nexport type StepperOrientation = \"horizontal\" | \"vertical\";\n\nexport class DsStepper extends DSElement {\n /** Current step value */\n @property({ type: Number, reflect: true })\n value = 1;\n\n /** Orientation */\n @property({ type: String, reflect: true })\n orientation: StepperOrientation = \"horizontal\";\n\n /** Whether steps are linear (must complete in order) */\n @property({ type: Boolean })\n linear = false;\n\n /**\n * Accessible label for the stepper.\n * Per APG, the stepper should have a clear label describing its purpose.\n */\n @property({ type: String, attribute: \"aria-label\" })\n override ariaLabel = \"Progress steps\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Use role=\"list\" for ordered sequence of steps per APG\n // Combined with aria-current=\"step\" on active item for process indication\n this.setAttribute(\"role\", \"list\");\n this.setAttribute(\"aria-label\", this.ariaLabel);\n\n this.addEventListener(\"ds:step-select\", this.handleStepSelect as EventListener);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"ds:step-select\", this.handleStepSelect as EventListener);\n }\n\n /**\n * Go to a specific step.\n */\n public goToStep(step: number): void {\n if (this.linear) {\n // In linear mode, can only go to completed steps or next step\n const items = this.querySelectorAll(\"ds-stepper-item\");\n let maxAllowed = 1;\n\n for (const item of items) {\n const itemStep = Number(item.getAttribute(\"step\"));\n if (item.hasAttribute(\"completed\") || itemStep === this.value) {\n maxAllowed = Math.max(maxAllowed, itemStep + 1);\n }\n }\n\n if (step > maxAllowed) return;\n }\n\n if (step !== this.value) {\n this.value = step;\n this.updateActiveState();\n\n emitEvent(this, \"ds:step-change\", {\n detail: { step: this.value },\n bubbles: true,\n });\n }\n }\n\n /**\n * Go to next step.\n */\n public nextStep(): void {\n this.goToStep(this.value + 1);\n }\n\n /**\n * Go to previous step.\n */\n public previousStep(): void {\n this.goToStep(this.value - 1);\n }\n\n private handleStepSelect = (event: CustomEvent<{ step: number }>): void => {\n event.stopPropagation();\n this.goToStep(event.detail.step);\n };\n\n private updateActiveState(): void {\n const items = this.querySelectorAll(\"ds-stepper-item\");\n\n for (const item of items) {\n const step = Number(item.getAttribute(\"step\"));\n\n if (step === this.value) {\n item.setAttribute(\"data-state\", \"active\");\n } else if (step < this.value || item.hasAttribute(\"completed\")) {\n item.setAttribute(\"data-state\", \"completed\");\n } else {\n item.setAttribute(\"data-state\", \"pending\");\n }\n }\n }\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"value\")) {\n this.updateActiveState();\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-stepper\", DsStepper);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-stepper\": DsStepper;\n }\n}\n","import { property, state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\n\n/**\n * Command palette root component - provides search-based command/option selection.\n *\n * @element ds-command\n * @slot - Command children (input, list, etc.)\n *\n * @fires ds:value-change - When the input value changes\n * @fires ds:select - When an item is selected\n *\n * @example\n * ```html\n * <ds-command>\n * <ds-command-input placeholder=\"Search commands...\"></ds-command-input>\n * <ds-command-list>\n * <ds-command-group heading=\"Actions\">\n * <ds-command-item value=\"copy\">Copy</ds-command-item>\n * <ds-command-item value=\"paste\">Paste</ds-command-item>\n * </ds-command-group>\n * </ds-command-list>\n * </ds-command>\n * ```\n */\nexport class DsCommand extends DSElement {\n /**\n * Current search/filter value.\n */\n @property({ type: String })\n value = \"\";\n\n /**\n * Whether the command palette is in a loading state.\n */\n @property({ type: Boolean, reflect: true })\n loading = false;\n\n /**\n * Whether to use built-in fuzzy filtering.\n * When false, filtering must be handled externally.\n */\n @property({ type: Boolean, attribute: \"filter\" })\n filter = true;\n\n /**\n * Label for accessibility.\n */\n @property({ type: String })\n label = \"Command palette\";\n\n /**\n * Tracks visible item count after filtering.\n */\n @state()\n private _visibleCount = 0;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"search\");\n this.setAttribute(\"aria-label\", this.label);\n\n this.addEventListener(\"ds:command-input\", this._handleInputChange);\n this.addEventListener(\"ds:command-select\", this._handleSelect);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"ds:command-input\", this._handleInputChange);\n this.removeEventListener(\"ds:command-select\", this._handleSelect);\n }\n\n private _handleInputChange = (event: Event): void => {\n const e = event as CustomEvent<{ value: string }>;\n this.value = e.detail.value;\n\n if (this.filter) {\n this._filterItems(this.value);\n }\n\n emitEvent(this, \"value-change\", { detail: { value: this.value } });\n };\n\n private _handleSelect = (event: Event): void => {\n const e = event as CustomEvent<{ value: string }>;\n emitEvent(this, \"select\", { detail: { value: e.detail.value } });\n };\n\n private _filterItems(query: string): void {\n const normalizedQuery = query.toLowerCase().trim();\n const items = this.querySelectorAll(\"ds-command-item\");\n let visibleCount = 0;\n\n items.forEach((item) => {\n const text = item.textContent?.toLowerCase() || \"\";\n const value = item.getAttribute(\"value\")?.toLowerCase() || \"\";\n const keywords = item.getAttribute(\"keywords\")?.toLowerCase() || \"\";\n\n const matches =\n normalizedQuery === \"\" ||\n this._fuzzyMatch(normalizedQuery, text) ||\n this._fuzzyMatch(normalizedQuery, value) ||\n this._fuzzyMatch(normalizedQuery, keywords);\n\n if (matches) {\n item.removeAttribute(\"data-filtered\");\n visibleCount++;\n } else {\n item.setAttribute(\"data-filtered\", \"true\");\n }\n });\n\n this._visibleCount = visibleCount;\n this._updateGroupVisibility();\n this._updateEmptyState();\n }\n\n private _fuzzyMatch(query: string, text: string): boolean {\n if (!query) return true;\n if (!text) return false;\n\n // Simple fuzzy matching - characters must appear in order\n let queryIndex = 0;\n for (let i = 0; i < text.length && queryIndex < query.length; i++) {\n if (text[i] === query[queryIndex]) {\n queryIndex++;\n }\n }\n return queryIndex === query.length;\n }\n\n private _updateGroupVisibility(): void {\n const groups = this.querySelectorAll(\"ds-command-group\");\n groups.forEach((group) => {\n const visibleItems = group.querySelectorAll(\"ds-command-item:not([data-filtered])\");\n if (visibleItems.length === 0) {\n group.setAttribute(\"data-empty\", \"true\");\n } else {\n group.removeAttribute(\"data-empty\");\n }\n });\n }\n\n private _updateEmptyState(): void {\n const emptyEl = this.querySelector(\"ds-command-empty\");\n if (emptyEl) {\n if (this._visibleCount === 0 && this.value) {\n emptyEl.removeAttribute(\"hidden\");\n } else {\n emptyEl.setAttribute(\"hidden\", \"\");\n }\n }\n }\n\n /**\n * Programmatically set the search value.\n */\n setValue(value: string): void {\n this.value = value;\n const input = this.querySelector(\"ds-command-input\");\n if (input) {\n (input as HTMLElement & { value: string }).value = value;\n }\n if (this.filter) {\n this._filterItems(value);\n }\n }\n\n /**\n * Clear the search value.\n */\n clear(): void {\n this.setValue(\"\");\n }\n}\n","import { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\n\n/**\n * Command palette input component - search input for filtering commands.\n *\n * @element ds-command-input\n *\n * @fires ds:command-input - When the input value changes (bubbles to ds-command)\n *\n * @example\n * ```html\n * <ds-command-input placeholder=\"Type a command or search...\"></ds-command-input>\n * ```\n */\nexport class DsCommandInput extends DSElement {\n /**\n * Current input value.\n */\n @property({ type: String })\n value = \"\";\n\n /**\n * Placeholder text.\n */\n @property({ type: String })\n placeholder = \"Type a command or search...\";\n\n /**\n * Whether the input is disabled.\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n private _input: HTMLInputElement | null = null;\n\n connectedCallback(): void {\n super.connectedCallback();\n this._createInput();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n if (this._input) {\n this._input.removeEventListener(\"input\", this._handleInput);\n this._input.removeEventListener(\"keydown\", this._handleKeyDown);\n }\n }\n\n private _createInput(): void {\n // Check if input already exists (slotted)\n let input = this.querySelector(\"input\");\n\n if (!input) {\n input = document.createElement(\"input\");\n input.type = \"text\";\n input.className = \"ds-command-input__field\";\n this.appendChild(input);\n }\n\n this._input = input;\n this._input.placeholder = this.placeholder;\n this._input.disabled = this.disabled;\n this._input.value = this.value;\n this._input.setAttribute(\"role\", \"combobox\");\n this._input.setAttribute(\"aria-expanded\", \"true\");\n this._input.setAttribute(\"aria-controls\", \"\");\n this._input.setAttribute(\"aria-autocomplete\", \"list\");\n this._input.setAttribute(\"autocomplete\", \"off\");\n this._input.setAttribute(\"autocorrect\", \"off\");\n this._input.setAttribute(\"spellcheck\", \"false\");\n\n this._input.addEventListener(\"input\", this._handleInput);\n this._input.addEventListener(\"keydown\", this._handleKeyDown);\n }\n\n private _handleInput = (event: Event): void => {\n const target = event.target as HTMLInputElement;\n this.value = target.value;\n\n emitEvent(this, \"command-input\", {\n detail: { value: this.value },\n });\n };\n\n private _handleKeyDown = (event: KeyboardEvent): void => {\n const command = this.closest(\"ds-command\");\n const list = command?.querySelector(\"ds-command-list\") as HTMLElement | null;\n\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n list?.focus();\n break;\n case \"ArrowUp\":\n event.preventDefault();\n if (\n list &&\n \"focusLast\" in list &&\n typeof (list as unknown as { focusLast: () => void }).focusLast === \"function\"\n ) {\n (list as unknown as { focusLast: () => void }).focusLast();\n }\n break;\n case \"Enter\": {\n event.preventDefault();\n const activeItem = command?.querySelector(\n \"ds-command-item[data-active]\"\n ) as HTMLElement | null;\n if (activeItem) {\n activeItem.click();\n }\n break;\n }\n case \"Escape\":\n event.preventDefault();\n emitEvent(this, \"command-escape\", { detail: {} });\n break;\n }\n };\n\n /**\n * Focus the input.\n */\n focus(): void {\n this._input?.focus();\n }\n\n /**\n * Blur the input.\n */\n blur(): void {\n this._input?.blur();\n }\n}\n","import { createRovingFocus } from \"@hypoth-ui/primitives-dom\";\nimport { DSElement } from \"../../base/ds-element.js\";\n\n/**\n * Command palette list component - contains command items with keyboard navigation.\n *\n * @element ds-command-list\n * @slot - Command items and groups\n *\n * @example\n * ```html\n * <ds-command-list>\n * <ds-command-item value=\"copy\">Copy</ds-command-item>\n * <ds-command-item value=\"paste\">Paste</ds-command-item>\n * </ds-command-list>\n * ```\n */\nexport class DsCommandList extends DSElement {\n private _rovingFocus: ReturnType<typeof createRovingFocus> | null = null;\n private _observer: MutationObserver | null = null;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"listbox\");\n this.tabIndex = -1;\n\n this._setupRovingFocus();\n this._setupMutationObserver();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this._rovingFocus?.destroy();\n this._observer?.disconnect();\n }\n\n private _setupMutationObserver(): void {\n this._observer = new MutationObserver(() => {\n // Re-setup roving focus when items change\n this._rovingFocus?.destroy();\n this._setupRovingFocus();\n });\n\n this._observer.observe(this, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\"data-filtered\", \"disabled\"],\n });\n }\n\n private _setupRovingFocus(): void {\n const items = this._getVisibleItems();\n\n if (items.length === 0) return;\n\n this._rovingFocus = createRovingFocus({\n container: this,\n selector: \"ds-command-item:not([data-filtered]):not([disabled])\",\n direction: \"vertical\",\n loop: true,\n onFocus: (item: HTMLElement) => {\n // Update active state for styling\n this._getVisibleItems().forEach((i) => i.removeAttribute(\"data-active\"));\n item.setAttribute(\"data-active\", \"true\");\n },\n });\n }\n\n private _getVisibleItems(): HTMLElement[] {\n return Array.from(\n this.querySelectorAll(\"ds-command-item:not([data-filtered]):not([disabled])\")\n ) as HTMLElement[];\n }\n\n /**\n * Focus the first visible item.\n */\n focus(): void {\n const items = this._getVisibleItems();\n if (items.length > 0) {\n const firstItem = items[0];\n if (firstItem) {\n firstItem.focus();\n firstItem.setAttribute(\"data-active\", \"true\");\n }\n }\n }\n\n /**\n * Focus the last visible item.\n */\n focusLast(): void {\n const items = this._getVisibleItems();\n if (items.length > 0) {\n const lastItem = items[items.length - 1];\n if (lastItem) {\n lastItem.focus();\n lastItem.setAttribute(\"data-active\", \"true\");\n }\n }\n }\n}\n","import { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { emitEvent } from \"../../events/emit.js\";\n\n/**\n * Command palette item component - selectable command/option.\n *\n * @element ds-command-item\n * @slot - Item content\n *\n * @fires ds:command-select - When the item is selected (bubbles to ds-command)\n *\n * @example\n * ```html\n * <ds-command-item value=\"copy\" keywords=\"duplicate clone\">\n * <ds-icon name=\"copy\"></ds-icon>\n * Copy\n * </ds-command-item>\n * ```\n */\nexport class DsCommandItem extends DSElement {\n /**\n * Value to emit when selected.\n */\n @property({ type: String })\n value = \"\";\n\n /**\n * Additional keywords for fuzzy search (space-separated).\n */\n @property({ type: String })\n keywords = \"\";\n\n /**\n * Whether the item is disabled.\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"option\");\n this.tabIndex = -1;\n\n if (this.disabled) {\n this.setAttribute(\"aria-disabled\", \"true\");\n }\n\n this.addEventListener(\"click\", this._handleClick);\n this.addEventListener(\"keydown\", this._handleKeyDown);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this._handleClick);\n this.removeEventListener(\"keydown\", this._handleKeyDown);\n }\n\n private _handleClick = (): void => {\n if (this.disabled) return;\n this._select();\n };\n\n private _handleKeyDown = (event: KeyboardEvent): void => {\n if (this.disabled) return;\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this._select();\n }\n };\n\n private _select(): void {\n emitEvent(this, \"command-select\", {\n detail: { value: this.value || this.textContent?.trim() || \"\" },\n });\n }\n}\n","import { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\n\n/**\n * Command palette group component - groups related command items with a heading.\n *\n * @element ds-command-group\n * @slot - Command items\n *\n * @example\n * ```html\n * <ds-command-group heading=\"Actions\">\n * <ds-command-item value=\"copy\">Copy</ds-command-item>\n * <ds-command-item value=\"paste\">Paste</ds-command-item>\n * </ds-command-group>\n * ```\n */\nexport class DsCommandGroup extends DSElement {\n /**\n * Heading text for the group.\n */\n @property({ type: String })\n heading = \"\";\n\n private _headingEl: HTMLDivElement | null = null;\n\n connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"group\");\n\n if (this.heading) {\n this._createHeading();\n }\n }\n\n updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"heading\")) {\n if (this.heading) {\n this._createHeading();\n } else if (this._headingEl) {\n this._headingEl.remove();\n this._headingEl = null;\n this.removeAttribute(\"aria-labelledby\");\n }\n }\n }\n\n private _createHeading(): void {\n if (!this._headingEl) {\n this._headingEl = document.createElement(\"div\");\n this._headingEl.className = \"ds-command-group__heading\";\n this._headingEl.id = `ds-command-group-${Math.random().toString(36).slice(2, 9)}`;\n this._headingEl.setAttribute(\"aria-hidden\", \"true\");\n this.prepend(this._headingEl);\n this.setAttribute(\"aria-labelledby\", this._headingEl.id);\n }\n\n this._headingEl.textContent = this.heading;\n }\n}\n","import { DSElement } from \"../../base/ds-element.js\";\n\n/**\n * Command palette separator component - visual divider between items/groups.\n *\n * @element ds-command-separator\n *\n * @example\n * ```html\n * <ds-command-list>\n * <ds-command-item value=\"copy\">Copy</ds-command-item>\n * <ds-command-separator></ds-command-separator>\n * <ds-command-item value=\"delete\">Delete</ds-command-item>\n * </ds-command-list>\n * ```\n */\nexport class DsCommandSeparator extends DSElement {\n connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"separator\");\n this.setAttribute(\"aria-orientation\", \"horizontal\");\n }\n}\n","import { DSElement } from \"../../base/ds-element.js\";\n\n/**\n * Command palette empty state component - shown when no results match the search.\n *\n * @element ds-command-empty\n * @slot - Empty state content\n *\n * @example\n * ```html\n * <ds-command-empty>\n * No results found.\n * </ds-command-empty>\n * ```\n */\nexport class DsCommandEmpty extends DSElement {\n connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"status\");\n this.setAttribute(\"aria-live\", \"polite\");\n // Start hidden - ds-command will show when needed\n this.setAttribute(\"hidden\", \"\");\n }\n}\n","import { DSElement } from \"../../base/ds-element.js\";\n\n/**\n * Command palette loading state component - shown when loading async results.\n *\n * @element ds-command-loading\n * @slot - Loading state content (e.g., spinner)\n *\n * @example\n * ```html\n * <ds-command-loading>\n * <ds-spinner size=\"sm\"></ds-spinner>\n * Loading...\n * </ds-command-loading>\n * ```\n */\nexport class DsCommandLoading extends DSElement {\n connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"status\");\n this.setAttribute(\"aria-live\", \"polite\");\n this.setAttribute(\"aria-label\", \"Loading\");\n }\n}\n"],"mappings":"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","names":["html","html","html","property","state","html","property","state","html","html","html","property","state","html","property","state","html","property","state","html","property","state","html","property","state","html","property","state","html","property","state","html","property","state","html","state","html","state","createPresence","prefersReducedMotion","html","property","state","prefersReducedMotion","createPresence","html","property","state","html","property","state","html","property","state","html","html","html","property","html","property","html","property","html","property","html","html","html","property","html","property","html","html","html","html","createRovingFocus","html","property","createRovingFocus","html","property","html","html","html","property","html","property","html","html","html","property","html","property","html","html","html","html","html","property","html","property","html","html","html","html","html","html","html","html","html","html","html","property","html","property","html","property","html","property","html","property","html","property","html","html","html","property","html","property","html","property","state","html","property","html","html","html","html","html","html","html","html","html","html","html","html","html","property","html","property","property","state","property","state","property","property","createRovingFocus","createRovingFocus","property","property","property","property"]}
@@ -0,0 +1,60 @@
1
+ // src/events/emit.ts
2
+ function emitEvent(element, name, options = {}) {
3
+ const { detail, bubbles = true, composed = true, cancelable = false } = options;
4
+ const event = new CustomEvent(`ds:${name}`, {
5
+ detail,
6
+ bubbles,
7
+ composed,
8
+ cancelable
9
+ });
10
+ element.dispatchEvent(event);
11
+ return event;
12
+ }
13
+ var StandardEvents = {
14
+ /** User activation (click, Enter, Space) - buttons, links, menu items */
15
+ PRESS: "press",
16
+ /** Value changed (inputs, selects) */
17
+ CHANGE: "change",
18
+ /** Item selected (lists, menus) */
19
+ SELECT: "select",
20
+ /** Open state changed (dialogs, dropdowns, menus) - detail: { open, reason } */
21
+ OPEN_CHANGE: "open-change",
22
+ /** Component dismissed (toasts, alerts) */
23
+ DISMISS: "dismiss",
24
+ /** Focus moved within component */
25
+ FOCUS_CHANGE: "focus-change",
26
+ /** Expanded state changed (trees, accordions, collapsibles) */
27
+ EXPANDED_CHANGE: "expanded-change",
28
+ /** Checked state changed (checkboxes, switches, radio groups) */
29
+ CHECKED_CHANGE: "checked-change",
30
+ /** Sort state changed (tables) */
31
+ SORT_CHANGE: "sort-change",
32
+ /** Index changed (pagination, tabs, steppers, carousels) */
33
+ INDEX_CHANGE: "index-change",
34
+ /** Search query changed */
35
+ SEARCH: "search",
36
+ /** Hover state changed */
37
+ HOVER_CHANGE: "hover-change",
38
+ /** Items reordered (drag-and-drop) */
39
+ REORDER: "reorder",
40
+ /** Content copied to clipboard */
41
+ COPY: "copy",
42
+ /** Element resized */
43
+ RESIZE: "resize",
44
+ /** @deprecated Use OPEN_CHANGE instead */
45
+ OPEN: "open",
46
+ /** @deprecated Use OPEN_CHANGE instead */
47
+ CLOSE: "close",
48
+ /** @deprecated Use OPEN_CHANGE with cancelable: true instead */
49
+ BEFORE_CLOSE: "before-close",
50
+ /** @deprecated Use PRESS instead */
51
+ CLICK: "click",
52
+ /** Navigate event (links) */
53
+ NAVIGATE: "navigate"
54
+ };
55
+
56
+ export {
57
+ emitEvent,
58
+ StandardEvents
59
+ };
60
+ //# sourceMappingURL=chunk-YDQ434UH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/events/emit.ts"],"sourcesContent":["/**\n * Event emission utilities for design system components.\n *\n * All custom events use the `ds:` prefix to avoid collision with native DOM events.\n */\n\n/**\n * Options for emitting custom events\n */\nexport interface EmitEventOptions<T = unknown> {\n /** Event payload data */\n detail?: T;\n /** Whether event bubbles up the DOM tree (default: true) */\n bubbles?: boolean;\n /** Whether event crosses shadow DOM boundaries (default: true) */\n composed?: boolean;\n /** Whether event can be cancelled (default: false) */\n cancelable?: boolean;\n}\n\n/**\n * Emit a design system custom event with the `ds:` prefix.\n *\n * Events are automatically prefixed with `ds:` namespace.\n * Default behavior: bubbles and composed are true.\n *\n * @param element - The element dispatching the event\n * @param name - Event name (without ds: prefix)\n * @param options - Event options including detail payload\n * @returns The dispatched CustomEvent\n *\n * @example\n * ```typescript\n * // Emit ds:change event\n * emitEvent(this, 'change', { detail: { value: newValue } });\n *\n * // Emit ds:dismiss with reason\n * emitEvent(this, 'dismiss', { detail: { reason: 'escape' } });\n *\n * // Emit cancelable event\n * const event = emitEvent(this, 'before-close', { cancelable: true });\n * if (event.defaultPrevented) {\n * // Consumer called event.preventDefault()\n * return;\n * }\n * ```\n */\nexport function emitEvent<T = unknown>(\n element: HTMLElement,\n name: string,\n options: EmitEventOptions<T> = {}\n): CustomEvent<T> {\n const { detail, bubbles = true, composed = true, cancelable = false } = options;\n\n const event = new CustomEvent<T>(`ds:${name}`, {\n detail: detail as T,\n bubbles,\n composed,\n cancelable,\n });\n\n element.dispatchEvent(event);\n return event;\n}\n\n/**\n * Standard event names used across the design system.\n *\n * Components SHOULD use these standard names when applicable\n * for consistency across the component library.\n *\n * Naming conventions (per event-names.ts):\n * - React props use camelCase callbacks (e.g., onPress, onValueChange)\n * - Web Components use ds: prefixed custom events (e.g., ds:press, ds:change)\n */\nexport const StandardEvents = {\n /** User activation (click, Enter, Space) - buttons, links, menu items */\n PRESS: \"press\",\n /** Value changed (inputs, selects) */\n CHANGE: \"change\",\n /** Item selected (lists, menus) */\n SELECT: \"select\",\n /** Open state changed (dialogs, dropdowns, menus) - detail: { open, reason } */\n OPEN_CHANGE: \"open-change\",\n /** Component dismissed (toasts, alerts) */\n DISMISS: \"dismiss\",\n /** Focus moved within component */\n FOCUS_CHANGE: \"focus-change\",\n /** Expanded state changed (trees, accordions, collapsibles) */\n EXPANDED_CHANGE: \"expanded-change\",\n /** Checked state changed (checkboxes, switches, radio groups) */\n CHECKED_CHANGE: \"checked-change\",\n /** Sort state changed (tables) */\n SORT_CHANGE: \"sort-change\",\n /** Index changed (pagination, tabs, steppers, carousels) */\n INDEX_CHANGE: \"index-change\",\n /** Search query changed */\n SEARCH: \"search\",\n /** Hover state changed */\n HOVER_CHANGE: \"hover-change\",\n /** Items reordered (drag-and-drop) */\n REORDER: \"reorder\",\n /** Content copied to clipboard */\n COPY: \"copy\",\n /** Element resized */\n RESIZE: \"resize\",\n /** @deprecated Use OPEN_CHANGE instead */\n OPEN: \"open\",\n /** @deprecated Use OPEN_CHANGE instead */\n CLOSE: \"close\",\n /** @deprecated Use OPEN_CHANGE with cancelable: true instead */\n BEFORE_CLOSE: \"before-close\",\n /** @deprecated Use PRESS instead */\n CLICK: \"click\",\n /** Navigate event (links) */\n NAVIGATE: \"navigate\",\n} as const;\n\nexport type StandardEventName = (typeof StandardEvents)[keyof typeof StandardEvents];\n"],"mappings":";AA+CO,SAAS,UACd,SACA,MACA,UAA+B,CAAC,GAChB;AAChB,QAAM,EAAE,QAAQ,UAAU,MAAM,WAAW,MAAM,aAAa,MAAM,IAAI;AAExE,QAAM,QAAQ,IAAI,YAAe,MAAM,IAAI,IAAI;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,UAAQ,cAAc,KAAK;AAC3B,SAAO;AACT;AAYO,IAAM,iBAAiB;AAAA;AAAA,EAE5B,OAAO;AAAA;AAAA,EAEP,QAAQ;AAAA;AAAA,EAER,QAAQ;AAAA;AAAA,EAER,aAAa;AAAA;AAAA,EAEb,SAAS;AAAA;AAAA,EAET,cAAc;AAAA;AAAA,EAEd,iBAAiB;AAAA;AAAA,EAEjB,gBAAgB;AAAA;AAAA,EAEhB,aAAa;AAAA;AAAA,EAEb,cAAc;AAAA;AAAA,EAEd,QAAQ;AAAA;AAAA,EAER,cAAc;AAAA;AAAA,EAEd,SAAS;AAAA;AAAA,EAET,MAAM;AAAA;AAAA,EAEN,QAAQ;AAAA;AAAA,EAER,MAAM;AAAA;AAAA,EAEN,OAAO;AAAA;AAAA,EAEP,cAAc;AAAA;AAAA,EAEd,OAAO;AAAA;AAAA,EAEP,UAAU;AACZ;","names":[]}