@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/dialog/dialog-content.ts","../src/components/dialog/dialog-title.ts","../src/components/dialog/dialog-description.ts","../src/components/dialog/dialog.ts","../src/components/popover/popover-content.ts","../src/components/popover/popover.ts","../src/components/tooltip/tooltip-content.ts","../src/components/tooltip/tooltip.ts","../src/components/menu/menu-content.ts","../src/components/menu/menu-item.ts","../src/components/menu/menu.ts","../src/components/alert-dialog/alert-dialog-content.ts","../src/components/alert-dialog/alert-dialog-header.ts","../src/components/alert-dialog/alert-dialog-footer.ts","../src/components/alert-dialog/alert-dialog-title.ts","../src/components/alert-dialog/alert-dialog-description.ts","../src/components/alert-dialog/alert-dialog-action.ts","../src/components/alert-dialog/alert-dialog-cancel.ts","../src/components/alert-dialog/alert-dialog.ts","../src/components/alert-dialog/alert-dialog-trigger.ts","../src/components/sheet/sheet-content.ts","../src/components/sheet/sheet-overlay.ts","../src/components/sheet/sheet-header.ts","../src/components/sheet/sheet-footer.ts","../src/components/sheet/sheet-title.ts","../src/components/sheet/sheet-description.ts","../src/components/sheet/sheet-close.ts","../src/components/sheet/sheet.ts","../src/components/drawer/drawer-content.ts","../src/components/drawer/drawer-header.ts","../src/components/drawer/drawer-footer.ts","../src/components/drawer/drawer-title.ts","../src/components/drawer/drawer-description.ts","../src/components/drawer/drawer.ts","../src/components/dropdown-menu/dropdown-menu-content.ts","../src/components/dropdown-menu/dropdown-menu-item.ts","../src/components/dropdown-menu/dropdown-menu-separator.ts","../src/components/dropdown-menu/dropdown-menu-label.ts","../src/components/dropdown-menu/dropdown-menu-checkbox-item.ts","../src/components/dropdown-menu/dropdown-menu-radio-group.ts","../src/components/dropdown-menu/dropdown-menu-radio-item.ts","../src/components/dropdown-menu/dropdown-menu.ts","../src/components/context-menu/context-menu-content.ts","../src/components/context-menu/context-menu-item.ts","../src/components/context-menu/context-menu-separator.ts","../src/components/context-menu/context-menu-label.ts","../src/components/context-menu/context-menu.ts","../src/components/hover-card/hover-card-content.ts","../src/components/hover-card/hover-card.ts"],"sourcesContent":["import { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport type DialogContentSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\nexport type DialogContentState = \"open\" | \"closed\";\n\n/**\n * Dialog content container component.\n *\n * Contains the dialog's content including title, description, and actions.\n * Receives accessibility attributes from parent ds-dialog.\n *\n * @element ds-dialog-content\n *\n * @slot - Dialog content (title, description, body, actions)\n *\n * @csspart container - The content container element\n *\n * @attr {string} data-state - Animation state (\"open\" or \"closed\")\n *\n * @example\n * ```html\n * <ds-dialog-content size=\"lg\">\n * <ds-dialog-title>Large Dialog</ds-dialog-title>\n * <p>Dialog body content here.</p>\n * <div class=\"ds-dialog__footer\">\n * <button>Cancel</button>\n * <button>Confirm</button>\n * </div>\n * </ds-dialog-content>\n * ```\n */\nexport class DsDialogContent extends DSElement {\n /** Size variant of the dialog */\n @property({ type: String, reflect: true })\n size: DialogContentSize = \"md\";\n\n /** Animation state (open or closed) - set by parent ds-dialog */\n @property({ type: String, reflect: true, attribute: \"data-state\" })\n dataState: DialogContentState = \"open\";\n\n override render() {\n return html`\n <div class=\"ds-dialog-content\" part=\"container\" data-size=${this.size}>\n <slot></slot>\n </div>\n `;\n }\n}\n\ndefine(\"ds-dialog-content\", DsDialogContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dialog-content\": DsDialogContent;\n }\n}\n","import { html, nothing } from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\n/**\n * Dialog title component.\n *\n * Renders the dialog's accessible title. The parent ds-dialog\n * automatically connects this to the dialog content via aria-labelledby.\n *\n * @element ds-dialog-title\n *\n * @csspart title - The title element\n *\n * @example\n * ```html\n * <ds-dialog-title>Confirm Deletion</ds-dialog-title>\n * ```\n */\nexport class DsDialogTitle extends DSElement {\n /** Preserved text content from initial children */\n @state()\n private titleText = \"\";\n\n override connectedCallback(): void {\n // Capture original text content before Lit renders\n this.titleText = this.textContent?.trim() ?? \"\";\n\n super.connectedCallback();\n\n // Generate ID if not provided\n if (!this.id) {\n this.id = `dialog-title-${crypto.randomUUID().slice(0, 8)}`;\n }\n }\n\n override render() {\n // Only render h2 if there's content (avoid empty heading a11y violation)\n if (!this.titleText) {\n return nothing;\n }\n\n return html`\n <h2 class=\"ds-dialog-title\" part=\"title\">${this.titleText}</h2>\n `;\n }\n}\n\ndefine(\"ds-dialog-title\", DsDialogTitle);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dialog-title\": DsDialogTitle;\n }\n}\n","import { html, nothing } from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\n/**\n * Dialog description component.\n *\n * Renders the dialog's accessible description. The parent ds-dialog\n * automatically connects this to the dialog content via aria-describedby.\n *\n * @element ds-dialog-description\n *\n * @csspart description - The description element\n *\n * @example\n * ```html\n * <ds-dialog-description>\n * This action cannot be undone.\n * </ds-dialog-description>\n * ```\n */\nexport class DsDialogDescription extends DSElement {\n /** Preserved text content from initial children */\n @state()\n private descriptionText = \"\";\n\n override connectedCallback(): void {\n // Capture original text content before Lit renders\n this.descriptionText = this.textContent?.trim() ?? \"\";\n\n super.connectedCallback();\n\n // Generate ID if not provided\n if (!this.id) {\n this.id = `dialog-desc-${crypto.randomUUID().slice(0, 8)}`;\n }\n }\n\n override render() {\n // Only render p if there's content\n if (!this.descriptionText) {\n return nothing;\n }\n\n return html`\n <p class=\"ds-dialog-description\" part=\"description\">${this.descriptionText}</p>\n `;\n }\n}\n\ndefine(\"ds-dialog-description\", DsDialogDescription);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dialog-description\": DsDialogDescription;\n }\n}\n","import {\n type DialogBehavior,\n type Presence,\n createDialogBehavior,\n createPresence,\n prefersReducedMotion,\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 { StandardEvents, emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\nimport { devWarn, hasRequiredChild, Warnings } from \"../../utils/dev-warnings.js\";\n\n// Import child components to ensure they're registered\nimport type { DsDialogContent } from \"./dialog-content.js\";\nimport \"./dialog-content.js\";\nimport \"./dialog-title.js\";\nimport \"./dialog-description.js\";\n\nexport type DialogRole = \"dialog\" | \"alertdialog\";\n\n/**\n * Modal dialog component with accessibility and focus management.\n *\n * Provides a modal overlay with backdrop, focus trap, and dismissal handling.\n * Follows WAI-ARIA Dialog (Modal) pattern.\n *\n * @element ds-dialog\n *\n * @slot trigger - Button or element that opens the dialog\n * @slot - Dialog content (ds-dialog-content)\n *\n * @fires ds:open-change - Fired when open state changes (detail: { open, reason })\n *\n * @example\n * ```html\n * <ds-dialog>\n * <button slot=\"trigger\">Open Dialog</button>\n * <ds-dialog-content>\n * <ds-dialog-title>Confirm Action</ds-dialog-title>\n * <ds-dialog-description>Are you sure?</ds-dialog-description>\n * <button>Yes</button>\n * <button>No</button>\n * </ds-dialog-content>\n * </ds-dialog>\n * ```\n */\nexport class DsDialog extends DSElement {\n /** Whether the dialog is open */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Whether Escape key closes the dialog */\n @property({ type: Boolean, attribute: \"close-on-escape\" })\n closeOnEscape = true;\n\n /** Whether clicking the backdrop closes the dialog */\n @property({ type: Boolean, attribute: \"close-on-backdrop\" })\n closeOnBackdrop = true;\n\n /** Whether to animate open/close transitions */\n @property({ type: Boolean })\n animated = true;\n\n /** Dialog role - stored internally, read from attribute */\n @state()\n private dialogRole: DialogRole = \"dialog\";\n\n /** Whether the dialog is closing (for animation) */\n @state()\n private isClosing = false;\n\n private dialogBehavior: DialogBehavior | null = null;\n private presence: Presence | null = null;\n private attributeObserver: MutationObserver | null = null;\n private backdropElement: HTMLElement | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Listen for trigger clicks via event delegation\n this.addEventListener(\"click\", this.handleTriggerClick);\n\n // Watch for role attribute changes (don't reflect back, just read)\n this.attributeObserver = new MutationObserver(() => {\n const roleAttr = this.getAttribute(\"role\");\n if (roleAttr === \"alertdialog\" || roleAttr === \"dialog\") {\n this.dialogRole = roleAttr;\n }\n // Remove the role from ds-dialog itself (it shouldn't have it)\n if (roleAttr) {\n this.removeAttribute(\"role\");\n }\n });\n this.attributeObserver.observe(this, {\n attributes: true,\n attributeFilter: [\"role\"],\n });\n\n // Read initial role attribute\n const initialRole = this.getAttribute(\"role\");\n if (initialRole === \"alertdialog\" || initialRole === \"dialog\") {\n this.dialogRole = initialRole;\n this.removeAttribute(\"role\");\n }\n\n // Initialize dialog behavior\n this.initDialogBehavior();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleTriggerClick);\n this.attributeObserver?.disconnect();\n this.attributeObserver = null;\n this.cleanup();\n }\n\n /**\n * Initializes the dialog behavior primitive.\n */\n private initDialogBehavior(): void {\n this.dialogBehavior = createDialogBehavior({\n defaultOpen: this.open,\n role: this.dialogRole,\n closeOnEscape: this.closeOnEscape,\n closeOnOutsideClick: this.closeOnBackdrop,\n onOpenChange: (open) => {\n // Sync state when behavior changes (e.g., from escape or outside click)\n if (!open && this.open) {\n this.handleBehaviorClose();\n }\n },\n });\n\n // Set trigger element if one exists\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n if (trigger) {\n this.dialogBehavior.setTriggerElement(trigger);\n }\n }\n\n /**\n * Handles close triggered by the behavior (escape/outside click).\n */\n private handleBehaviorClose(reason: \"escape\" | \"outside-click\" = \"escape\"): void {\n // Emit cancelable open-change event before closing\n const openChangeEvent = emitEvent(this, StandardEvents.OPEN_CHANGE, {\n detail: { open: false, reason },\n cancelable: true,\n });\n\n if (openChangeEvent.defaultPrevented) {\n // Re-open the behavior since we're preventing close\n this.dialogBehavior?.open();\n return;\n }\n\n const content = this.querySelector(\"ds-dialog-content\") as DsDialogContent | null;\n\n // If animated, use presence for exit animation\n if (this.animated && content && !prefersReducedMotion()) {\n this.isClosing = true;\n this._closeReason = reason;\n\n // Create presence for exit animation\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n // No animation - close immediately\n this.open = false;\n this.isClosing = false;\n }\n }\n\n /** Tracks the reason for closing (for animation completion) */\n private _closeReason: \"escape\" | \"outside-click\" | \"trigger\" | \"programmatic\" = \"programmatic\";\n\n /**\n * Opens the dialog.\n */\n public show(): void {\n if (this.open) return;\n\n // Store trigger element for focus return\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n if (trigger) {\n this.dialogBehavior?.setTriggerElement(trigger);\n } else if (document.activeElement instanceof HTMLElement) {\n this.dialogBehavior?.setTriggerElement(document.activeElement);\n }\n\n this.open = true;\n this.dialogBehavior?.open();\n emitEvent(this, StandardEvents.OPEN_CHANGE, {\n detail: { open: true, reason: \"trigger\" },\n });\n }\n\n /**\n * Closes the dialog.\n * @param reason - The reason for closing (default: \"programmatic\")\n */\n public close(reason: \"escape\" | \"outside-click\" | \"trigger\" | \"programmatic\" = \"programmatic\"): void {\n if (!this.open) return;\n\n // Emit cancelable open-change event before closing\n const openChangeEvent = emitEvent(this, StandardEvents.OPEN_CHANGE, {\n detail: { open: false, reason },\n cancelable: true,\n });\n\n if (openChangeEvent.defaultPrevented) {\n return;\n }\n\n const content = this.querySelector(\"ds-dialog-content\") as DsDialogContent | null;\n\n // Close the behavior (this deactivates focus trap and dismiss layer)\n this.dialogBehavior?.close();\n\n // If animated, use presence for exit animation\n if (this.animated && content && !prefersReducedMotion()) {\n this.isClosing = true;\n this._closeReason = reason;\n\n // Create presence for exit animation\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n // No animation - close immediately\n this.open = false;\n this.isClosing = false;\n }\n }\n\n /**\n * Completes the close after exit animation.\n * Note: The open-change event was already emitted before animation started.\n */\n private completeClose(): void {\n this.presence?.destroy();\n this.presence = null;\n this.open = false;\n this.isClosing = false;\n // Event was already emitted before animation started\n }\n\n private handleTriggerClick = (event: Event): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (trigger && this.contains(trigger)) {\n // Store trigger before opening\n this.dialogBehavior?.setTriggerElement(trigger as HTMLElement);\n this.show();\n }\n };\n\n private handleBackdropClick = (event: MouseEvent): void => {\n // Only close if clicking directly on backdrop, not on dialog content\n const content = this.querySelector(\"ds-dialog-content\");\n const target = event.target as Node;\n\n // If click is inside content, don't close\n if (content?.contains(target)) {\n return;\n }\n\n // Click was on backdrop (outside content)\n if (this.closeOnBackdrop) {\n this.close(\"outside-click\");\n }\n };\n\n private cleanup(): void {\n this.dialogBehavior?.destroy();\n this.dialogBehavior = null;\n this.presence?.destroy();\n this.presence = null;\n }\n\n override async updated(changedProperties: Map<string, unknown>): Promise<void> {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"open\")) {\n const content = this.querySelector(\"ds-dialog-content\") as DsDialogContent | null;\n\n if (this.open) {\n // Wait for the next microtask to ensure DOM is committed\n await this.updateComplete;\n\n // Set data-state to open for entry animation\n if (content) {\n content.dataState = \"open\";\n }\n\n // Set content element on behavior (activates focus trap and dismiss layer)\n this.dialogBehavior?.setContentElement(content);\n this.updateContentAccessibility();\n\n // Attach backdrop click handler\n this.backdropElement = this.querySelector(\".ds-dialog__backdrop\");\n this.backdropElement?.addEventListener(\"click\", this.handleBackdropClick);\n } else {\n // Clean up backdrop listener\n this.backdropElement?.removeEventListener(\"click\", this.handleBackdropClick);\n this.backdropElement = null;\n\n // Clear content element on behavior\n this.dialogBehavior?.setContentElement(null);\n }\n }\n\n // Update role on content when dialogRole changes\n if (changedProperties.has(\"dialogRole\") && this.open) {\n this.updateContentAccessibility();\n }\n\n // Sync behavior options when they change\n if (changedProperties.has(\"closeOnEscape\") || changedProperties.has(\"closeOnBackdrop\")) {\n // Re-create behavior with new options\n const wasOpen = this.dialogBehavior?.state.open;\n this.dialogBehavior?.destroy();\n this.initDialogBehavior();\n if (wasOpen) {\n this.dialogBehavior?.open();\n const content = this.querySelector(\"ds-dialog-content\") as HTMLElement | null;\n this.dialogBehavior?.setContentElement(content);\n }\n }\n }\n\n /**\n * Updates accessibility attributes on dialog content.\n */\n private updateContentAccessibility(): void {\n const content = this.querySelector(\"ds-dialog-content\");\n if (!content || !this.dialogBehavior) return;\n\n // Get props from behavior\n const contentProps = this.dialogBehavior.getContentProps();\n\n // Apply content props\n content.setAttribute(\"role\", this.dialogRole);\n content.setAttribute(\"aria-modal\", contentProps[\"aria-modal\"]);\n\n // Dev warning: Check for required dialog title\n if (!hasRequiredChild(this, \"ds-dialog-title\") && !this.getAttribute(\"aria-label\")) {\n devWarn(Warnings.dialogMissingTitle(\"ds-dialog\"));\n }\n\n // Connect title via aria-labelledby\n const title = this.querySelector(\"ds-dialog-title\");\n if (title) {\n const titleProps = this.dialogBehavior.getTitleProps();\n if (!title.id) {\n title.id = titleProps.id;\n }\n content.setAttribute(\"aria-labelledby\", title.id);\n }\n\n // Connect description via aria-describedby\n const description = this.querySelector(\"ds-dialog-description\");\n if (description) {\n const descProps = this.dialogBehavior.getDescriptionProps();\n if (!description.id) {\n description.id = descProps.id;\n }\n content.setAttribute(\"aria-describedby\", description.id);\n this.dialogBehavior.setHasDescription(true);\n } else {\n // Dev warning: Title without description\n if (title) {\n devWarn(Warnings.dialogMissingDescription(\"ds-dialog\"));\n }\n this.dialogBehavior.setHasDescription(false);\n }\n }\n\n override render() {\n // Always render backdrop, hide when not open\n return html`\n <slot name=\"trigger\"></slot>\n <div\n class=\"ds-dialog__backdrop\"\n ?hidden=${!this.open}\n ?data-closing=${this.isClosing}\n >\n <slot></slot>\n </div>\n `;\n }\n}\n\ndefine(\"ds-dialog\", DsDialog);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dialog\": DsDialog;\n }\n}\n","import { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport type PopoverContentState = \"open\" | \"closed\";\n\n/**\n * Popover content container.\n *\n * @element ds-popover-content\n *\n * @slot - Content to display in the popover\n *\n * @attr {string} data-state - Animation state (\"open\" or \"closed\")\n *\n * @example\n * ```html\n * <ds-popover>\n * <button slot=\"trigger\">Open</button>\n * <ds-popover-content>\n * <p>Popover content here</p>\n * <button>Action</button>\n * </ds-popover-content>\n * </ds-popover>\n * ```\n */\nexport class DsPopoverContent extends DSElement {\n /** Unique ID for ARIA association */\n @property({ type: String, reflect: true })\n override id = \"\";\n\n /** Animation state (open or closed) - set by parent ds-popover */\n @property({ type: String, reflect: true, attribute: \"data-state\" })\n dataState: PopoverContentState = \"closed\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate ID if not set\n if (!this.id) {\n this.id = `popover-content-${crypto.randomUUID().slice(0, 8)}`;\n }\n\n // Hidden by default (parent popover controls visibility)\n this.setAttribute(\"hidden\", \"\");\n }\n\n override render() {\n // Note: No role attribute by default since popover is non-modal\n // Developers can add aria-label or role=\"dialog\" if needed\n return html`\n <div class=\"ds-popover-content\" part=\"container\">\n <slot></slot>\n </div>\n `;\n }\n}\n\ndefine(\"ds-popover-content\", DsPopoverContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-popover-content\": DsPopoverContent;\n }\n}\n","import {\n type AnchorPosition,\n type DismissableLayer,\n type Placement,\n type Presence,\n createAnchorPosition,\n createDismissableLayer,\n createPresence,\n prefersReducedMotion,\n} from \"@hypoth-ui/primitives-dom\";\nimport { html } from \"lit\";\nimport { property } 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 component to ensure it's registered\nimport type { DsPopoverContent } from \"./popover-content.js\";\nimport \"./popover-content.js\";\n\n/**\n * Non-modal popover component with anchor positioning.\n *\n * Unlike Dialog, Popover does not trap focus and allows Tab to exit.\n * Positioned relative to its trigger using anchor positioning.\n *\n * @element ds-popover\n *\n * @slot trigger - Button or element that opens the popover\n * @slot - Popover content (ds-popover-content)\n *\n * @fires ds:open - Fired when popover opens\n * @fires ds:close - Fired when popover closes\n *\n * @example\n * ```html\n * <ds-popover>\n * <button slot=\"trigger\">Open Menu</button>\n * <ds-popover-content>\n * <button>Option 1</button>\n * <button>Option 2</button>\n * </ds-popover-content>\n * </ds-popover>\n * ```\n */\nexport class DsPopover extends DSElement {\n /** Whether the popover is open */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Placement relative to trigger */\n @property({ type: String, reflect: true })\n placement: Placement = \"bottom\";\n\n /** Offset distance from trigger in pixels */\n @property({ type: Number })\n offset = 8;\n\n /** Whether to flip placement when near viewport edge */\n @property({ type: Boolean })\n flip = true;\n\n /** Whether Escape key closes the popover */\n @property({\n attribute: \"close-on-escape\",\n converter: {\n fromAttribute: (value: string | null) => value !== \"false\",\n toAttribute: (value: boolean) => (value ? \"\" : \"false\"),\n },\n })\n closeOnEscape = true;\n\n /** Whether clicking outside closes the popover */\n @property({\n attribute: \"close-on-outside-click\",\n converter: {\n fromAttribute: (value: string | null) => value !== \"false\",\n toAttribute: (value: boolean) => (value ? \"\" : \"false\"),\n },\n })\n closeOnOutsideClick = true;\n\n /** Whether to animate open/close transitions */\n @property({ type: Boolean })\n animated = true;\n\n private anchorPosition: AnchorPosition | null = null;\n private dismissLayer: DismissableLayer | null = null;\n private presence: Presence | null = null;\n private triggerElement: HTMLElement | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private scrollHandler: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Listen for trigger clicks\n this.addEventListener(\"click\", this.handleTriggerClick);\n\n // Setup after first render\n this.updateComplete.then(() => {\n this.setupTriggerAccessibility();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleTriggerClick);\n this.cleanup();\n }\n\n /**\n * Opens the popover.\n */\n public show(): void {\n if (this.open) return;\n\n this.open = true;\n emitEvent(this, StandardEvents.OPEN);\n }\n\n /**\n * Closes the popover.\n */\n public close(): void {\n if (!this.open) return;\n\n const content = this.querySelector(\"ds-popover-content\") as DsPopoverContent | null;\n\n // If animated, use presence for exit animation\n if (this.animated && content && !prefersReducedMotion()) {\n // Cleanup dismiss layer so clicks don't re-trigger close\n this.dismissLayer?.deactivate();\n this.dismissLayer = null;\n\n // Create presence for exit animation\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n // No animation - close immediately\n this.cleanup();\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\n\n // Return focus to trigger\n this.triggerElement?.focus();\n }\n }\n\n /**\n * Completes the close after exit animation.\n */\n private completeClose(): void {\n this.cleanup();\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\n\n // Return focus to trigger\n this.triggerElement?.focus();\n }\n\n /**\n * Toggles the popover open/closed state.\n */\n public toggle(): void {\n if (this.open) {\n this.close();\n } else {\n this.show();\n }\n }\n\n private handleTriggerClick = (event: Event): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (trigger && this.contains(trigger)) {\n event.preventDefault();\n this.triggerElement = trigger as HTMLElement;\n this.toggle();\n }\n };\n\n private handleDismiss = (reason: \"escape\" | \"outside-click\"): void => {\n if (reason === \"escape\" && this.closeOnEscape) {\n this.close();\n } else if (reason === \"outside-click\" && this.closeOnOutsideClick) {\n this.close();\n }\n };\n\n private setupTriggerAccessibility(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]');\n const content = this.querySelector(\"ds-popover-content\");\n\n if (trigger && content) {\n // Store reference\n this.triggerElement = trigger as HTMLElement;\n\n // Set ARIA attributes on trigger\n trigger.setAttribute(\"aria-haspopup\", \"true\");\n trigger.setAttribute(\"aria-expanded\", String(this.open));\n trigger.setAttribute(\"aria-controls\", content.id);\n }\n }\n\n private updateTriggerAria(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]');\n if (trigger) {\n trigger.setAttribute(\"aria-expanded\", String(this.open));\n }\n }\n\n private setupPositioning(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n const content = this.querySelector(\"ds-popover-content\") as HTMLElement | null;\n\n if (!trigger || !content) return;\n\n // Setup anchor positioning\n this.anchorPosition = createAnchorPosition({\n anchor: trigger,\n floating: content,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n onPositionChange: (pos) => {\n content.setAttribute(\"data-placement\", pos.placement);\n },\n });\n\n // Setup resize observer for repositioning\n this.resizeObserver = new ResizeObserver(() => {\n this.anchorPosition?.update();\n });\n this.resizeObserver.observe(trigger);\n this.resizeObserver.observe(content);\n\n // Setup scroll handler for repositioning\n this.scrollHandler = () => {\n this.anchorPosition?.update();\n };\n window.addEventListener(\"scroll\", this.scrollHandler, { passive: true });\n window.addEventListener(\"resize\", this.scrollHandler, { passive: true });\n }\n\n private setupDismissLayer(): void {\n const content = this.querySelector(\"ds-popover-content\") as HTMLElement | null;\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n\n if (!content) return;\n\n this.dismissLayer = createDismissableLayer({\n container: content,\n excludeElements: trigger ? [trigger] : [],\n onDismiss: this.handleDismiss,\n closeOnEscape: this.closeOnEscape,\n closeOnOutsideClick: this.closeOnOutsideClick,\n });\n this.dismissLayer.activate();\n }\n\n private cleanup(): void {\n // Cleanup anchor positioning\n this.anchorPosition?.destroy();\n this.anchorPosition = null;\n\n // Cleanup dismiss layer\n this.dismissLayer?.deactivate();\n this.dismissLayer = null;\n\n // Cleanup presence\n this.presence?.destroy();\n this.presence = null;\n\n // Cleanup resize observer\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n\n // Cleanup scroll handler\n if (this.scrollHandler) {\n window.removeEventListener(\"scroll\", this.scrollHandler);\n window.removeEventListener(\"resize\", this.scrollHandler);\n this.scrollHandler = null;\n }\n }\n\n override async updated(changedProperties: Map<string, unknown>): Promise<void> {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"open\")) {\n this.updateTriggerAria();\n\n const content = this.querySelector(\"ds-popover-content\") as DsPopoverContent | null;\n\n if (this.open) {\n // Show content\n content?.removeAttribute(\"hidden\");\n\n // Set data-state to open for entry animation\n if (content) {\n content.dataState = \"open\";\n }\n\n // Wait for DOM update\n await this.updateComplete;\n\n // Setup positioning and dismiss\n this.setupPositioning();\n this.setupDismissLayer();\n } else {\n // Hide content\n content?.setAttribute(\"hidden\", \"\");\n }\n }\n\n // Update positioning if placement or offset changes while open\n if (this.open && (changedProperties.has(\"placement\") || changedProperties.has(\"offset\"))) {\n this.cleanup();\n this.setupPositioning();\n this.setupDismissLayer();\n }\n }\n\n override render() {\n return html`\n <slot name=\"trigger\"></slot>\n <slot></slot>\n `;\n }\n}\n\ndefine(\"ds-popover\", DsPopover);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-popover\": DsPopover;\n }\n}\n","import { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport type TooltipContentState = \"open\" | \"closed\";\n\n/**\n * Tooltip content container.\n *\n * @element ds-tooltip-content\n *\n * @slot - Content to display in the tooltip\n *\n * @attr {string} data-state - Animation state (\"open\" or \"closed\")\n *\n * @example\n * ```html\n * <ds-tooltip>\n * <button slot=\"trigger\">Hover me</button>\n * <ds-tooltip-content>Helpful information</ds-tooltip-content>\n * </ds-tooltip>\n * ```\n */\nexport class DsTooltipContent extends DSElement {\n /** Unique ID for ARIA association */\n @property({ type: String, reflect: true })\n override id = \"\";\n\n /** Animation state (open or closed) - set by parent ds-tooltip */\n @property({ type: String, reflect: true, attribute: \"data-state\" })\n dataState: TooltipContentState = \"closed\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate ID if not set\n if (!this.id) {\n this.id = `tooltip-content-${crypto.randomUUID().slice(0, 8)}`;\n }\n\n // Set role for accessibility\n this.setAttribute(\"role\", \"tooltip\");\n\n // Hidden by default (parent tooltip controls visibility)\n this.setAttribute(\"hidden\", \"\");\n }\n\n override render() {\n return html`\n <div class=\"ds-tooltip-content\" part=\"container\">\n <slot></slot>\n </div>\n `;\n }\n}\n\ndefine(\"ds-tooltip-content\", DsTooltipContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-tooltip-content\": DsTooltipContent;\n }\n}\n","import {\n type AnchorPosition,\n type Placement,\n type Presence,\n createAnchorPosition,\n createPresence,\n prefersReducedMotion,\n} from \"@hypoth-ui/primitives-dom\";\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 component to ensure it's registered\nimport type { DsTooltipContent } from \"./tooltip-content.js\";\nimport \"./tooltip-content.js\";\n\n/**\n * Tooltip component with hover/focus trigger and configurable delays.\n *\n * Shows informational content on hover or focus with positioning\n * relative to the trigger element.\n *\n * @element ds-tooltip\n *\n * @slot trigger - Element that triggers the tooltip\n * @slot - Tooltip content (ds-tooltip-content)\n *\n * @example\n * ```html\n * <ds-tooltip>\n * <button slot=\"trigger\">Hover for info</button>\n * <ds-tooltip-content>Additional information here</ds-tooltip-content>\n * </ds-tooltip>\n * ```\n */\nexport class DsTooltip extends DSElement {\n /** Whether the tooltip is open */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Placement relative to trigger */\n @property({ type: String, reflect: true })\n placement: Placement = \"top\";\n\n /** Offset distance from trigger in pixels */\n @property({ type: Number })\n offset = 8;\n\n /** Delay before showing tooltip (ms) */\n @property({ type: Number, attribute: \"show-delay\" })\n showDelay = 400;\n\n /** Delay before hiding tooltip (ms) */\n @property({ type: Number, attribute: \"hide-delay\" })\n hideDelay = 100;\n\n /** Whether to animate open/close transitions */\n @property({ type: Boolean })\n animated = true;\n\n private anchorPosition: AnchorPosition | null = null;\n private presence: Presence | null = null;\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\n private escapeHandler: ((event: KeyboardEvent) => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Setup after first render\n this.updateComplete.then(() => {\n this.setupTriggerListeners();\n this.setupContentListeners();\n this.setupTriggerAccessibility();\n this.setupEscapeHandler();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.cleanup();\n this.removeEscapeHandler();\n }\n\n /**\n * Shows the tooltip immediately.\n */\n public show(): void {\n this.clearTimeouts();\n if (this.open) return;\n\n this.open = true;\n }\n\n /**\n * Hides the tooltip immediately.\n */\n public hide(): void {\n this.clearTimeouts();\n if (!this.open) return;\n\n this.cleanup();\n this.open = false;\n }\n\n private clearTimeouts(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n }\n\n private scheduleShow(): void {\n this.clearTimeouts();\n if (this.open) return;\n\n this.showTimeout = setTimeout(() => {\n this.open = true;\n this.showTimeout = null;\n }, this.showDelay);\n }\n\n private scheduleHide(): void {\n this.clearTimeouts();\n if (!this.open) return;\n\n this.hideTimeout = setTimeout(() => {\n const content = this.querySelector(\"ds-tooltip-content\") as DsTooltipContent | null;\n\n // If animated, use presence for exit animation\n if (this.animated && content && !prefersReducedMotion()) {\n this.presence = createPresence({\n onExitComplete: () => {\n this.cleanup();\n this.open = false;\n },\n });\n this.presence.hide(content);\n } else {\n this.cleanup();\n this.open = false;\n }\n this.hideTimeout = null;\n }, this.hideDelay);\n }\n\n private handleTriggerMouseEnter = (): void => {\n this.scheduleShow();\n };\n\n private handleTriggerMouseLeave = (): void => {\n this.scheduleHide();\n };\n\n private handleTriggerFocusIn = (): void => {\n this.scheduleShow();\n };\n\n private handleTriggerFocusOut = (): void => {\n this.scheduleHide();\n };\n\n private handleContentMouseEnter = (): void => {\n // Cancel hide when mouse enters tooltip content (hover persistence)\n this.clearTimeouts();\n };\n\n private handleContentMouseLeave = (): void => {\n this.scheduleHide();\n };\n\n private setupTriggerListeners(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]');\n if (!trigger) return;\n\n trigger.addEventListener(\"mouseenter\", this.handleTriggerMouseEnter);\n trigger.addEventListener(\"mouseleave\", this.handleTriggerMouseLeave);\n trigger.addEventListener(\"focusin\", this.handleTriggerFocusIn);\n trigger.addEventListener(\"focusout\", this.handleTriggerFocusOut);\n }\n\n private setupContentListeners(): void {\n const content = this.querySelector(\"ds-tooltip-content\");\n if (!content) return;\n\n content.addEventListener(\"mouseenter\", this.handleContentMouseEnter);\n content.addEventListener(\"mouseleave\", this.handleContentMouseLeave);\n }\n\n private setupTriggerAccessibility(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]');\n const content = this.querySelector(\"ds-tooltip-content\");\n\n if (trigger && content) {\n // Set aria-describedby on trigger pointing to tooltip content\n trigger.setAttribute(\"aria-describedby\", content.id);\n }\n }\n\n private setupEscapeHandler(): void {\n this.escapeHandler = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && this.open) {\n event.preventDefault();\n this.hide();\n }\n };\n document.addEventListener(\"keydown\", this.escapeHandler);\n }\n\n private removeEscapeHandler(): void {\n if (this.escapeHandler) {\n document.removeEventListener(\"keydown\", this.escapeHandler);\n this.escapeHandler = null;\n }\n }\n\n private setupPositioning(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n const content = this.querySelector(\"ds-tooltip-content\") as HTMLElement | null;\n\n if (!trigger || !content) return;\n\n this.anchorPosition = createAnchorPosition({\n anchor: trigger,\n floating: content,\n placement: this.placement,\n offset: this.offset,\n flip: true,\n onPositionChange: (pos) => {\n content.setAttribute(\"data-placement\", pos.placement);\n },\n });\n }\n\n private cleanup(): void {\n this.clearTimeouts();\n this.anchorPosition?.destroy();\n this.anchorPosition = null;\n this.presence?.destroy();\n this.presence = null;\n }\n\n override async updated(changedProperties: Map<string, unknown>): Promise<void> {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"open\")) {\n const content = this.querySelector(\"ds-tooltip-content\") as DsTooltipContent | null;\n\n if (this.open) {\n // Show content\n content?.removeAttribute(\"hidden\");\n\n // Set data-state to open for entry animation\n if (content) {\n content.dataState = \"open\";\n }\n\n // Wait for DOM update\n await this.updateComplete;\n\n // Setup positioning\n this.setupPositioning();\n } else {\n // Hide content\n content?.setAttribute(\"hidden\", \"\");\n }\n }\n }\n\n override render() {\n return html`\n <slot name=\"trigger\"></slot>\n <slot></slot>\n `;\n }\n}\n\ndefine(\"ds-tooltip\", DsTooltip);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-tooltip\": DsTooltip;\n }\n}\n","import { html } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport type MenuContentState = \"open\" | \"closed\";\n\n/**\n * Menu content container with role=\"menu\".\n *\n * @element ds-menu-content\n *\n * @slot - Menu items (ds-menu-item elements)\n *\n * @attr {string} data-state - Animation state (\"open\" or \"closed\")\n *\n * @example\n * ```html\n * <ds-menu>\n * <button slot=\"trigger\">Actions</button>\n * <ds-menu-content>\n * <ds-menu-item>Edit</ds-menu-item>\n * <ds-menu-item>Delete</ds-menu-item>\n * </ds-menu-content>\n * </ds-menu>\n * ```\n */\nexport class DsMenuContent extends DSElement {\n /** Unique ID for ARIA association */\n @property({ type: String, reflect: true })\n override id = \"\";\n\n /** Animation state (open or closed) - set by parent ds-menu */\n @property({ type: String, reflect: true, attribute: \"data-state\" })\n dataState: MenuContentState = \"closed\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate ID if not set\n if (!this.id) {\n this.id = `menu-content-${crypto.randomUUID().slice(0, 8)}`;\n }\n\n // Set ARIA role for menu\n this.setAttribute(\"role\", \"menu\");\n\n // Hidden by default (parent menu controls visibility)\n this.setAttribute(\"hidden\", \"\");\n }\n\n override render() {\n return html`\n <div class=\"ds-menu-content\" part=\"container\">\n <slot></slot>\n </div>\n `;\n }\n}\n\ndefine(\"ds-menu-content\", DsMenuContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-menu-content\": DsMenuContent;\n }\n}\n","import { 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/**\n * Menu item with role=\"menuitem\".\n *\n * @element ds-menu-item\n *\n * @slot - Item content (text, icon, etc.)\n *\n * @fires ds:select - Fired when item is selected via click, Enter, or Space\n *\n * @example\n * ```html\n * <ds-menu-item value=\"edit\">Edit</ds-menu-item>\n * <ds-menu-item value=\"delete\" disabled>Delete</ds-menu-item>\n * ```\n */\nexport class DsMenuItem extends DSElement {\n /** Whether the item is disabled */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Value associated with this item (used in ds:select event) */\n @property({ type: String })\n value = \"\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Set ARIA role\n this.setAttribute(\"role\", \"menuitem\");\n\n // Set tabIndex for roving focus (will be managed by parent)\n this.tabIndex = -1;\n\n // Update aria-disabled\n this.updateAriaDisabled();\n\n // Listen for activation\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 updateAriaDisabled(): void {\n if (this.disabled) {\n this.setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.removeAttribute(\"aria-disabled\");\n }\n }\n\n private handleClick = (): void => {\n this.select();\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n this.select();\n }\n };\n\n /**\n * Triggers selection of this item.\n * Emits ds:select event and notifies parent menu to close.\n */\n public select(): void {\n if (this.disabled) return;\n\n // Get value from attribute or text content\n const value = this.value || this.textContent?.trim() || \"\";\n\n emitEvent(this, \"select\", { detail: { value } });\n }\n\n override updated(changedProperties: Map<string, unknown>): void {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"disabled\")) {\n this.updateAriaDisabled();\n }\n }\n\n override render() {\n return html`\n <div class=\"ds-menu-item\" part=\"container\">\n <slot></slot>\n </div>\n `;\n }\n}\n\ndefine(\"ds-menu-item\", DsMenuItem);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-menu-item\": DsMenuItem;\n }\n}\n","import {\n type AnchorPosition,\n type DismissableLayer,\n type Placement,\n type Presence,\n type RovingFocus,\n type TypeAhead,\n createAnchorPosition,\n createDismissableLayer,\n createPresence,\n createRovingFocus,\n createTypeAhead,\n prefersReducedMotion,\n} from \"@hypoth-ui/primitives-dom\";\nimport { html } from \"lit\";\nimport { property } 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 to ensure they're registered\nimport type { DsMenuContent } from \"./menu-content.js\";\nimport \"./menu-content.js\";\nimport \"./menu-item.js\";\n\n/**\n * Menu component with roving focus and type-ahead.\n *\n * Implements WAI-ARIA Menu Button pattern with:\n * - Arrow key navigation between items\n * - Type-ahead search to jump to items\n * - Enter/Space/Click to select items\n * - Escape to close\n *\n * @element ds-menu\n *\n * @slot trigger - Button that opens the menu\n * @slot - Menu content (ds-menu-content with ds-menu-item children)\n *\n * @fires ds:open - Fired when menu opens\n * @fires ds:close - Fired when menu closes\n * @fires ds:select - Fired when a menu item is selected (bubbles from ds-menu-item)\n *\n * @example\n * ```html\n * <ds-menu>\n * <button slot=\"trigger\">Actions</button>\n * <ds-menu-content>\n * <ds-menu-item value=\"edit\">Edit</ds-menu-item>\n * <ds-menu-item value=\"delete\">Delete</ds-menu-item>\n * </ds-menu-content>\n * </ds-menu>\n * ```\n */\nexport class DsMenu extends DSElement {\n /** Whether the menu is open */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Placement relative to trigger */\n @property({ type: String, reflect: true })\n placement: Placement = \"bottom-start\";\n\n /** Offset distance from trigger in pixels */\n @property({ type: Number })\n offset = 8;\n\n /** Whether to flip placement when near viewport edge */\n @property({ type: Boolean })\n flip = true;\n\n /** Whether to animate open/close transitions */\n @property({ type: Boolean })\n animated = true;\n\n private anchorPosition: AnchorPosition | null = null;\n private dismissLayer: DismissableLayer | null = null;\n private presence: Presence | null = null;\n private rovingFocus: RovingFocus | null = null;\n private typeAhead: TypeAhead | null = null;\n private triggerElement: HTMLElement | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private scrollHandler: (() => void) | null = null;\n private focusFirstOnOpen: \"first\" | \"last\" | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Listen for trigger interactions\n this.addEventListener(\"click\", this.handleTriggerClick);\n this.addEventListener(\"keydown\", this.handleTriggerKeyDown);\n\n // Listen for item selection (bubbled from ds-menu-item)\n this.addEventListener(\"ds:select\", this.handleItemSelect);\n\n // Setup after first render\n this.updateComplete.then(() => {\n this.setupTriggerAccessibility();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleTriggerClick);\n this.removeEventListener(\"keydown\", this.handleTriggerKeyDown);\n this.removeEventListener(\"ds:select\", this.handleItemSelect);\n this.cleanup();\n }\n\n /**\n * Opens the menu.\n */\n public show(): void {\n if (this.open) return;\n\n this.open = true;\n emitEvent(this, StandardEvents.OPEN);\n }\n\n /**\n * Closes the menu.\n */\n public close(): void {\n if (!this.open) return;\n\n const content = this.querySelector(\"ds-menu-content\") as DsMenuContent | null;\n\n // If animated, use presence for exit animation\n if (this.animated && content && !prefersReducedMotion()) {\n // Cleanup dismiss layer so it doesn't re-trigger\n this.dismissLayer?.deactivate();\n this.dismissLayer = null;\n\n // Create presence for exit animation\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n // No animation - close immediately\n this.cleanup();\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\n\n // Return focus to trigger\n this.triggerElement?.focus();\n }\n }\n\n /**\n * Completes the close after exit animation.\n */\n private completeClose(): void {\n this.cleanup();\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\n\n // Return focus to trigger\n this.triggerElement?.focus();\n }\n\n /**\n * Toggles the menu open/closed state.\n */\n public toggle(): void {\n if (this.open) {\n this.close();\n } else {\n this.show();\n }\n }\n\n private handleTriggerClick = (event: Event): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (trigger && this.contains(trigger)) {\n event.preventDefault();\n this.triggerElement = trigger as HTMLElement;\n this.focusFirstOnOpen = \"first\";\n this.toggle();\n }\n };\n\n private handleTriggerKeyDown = (event: KeyboardEvent): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (!trigger || !this.contains(trigger)) return;\n\n this.triggerElement = trigger as HTMLElement;\n\n switch (event.key) {\n case \"Enter\":\n case \" \":\n event.preventDefault();\n this.focusFirstOnOpen = \"first\";\n this.toggle();\n break;\n case \"ArrowDown\":\n event.preventDefault();\n this.focusFirstOnOpen = \"first\";\n if (!this.open) this.show();\n break;\n case \"ArrowUp\":\n event.preventDefault();\n this.focusFirstOnOpen = \"last\";\n if (!this.open) this.show();\n break;\n }\n };\n\n private handleItemSelect = (_event: Event): void => {\n // Item was selected, close the menu\n // Don't stop propagation - let the event bubble to consumers\n this.close();\n };\n\n private handleDismiss = (): void => {\n this.close();\n };\n\n private setupTriggerAccessibility(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]');\n const content = this.querySelector(\"ds-menu-content\");\n\n if (trigger && content) {\n // Store reference\n this.triggerElement = trigger as HTMLElement;\n\n // Set ARIA attributes on trigger\n trigger.setAttribute(\"aria-haspopup\", \"menu\");\n trigger.setAttribute(\"aria-expanded\", String(this.open));\n trigger.setAttribute(\"aria-controls\", content.id);\n }\n }\n\n private updateTriggerAria(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]');\n if (trigger) {\n trigger.setAttribute(\"aria-expanded\", String(this.open));\n }\n }\n\n private setupPositioning(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n const content = this.querySelector(\"ds-menu-content\") as HTMLElement | null;\n\n if (!trigger || !content) return;\n\n // Setup anchor positioning\n this.anchorPosition = createAnchorPosition({\n anchor: trigger,\n floating: content,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n onPositionChange: (pos) => {\n content.setAttribute(\"data-placement\", pos.placement);\n },\n });\n\n // Setup resize observer for repositioning\n this.resizeObserver = new ResizeObserver(() => {\n this.anchorPosition?.update();\n });\n this.resizeObserver.observe(trigger);\n this.resizeObserver.observe(content);\n\n // Setup scroll handler for repositioning\n this.scrollHandler = () => {\n this.anchorPosition?.update();\n };\n window.addEventListener(\"scroll\", this.scrollHandler, { passive: true });\n window.addEventListener(\"resize\", this.scrollHandler, { passive: true });\n }\n\n private setupDismissLayer(): void {\n const content = this.querySelector(\"ds-menu-content\") as HTMLElement | null;\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n\n if (!content) return;\n\n this.dismissLayer = createDismissableLayer({\n container: content,\n excludeElements: trigger ? [trigger] : [],\n onDismiss: this.handleDismiss,\n closeOnEscape: true,\n closeOnOutsideClick: true,\n });\n this.dismissLayer.activate();\n }\n\n private setupRovingFocus(): void {\n const content = this.querySelector(\"ds-menu-content\") as HTMLElement | null;\n\n if (!content) return;\n\n this.rovingFocus = createRovingFocus({\n container: content,\n selector: \"ds-menu-item:not([disabled])\",\n direction: \"vertical\",\n loop: true,\n skipDisabled: true,\n });\n }\n\n private setupTypeAhead(): void {\n const content = this.querySelector(\"ds-menu-content\") as HTMLElement | null;\n\n if (!content) return;\n\n this.typeAhead = createTypeAhead({\n items: () =>\n Array.from(content.querySelectorAll<HTMLElement>(\"ds-menu-item:not([disabled])\")),\n getText: (item) => item.textContent?.trim() || \"\",\n onMatch: (_item, index) => {\n this.rovingFocus?.setFocusedIndex(index);\n },\n });\n\n // Wire type-ahead to keydown events\n content.addEventListener(\"keydown\", this.handleTypeAheadKeyDown);\n }\n\n private handleTypeAheadKeyDown = (event: KeyboardEvent): void => {\n this.typeAhead?.handleKeyDown(event);\n };\n\n private focusInitialItem(): void {\n const content = this.querySelector(\"ds-menu-content\");\n if (!content) return;\n\n const items = content.querySelectorAll<HTMLElement>(\"ds-menu-item:not([disabled])\");\n if (items.length === 0) return;\n\n if (this.focusFirstOnOpen === \"last\") {\n // Focus last item (ArrowUp on trigger)\n const lastIndex = items.length - 1;\n this.rovingFocus?.setFocusedIndex(lastIndex);\n } else {\n // Focus first item (default)\n this.rovingFocus?.setFocusedIndex(0);\n }\n\n this.focusFirstOnOpen = null;\n }\n\n private cleanup(): void {\n const content = this.querySelector(\"ds-menu-content\") as HTMLElement | null;\n\n // Cleanup type-ahead listener\n if (content) {\n content.removeEventListener(\"keydown\", this.handleTypeAheadKeyDown);\n }\n\n // Cleanup anchor positioning\n this.anchorPosition?.destroy();\n this.anchorPosition = null;\n\n // Cleanup dismiss layer\n this.dismissLayer?.deactivate();\n this.dismissLayer = null;\n\n // Cleanup presence\n this.presence?.destroy();\n this.presence = null;\n\n // Cleanup roving focus\n this.rovingFocus?.destroy();\n this.rovingFocus = null;\n\n // Cleanup type-ahead\n this.typeAhead?.reset();\n this.typeAhead = null;\n\n // Cleanup resize observer\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n\n // Cleanup scroll handler\n if (this.scrollHandler) {\n window.removeEventListener(\"scroll\", this.scrollHandler);\n window.removeEventListener(\"resize\", this.scrollHandler);\n this.scrollHandler = null;\n }\n }\n\n override async updated(changedProperties: Map<string, unknown>): Promise<void> {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"open\")) {\n this.updateTriggerAria();\n\n const content = this.querySelector(\"ds-menu-content\") as DsMenuContent | null;\n\n if (this.open) {\n // Show content\n content?.removeAttribute(\"hidden\");\n\n // Set data-state to open for entry animation\n if (content) {\n content.dataState = \"open\";\n }\n\n // Wait for DOM update\n await this.updateComplete;\n\n // Setup all behaviors\n this.setupPositioning();\n this.setupDismissLayer();\n this.setupRovingFocus();\n this.setupTypeAhead();\n\n // Focus initial item\n this.focusInitialItem();\n } else {\n // Hide content\n content?.setAttribute(\"hidden\", \"\");\n }\n }\n\n // Update positioning if placement or offset changes while open\n if (this.open && (changedProperties.has(\"placement\") || changedProperties.has(\"offset\"))) {\n this.cleanup();\n this.setupPositioning();\n this.setupDismissLayer();\n this.setupRovingFocus();\n this.setupTypeAhead();\n }\n }\n\n override render() {\n return html`\n <slot name=\"trigger\"></slot>\n <slot></slot>\n `;\n }\n}\n\ndefine(\"ds-menu\", DsMenu);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-menu\": DsMenu;\n }\n}\n","/**\n * AlertDialogContent component - container for alert dialog content.\n *\n * @element ds-alert-dialog-content\n *\n * @slot - Alert dialog content (header, body, footer)\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 type AlertDialogContentSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nexport class DsAlertDialogContent extends DSElement {\n /** Size of the alert dialog content */\n @property({ reflect: true })\n size: AlertDialogContentSize = \"md\";\n\n /** Data state for animations */\n @property({ attribute: \"data-state\", reflect: true })\n dataState: \"open\" | \"closed\" = \"closed\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // ARIA attributes are set by parent DsAlertDialog\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-alert-dialog-content\", DsAlertDialogContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-alert-dialog-content\": DsAlertDialogContent;\n }\n}\n","/**\n * AlertDialogHeader component - header section for alert dialog.\n *\n * @element ds-alert-dialog-header\n *\n * @slot - Header content (title and description)\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsAlertDialogHeader extends DSElement {\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-alert-dialog-header\", DsAlertDialogHeader);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-alert-dialog-header\": DsAlertDialogHeader;\n }\n}\n","/**\n * AlertDialogFooter component - footer section for alert dialog actions.\n *\n * @element ds-alert-dialog-footer\n *\n * @slot - Footer content (action and cancel buttons)\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsAlertDialogFooter extends DSElement {\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-alert-dialog-footer\", DsAlertDialogFooter);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-alert-dialog-footer\": DsAlertDialogFooter;\n }\n}\n","/**\n * AlertDialogTitle component - title for the alert dialog.\n *\n * @element ds-alert-dialog-title\n *\n * @slot - Title content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsAlertDialogTitle extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate ID if not present (for aria-labelledby)\n if (!this.id) {\n this.id = `alert-dialog-title-${crypto.randomUUID().slice(0, 8)}`;\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-alert-dialog-title\", DsAlertDialogTitle);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-alert-dialog-title\": DsAlertDialogTitle;\n }\n}\n","/**\n * AlertDialogDescription component - description for the alert dialog.\n *\n * @element ds-alert-dialog-description\n *\n * @slot - Description content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsAlertDialogDescription extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate ID if not present (for aria-describedby)\n if (!this.id) {\n this.id = `alert-dialog-desc-${crypto.randomUUID().slice(0, 8)}`;\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-alert-dialog-description\", DsAlertDialogDescription);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-alert-dialog-description\": DsAlertDialogDescription;\n }\n}\n","/**\n * AlertDialogAction component - confirms the action and closes the dialog.\n *\n * @element ds-alert-dialog-action\n *\n * @slot - Action button content\n *\n * @fires ds:alert-dialog-action - Fired when action is clicked\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 DsAlertDialogAction extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener(\"click\", this.handleClick);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n }\n\n private handleClick = (): void => {\n // Emit action event - parent will handle closing\n emitEvent(this, \"ds:alert-dialog-action\", { bubbles: true });\n };\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-alert-dialog-action\", DsAlertDialogAction);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-alert-dialog-action\": DsAlertDialogAction;\n }\n}\n","/**\n * AlertDialogCancel component - cancels the action and closes the dialog.\n *\n * @element ds-alert-dialog-cancel\n *\n * @slot - Cancel button content\n *\n * @fires ds:alert-dialog-cancel - Fired when cancel is clicked\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 DsAlertDialogCancel extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener(\"click\", this.handleClick);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n }\n\n private handleClick = (): void => {\n // Emit cancel event - parent will handle closing\n emitEvent(this, \"ds:alert-dialog-cancel\", { bubbles: true });\n };\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-alert-dialog-cancel\", DsAlertDialogCancel);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-alert-dialog-cancel\": DsAlertDialogCancel;\n }\n}\n","/**\n * AlertDialog component - modal dialog requiring explicit user action.\n *\n * AlertDialog is used for important decisions that require confirmation.\n * Unlike Dialog, it cannot be dismissed by clicking outside or pressing Escape.\n *\n * Implements WAI-ARIA AlertDialog pattern.\n *\n * @element ds-alert-dialog\n *\n * @slot trigger - Button or element that opens the alert dialog\n * @slot - AlertDialog content (ds-alert-dialog-content)\n *\n * @fires ds:open - Fired when alert dialog opens\n * @fires ds:close - Fired when alert dialog closes\n *\n * @example\n * ```html\n * <ds-alert-dialog>\n * <button slot=\"trigger\">Delete Account</button>\n * <ds-alert-dialog-content>\n * <ds-alert-dialog-header>\n * <ds-alert-dialog-title>Are you absolutely sure?</ds-alert-dialog-title>\n * <ds-alert-dialog-description>\n * This action cannot be undone.\n * </ds-alert-dialog-description>\n * </ds-alert-dialog-header>\n * <ds-alert-dialog-footer>\n * <ds-alert-dialog-cancel>Cancel</ds-alert-dialog-cancel>\n * <ds-alert-dialog-action>Delete</ds-alert-dialog-action>\n * </ds-alert-dialog-footer>\n * </ds-alert-dialog-content>\n * </ds-alert-dialog>\n * ```\n */\n\nimport {\n type DialogBehavior,\n type Presence,\n createDialogBehavior,\n createPresence,\n prefersReducedMotion,\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 { StandardEvents, emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\nimport { devWarn, hasRequiredChild, Warnings } from \"../../utils/dev-warnings.js\";\n\n// Import child components to ensure they're registered\nimport type { DsAlertDialogContent } from \"./alert-dialog-content.js\";\nimport \"./alert-dialog-content.js\";\nimport \"./alert-dialog-header.js\";\nimport \"./alert-dialog-footer.js\";\nimport \"./alert-dialog-title.js\";\nimport \"./alert-dialog-description.js\";\nimport \"./alert-dialog-action.js\";\nimport \"./alert-dialog-cancel.js\";\n\nexport class DsAlertDialog extends DSElement {\n /** Whether the alert dialog is open */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Whether to animate open/close transitions */\n @property({ type: Boolean })\n animated = true;\n\n /** Whether the alert dialog is closing (for animation) */\n @state()\n private isClosing = false;\n\n private dialogBehavior: DialogBehavior | null = null;\n private presence: Presence | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Listen for trigger clicks via event delegation\n this.addEventListener(\"click\", this.handleTriggerClick);\n\n // Listen for action/cancel clicks\n this.addEventListener(\"ds:alert-dialog-action\", this.handleAction as EventListener);\n this.addEventListener(\"ds:alert-dialog-cancel\", this.handleCancel as EventListener);\n\n // Initialize dialog behavior (AlertDialog does NOT close on escape or outside click)\n this.initDialogBehavior();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleTriggerClick);\n this.removeEventListener(\"ds:alert-dialog-action\", this.handleAction as EventListener);\n this.removeEventListener(\"ds:alert-dialog-cancel\", this.handleCancel as EventListener);\n this.cleanup();\n }\n\n /**\n * Initializes the dialog behavior primitive.\n * AlertDialog uses role=\"alertdialog\" and disables dismiss on escape/outside click.\n */\n private initDialogBehavior(): void {\n this.dialogBehavior = createDialogBehavior({\n defaultOpen: this.open,\n role: \"alertdialog\",\n closeOnEscape: false, // AlertDialog does NOT close on escape\n closeOnOutsideClick: false, // AlertDialog does NOT close on outside click\n onOpenChange: () => {\n // AlertDialog only closes via explicit action/cancel buttons\n // so we don't handle behavior-initiated closes here\n },\n });\n\n // Set trigger element if one exists\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n if (trigger) {\n this.dialogBehavior.setTriggerElement(trigger);\n }\n }\n\n /**\n * Opens the alert dialog.\n */\n public show(): void {\n if (this.open) return;\n\n // Store trigger element for focus return\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n if (trigger) {\n this.dialogBehavior?.setTriggerElement(trigger);\n } else if (document.activeElement instanceof HTMLElement) {\n this.dialogBehavior?.setTriggerElement(document.activeElement);\n }\n\n this.open = true;\n this.dialogBehavior?.open();\n emitEvent(this, StandardEvents.OPEN);\n }\n\n /**\n * Closes the alert dialog.\n */\n public close(): void {\n if (!this.open) return;\n\n const content = this.querySelector(\"ds-alert-dialog-content\") as DsAlertDialogContent | null;\n\n // Close the behavior (deactivates focus trap and dismiss layer)\n this.dialogBehavior?.close();\n\n // If animated, use presence for exit animation\n if (this.animated && content && !prefersReducedMotion()) {\n this.isClosing = true;\n\n // Create presence for exit animation\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n // No animation - close immediately\n this.open = false;\n this.isClosing = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n }\n\n /**\n * Completes the close after exit animation.\n */\n private completeClose(): void {\n this.presence?.destroy();\n this.presence = null;\n this.open = false;\n this.isClosing = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n\n private handleTriggerClick = (event: Event): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (trigger && this.contains(trigger)) {\n // Store trigger before opening\n this.dialogBehavior?.setTriggerElement(trigger as HTMLElement);\n this.show();\n }\n };\n\n private handleAction = (): void => {\n // Action clicked - close the dialog\n this.close();\n };\n\n private handleCancel = (): void => {\n // Cancel clicked - close the dialog\n this.close();\n };\n\n private cleanup(): void {\n this.dialogBehavior?.destroy();\n this.dialogBehavior = null;\n this.presence?.destroy();\n this.presence = null;\n }\n\n override async updated(changedProperties: Map<string, unknown>): Promise<void> {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"open\")) {\n const content = this.querySelector(\"ds-alert-dialog-content\") as DsAlertDialogContent | null;\n\n if (this.open) {\n // Wait for the next microtask to ensure DOM is committed\n await this.updateComplete;\n\n // Set data-state to open for entry animation\n if (content) {\n content.dataState = \"open\";\n }\n\n // Set content element on behavior (activates focus trap and dismiss layer)\n this.dialogBehavior?.setContentElement(content);\n this.updateContentAccessibility();\n } else {\n // Clear content element on behavior\n this.dialogBehavior?.setContentElement(null);\n }\n }\n }\n\n /**\n * Updates accessibility attributes on alert dialog content.\n */\n private updateContentAccessibility(): void {\n const content = this.querySelector(\"ds-alert-dialog-content\");\n if (!content || !this.dialogBehavior) return;\n\n // Get props from behavior\n const contentProps = this.dialogBehavior.getContentProps();\n\n // Set role on content - always alertdialog\n content.setAttribute(\"role\", \"alertdialog\");\n content.setAttribute(\"aria-modal\", contentProps[\"aria-modal\"]);\n\n // Dev warning: Check for required alert dialog title\n if (!hasRequiredChild(this, \"ds-alert-dialog-title\") && !this.getAttribute(\"aria-label\")) {\n devWarn(Warnings.dialogMissingTitle(\"ds-alert-dialog\"));\n }\n\n // Connect title via aria-labelledby\n const title = this.querySelector(\"ds-alert-dialog-title\");\n if (title) {\n const titleProps = this.dialogBehavior.getTitleProps();\n if (!title.id) {\n title.id = titleProps.id;\n }\n content.setAttribute(\"aria-labelledby\", title.id);\n }\n\n // Connect description via aria-describedby\n const description = this.querySelector(\"ds-alert-dialog-description\");\n if (description) {\n const descProps = this.dialogBehavior.getDescriptionProps();\n if (!description.id) {\n description.id = descProps.id;\n }\n content.setAttribute(\"aria-describedby\", description.id);\n this.dialogBehavior.setHasDescription(true);\n } else {\n // Dev warning: Title without description\n if (title) {\n devWarn(Warnings.dialogMissingDescription(\"ds-alert-dialog\"));\n }\n this.dialogBehavior.setHasDescription(false);\n }\n }\n\n override render() {\n return html`\n <slot name=\"trigger\"></slot>\n <div\n class=\"ds-alert-dialog__backdrop\"\n ?hidden=${!this.open}\n ?data-closing=${this.isClosing}\n >\n <slot></slot>\n </div>\n `;\n }\n}\n\ndefine(\"ds-alert-dialog\", DsAlertDialog);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-alert-dialog\": DsAlertDialog;\n }\n}\n","/**\n * AlertDialogTrigger component - element that opens the alert dialog.\n *\n * @element ds-alert-dialog-trigger\n *\n * @slot - Trigger content (typically a button)\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\nimport type { DsAlertDialog } from \"./alert-dialog.js\";\n\nexport class DsAlertDialogTrigger extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Set slot attribute\n this.setAttribute(\"slot\", \"trigger\");\n\n // Add click handler\n this.addEventListener(\"click\", this.handleClick);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n }\n\n private handleClick = (): void => {\n const alertDialog = this.closest(\"ds-alert-dialog\") as DsAlertDialog | null;\n alertDialog?.show();\n };\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-alert-dialog-trigger\", DsAlertDialogTrigger);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-alert-dialog-trigger\": DsAlertDialogTrigger;\n }\n}\n","/**\n * SheetContent component - container for sheet content.\n *\n * @element ds-sheet-content\n *\n * @slot - Sheet content (header, body, footer)\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 type SheetSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type SheetContentSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nexport class DsSheetContent extends DSElement {\n /** Side of the screen the sheet appears from */\n @property({ reflect: true })\n side: SheetSide = \"right\";\n\n /** Size of the sheet content */\n @property({ reflect: true })\n size: SheetContentSize = \"md\";\n\n /** Data state for animations */\n @property({ attribute: \"data-state\", reflect: true })\n dataState: \"open\" | \"closed\" = \"closed\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // ARIA attributes are set by parent DsSheet\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-sheet-content\", DsSheetContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-sheet-content\": DsSheetContent;\n }\n}\n","/**\n * SheetOverlay component - backdrop overlay behind the sheet.\n *\n * @element ds-sheet-overlay\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsSheetOverlay extends DSElement {\n override render() {\n return html``;\n }\n}\n\ndefine(\"ds-sheet-overlay\", DsSheetOverlay);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-sheet-overlay\": DsSheetOverlay;\n }\n}\n","/**\n * SheetHeader component - header section for sheet.\n *\n * @element ds-sheet-header\n *\n * @slot - Header content (title and description)\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsSheetHeader extends DSElement {\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-sheet-header\", DsSheetHeader);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-sheet-header\": DsSheetHeader;\n }\n}\n","/**\n * SheetFooter component - footer section for sheet actions.\n *\n * @element ds-sheet-footer\n *\n * @slot - Footer content (action buttons)\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsSheetFooter extends DSElement {\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-sheet-footer\", DsSheetFooter);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-sheet-footer\": DsSheetFooter;\n }\n}\n","/**\n * SheetTitle component - title for the sheet.\n *\n * @element ds-sheet-title\n *\n * @slot - Title content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsSheetTitle extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate ID if not present (for aria-labelledby)\n if (!this.id) {\n this.id = `sheet-title-${crypto.randomUUID().slice(0, 8)}`;\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-sheet-title\", DsSheetTitle);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-sheet-title\": DsSheetTitle;\n }\n}\n","/**\n * SheetDescription component - description for the sheet.\n *\n * @element ds-sheet-description\n *\n * @slot - Description content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsSheetDescription extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate ID if not present (for aria-describedby)\n if (!this.id) {\n this.id = `sheet-desc-${crypto.randomUUID().slice(0, 8)}`;\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-sheet-description\", DsSheetDescription);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-sheet-description\": DsSheetDescription;\n }\n}\n","/**\n * SheetClose component - closes the sheet when clicked.\n *\n * @element ds-sheet-close\n *\n * @slot - Close button content\n *\n * @fires ds:sheet-close - Fired when close is clicked\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 DsSheetClose extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener(\"click\", this.handleClick);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleClick);\n }\n\n private handleClick = (): void => {\n // Emit close event - parent will handle closing\n emitEvent(this, \"ds:sheet-close\", { bubbles: true });\n };\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-sheet-close\", DsSheetClose);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-sheet-close\": DsSheetClose;\n }\n}\n","/**\n * Sheet component - slide-in overlay panel from screen edge.\n *\n * Provides a modal overlay that slides in from any edge of the screen.\n * Follows WAI-ARIA Dialog (Modal) pattern.\n *\n * @element ds-sheet\n *\n * @slot trigger - Button or element that opens the sheet\n * @slot - Sheet content (ds-sheet-content)\n *\n * @fires ds:open - Fired when sheet opens\n * @fires ds:close - Fired when sheet closes\n *\n * @example\n * ```html\n * <ds-sheet>\n * <button slot=\"trigger\">Open Settings</button>\n * <ds-sheet-content side=\"right\">\n * <ds-sheet-header>\n * <ds-sheet-title>Settings</ds-sheet-title>\n * <ds-sheet-description>Adjust your preferences</ds-sheet-description>\n * </ds-sheet-header>\n * <div>Settings content...</div>\n * <ds-sheet-footer>\n * <ds-sheet-close>Close</ds-sheet-close>\n * </ds-sheet-footer>\n * </ds-sheet-content>\n * </ds-sheet>\n * ```\n */\n\nimport {\n type DialogBehavior,\n type Presence,\n createDialogBehavior,\n createPresence,\n prefersReducedMotion,\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 { StandardEvents, emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\nimport { devWarn, hasRequiredChild, Warnings } from \"../../utils/dev-warnings.js\";\n\n// Import child components to ensure they're registered\nimport type { DsSheetContent } from \"./sheet-content.js\";\nimport \"./sheet-content.js\";\nimport \"./sheet-overlay.js\";\nimport \"./sheet-header.js\";\nimport \"./sheet-footer.js\";\nimport \"./sheet-title.js\";\nimport \"./sheet-description.js\";\nimport \"./sheet-close.js\";\n\nexport class DsSheet extends DSElement {\n /** Whether the sheet is open */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Whether Escape key closes the sheet */\n @property({ type: Boolean, attribute: \"close-on-escape\" })\n closeOnEscape = true;\n\n /** Whether clicking the overlay closes the sheet */\n @property({ type: Boolean, attribute: \"close-on-overlay\" })\n closeOnOverlay = true;\n\n /** Whether to animate open/close transitions */\n @property({ type: Boolean })\n animated = true;\n\n /** Whether the sheet is closing (for animation) */\n @state()\n private isClosing = false;\n\n private dialogBehavior: DialogBehavior | null = null;\n private presence: Presence | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Listen for trigger clicks via event delegation\n this.addEventListener(\"click\", this.handleTriggerClick);\n\n // Listen for close requests from child components\n this.addEventListener(\"ds:sheet-close\", this.handleCloseRequest as EventListener);\n\n // Initialize dialog behavior\n this.initDialogBehavior();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleTriggerClick);\n this.removeEventListener(\"ds:sheet-close\", this.handleCloseRequest as EventListener);\n this.cleanup();\n }\n\n /**\n * Initializes the dialog behavior primitive.\n */\n private initDialogBehavior(): void {\n this.dialogBehavior = createDialogBehavior({\n defaultOpen: this.open,\n role: \"dialog\",\n closeOnEscape: this.closeOnEscape,\n closeOnOutsideClick: this.closeOnOverlay,\n onOpenChange: (open) => {\n // Sync state when behavior changes (e.g., from escape or outside click)\n if (!open && this.open) {\n this.handleBehaviorClose();\n }\n },\n });\n\n // Set trigger element if one exists\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n if (trigger) {\n this.dialogBehavior.setTriggerElement(trigger);\n }\n }\n\n /**\n * Handles close triggered by the behavior (escape/outside click).\n */\n private handleBehaviorClose(): void {\n const content = this.querySelector(\"ds-sheet-content\") as DsSheetContent | null;\n\n // If animated, use presence for exit animation\n if (this.animated && content && !prefersReducedMotion()) {\n this.isClosing = true;\n\n // Create presence for exit animation\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n // No animation - close immediately\n this.open = false;\n this.isClosing = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n }\n\n /**\n * Opens the sheet.\n */\n public show(): void {\n if (this.open) return;\n\n // Store trigger element for focus return\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n if (trigger) {\n this.dialogBehavior?.setTriggerElement(trigger);\n } else if (document.activeElement instanceof HTMLElement) {\n this.dialogBehavior?.setTriggerElement(document.activeElement);\n }\n\n this.open = true;\n this.dialogBehavior?.open();\n emitEvent(this, StandardEvents.OPEN);\n }\n\n /**\n * Closes the sheet.\n */\n public close(): void {\n if (!this.open) return;\n\n const content = this.querySelector(\"ds-sheet-content\") as DsSheetContent | null;\n\n // Close the behavior (deactivates focus trap and dismiss layer)\n this.dialogBehavior?.close();\n\n // If animated, use presence for exit animation\n if (this.animated && content && !prefersReducedMotion()) {\n this.isClosing = true;\n\n // Create presence for exit animation\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n // No animation - close immediately\n this.open = false;\n this.isClosing = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n }\n\n /**\n * Completes the close after exit animation.\n */\n private completeClose(): void {\n this.presence?.destroy();\n this.presence = null;\n this.open = false;\n this.isClosing = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n\n private handleTriggerClick = (event: Event): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (trigger && this.contains(trigger)) {\n // Store trigger before opening\n this.dialogBehavior?.setTriggerElement(trigger as HTMLElement);\n this.show();\n }\n };\n\n private handleCloseRequest = (): void => {\n this.close();\n };\n\n private cleanup(): void {\n this.dialogBehavior?.destroy();\n this.dialogBehavior = null;\n this.presence?.destroy();\n this.presence = null;\n }\n\n override async updated(changedProperties: Map<string, unknown>): Promise<void> {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"open\")) {\n const content = this.querySelector(\"ds-sheet-content\") as DsSheetContent | null;\n\n if (this.open) {\n // Wait for the next microtask to ensure DOM is committed\n await this.updateComplete;\n\n // Set data-state to open for entry animation\n if (content) {\n content.dataState = \"open\";\n }\n\n // Set content element on behavior (activates focus trap and dismiss layer)\n this.dialogBehavior?.setContentElement(content);\n this.updateContentAccessibility();\n } else {\n // Clear content element on behavior\n this.dialogBehavior?.setContentElement(null);\n }\n }\n\n // Sync behavior options when they change\n if (changedProperties.has(\"closeOnEscape\") || changedProperties.has(\"closeOnOverlay\")) {\n // Re-create behavior with new options\n const wasOpen = this.dialogBehavior?.state.open;\n this.dialogBehavior?.destroy();\n this.initDialogBehavior();\n if (wasOpen) {\n this.dialogBehavior?.open();\n const content = this.querySelector(\"ds-sheet-content\") as HTMLElement | null;\n this.dialogBehavior?.setContentElement(content);\n }\n }\n }\n\n /**\n * Updates accessibility attributes on sheet content.\n */\n private updateContentAccessibility(): void {\n const content = this.querySelector(\"ds-sheet-content\");\n if (!content || !this.dialogBehavior) return;\n\n // Get props from behavior\n const contentProps = this.dialogBehavior.getContentProps();\n\n // Set role on content\n content.setAttribute(\"role\", \"dialog\");\n content.setAttribute(\"aria-modal\", contentProps[\"aria-modal\"]);\n\n // Dev warning: Check for required sheet title\n if (!hasRequiredChild(this, \"ds-sheet-title\") && !this.getAttribute(\"aria-label\")) {\n devWarn(Warnings.dialogMissingTitle(\"ds-sheet\"));\n }\n\n // Connect title via aria-labelledby\n const title = this.querySelector(\"ds-sheet-title\");\n if (title) {\n const titleProps = this.dialogBehavior.getTitleProps();\n if (!title.id) {\n title.id = titleProps.id;\n }\n content.setAttribute(\"aria-labelledby\", title.id);\n }\n\n // Connect description via aria-describedby\n const description = this.querySelector(\"ds-sheet-description\");\n if (description) {\n const descProps = this.dialogBehavior.getDescriptionProps();\n if (!description.id) {\n description.id = descProps.id;\n }\n content.setAttribute(\"aria-describedby\", description.id);\n this.dialogBehavior.setHasDescription(true);\n } else {\n // Dev warning: Title without description\n if (title) {\n devWarn(Warnings.dialogMissingDescription(\"ds-sheet\"));\n }\n this.dialogBehavior.setHasDescription(false);\n }\n }\n\n override render() {\n return html`\n <slot name=\"trigger\"></slot>\n <ds-sheet-overlay\n ?hidden=${!this.open}\n ?data-closing=${this.isClosing}\n @click=${this.closeOnOverlay ? this.handleCloseRequest : undefined}\n ></ds-sheet-overlay>\n <slot ?hidden=${!this.open}></slot>\n `;\n }\n}\n\ndefine(\"ds-sheet\", DsSheet);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-sheet\": DsSheet;\n }\n}\n","/**\n * DrawerContent component - container for drawer content with swipe support.\n *\n * @element ds-drawer-content\n *\n * @slot - Drawer content (header, body, footer)\n *\n * @fires ds:drawer-close - Fired when swipe gesture dismisses drawer\n */\n\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\";\nimport type { DrawerSide } from \"./drawer.js\";\n\nexport class DsDrawerContent extends DSElement {\n /** Side of the screen the drawer appears from (set by parent) */\n @property({ reflect: true })\n side: DrawerSide = \"bottom\";\n\n /** Data state for animations */\n @property({ attribute: \"data-state\", reflect: true })\n dataState: \"open\" | \"closed\" = \"closed\";\n\n /** Whether swipe-to-dismiss is enabled (set by parent) */\n @property({ type: Boolean, attribute: \"swipe-dismiss\" })\n swipeDismiss = true;\n\n /** Current swipe offset during drag */\n @state()\n private swipeOffset = 0;\n\n /** Whether currently dragging */\n @state()\n private isDragging = false;\n\n private startY = 0;\n private startX = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Add touch event listeners for swipe-to-dismiss\n this.addEventListener(\"touchstart\", this.handleTouchStart, { passive: true });\n this.addEventListener(\"touchmove\", this.handleTouchMove, { passive: false });\n this.addEventListener(\"touchend\", this.handleTouchEnd, { passive: true });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"touchstart\", this.handleTouchStart);\n this.removeEventListener(\"touchmove\", this.handleTouchMove);\n this.removeEventListener(\"touchend\", this.handleTouchEnd);\n }\n\n private handleTouchStart = (event: TouchEvent): void => {\n if (!this.swipeDismiss) return;\n\n const touch = event.touches[0];\n if (!touch) return;\n\n this.startY = touch.clientY;\n this.startX = touch.clientX;\n this.isDragging = true;\n };\n\n private handleTouchMove = (event: TouchEvent): void => {\n if (!this.swipeDismiss || !this.isDragging) return;\n\n const touch = event.touches[0];\n if (!touch) return;\n\n const deltaY = touch.clientY - this.startY;\n const deltaX = touch.clientX - this.startX;\n\n // Calculate offset based on side\n let offset = 0;\n switch (this.side) {\n case \"bottom\":\n offset = Math.max(0, deltaY);\n break;\n case \"top\":\n offset = Math.max(0, -deltaY);\n break;\n case \"left\":\n offset = Math.max(0, -deltaX);\n break;\n case \"right\":\n offset = Math.max(0, deltaX);\n break;\n }\n\n if (offset > 0) {\n event.preventDefault();\n this.swipeOffset = offset;\n this.updateSwipeTransform();\n }\n };\n\n private handleTouchEnd = (): void => {\n if (!this.swipeDismiss || !this.isDragging) return;\n\n this.isDragging = false;\n\n // If swiped more than 100px or 30% of content height, close\n const threshold = Math.min(100, this.offsetHeight * 0.3);\n\n if (this.swipeOffset > threshold) {\n emitEvent(this, \"ds:drawer-close\", { bubbles: true });\n } else {\n // Reset position\n this.swipeOffset = 0;\n this.style.transform = \"\";\n }\n };\n\n private updateSwipeTransform(): void {\n switch (this.side) {\n case \"bottom\":\n this.style.transform = `translateY(${this.swipeOffset}px)`;\n break;\n case \"top\":\n this.style.transform = `translateY(-${this.swipeOffset}px)`;\n break;\n case \"left\":\n this.style.transform = `translateX(-${this.swipeOffset}px)`;\n break;\n case \"right\":\n this.style.transform = `translateX(${this.swipeOffset}px)`;\n break;\n }\n }\n\n override render() {\n return html`\n <div class=\"ds-drawer__handle\"></div>\n <slot></slot>\n `;\n }\n}\n\ndefine(\"ds-drawer-content\", DsDrawerContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-drawer-content\": DsDrawerContent;\n }\n}\n","/**\n * DrawerHeader component - header section for drawer.\n *\n * @element ds-drawer-header\n *\n * @slot - Header content (title and description)\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsDrawerHeader extends DSElement {\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-drawer-header\", DsDrawerHeader);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-drawer-header\": DsDrawerHeader;\n }\n}\n","/**\n * DrawerFooter component - footer section for drawer actions.\n *\n * @element ds-drawer-footer\n *\n * @slot - Footer content (action buttons)\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsDrawerFooter extends DSElement {\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-drawer-footer\", DsDrawerFooter);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-drawer-footer\": DsDrawerFooter;\n }\n}\n","/**\n * DrawerTitle component - title for the drawer.\n *\n * @element ds-drawer-title\n *\n * @slot - Title content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsDrawerTitle extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate ID if not present (for aria-labelledby)\n if (!this.id) {\n this.id = `drawer-title-${crypto.randomUUID().slice(0, 8)}`;\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-drawer-title\", DsDrawerTitle);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-drawer-title\": DsDrawerTitle;\n }\n}\n","/**\n * DrawerDescription component - description for the drawer.\n *\n * @element ds-drawer-description\n *\n * @slot - Description content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsDrawerDescription extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate ID if not present (for aria-describedby)\n if (!this.id) {\n this.id = `drawer-desc-${crypto.randomUUID().slice(0, 8)}`;\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-drawer-description\", DsDrawerDescription);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-drawer-description\": DsDrawerDescription;\n }\n}\n","/**\n * Drawer component - mobile-optimized slide-in panel with swipe gestures.\n *\n * Drawer is a Sheet variant optimized for mobile with touch gesture support.\n * It slides in from the bottom by default and can be dismissed by swiping down.\n *\n * @element ds-drawer\n *\n * @slot trigger - Button or element that opens the drawer\n * @slot - Drawer content (ds-drawer-content)\n *\n * @fires ds:open - Fired when drawer opens\n * @fires ds:close - Fired when drawer closes\n *\n * @example\n * ```html\n * <ds-drawer>\n * <button slot=\"trigger\">Open Menu</button>\n * <ds-drawer-content>\n * <ds-drawer-header>\n * <ds-drawer-title>Navigation</ds-drawer-title>\n * </ds-drawer-header>\n * <nav>Menu items...</nav>\n * </ds-drawer-content>\n * </ds-drawer>\n * ```\n */\n\nimport {\n type DialogBehavior,\n type Presence,\n createDialogBehavior,\n createPresence,\n prefersReducedMotion,\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 { StandardEvents, emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\nimport { devWarn, hasRequiredChild, Warnings } from \"../../utils/dev-warnings.js\";\n\n// Import child components to ensure they're registered\nimport type { DsDrawerContent } from \"./drawer-content.js\";\nimport \"./drawer-content.js\";\nimport \"./drawer-header.js\";\nimport \"./drawer-footer.js\";\nimport \"./drawer-title.js\";\nimport \"./drawer-description.js\";\n\nexport type DrawerSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport class DsDrawer extends DSElement {\n /** Whether the drawer is open */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Side of the screen the drawer appears from */\n @property({ reflect: true })\n side: DrawerSide = \"bottom\";\n\n /** Whether swipe-to-dismiss is enabled */\n @property({ type: Boolean, attribute: \"swipe-dismiss\" })\n swipeDismiss = true;\n\n /** Whether Escape key closes the drawer */\n @property({ type: Boolean, attribute: \"close-on-escape\" })\n closeOnEscape = true;\n\n /** Whether clicking the overlay closes the drawer */\n @property({ type: Boolean, attribute: \"close-on-overlay\" })\n closeOnOverlay = true;\n\n /** Whether to animate open/close transitions */\n @property({ type: Boolean })\n animated = true;\n\n /** Whether the drawer is closing (for animation) */\n @state()\n private isClosing = false;\n\n private dialogBehavior: DialogBehavior | null = null;\n private presence: Presence | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Listen for trigger clicks via event delegation\n this.addEventListener(\"click\", this.handleTriggerClick);\n\n // Listen for close requests from child components\n this.addEventListener(\"ds:drawer-close\", this.handleCloseRequest as EventListener);\n\n // Initialize dialog behavior\n this.initDialogBehavior();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleTriggerClick);\n this.removeEventListener(\"ds:drawer-close\", this.handleCloseRequest as EventListener);\n this.cleanup();\n }\n\n /**\n * Initializes the dialog behavior primitive.\n */\n private initDialogBehavior(): void {\n this.dialogBehavior = createDialogBehavior({\n defaultOpen: this.open,\n role: \"dialog\",\n closeOnEscape: this.closeOnEscape,\n closeOnOutsideClick: this.closeOnOverlay,\n onOpenChange: (open) => {\n // Sync state when behavior changes (e.g., from escape or outside click)\n if (!open && this.open) {\n this.handleBehaviorClose();\n }\n },\n });\n\n // Set trigger element if one exists\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n if (trigger) {\n this.dialogBehavior.setTriggerElement(trigger);\n }\n }\n\n /**\n * Handles close triggered by the behavior (escape/outside click).\n */\n private handleBehaviorClose(): void {\n const content = this.querySelector(\"ds-drawer-content\") as DsDrawerContent | null;\n\n // If animated, use presence for exit animation\n if (this.animated && content && !prefersReducedMotion()) {\n this.isClosing = true;\n\n // Create presence for exit animation\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n // No animation - close immediately\n this.open = false;\n this.isClosing = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n }\n\n /**\n * Opens the drawer.\n */\n public show(): void {\n if (this.open) return;\n\n // Store trigger element for focus return\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n if (trigger) {\n this.dialogBehavior?.setTriggerElement(trigger);\n } else if (document.activeElement instanceof HTMLElement) {\n this.dialogBehavior?.setTriggerElement(document.activeElement);\n }\n\n this.open = true;\n this.dialogBehavior?.open();\n emitEvent(this, StandardEvents.OPEN);\n }\n\n /**\n * Closes the drawer.\n */\n public close(): void {\n if (!this.open) return;\n\n const content = this.querySelector(\"ds-drawer-content\") as DsDrawerContent | null;\n\n // Close the behavior (deactivates focus trap and dismiss layer)\n this.dialogBehavior?.close();\n\n // If animated, use presence for exit animation\n if (this.animated && content && !prefersReducedMotion()) {\n this.isClosing = true;\n\n // Create presence for exit animation\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n // No animation - close immediately\n this.open = false;\n this.isClosing = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n }\n\n /**\n * Completes the close after exit animation.\n */\n private completeClose(): void {\n this.presence?.destroy();\n this.presence = null;\n this.open = false;\n this.isClosing = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n\n private handleTriggerClick = (event: Event): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (trigger && this.contains(trigger)) {\n // Store trigger before opening\n this.dialogBehavior?.setTriggerElement(trigger as HTMLElement);\n this.show();\n }\n };\n\n private handleCloseRequest = (): void => {\n this.close();\n };\n\n private handleOverlayClick = (): void => {\n if (this.closeOnOverlay) {\n this.close();\n }\n };\n\n private cleanup(): void {\n this.dialogBehavior?.destroy();\n this.dialogBehavior = null;\n this.presence?.destroy();\n this.presence = null;\n }\n\n override async updated(changedProperties: Map<string, unknown>): Promise<void> {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"open\")) {\n const content = this.querySelector(\"ds-drawer-content\") as DsDrawerContent | null;\n\n if (this.open) {\n // Wait for the next microtask to ensure DOM is committed\n await this.updateComplete;\n\n // Set data-state to open for entry animation\n if (content) {\n content.dataState = \"open\";\n content.side = this.side;\n }\n\n // Set content element on behavior (activates focus trap and dismiss layer)\n this.dialogBehavior?.setContentElement(content);\n this.updateContentAccessibility();\n } else {\n // Clear content element on behavior\n this.dialogBehavior?.setContentElement(null);\n }\n }\n\n // Sync behavior options when they change\n if (changedProperties.has(\"closeOnEscape\") || changedProperties.has(\"closeOnOverlay\")) {\n // Re-create behavior with new options\n const wasOpen = this.dialogBehavior?.state.open;\n this.dialogBehavior?.destroy();\n this.initDialogBehavior();\n if (wasOpen) {\n this.dialogBehavior?.open();\n const content = this.querySelector(\"ds-drawer-content\") as HTMLElement | null;\n this.dialogBehavior?.setContentElement(content);\n }\n }\n }\n\n /**\n * Updates accessibility attributes on drawer content.\n */\n private updateContentAccessibility(): void {\n const content = this.querySelector(\"ds-drawer-content\");\n if (!content || !this.dialogBehavior) return;\n\n // Get props from behavior\n const contentProps = this.dialogBehavior.getContentProps();\n\n // Set role on content\n content.setAttribute(\"role\", \"dialog\");\n content.setAttribute(\"aria-modal\", contentProps[\"aria-modal\"]);\n\n // Dev warning: Check for required drawer title\n if (!hasRequiredChild(this, \"ds-drawer-title\") && !this.getAttribute(\"aria-label\")) {\n devWarn(Warnings.dialogMissingTitle(\"ds-drawer\"));\n }\n\n // Connect title via aria-labelledby\n const title = this.querySelector(\"ds-drawer-title\");\n if (title) {\n const titleProps = this.dialogBehavior.getTitleProps();\n if (!title.id) {\n title.id = titleProps.id;\n }\n content.setAttribute(\"aria-labelledby\", title.id);\n }\n\n // Connect description via aria-describedby\n const description = this.querySelector(\"ds-drawer-description\");\n if (description) {\n const descProps = this.dialogBehavior.getDescriptionProps();\n if (!description.id) {\n description.id = descProps.id;\n }\n content.setAttribute(\"aria-describedby\", description.id);\n this.dialogBehavior.setHasDescription(true);\n } else {\n // Dev warning: Title without description\n if (title) {\n devWarn(Warnings.dialogMissingDescription(\"ds-drawer\"));\n }\n this.dialogBehavior.setHasDescription(false);\n }\n }\n\n override render() {\n return html`\n <slot name=\"trigger\"></slot>\n <div\n class=\"ds-drawer__overlay\"\n ?hidden=${!this.open}\n ?data-closing=${this.isClosing}\n @click=${this.handleOverlayClick}\n ></div>\n <slot ?hidden=${!this.open}></slot>\n `;\n }\n}\n\ndefine(\"ds-drawer\", DsDrawer);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-drawer\": DsDrawer;\n }\n}\n","/**\n * DropdownMenuContent component - container for menu items.\n *\n * @element ds-dropdown-menu-content\n *\n * @slot - Menu items\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 DsDropdownMenuContent extends DSElement {\n /** Data state for animations */\n @property({ attribute: \"data-state\", reflect: true })\n dataState: \"open\" | \"closed\" = \"closed\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate ID for ARIA\n if (!this.id) {\n this.id = `dropdown-menu-content-${crypto.randomUUID().slice(0, 8)}`;\n }\n\n // Set ARIA role\n this.setAttribute(\"role\", \"menu\");\n this.setAttribute(\"hidden\", \"\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-dropdown-menu-content\", DsDropdownMenuContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dropdown-menu-content\": DsDropdownMenuContent;\n }\n}\n","/**\n * DropdownMenuItem component - selectable menu item.\n *\n * @element ds-dropdown-menu-item\n *\n * @slot - Item content\n *\n * @fires ds:select - Fired when item is selected\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 type DropdownMenuItemVariant = \"default\" | \"destructive\";\n\nexport class DsDropdownMenuItem extends DSElement {\n /** Value for selection events */\n @property()\n value = \"\";\n\n /** Visual variant */\n @property({ reflect: true })\n variant: DropdownMenuItemVariant = \"default\";\n\n /** Disabled state */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Set ARIA role\n this.setAttribute(\"role\", \"menuitem\");\n this.setAttribute(\"tabindex\", \"-1\");\n\n // Listen for selection triggers\n this.addEventListener(\"click\", this.handleSelect);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleSelect);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n private handleSelect = (): void => {\n if (this.disabled) return;\n\n emitEvent(this, \"ds:select\", {\n detail: { value: this.value },\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.handleSelect();\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 }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-dropdown-menu-item\", DsDropdownMenuItem);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dropdown-menu-item\": DsDropdownMenuItem;\n }\n}\n","/**\n * DropdownMenuSeparator component - visual divider between menu items.\n *\n * @element ds-dropdown-menu-separator\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsDropdownMenuSeparator extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"separator\");\n }\n\n override render() {\n return html``;\n }\n}\n\ndefine(\"ds-dropdown-menu-separator\", DsDropdownMenuSeparator);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dropdown-menu-separator\": DsDropdownMenuSeparator;\n }\n}\n","/**\n * DropdownMenuLabel component - non-interactive label for menu sections.\n *\n * @element ds-dropdown-menu-label\n *\n * @slot - Label content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsDropdownMenuLabel extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n // Labels are not focusable\n this.setAttribute(\"aria-hidden\", \"true\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-dropdown-menu-label\", DsDropdownMenuLabel);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dropdown-menu-label\": DsDropdownMenuLabel;\n }\n}\n","/**\n * DropdownMenuCheckboxItem component - toggleable checkbox menu item.\n *\n * @element ds-dropdown-menu-checkbox-item\n *\n * @slot - Item content\n *\n * @fires ds:select - Fired when item is toggled\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 DsDropdownMenuCheckboxItem extends DSElement {\n /** Whether the checkbox is checked */\n @property({ type: Boolean, reflect: true })\n checked = 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\", \"menuitemcheckbox\");\n this.setAttribute(\"tabindex\", \"-1\");\n this.updateAriaChecked();\n\n this.addEventListener(\"click\", this.handleToggle);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleToggle);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n private handleToggle = (): void => {\n if (this.disabled) return;\n\n this.checked = !this.checked;\n this.updateAriaChecked();\n\n emitEvent(this, \"ds:select\", {\n detail: { checked: this.checked },\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.handleToggle();\n }\n };\n\n private updateAriaChecked(): void {\n this.setAttribute(\"aria-checked\", String(this.checked));\n }\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"disabled\")) {\n this.setAttribute(\"aria-disabled\", String(this.disabled));\n }\n if (changedProperties.has(\"checked\")) {\n this.updateAriaChecked();\n }\n }\n\n override render() {\n return html`\n <span class=\"ds-dropdown-menu-checkbox-item__indicator\" aria-hidden=\"true\">\n ${this.checked ? \"✓\" : \"\"}\n </span>\n <slot></slot>\n `;\n }\n}\n\ndefine(\"ds-dropdown-menu-checkbox-item\", DsDropdownMenuCheckboxItem);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dropdown-menu-checkbox-item\": DsDropdownMenuCheckboxItem;\n }\n}\n","/**\n * DropdownMenuRadioGroup component - container for radio items.\n *\n * @element ds-dropdown-menu-radio-group\n *\n * @slot - Radio items\n *\n * @fires ds:change - Fired when selection changes\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 DsDropdownMenuRadioGroup extends DSElement {\n /** Currently selected value */\n @property()\n value = \"\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.setAttribute(\"role\", \"group\");\n\n // Listen for radio item selections\n this.addEventListener(\"ds:radio-select\", this.handleRadioSelect as EventListener);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"ds:radio-select\", this.handleRadioSelect as EventListener);\n }\n\n private handleRadioSelect = (event: CustomEvent<{ value: string }>): void => {\n event.stopPropagation();\n\n const newValue = event.detail.value;\n if (newValue !== this.value) {\n this.value = newValue;\n this.updateRadioItems();\n\n emitEvent(this, \"ds:change\", {\n detail: { value: this.value },\n bubbles: true,\n });\n }\n };\n\n private updateRadioItems(): void {\n const items = this.querySelectorAll(\"ds-dropdown-menu-radio-item\");\n for (const item of items) {\n const itemValue = item.getAttribute(\"value\");\n if (itemValue === this.value) {\n item.setAttribute(\"checked\", \"\");\n } else {\n item.removeAttribute(\"checked\");\n }\n }\n }\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"value\")) {\n this.updateRadioItems();\n }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-dropdown-menu-radio-group\", DsDropdownMenuRadioGroup);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dropdown-menu-radio-group\": DsDropdownMenuRadioGroup;\n }\n}\n","/**\n * DropdownMenuRadioItem component - radio button menu item.\n *\n * @element ds-dropdown-menu-radio-item\n *\n * @slot - Item content\n *\n * @fires ds:radio-select - Fired when item is selected (internal)\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 DsDropdownMenuRadioItem extends DSElement {\n /** Value for selection */\n @property()\n value = \"\";\n\n /** Whether the radio is selected */\n @property({ type: Boolean, reflect: true })\n checked = 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\", \"menuitemradio\");\n this.setAttribute(\"tabindex\", \"-1\");\n this.updateAriaChecked();\n\n this.addEventListener(\"click\", this.handleSelect);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleSelect);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n private handleSelect = (): void => {\n if (this.disabled || this.checked) return;\n\n // Emit internal event for radio group to handle\n emitEvent(this, \"ds:radio-select\", {\n detail: { value: this.value },\n bubbles: true,\n });\n\n // Also emit ds:select for menu to close\n emitEvent(this, \"ds:select\", {\n detail: { value: this.value },\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.handleSelect();\n }\n };\n\n private updateAriaChecked(): void {\n this.setAttribute(\"aria-checked\", String(this.checked));\n }\n\n override updated(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has(\"disabled\")) {\n this.setAttribute(\"aria-disabled\", String(this.disabled));\n }\n if (changedProperties.has(\"checked\")) {\n this.updateAriaChecked();\n }\n }\n\n override render() {\n return html`\n <span class=\"ds-dropdown-menu-radio-item__indicator\" aria-hidden=\"true\">\n ${this.checked ? \"●\" : \"○\"}\n </span>\n <slot></slot>\n `;\n }\n}\n\ndefine(\"ds-dropdown-menu-radio-item\", DsDropdownMenuRadioItem);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dropdown-menu-radio-item\": DsDropdownMenuRadioItem;\n }\n}\n","/**\n * DropdownMenu component - action menu with items, separators, and submenus.\n *\n * Implements WAI-ARIA Menu Button pattern with full keyboard navigation.\n *\n * @element ds-dropdown-menu\n *\n * @slot trigger - Button that opens the menu\n * @slot - Menu content (ds-dropdown-menu-content)\n *\n * @fires ds:open - Fired when menu opens\n * @fires ds:close - Fired when menu closes\n * @fires ds:select - Fired when an item is selected\n *\n * @example\n * ```html\n * <ds-dropdown-menu>\n * <button slot=\"trigger\">Actions</button>\n * <ds-dropdown-menu-content>\n * <ds-dropdown-menu-label>Actions</ds-dropdown-menu-label>\n * <ds-dropdown-menu-item value=\"edit\">Edit</ds-dropdown-menu-item>\n * <ds-dropdown-menu-item value=\"copy\">Copy</ds-dropdown-menu-item>\n * <ds-dropdown-menu-separator></ds-dropdown-menu-separator>\n * <ds-dropdown-menu-item value=\"delete\" variant=\"destructive\">Delete</ds-dropdown-menu-item>\n * </ds-dropdown-menu-content>\n * </ds-dropdown-menu>\n * ```\n */\n\nimport {\n type MenuBehavior,\n type Placement,\n type Presence,\n createMenuBehavior,\n createPresence,\n prefersReducedMotion,\n} from \"@hypoth-ui/primitives-dom\";\nimport { html } from \"lit\";\nimport { property } 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 to ensure they're registered\nimport type { DsDropdownMenuContent } from \"./dropdown-menu-content.js\";\nimport \"./dropdown-menu-content.js\";\nimport \"./dropdown-menu-item.js\";\nimport \"./dropdown-menu-separator.js\";\nimport \"./dropdown-menu-label.js\";\nimport \"./dropdown-menu-checkbox-item.js\";\nimport \"./dropdown-menu-radio-group.js\";\nimport \"./dropdown-menu-radio-item.js\";\n\nexport class DsDropdownMenu extends DSElement {\n /** Whether the menu is open */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Placement relative to trigger */\n @property({ type: String, reflect: true })\n placement: Placement = \"bottom-start\";\n\n /** Offset distance from trigger in pixels */\n @property({ type: Number })\n offset = 4;\n\n /** Whether to flip placement when near viewport edge */\n @property({ type: Boolean })\n flip = true;\n\n /** Whether to animate open/close transitions */\n @property({ type: Boolean })\n animated = true;\n\n /** Modal behavior - blocks interaction outside menu */\n @property({ type: Boolean })\n modal = true;\n\n private menuBehavior: MenuBehavior | null = null;\n private presence: Presence | null = null;\n private focusFirstOnOpen: \"first\" | \"last\" | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Listen for trigger interactions\n this.addEventListener(\"click\", this.handleTriggerClick);\n this.addEventListener(\"keydown\", this.handleTriggerKeyDown);\n\n // Listen for item selection\n this.addEventListener(\"ds:select\", this.handleItemSelect);\n\n // Initialize menu behavior\n this.initMenuBehavior();\n\n // Setup after first render\n this.updateComplete.then(() => {\n this.setupTriggerAccessibility();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleTriggerClick);\n this.removeEventListener(\"keydown\", this.handleTriggerKeyDown);\n this.removeEventListener(\"ds:select\", this.handleItemSelect);\n this.cleanup();\n }\n\n /**\n * Initializes the menu behavior primitive.\n */\n private initMenuBehavior(): void {\n this.menuBehavior = createMenuBehavior({\n defaultOpen: this.open,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n loop: true,\n onOpenChange: (open) => {\n // Sync state when behavior changes (e.g., from escape or outside click)\n if (!open && this.open) {\n this.handleBehaviorClose();\n }\n },\n onSelect: (value) => {\n emitEvent(this, StandardEvents.SELECT, { detail: { value } });\n },\n });\n\n // Set trigger element if one exists\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n if (trigger) {\n this.menuBehavior.setTriggerElement(trigger);\n }\n }\n\n /**\n * Handles close triggered by the behavior (escape/outside click).\n */\n private handleBehaviorClose(): void {\n const content = this.querySelector(\"ds-dropdown-menu-content\") as DsDropdownMenuContent | null;\n\n if (this.animated && content && !prefersReducedMotion()) {\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n }\n\n /**\n * Opens the menu.\n */\n public show(): void {\n if (this.open) return;\n\n this.open = true;\n this.menuBehavior?.open(this.focusFirstOnOpen ?? \"first\");\n emitEvent(this, StandardEvents.OPEN);\n }\n\n /**\n * Closes the menu.\n */\n public close(): void {\n if (!this.open) return;\n\n const content = this.querySelector(\"ds-dropdown-menu-content\") as DsDropdownMenuContent | null;\n\n // Close the behavior\n this.menuBehavior?.close();\n\n if (this.animated && content && !prefersReducedMotion()) {\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n }\n\n private completeClose(): void {\n this.presence?.destroy();\n this.presence = null;\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n\n public toggle(): void {\n if (this.open) {\n this.close();\n } else {\n this.show();\n }\n }\n\n private handleTriggerClick = (event: Event): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (trigger && this.contains(trigger)) {\n event.preventDefault();\n this.menuBehavior?.setTriggerElement(trigger as HTMLElement);\n this.focusFirstOnOpen = \"first\";\n this.toggle();\n }\n };\n\n private handleTriggerKeyDown = (event: KeyboardEvent): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (!trigger || !this.contains(trigger)) return;\n\n this.menuBehavior?.setTriggerElement(trigger as HTMLElement);\n\n switch (event.key) {\n case \"Enter\":\n case \" \":\n event.preventDefault();\n this.focusFirstOnOpen = \"first\";\n this.toggle();\n break;\n case \"ArrowDown\":\n event.preventDefault();\n this.focusFirstOnOpen = \"first\";\n if (!this.open) this.show();\n break;\n case \"ArrowUp\":\n event.preventDefault();\n this.focusFirstOnOpen = \"last\";\n if (!this.open) this.show();\n break;\n }\n };\n\n private handleItemSelect = (): void => {\n this.close();\n };\n\n private setupTriggerAccessibility(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]');\n const content = this.querySelector(\"ds-dropdown-menu-content\");\n\n if (trigger && content && this.menuBehavior) {\n this.menuBehavior.setTriggerElement(trigger as HTMLElement);\n\n // Apply trigger props from behavior\n const triggerProps = this.menuBehavior.getTriggerProps();\n trigger.setAttribute(\"aria-haspopup\", triggerProps[\"aria-haspopup\"]);\n trigger.setAttribute(\"aria-expanded\", triggerProps[\"aria-expanded\"]);\n trigger.setAttribute(\"aria-controls\", triggerProps[\"aria-controls\"]);\n }\n }\n\n private updateTriggerAria(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]');\n if (trigger && this.menuBehavior) {\n const triggerProps = this.menuBehavior.getTriggerProps();\n trigger.setAttribute(\"aria-expanded\", triggerProps[\"aria-expanded\"]);\n }\n }\n\n private registerMenuItems(): void {\n const content = this.querySelector(\"ds-dropdown-menu-content\");\n if (!content || !this.menuBehavior) return;\n\n const items = content.querySelectorAll<HTMLElement>(\n \"ds-dropdown-menu-item:not([disabled]), ds-dropdown-menu-checkbox-item:not([disabled]), ds-dropdown-menu-radio-item:not([disabled])\"\n );\n\n items.forEach((item) => {\n this.menuBehavior?.registerItem(item);\n });\n }\n\n private cleanup(): void {\n this.menuBehavior?.destroy();\n this.menuBehavior = null;\n this.presence?.destroy();\n this.presence = null;\n }\n\n override async updated(changedProperties: Map<string, unknown>): Promise<void> {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"open\")) {\n this.updateTriggerAria();\n\n const content = this.querySelector(\n \"ds-dropdown-menu-content\"\n ) as DsDropdownMenuContent | null;\n\n if (this.open) {\n content?.removeAttribute(\"hidden\");\n\n if (content) {\n content.dataState = \"open\";\n }\n\n await this.updateComplete;\n\n // Register menu items with behavior\n this.registerMenuItems();\n\n // Set content element (activates positioning, dismiss layer, roving focus, type-ahead)\n this.menuBehavior?.setContentElement(content);\n } else {\n content?.setAttribute(\"hidden\", \"\");\n\n // Clear content element\n this.menuBehavior?.setContentElement(null);\n }\n }\n\n // Re-create behavior if placement/offset/flip change\n if (\n changedProperties.has(\"placement\") ||\n changedProperties.has(\"offset\") ||\n changedProperties.has(\"flip\")\n ) {\n const wasOpen = this.menuBehavior?.state.open;\n this.menuBehavior?.destroy();\n this.initMenuBehavior();\n if (wasOpen) {\n this.menuBehavior?.open();\n const content = this.querySelector(\"ds-dropdown-menu-content\") as HTMLElement | null;\n this.registerMenuItems();\n this.menuBehavior?.setContentElement(content);\n }\n }\n }\n\n override render() {\n return html`\n <slot name=\"trigger\"></slot>\n <slot></slot>\n `;\n }\n}\n\ndefine(\"ds-dropdown-menu\", DsDropdownMenu);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-dropdown-menu\": DsDropdownMenu;\n }\n}\n","/**\n * ContextMenuContent component - container for context menu items.\n *\n * @element ds-context-menu-content\n *\n * @slot - Menu items\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 DsContextMenuContent extends DSElement {\n /** Data state for animations */\n @property({ attribute: \"data-state\", reflect: true })\n dataState: \"open\" | \"closed\" = \"closed\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.id) {\n this.id = `context-menu-content-${crypto.randomUUID().slice(0, 8)}`;\n }\n\n this.setAttribute(\"role\", \"menu\");\n this.setAttribute(\"hidden\", \"\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-context-menu-content\", DsContextMenuContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-context-menu-content\": DsContextMenuContent;\n }\n}\n","/**\n * ContextMenuItem component - selectable context menu item.\n *\n * @element ds-context-menu-item\n *\n * @slot - Item content\n *\n * @fires ds:select - Fired when item is selected\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 type ContextMenuItemVariant = \"default\" | \"destructive\";\n\nexport class DsContextMenuItem extends DSElement {\n /** Value for selection events */\n @property()\n value = \"\";\n\n /** Visual variant */\n @property({ reflect: true })\n variant: ContextMenuItemVariant = \"default\";\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\", \"-1\");\n\n this.addEventListener(\"click\", this.handleSelect);\n this.addEventListener(\"keydown\", this.handleKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.handleSelect);\n this.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n\n private handleSelect = (): void => {\n if (this.disabled) return;\n\n emitEvent(this, \"ds:select\", {\n detail: { value: this.value },\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.handleSelect();\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 }\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-context-menu-item\", DsContextMenuItem);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-context-menu-item\": DsContextMenuItem;\n }\n}\n","/**\n * ContextMenuSeparator component - visual divider between menu items.\n *\n * @element ds-context-menu-separator\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsContextMenuSeparator extends DSElement {\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute(\"role\", \"separator\");\n }\n\n override render() {\n return html``;\n }\n}\n\ndefine(\"ds-context-menu-separator\", DsContextMenuSeparator);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-context-menu-separator\": DsContextMenuSeparator;\n }\n}\n","/**\n * ContextMenuLabel component - non-interactive label for menu sections.\n *\n * @element ds-context-menu-label\n *\n * @slot - Label content\n */\n\nimport { html } from \"lit\";\nimport { DSElement } from \"../../base/ds-element.js\";\nimport { define } from \"../../registry/define.js\";\n\nexport class DsContextMenuLabel 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-context-menu-label\", DsContextMenuLabel);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-context-menu-label\": DsContextMenuLabel;\n }\n}\n","/**\n * ContextMenu component - right-click context menu.\n *\n * Opens at pointer position on right-click or long-press.\n *\n * @element ds-context-menu\n *\n * @slot trigger - Area that triggers the context menu\n * @slot - Menu content (ds-context-menu-content)\n *\n * @fires ds:open - Fired when menu opens\n * @fires ds:close - Fired when menu closes\n * @fires ds:select - Fired when an item is selected\n *\n * @example\n * ```html\n * <ds-context-menu>\n * <div slot=\"trigger\">Right-click me</div>\n * <ds-context-menu-content>\n * <ds-context-menu-item value=\"copy\">Copy</ds-context-menu-item>\n * <ds-context-menu-item value=\"paste\">Paste</ds-context-menu-item>\n * </ds-context-menu-content>\n * </ds-context-menu>\n * ```\n */\n\nimport {\n type MenuBehavior,\n type Presence,\n createMenuBehavior,\n createPresence,\n prefersReducedMotion,\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 { StandardEvents, emitEvent } from \"../../events/emit.js\";\nimport { define } from \"../../registry/define.js\";\n\n// Import child components to ensure they're registered\nimport type { DsContextMenuContent } from \"./context-menu-content.js\";\nimport \"./context-menu-content.js\";\nimport \"./context-menu-item.js\";\nimport \"./context-menu-separator.js\";\nimport \"./context-menu-label.js\";\n\nexport class DsContextMenu extends DSElement {\n /** Whether the menu is open */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Whether to animate open/close transitions */\n @property({ type: Boolean })\n animated = true;\n\n /** Position X for menu */\n @state()\n private pointerX = 0;\n\n /** Position Y for menu */\n @state()\n private pointerY = 0;\n\n private menuBehavior: MenuBehavior | null = null;\n private presence: Presence | null = null;\n private longPressTimer: ReturnType<typeof setTimeout> | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Listen for context menu triggers\n this.addEventListener(\"contextmenu\", this.handleContextMenu);\n\n // Listen for long-press on touch devices\n this.addEventListener(\"touchstart\", this.handleTouchStart, { passive: true });\n this.addEventListener(\"touchend\", this.handleTouchEnd, { passive: true });\n this.addEventListener(\"touchmove\", this.handleTouchMove, { passive: true });\n\n // Listen for item selection\n this.addEventListener(\"ds:select\", this.handleItemSelect);\n\n // Initialize menu behavior\n this.initMenuBehavior();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"contextmenu\", this.handleContextMenu);\n this.removeEventListener(\"touchstart\", this.handleTouchStart);\n this.removeEventListener(\"touchend\", this.handleTouchEnd);\n this.removeEventListener(\"touchmove\", this.handleTouchMove);\n this.removeEventListener(\"ds:select\", this.handleItemSelect);\n this.cleanup();\n }\n\n /**\n * Initializes the menu behavior primitive.\n */\n private initMenuBehavior(): void {\n this.menuBehavior = createMenuBehavior({\n defaultOpen: this.open,\n loop: true,\n onOpenChange: (open) => {\n // Sync state when behavior changes (e.g., from escape or outside click)\n if (!open && this.open) {\n this.handleBehaviorClose();\n }\n },\n onSelect: (value) => {\n emitEvent(this, StandardEvents.SELECT, { detail: { value } });\n },\n });\n }\n\n /**\n * Handles close triggered by the behavior (escape/outside click).\n */\n private handleBehaviorClose(): void {\n const content = this.querySelector(\"ds-context-menu-content\") as DsContextMenuContent | null;\n\n if (this.animated && content && !prefersReducedMotion()) {\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n }\n\n /**\n * Opens the menu at the specified position.\n */\n public show(x: number, y: number): void {\n if (this.open) {\n this.close();\n }\n\n this.pointerX = x;\n this.pointerY = y;\n this.open = true;\n this.menuBehavior?.open(\"first\");\n emitEvent(this, StandardEvents.OPEN);\n }\n\n /**\n * Closes the menu.\n */\n public close(): void {\n if (!this.open) return;\n\n const content = this.querySelector(\"ds-context-menu-content\") as DsContextMenuContent | null;\n\n // Close the behavior\n this.menuBehavior?.close();\n\n if (this.animated && content && !prefersReducedMotion()) {\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n }\n\n private completeClose(): void {\n this.presence?.destroy();\n this.presence = null;\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n\n private handleContextMenu = (event: MouseEvent): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (trigger && this.contains(trigger)) {\n event.preventDefault();\n this.show(event.clientX, event.clientY);\n }\n };\n\n private handleTouchStart = (event: TouchEvent): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (trigger && this.contains(trigger)) {\n const touch = event.touches[0];\n if (touch) {\n // Start long-press timer (500ms)\n this.longPressTimer = setTimeout(() => {\n this.show(touch.clientX, touch.clientY);\n }, 500);\n }\n }\n };\n\n private handleTouchEnd = (): void => {\n if (this.longPressTimer) {\n clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n };\n\n private handleTouchMove = (): void => {\n // Cancel long-press if finger moves\n if (this.longPressTimer) {\n clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n };\n\n private handleItemSelect = (): void => {\n this.close();\n };\n\n private positionContent(): void {\n const content = this.querySelector(\"ds-context-menu-content\") as HTMLElement | null;\n if (!content) return;\n\n // Position at pointer with viewport boundary checking\n let x = this.pointerX;\n let y = this.pointerY;\n\n const rect = content.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Adjust if would overflow right\n if (x + rect.width > viewportWidth) {\n x = viewportWidth - rect.width - 8;\n }\n\n // Adjust if would overflow bottom\n if (y + rect.height > viewportHeight) {\n y = viewportHeight - rect.height - 8;\n }\n\n // Ensure not negative\n x = Math.max(8, x);\n y = Math.max(8, y);\n\n content.style.left = `${x}px`;\n content.style.top = `${y}px`;\n }\n\n private registerMenuItems(): void {\n const content = this.querySelector(\"ds-context-menu-content\");\n if (!content || !this.menuBehavior) return;\n\n const items = content.querySelectorAll<HTMLElement>(\"ds-context-menu-item:not([disabled])\");\n\n items.forEach((item) => {\n this.menuBehavior?.registerItem(item);\n });\n }\n\n private cleanup(): void {\n this.menuBehavior?.destroy();\n this.menuBehavior = null;\n this.presence?.destroy();\n this.presence = null;\n\n if (this.longPressTimer) {\n clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n }\n\n override async updated(changedProperties: Map<string, unknown>): Promise<void> {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"open\")) {\n const content = this.querySelector(\"ds-context-menu-content\") as DsContextMenuContent | null;\n\n if (this.open) {\n content?.removeAttribute(\"hidden\");\n\n if (content) {\n content.dataState = \"open\";\n }\n\n await this.updateComplete;\n\n // Position content at pointer location\n this.positionContent();\n\n // Register menu items with behavior\n this.registerMenuItems();\n\n // Set content element (activates dismiss layer, roving focus, type-ahead)\n // Note: Context menu handles positioning manually, not via anchor\n this.menuBehavior?.setContentElement(content);\n } else {\n content?.setAttribute(\"hidden\", \"\");\n\n // Clear content element\n this.menuBehavior?.setContentElement(null);\n }\n }\n }\n\n override render() {\n return html`\n <slot name=\"trigger\"></slot>\n <slot></slot>\n `;\n }\n}\n\ndefine(\"ds-context-menu\", DsContextMenu);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-context-menu\": DsContextMenu;\n }\n}\n","/**\n * HoverCardContent component - container for hover card content.\n *\n * @element ds-hover-card-content\n *\n * @slot - Content to display in the hover card\n *\n * @attr {string} data-state - Animation state (\"open\" or \"closed\")\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 type HoverCardContentState = \"open\" | \"closed\";\n\nexport class DsHoverCardContent extends DSElement {\n /** Unique ID for ARIA association */\n @property({ type: String, reflect: true })\n override id = \"\";\n\n /** Animation state (open or closed) - set by parent */\n @property({ type: String, reflect: true, attribute: \"data-state\" })\n dataState: HoverCardContentState = \"closed\";\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Generate ID if not set\n if (!this.id) {\n this.id = `hover-card-content-${crypto.randomUUID().slice(0, 8)}`;\n }\n\n // Hidden by default (parent controls visibility)\n this.setAttribute(\"hidden\", \"\");\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n\ndefine(\"ds-hover-card-content\", DsHoverCardContent);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-hover-card-content\": DsHoverCardContent;\n }\n}\n","/**\n * HoverCard component - rich preview card that appears on hover.\n *\n * Opens on mouseenter/focus with configurable delay, stays open when\n * pointer moves to the card content.\n *\n * @element ds-hover-card\n *\n * @slot trigger - Element that triggers the hover card\n * @slot - Hover card content (ds-hover-card-content)\n *\n * @fires ds:open - Fired when hover card opens\n * @fires ds:close - Fired when hover card closes\n *\n * @example\n * ```html\n * <ds-hover-card>\n * <a slot=\"trigger\" href=\"/user/123\">@johndoe</a>\n * <ds-hover-card-content>\n * <img src=\"avatar.jpg\" alt=\"\">\n * <h3>John Doe</h3>\n * <p>Software Engineer</p>\n * </ds-hover-card-content>\n * </ds-hover-card>\n * ```\n */\n\nimport {\n type AnchorPosition,\n type DismissableLayer,\n type Placement,\n type Presence,\n createAnchorPosition,\n createDismissableLayer,\n createPresence,\n prefersReducedMotion,\n} from \"@hypoth-ui/primitives-dom\";\nimport { html } from \"lit\";\nimport { property } 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 component to ensure it's registered\nimport type { DsHoverCardContent } from \"./hover-card-content.js\";\nimport \"./hover-card-content.js\";\n\nexport class DsHoverCard extends DSElement {\n /** Whether the hover card is open */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Placement relative to trigger */\n @property({ type: String, reflect: true })\n placement: Placement = \"bottom\";\n\n /** Offset distance from trigger in pixels */\n @property({ type: Number })\n offset = 8;\n\n /** Whether to flip placement when near viewport edge */\n @property({ type: Boolean })\n flip = true;\n\n /** Delay in ms before showing on hover */\n @property({ type: Number, attribute: \"open-delay\" })\n openDelay = 700;\n\n /** Delay in ms before hiding after hover leaves */\n @property({ type: Number, attribute: \"close-delay\" })\n closeDelay = 300;\n\n /** Whether to animate open/close transitions */\n @property({ type: Boolean })\n animated = true;\n\n private anchorPosition: AnchorPosition | null = null;\n private dismissLayer: DismissableLayer | null = null;\n private presence: Presence | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private scrollHandler: (() => void) | null = null;\n private openTimer: ReturnType<typeof setTimeout> | null = null;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private isHoveringTrigger = false;\n private isHoveringContent = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Listen for hover/focus on trigger\n this.addEventListener(\"mouseenter\", this.handleTriggerMouseEnter, true);\n this.addEventListener(\"mouseleave\", this.handleTriggerMouseLeave, true);\n this.addEventListener(\"focusin\", this.handleFocusIn);\n this.addEventListener(\"focusout\", this.handleFocusOut);\n\n // Setup after first render\n this.updateComplete.then(() => {\n this.setupTriggerAccessibility();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(\"mouseenter\", this.handleTriggerMouseEnter, true);\n this.removeEventListener(\"mouseleave\", this.handleTriggerMouseLeave, true);\n this.removeEventListener(\"focusin\", this.handleFocusIn);\n this.removeEventListener(\"focusout\", this.handleFocusOut);\n this.clearTimers();\n this.cleanup();\n }\n\n /**\n * Opens the hover card.\n */\n public show(): void {\n if (this.open) return;\n\n this.clearTimers();\n this.open = true;\n emitEvent(this, StandardEvents.OPEN);\n }\n\n /**\n * Closes the hover card.\n */\n public close(): void {\n if (!this.open) return;\n\n this.clearTimers();\n\n const content = this.querySelector(\"ds-hover-card-content\") as DsHoverCardContent | null;\n\n if (this.animated && content && !prefersReducedMotion()) {\n this.dismissLayer?.deactivate();\n this.dismissLayer = null;\n\n this.presence = createPresence({\n onExitComplete: () => {\n this.completeClose();\n },\n });\n this.presence.hide(content);\n } else {\n this.cleanup();\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\n }\n }\n\n private completeClose(): void {\n this.cleanup();\n this.open = false;\n emitEvent(this, StandardEvents.CLOSE);\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 handleTriggerMouseEnter = (event: MouseEvent): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n const content = target.closest(\"ds-hover-card-content\");\n\n if (trigger && this.contains(trigger)) {\n this.isHoveringTrigger = true;\n this.scheduleOpen();\n } else if (content && this.contains(content)) {\n this.isHoveringContent = true;\n this.cancelClose();\n }\n };\n\n private handleTriggerMouseLeave = (event: MouseEvent): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n const content = target.closest(\"ds-hover-card-content\");\n\n if (trigger && this.contains(trigger)) {\n this.isHoveringTrigger = false;\n this.scheduleClose();\n } else if (content && this.contains(content)) {\n this.isHoveringContent = false;\n this.scheduleClose();\n }\n };\n\n private handleFocusIn = (event: FocusEvent): void => {\n const target = event.target as HTMLElement;\n const trigger = target.closest('[slot=\"trigger\"]');\n\n if (trigger && this.contains(trigger)) {\n this.clearTimers();\n this.show();\n }\n };\n\n private handleFocusOut = (event: FocusEvent): void => {\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n // Check if focus is moving within the hover card\n if (relatedTarget && this.contains(relatedTarget)) {\n return;\n }\n\n // Focus left the hover card entirely\n this.scheduleClose();\n };\n\n private scheduleOpen(): void {\n this.cancelClose();\n\n if (this.open) return;\n\n this.openTimer = setTimeout(() => {\n this.show();\n }, this.openDelay);\n }\n\n private scheduleClose(): void {\n this.cancelOpen();\n\n // Don't close if still hovering trigger or content\n if (this.isHoveringTrigger || this.isHoveringContent) {\n return;\n }\n\n if (!this.open) return;\n\n this.closeTimer = setTimeout(() => {\n this.close();\n }, this.closeDelay);\n }\n\n private cancelOpen(): void {\n if (this.openTimer) {\n clearTimeout(this.openTimer);\n this.openTimer = null;\n }\n }\n\n private cancelClose(): void {\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private handleDismiss = (): void => {\n this.close();\n };\n\n private setupTriggerAccessibility(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]');\n const content = this.querySelector(\"ds-hover-card-content\");\n\n if (trigger && content) {\n trigger.setAttribute(\"aria-haspopup\", \"true\");\n trigger.setAttribute(\"aria-expanded\", String(this.open));\n if (content.id) {\n trigger.setAttribute(\"aria-controls\", content.id);\n }\n }\n }\n\n private updateTriggerAria(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]');\n if (trigger) {\n trigger.setAttribute(\"aria-expanded\", String(this.open));\n }\n }\n\n private setupPositioning(): void {\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n const content = this.querySelector(\"ds-hover-card-content\") as HTMLElement | null;\n\n if (!trigger || !content) return;\n\n this.anchorPosition = createAnchorPosition({\n anchor: trigger,\n floating: content,\n placement: this.placement,\n offset: this.offset,\n flip: this.flip,\n onPositionChange: (pos) => {\n content.setAttribute(\"data-placement\", pos.placement);\n },\n });\n\n this.resizeObserver = new ResizeObserver(() => {\n this.anchorPosition?.update();\n });\n this.resizeObserver.observe(trigger);\n this.resizeObserver.observe(content);\n\n this.scrollHandler = () => {\n this.anchorPosition?.update();\n };\n window.addEventListener(\"scroll\", this.scrollHandler, { passive: true });\n window.addEventListener(\"resize\", this.scrollHandler, { passive: true });\n }\n\n private setupDismissLayer(): void {\n const content = this.querySelector(\"ds-hover-card-content\") as HTMLElement | null;\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n\n if (!content) return;\n\n this.dismissLayer = createDismissableLayer({\n container: content,\n excludeElements: trigger ? [trigger] : [],\n onDismiss: this.handleDismiss,\n closeOnEscape: true,\n closeOnOutsideClick: false, // Non-modal, only close on escape\n });\n this.dismissLayer.activate();\n }\n\n private cleanup(): void {\n this.anchorPosition?.destroy();\n this.anchorPosition = null;\n this.dismissLayer?.deactivate();\n this.dismissLayer = null;\n this.presence?.destroy();\n this.presence = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n\n if (this.scrollHandler) {\n window.removeEventListener(\"scroll\", this.scrollHandler);\n window.removeEventListener(\"resize\", this.scrollHandler);\n this.scrollHandler = null;\n }\n }\n\n override async updated(changedProperties: Map<string, unknown>): Promise<void> {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"open\")) {\n this.updateTriggerAria();\n\n const content = this.querySelector(\"ds-hover-card-content\") as DsHoverCardContent | null;\n\n if (this.open) {\n content?.removeAttribute(\"hidden\");\n\n if (content) {\n content.dataState = \"open\";\n }\n\n await this.updateComplete;\n\n this.setupPositioning();\n this.setupDismissLayer();\n } else {\n content?.setAttribute(\"hidden\", \"\");\n }\n }\n }\n\n override render() {\n return html`\n <slot name=\"trigger\"></slot>\n <slot></slot>\n `;\n }\n}\n\ndefine(\"ds-hover-card\", DsHoverCard);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ds-hover-card\": DsHoverCard;\n }\n}\n"],"mappings":"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","names":["html","html","html","nothing","state","nothing","html","state","html","property","state","html","property","state","html","property","html","property","createPresence","prefersReducedMotion","html","property","prefersReducedMotion","createPresence","html","property","html","property","html","property","createAnchorPosition","createPresence","prefersReducedMotion","html","property","prefersReducedMotion","createPresence","createAnchorPosition","html","property","html","property","html","property","html","property","html","property","createAnchorPosition","createDismissableLayer","createPresence","prefersReducedMotion","html","property","prefersReducedMotion","createPresence","createAnchorPosition","createDismissableLayer","html","property","html","property","html","property","html","html","html","html","html","html","html","html","html","html","html","html","createDialogBehavior","createPresence","prefersReducedMotion","html","property","state","createDialogBehavior","prefersReducedMotion","createPresence","html","property","state","html","html","html","property","html","property","html","html","html","html","html","html","html","html","html","html","html","html","createDialogBehavior","createPresence","prefersReducedMotion","html","property","state","createDialogBehavior","prefersReducedMotion","createPresence","html","property","state","html","property","state","html","property","state","html","html","html","html","html","html","html","html","createDialogBehavior","createPresence","prefersReducedMotion","html","property","state","createDialogBehavior","prefersReducedMotion","createPresence","html","property","state","html","property","html","property","html","property","html","property","html","html","html","html","html","property","html","property","html","property","html","property","html","property","html","property","createPresence","prefersReducedMotion","html","property","prefersReducedMotion","createPresence","html","property","html","property","html","property","html","property","html","property","html","html","html","html","createMenuBehavior","createPresence","prefersReducedMotion","html","property","state","createMenuBehavior","prefersReducedMotion","createPresence","html","property","state","html","property","html","property","createAnchorPosition","createDismissableLayer","createPresence","prefersReducedMotion","html","property","prefersReducedMotion","createPresence","createAnchorPosition","createDismissableLayer","html","property"]}