@agent-ui-kit/web-components 0.0.15 → 0.0.17
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.
- package/dist/agent-ui.css +1 -1
- package/dist/api.colors.json +2 -2
- package/dist/api.colors.yaml +2 -2
- package/dist/api.components.json +1700 -361
- package/dist/api.tokens.json +3 -3
- package/dist/api.tokens.yaml +3 -3
- package/dist/blocks/action-toolbar/action-toolbar.d.ts +0 -0
- package/dist/blocks/agent-artifact-card/agent-artifact-card.d.ts +0 -0
- package/dist/blocks/agent-chat-response/agent-chat-response.d.ts +0 -0
- package/dist/blocks/agent-code-result/agent-code-result.d.ts +0 -0
- package/dist/blocks/agent-context-panel/agent-context-panel.d.ts +0 -0
- package/dist/blocks/agent-feedback-controls/agent-feedback-controls.d.ts +0 -0
- package/dist/blocks/agent-follow-up-chips/agent-follow-up-chips.d.ts +0 -0
- package/dist/blocks/agent-model-selector/agent-model-selector.d.ts +0 -0
- package/dist/blocks/agent-prompt-input/agent-prompt-input.d.ts +0 -0
- package/dist/blocks/agent-streaming-message/agent-streaming-message.d.ts +0 -0
- package/dist/blocks/agent-suggestion-card/agent-suggestion-card.d.ts +0 -0
- package/dist/blocks/agent-task-card/agent-task-card.d.ts +0 -0
- package/dist/blocks/agent-thinking-state/agent-thinking-state.d.ts +0 -0
- package/dist/blocks/agent-tool-use-card/agent-tool-use-card.d.ts +0 -0
- package/dist/blocks/auth-card/auth-card.d.ts +0 -0
- package/dist/blocks/commerce-pricing-table/commerce-pricing-table.d.ts +0 -0
- package/dist/blocks/comms-chat-thread/comms-chat-thread.d.ts +0 -0
- package/dist/blocks/comms-notification-list/comms-notification-list.d.ts +0 -0
- package/dist/blocks/content-article-card/content-article-card.d.ts +0 -0
- package/dist/blocks/dashboard-kpi-grid/dashboard-kpi-grid.d.ts +0 -0
- package/dist/blocks/data-activity-log/data-activity-log.d.ts +0 -0
- package/dist/blocks/data-metric-card/data-metric-card.d.ts +0 -0
- package/dist/blocks/data-table/data-table.d.ts +0 -0
- package/dist/blocks/data-timeline/data-timeline.d.ts +0 -0
- package/dist/blocks/feedback-alert-banner/feedback-alert-banner.d.ts +0 -0
- package/dist/blocks/feedback-empty-state/feedback-empty-state.d.ts +0 -0
- package/dist/blocks/feedback-progress-stepper/feedback-progress-stepper.d.ts +0 -0
- package/dist/blocks/form-settings-section/form-settings-section.d.ts +0 -0
- package/dist/blocks/game-battleship/game-battleship.d.ts +0 -0
- package/dist/blocks/game-chess/game-chess.d.ts +0 -0
- package/dist/blocks/game-connect-four/game-connect-four.d.ts +0 -0
- package/dist/blocks/game-tic-tac-toe/game-tic-tac-toe.d.ts +0 -0
- package/dist/blocks/list-kanban-board/list-kanban-board.d.ts +0 -0
- package/dist/blocks/media-image-gallery/media-image-gallery.d.ts +0 -0
- package/dist/blocks/nav-sidebar/nav-sidebar.d.ts +0 -0
- package/dist/blocks/onboard-stepper/onboard-stepper.d.ts +0 -0
- package/dist/blocks/overlay-confirmation-modal/overlay-confirmation-modal.d.ts +0 -0
- package/dist/blocks/overlay-dropdown-menu/overlay-dropdown-menu.d.ts +0 -0
- package/dist/blocks/user-profile-card/user-profile-card.d.ts +0 -0
- package/dist/blocks/user-team-list/user-team-list.d.ts +0 -0
- package/dist/chunks/{agent-BF_R_HJk.js → agent-XMhz_6OA.js} +27 -22
- package/dist/chunks/{agent-BF_R_HJk.js.map → agent-XMhz_6OA.js.map} +1 -1
- package/dist/chunks/{meter-Dju8ik6C.js → form-oekEhwja.js} +402 -188
- package/dist/chunks/form-oekEhwja.js.map +1 -0
- package/dist/components/agent.js +1 -1
- package/dist/components/checkbox-group/checkbox-group.d.ts +14 -0
- package/dist/components/checkbox-group/index.d.ts +1 -0
- package/dist/components/editor.js +1 -1
- package/dist/components/form/form.d.ts +12 -0
- package/dist/components/form/index.d.ts +1 -0
- package/dist/components/graph.js +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/noodles/noodle-controller.d.ts +1 -1
- package/dist/components.js +89 -87
- package/dist/docs/blocks/action-toolbar.yaml +73 -0
- package/dist/docs/blocks/agent-artifact-card.yaml +67 -0
- package/dist/docs/blocks/agent-chat-response.yaml +65 -0
- package/dist/docs/blocks/agent-chat.yaml +33 -25
- package/dist/docs/blocks/agent-code-result.yaml +41 -0
- package/dist/docs/blocks/agent-context-panel.yaml +96 -0
- package/dist/docs/blocks/agent-feedback-controls.yaml +101 -0
- package/dist/docs/blocks/agent-follow-up-chips.yaml +37 -0
- package/dist/docs/blocks/agent-model-selector.yaml +83 -0
- package/dist/docs/blocks/agent-prompt-input.yaml +49 -0
- package/dist/docs/blocks/agent-streaming-message.yaml +46 -0
- package/dist/docs/blocks/agent-suggestion-card.yaml +68 -0
- package/dist/docs/blocks/agent-task-card.yaml +112 -0
- package/dist/docs/blocks/agent-thinking-state.yaml +56 -0
- package/dist/docs/blocks/agent-tool-use-card.yaml +142 -0
- package/dist/docs/blocks/announcement-card.yaml +14 -10
- package/dist/docs/blocks/auth-card.yaml +74 -0
- package/dist/docs/blocks/bpm-process.yaml +216 -4
- package/dist/docs/blocks/chart-activity.yaml +12 -10
- package/dist/docs/blocks/chart-card.yaml +14 -11
- package/dist/docs/blocks/chart-donut.yaml +27 -23
- package/dist/docs/blocks/chart-grouped.yaml +14 -11
- package/dist/docs/blocks/chart-horizontal.yaml +13 -10
- package/dist/docs/blocks/chart-interactive.yaml +20 -17
- package/dist/docs/blocks/chart-labeled.yaml +14 -11
- package/dist/docs/blocks/checkout-form.yaml +26 -16
- package/dist/docs/blocks/clinical-trial.yaml +180 -4
- package/dist/docs/blocks/commerce-pricing-table.yaml +142 -0
- package/dist/docs/blocks/comms-chat-thread.yaml +88 -0
- package/dist/docs/blocks/comms-notification-list.yaml +88 -0
- package/dist/docs/blocks/content-article-card.yaml +47 -0
- package/dist/docs/blocks/contributors.yaml +17 -11
- package/dist/docs/blocks/cyber-threat.yaml +158 -4
- package/dist/docs/blocks/dashboard-kpi-grid.yaml +72 -0
- package/dist/docs/blocks/dashboard-layout.yaml +24 -18
- package/dist/docs/blocks/data-activity-log.yaml +99 -0
- package/dist/docs/blocks/data-eng-dag.yaml +222 -6
- package/dist/docs/blocks/data-metric-card.yaml +50 -0
- package/dist/docs/blocks/data-table.yaml +106 -0
- package/dist/docs/blocks/data-timeline.yaml +103 -0
- package/dist/docs/blocks/date-picker.yaml +11 -10
- package/dist/docs/blocks/ddx-workflow.yaml +202 -6
- package/dist/docs/blocks/empty-state.yaml +8 -11
- package/dist/docs/blocks/env-variables.yaml +29 -20
- package/dist/docs/blocks/feature-upgrade.yaml +25 -18
- package/dist/docs/blocks/feedback-alert-banner.yaml +42 -0
- package/dist/docs/blocks/feedback-empty-state.yaml +18 -0
- package/dist/docs/blocks/feedback-progress-stepper.yaml +82 -0
- package/dist/docs/blocks/financial-risk.yaml +161 -4
- package/dist/docs/blocks/flow-editor.yaml +27 -18
- package/dist/docs/blocks/form-settings-section.yaml +129 -0
- package/dist/docs/blocks/game-battleship.yaml +184 -0
- package/dist/docs/blocks/game-chess.yaml +83 -0
- package/dist/docs/blocks/game-connect-four.yaml +80 -0
- package/dist/docs/blocks/game-tic-tac-toe.yaml +51 -0
- package/dist/docs/blocks/gen-ai-pipeline.yaml +232 -5
- package/dist/docs/blocks/issue-assign.yaml +25 -14
- package/dist/docs/blocks/keyboard-shortcuts.yaml +14 -9
- package/dist/docs/blocks/list-kanban-board.yaml +158 -0
- package/dist/docs/blocks/login-branded.yaml +62 -23
- package/dist/docs/blocks/login-email-only.yaml +14 -13
- package/dist/docs/blocks/login-form.yaml +17 -11
- package/dist/docs/blocks/login-simple.yaml +18 -12
- package/dist/docs/blocks/login-social.yaml +21 -14
- package/dist/docs/blocks/login-two-column.yaml +37 -17
- package/dist/docs/blocks/marketing-automation.yaml +209 -4
- package/dist/docs/blocks/media-image-gallery.yaml +39 -0
- package/dist/docs/blocks/member-list.yaml +23 -18
- package/dist/docs/blocks/ml-pipeline.yaml +163 -4
- package/dist/docs/blocks/nav-card.yaml +13 -11
- package/dist/docs/blocks/nav-sidebar.yaml +84 -0
- package/dist/docs/blocks/notification-list.yaml +18 -13
- package/dist/docs/blocks/onboard-stepper.yaml +111 -0
- package/dist/docs/blocks/oncology-pathway.yaml +227 -4
- package/dist/docs/blocks/overlay-confirmation-modal.yaml +60 -0
- package/dist/docs/blocks/overlay-dropdown-menu.yaml +72 -0
- package/dist/docs/blocks/pricing-card.yaml +20 -13
- package/dist/docs/blocks/processing-state.yaml +14 -11
- package/dist/docs/blocks/profile-card.yaml +16 -12
- package/dist/docs/blocks/saas-onboarding.yaml +222 -4
- package/dist/docs/blocks/settings-form.yaml +20 -11
- package/dist/docs/blocks/settings-panel.yaml +22 -22
- package/dist/docs/blocks/sidebar-nav.yaml +21 -15
- package/dist/docs/blocks/signup-form.yaml +17 -11
- package/dist/docs/blocks/stat-cards.yaml +12 -13
- package/dist/docs/blocks/status-card.yaml +20 -17
- package/dist/docs/blocks/suggested-labs.yaml +20 -13
- package/dist/docs/blocks/supply-chain.yaml +160 -4
- package/dist/docs/blocks/survey-card.yaml +21 -13
- package/dist/docs/blocks/tabbed-panel.yaml +21 -15
- package/dist/docs/blocks/team-empty.yaml +8 -9
- package/dist/docs/blocks/usage-billing.yaml +20 -16
- package/dist/docs/blocks/user-profile-card.yaml +52 -0
- package/dist/docs/blocks/user-team-list.yaml +116 -0
- package/dist/docs/components/agent-activity.yaml +27 -7
- package/dist/docs/components/agent-feed.yaml +2 -2
- package/dist/docs/components/agent-prompt.yaml +1 -1
- package/dist/docs/components/agent-seeds.yaml +1 -1
- package/dist/docs/components/breadcrumb.yaml +35 -8
- package/dist/docs/components/button.yaml +14 -2
- package/dist/docs/components/calendar-picker.yaml +3 -2
- package/dist/docs/components/chip.yaml +1 -1
- package/dist/docs/components/color-picker.yaml +33 -7
- package/dist/docs/components/color-slider.yaml +7 -7
- package/dist/docs/components/container.yaml +2 -1
- package/dist/docs/components/heading.yaml +4 -0
- package/dist/docs/components/index.yaml +11 -1
- package/dist/docs/components/input.yaml +10 -9
- package/dist/docs/components/meter.yaml +37 -14
- package/dist/docs/components/nav-item.yaml +7 -7
- package/dist/docs/components/stat.yaml +164 -0
- package/dist/docs/components/stepper.yaml +23 -23
- package/dist/docs/components/time-field.yaml +35 -2
- package/dist/element.js +1 -1
- package/dist/icons.js +137 -128
- package/dist/icons.js.map +1 -1
- package/dist/reactivity.js +1 -1
- package/dist/register.js +299 -297
- package/dist/register.js.map +1 -1
- package/dist/store.js +1 -1
- package/dist/traits.js +2 -2
- package/package.json +1 -1
- package/dist/chunks/meter-Dju8ik6C.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-oekEhwja.js","sources":["../../src/components/button/button.ts","../../src/components/input/input.ts","../../src/components/input/input-otp.ts","../../src/components/checkbox/checkbox.ts","../../src/components/switch/switch.ts","../../src/components/radio/radio.ts","../../src/components/radio/radio-group.ts","../../src/components/textarea/textarea.ts","../../src/components/container/container.ts","../../src/components/dialog/dialog.ts","../../src/components/drawer/drawer.ts","../../src/components/icon/icon.ts","../../src/components/tooltip/tooltip.ts","../../src/components/range/range.ts","../../src/components/gripper/gripper.ts","../../src/components/option/option.ts","../../src/components/optgroup/optgroup.ts","../../src/components/select/select.ts","../../src/components/toast/toast.ts","../../src/components/tab/tabs.ts","../../src/components/tab/tab.ts","../../src/components/tab/tab-panel.ts","../../src/components/accordion/accordion.ts","../../src/components/accordion/accordion-item.ts","../../src/components/breadcrumb/breadcrumb.ts","../../src/components/breadcrumb/breadcrumb-item.ts","../../src/components/segmented-control/segmented-control.ts","../../src/components/segmented-control/segment.ts","../../src/components/pagination/pagination.ts","../../src/components/command/command.ts","../../src/components/command/command-empty.ts","../../src/components/command/command-group.ts","../../src/components/command/command-input.ts","../../src/components/command/command-item.ts","../../src/components/command/command-list.ts","../../src/components/pane/panes.ts","../../src/components/pane/pane.ts","../../src/components/table/table.ts","../../src/components/table/table-body.ts","../../src/components/table/table-cell.ts","../../src/components/table/table-head.ts","../../src/components/table/table-header.ts","../../src/components/table/table-row.ts","../../src/components/tree/tree.ts","../../src/components/tree/tree-item.ts","../../src/components/feed/feed.ts","../../src/components/root/root.ts","../../src/components/calendar-picker/calendar-picker.ts","../../src/components/calendar-range-picker/calendar-range-picker.ts","../../src/components/app-shell/app-shell.ts","../../src/components/page/page.ts","../../src/components/page/page-main.ts","../../src/components/page/page-context.ts","../../src/components/sidebar/sidebar.ts","../../src/components/sidebar/sidebar-header.ts","../../src/components/sidebar/sidebar-content.ts","../../src/components/sidebar/sidebar-footer.ts","../../src/components/progress/progress.ts","../../src/components/code-block/code-block.ts","../../src/components/sparkline/sparkline.ts","../../src/components/chip/chip.ts","../../src/components/disclosure/disclosure.ts","../../src/components/avatar-group/avatar-group.ts","../../src/components/progress-circle/progress-circle.ts","../../src/components/disclosure-group/disclosure-group.ts","../../src/components/tag-group/tag-group.ts","../../src/components/color-picker/oklch-utils.ts","../../src/components/color-area/color-area.ts","../../src/components/color-slider/color-slider.ts","../../src/components/color-field/color-field.ts","../../src/components/time-field/time-field.ts","../../src/components/date-field/date-field.ts","../../src/components/context-menu/context-menu.ts","../../src/components/dropdown-menu/dropdown-menu.ts","../../src/components/hover-card/hover-card.ts","../../src/components/color-picker/color-picker.ts","../../src/components/file-upload/file-upload.ts","../../src/components/copy-button/copy-button.ts","../../src/components/stat/stat.ts","../../src/components/image/image.ts","../../src/components/carousel/carousel.ts","../../src/components/notification-center/notification-center.ts","../../src/components/empty-state/empty-state.ts","../../src/components/meter/meter.ts","../../src/components/checkbox-group/checkbox-group.ts","../../src/components/form/form.ts"],"sourcesContent":["// ── aui-button ───────────────────────────────────────────────\n//\n// Polymorphic action trigger.\n// Touches every API surface: variants, intents, sizes, density,\n// radius, slots (leading/trailing), hide-label, link mode, disabled,\n// loading, form association.\n//\n// This is intentionally the first real component — if the pattern\n// works here, it scales to every other component.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiButton extends AgentElement {\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n loading: { type: 'boolean', default: false },\n type: { type: 'enum', values: ['button', 'submit', 'reset'], default: 'button' },\n label: { type: 'string', default: '' },\n icon: { type: 'string', default: '' },\n 'icon-leading': { type: 'string', default: '' },\n 'icon-trailing': { type: 'string', default: '' },\n 'text-leading': { type: 'string', default: '' },\n 'text-trailing': { type: 'string', default: '' },\n href: { type: 'string', default: '' },\n }\n\n declare disabled: boolean\n declare loading: boolean\n declare type: 'button' | 'submit' | 'reset'\n declare label: string\n declare icon: string\n declare 'icon-leading': string\n declare 'icon-trailing': string\n declare 'text-leading': string\n declare 'text-trailing': string\n declare href: string\n\n #stampedLeading: HTMLElement | null = null\n #stampedLeadingText: HTMLElement | null = null\n #stampedTrailing: HTMLElement | null = null\n #stampedTrailingText: HTMLElement | null = null\n\n protected override activate(): void {\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n this.setAttribute('role', 'button')\n\n // Detect inline text content (CSS can't see text nodes)\n const hasTextContent = Array.from(this.childNodes).some(\n n => n.nodeType === 3 && n.textContent!.trim()\n )\n if (hasTextContent) this.setAttribute('data-has-text', '')\n\n // Sync disabled → aria-disabled\n this.addEffect(() => {\n this.setAttribute('aria-disabled', String(this.disabled))\n this.setAttribute('tabindex', this.disabled ? '-1' : '0')\n })\n\n // Sync label → aria-label (CSS handles the visual via ::after)\n this.addEffect(() => {\n if (this.label) {\n this.setAttribute('aria-label', this.label)\n } else {\n this.removeAttribute('aria-label')\n }\n })\n\n // Stamp leading icon\n this.addEffect(() => {\n const name = this['icon-leading'] || this.icon\n const text = this['text-leading']\n if (name && !this.#stampedLeading) {\n this.#stampedLeading = document.createElement('aui-icon')\n this.#stampedLeading.setAttribute('slot', 'leading')\n this.prepend(this.#stampedLeading)\n }\n if (this.#stampedLeading) {\n if (name) {\n this.#stampedLeading.setAttribute('name', name)\n } else {\n this.#stampedLeading.remove()\n this.#stampedLeading = null\n }\n }\n // Stamp leading text as separate span\n if (text && !this.#stampedLeadingText) {\n this.#stampedLeadingText = document.createElement('span')\n this.#stampedLeadingText.setAttribute('slot', 'leading-text')\n const leading = this.#stampedLeading\n if (leading) leading.after(this.#stampedLeadingText)\n else this.prepend(this.#stampedLeadingText)\n }\n if (this.#stampedLeadingText) {\n if (text) {\n this.#stampedLeadingText.textContent = text\n } else {\n this.#stampedLeadingText.remove()\n this.#stampedLeadingText = null\n }\n }\n })\n\n // Stamp trailing icon\n this.addEffect(() => {\n const name = this['icon-trailing']\n const text = this['text-trailing']\n if (name && !this.#stampedTrailing) {\n this.#stampedTrailing = document.createElement('aui-icon')\n this.#stampedTrailing.setAttribute('slot', 'trailing')\n this.append(this.#stampedTrailing)\n }\n if (this.#stampedTrailing) {\n if (name) {\n this.#stampedTrailing.setAttribute('name', name)\n } else {\n this.#stampedTrailing.remove()\n this.#stampedTrailing = null\n }\n }\n // Stamp trailing text as separate span\n if (text && !this.#stampedTrailingText) {\n this.#stampedTrailingText = document.createElement('span')\n this.#stampedTrailingText.setAttribute('slot', 'trailing-text')\n const trailing = this.#stampedTrailing\n if (trailing) trailing.before(this.#stampedTrailingText)\n else this.append(this.#stampedTrailingText)\n }\n if (this.#stampedTrailingText) {\n if (text) {\n this.#stampedTrailingText.textContent = text\n } else {\n this.#stampedTrailingText.remove()\n this.#stampedTrailingText = null\n }\n }\n })\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #handleClick = (e: Event): void => {\n if ((this as any).disabled || (this as any).loading) {\n e.preventDefault()\n e.stopPropagation()\n return\n }\n\n // Link mode — navigate\n const href = (this as any).href as string\n if (href) {\n window.location.href = href\n return\n }\n\n // Form submit/reset\n const btnType = (this as any).type as string\n if (btnType === 'submit' || btnType === 'reset') {\n const form = this.closest('form')\n if (form) {\n if (btnType === 'submit') form.requestSubmit()\n else form.reset()\n }\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n this.click()\n }\n }\n}\n","// ── aui-input ────────────────────────────────────────────────\n//\n// Text input using contenteditable surface — no native <input>.\n//\n// Architecture (following native-ui pattern):\n// - Host element: flex container, owns visual chrome (border,\n// radius, padding) and slot layout (leading/trailing).\n// - Inner <span data-surface contenteditable=\"plaintext-only\">:\n// the actual editing surface. Separate from host because\n// contenteditable breaks when the editable element uses\n// display: flex with child elements.\n// - ElementInternals: form participation, constraint validation,\n// custom states (:state(empty) for placeholder).\n//\n// No <input>, <button>, or any native form element.\n//\n// Search enhancement (type=\"search\"):\n// - Auto-stamps a leading search icon (magnifying-glass SVG)\n// - Auto-stamps a trailing clear indicator (unless [no-clear])\n// - Dispatches debounced `search` event after typing stops\n// - Escape key clears field (or blurs if already empty)\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Inline SVGs for search mode ────────────────────────────────\n\nconst SEARCH_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><circle cx=\"116\" cy=\"116\" r=\"84\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"175.4\" y1=\"175.4\" x2=\"224\" y2=\"224\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/></svg>`\n\nconst X_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><line x1=\"200\" y1=\"56\" x2=\"56\" y2=\"200\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"200\" y1=\"200\" x2=\"56\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/></svg>`\n\nexport class AuiInput extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n readonly: { type: 'boolean', default: false },\n required: { type: 'boolean', default: false },\n clearable: { type: 'boolean', default: false },\n autofocus: { type: 'boolean', default: false },\n type: { type: 'enum', values: ['text', 'email', 'password', 'search', 'url', 'tel', 'number'], default: 'text' },\n placeholder: { type: 'string', default: '' },\n value: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n pattern: { type: 'string', default: '' },\n maxlength: { type: 'string', default: '' },\n font: { type: 'string', default: 'sans' },\n debounce: { type: 'string', default: '200' },\n 'no-clear': { type: 'boolean', default: false },\n }\n\n declare disabled: boolean\n declare readonly: boolean\n declare required: boolean\n declare clearable: boolean\n declare autofocus: boolean\n declare type: string\n declare placeholder: string\n declare value: string\n declare name: string\n declare pattern: string\n declare maxlength: string\n declare font: string\n declare debounce: string\n declare 'no-clear': boolean\n\n #internals: ElementInternals\n #surface: HTMLElement | null = null\n #clearEl: HTMLElement | null = null\n #stepUpEl: HTMLElement | null = null\n #stepDownEl: HTMLElement | null = null\n #syncing = false\n #searchIcon: HTMLElement | null = null\n #searchClearEl: HTMLElement | null = null\n #searchDebounceTimer: ReturnType<typeof setTimeout> | null = null\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'textbox'\n }\n\n protected override activate(): void {\n // Stamp the editing surface\n this.#surface = this.querySelector('[data-surface]')\n if (!this.#surface) {\n this.#surface = document.createElement('span')\n this.#surface.setAttribute('data-surface', '')\n this.#surface.setAttribute('contenteditable', 'plaintext-only')\n this.#surface.setAttribute('spellcheck', 'false')\n this.#surface.setAttribute('tabindex', '0')\n\n // Insert before trailing slot if present\n const trailing = this.querySelector('[slot=\"trailing\"]')\n if (trailing) {\n this.insertBefore(this.#surface, trailing)\n } else {\n this.appendChild(this.#surface)\n }\n }\n\n // Stamp clear indicator (not a <button>)\n if (this.clearable && !this.querySelector('[data-clear]')) {\n this.#clearEl = document.createElement('span')\n this.#clearEl.setAttribute('data-clear', '')\n this.#clearEl.setAttribute('role', 'button')\n this.#clearEl.setAttribute('tabindex', '-1')\n this.#clearEl.setAttribute('aria-label', 'Clear')\n this.#clearEl.textContent = '✕'\n const trailing = this.querySelector('[slot=\"trailing\"]')\n if (trailing) {\n this.insertBefore(this.#clearEl, trailing)\n } else {\n this.appendChild(this.#clearEl)\n }\n } else {\n this.#clearEl = this.querySelector('[data-clear]')\n }\n\n // Pre-fill value\n if (this.value && this.#surface) {\n this.#surface.textContent = this.value\n }\n\n // Sync reactive state\n this.addEffect(() => {\n const locked = this.disabled || this.readonly\n this.#surface?.setAttribute('contenteditable', locked ? 'false' : 'plaintext-only')\n\n if (this.disabled) {\n this.#surface?.setAttribute('tabindex', '-1')\n } else {\n this.#surface?.setAttribute('tabindex', '0')\n }\n\n // Sync placeholder to data attribute for CSS ::before\n this.#surface?.setAttribute('data-placeholder', this.placeholder || '')\n\n // Form internals\n this.#internals.setFormValue(this.value || null)\n this.#updateEmptyState()\n this.#validate()\n })\n\n // Sync value attribute → surface (only when not typing)\n this.addEffect(() => {\n const val = this.value\n if (!this.#syncing && this.#surface && this.#surface.textContent !== val) {\n this.#surface.textContent = val\n this.#updateEmptyState()\n }\n })\n\n // Events on surface\n this.#surface.addEventListener('input', this.#handleInput)\n this.#surface.addEventListener('keydown', this.#handleKeydown)\n this.#surface.addEventListener('focus', this.#handleFocus)\n this.#surface.addEventListener('blur', this.#handleBlur)\n this.#surface.addEventListener('paste', this.#handlePaste)\n\n // Click on wrapper focuses surface\n this.addEventListener('click', this.#handleWrapperClick)\n\n // Clear handler\n this.#clearEl?.addEventListener('click', this.#handleClear)\n\n // Autofocus\n if (this.autofocus) {\n requestAnimationFrame(() => this.#surface?.focus())\n }\n\n // ── Number stepper ─────────────────────────────────────\n if (this.type === 'number') {\n // Stamp decrement button\n if (!this.querySelector('[data-input-stepper=\"down\"]')) {\n this.#stepDownEl = document.createElement('span')\n this.#stepDownEl.setAttribute('data-input-stepper', 'down')\n this.#stepDownEl.setAttribute('role', 'button')\n this.#stepDownEl.setAttribute('tabindex', '-1')\n this.#stepDownEl.setAttribute('aria-label', 'Decrease')\n // Insert before the surface\n this.insertBefore(this.#stepDownEl, this.#surface)\n } else {\n this.#stepDownEl = this.querySelector('[data-input-stepper=\"down\"]')\n }\n\n // Stamp increment button\n if (!this.querySelector('[data-input-stepper=\"up\"]')) {\n this.#stepUpEl = document.createElement('span')\n this.#stepUpEl.setAttribute('data-input-stepper', 'up')\n this.#stepUpEl.setAttribute('role', 'button')\n this.#stepUpEl.setAttribute('tabindex', '-1')\n this.#stepUpEl.setAttribute('aria-label', 'Increase')\n // Insert after the surface\n const next = this.#surface?.nextSibling ?? null\n if (next) {\n this.insertBefore(this.#stepUpEl, next)\n } else {\n this.appendChild(this.#stepUpEl)\n }\n } else {\n this.#stepUpEl = this.querySelector('[data-input-stepper=\"up\"]')\n }\n\n this.#stepDownEl?.addEventListener('click', this.#handleStepDown)\n this.#stepUpEl?.addEventListener('click', this.#handleStepUp)\n }\n\n // ── Search type enhancement ──────────────────────────────\n if (this.type === 'search') {\n // 1. Stamp leading search icon (if no [slot=\"leading\"] child)\n if (!this.querySelector('[slot=\"leading\"]')) {\n this.#searchIcon = document.createElement('span')\n this.#searchIcon.setAttribute('slot', 'leading')\n this.#searchIcon.setAttribute('data-input-search-icon', '')\n this.#searchIcon.innerHTML = SEARCH_SVG\n this.insertBefore(this.#searchIcon, this.firstChild)\n }\n\n // 2. Stamp trailing clear indicator (unless [no-clear])\n if (!this['no-clear'] && !this.querySelector('[data-input-clear]')) {\n this.#searchClearEl = document.createElement('span')\n this.#searchClearEl.setAttribute('data-input-clear', '')\n this.#searchClearEl.setAttribute('role', 'button')\n this.#searchClearEl.setAttribute('tabindex', '-1')\n this.#searchClearEl.setAttribute('aria-label', 'Clear')\n this.#searchClearEl.innerHTML = X_SVG\n // Insert before trailing slot if present\n const trailing = this.querySelector('[slot=\"trailing\"]')\n if (trailing) {\n this.insertBefore(this.#searchClearEl, trailing)\n } else {\n this.appendChild(this.#searchClearEl)\n }\n } else {\n this.#searchClearEl = this.querySelector('[data-input-clear]')\n }\n\n this.#searchClearEl?.addEventListener('click', this.#handleSearchClear)\n }\n }\n\n protected override dispose(): void {\n this.#surface?.removeEventListener('input', this.#handleInput)\n this.#surface?.removeEventListener('keydown', this.#handleKeydown)\n this.#surface?.removeEventListener('focus', this.#handleFocus)\n this.#surface?.removeEventListener('blur', this.#handleBlur)\n this.#surface?.removeEventListener('paste', this.#handlePaste)\n this.removeEventListener('click', this.#handleWrapperClick)\n this.#clearEl?.removeEventListener('click', this.#handleClear)\n this.#stepDownEl?.removeEventListener('click', this.#handleStepDown)\n this.#stepUpEl?.removeEventListener('click', this.#handleStepUp)\n this.#searchClearEl?.removeEventListener('click', this.#handleSearchClear)\n if (this.#searchDebounceTimer) clearTimeout(this.#searchDebounceTimer)\n }\n\n // ── Public API ──────────────────────────────────────────\n\n focus(options?: FocusOptions): void {\n this.#surface?.focus(options)\n }\n\n blur(): void {\n this.#surface?.blur()\n }\n\n select(): void {\n if (!this.#surface) return\n const range = document.createRange()\n range.selectNodeContents(this.#surface)\n const sel = window.getSelection()\n sel?.removeAllRanges()\n sel?.addRange(range)\n }\n\n // ── Form callbacks ────────────────────────────────────\n\n formDisabledCallback(disabled: boolean): void {\n this.disabled = disabled\n }\n\n formResetCallback(): void {\n this.value = ''\n if (this.#surface) this.#surface.textContent = ''\n this.#updateEmptyState()\n }\n\n formStateRestoreCallback(state: string): void {\n this.value = state ?? ''\n if (this.#surface) this.#surface.textContent = this.value\n }\n\n // ── Internal ──────────────────────────────────────────\n\n #updateEmptyState(): void {\n const empty = !(this.#surface?.textContent?.trim())\n try {\n if (empty) {\n this.#internals.states?.add('empty')\n } else {\n this.#internals.states?.delete('empty')\n }\n } catch {\n // CustomStateSet not supported\n }\n // Fallback: data attribute for browsers without :state()\n this.toggleAttribute('data-input-empty', empty)\n }\n\n #validate(): void {\n if (this.required && !this.value?.trim()) {\n this.#internals.setValidity(\n { valueMissing: true },\n 'This field is required',\n this.#surface ?? undefined,\n )\n } else if (this.pattern && this.value) {\n try {\n const re = new RegExp(`^(?:${this.pattern})$`)\n if (!re.test(this.value)) {\n this.#internals.setValidity(\n { patternMismatch: true },\n `Please match the requested format`,\n this.#surface ?? undefined,\n )\n return\n }\n } catch { /* invalid regex — skip */ }\n this.#internals.setValidity({})\n } else {\n this.#internals.setValidity({})\n }\n }\n\n #resetCaretIfEmpty(): void {\n if (!this.#surface || this.#surface.textContent?.trim()) return\n const sel = window.getSelection()\n if (!sel) return\n sel.setPosition(this.#surface, 0)\n }\n\n // ── Event handlers ────────────────────────────────────\n\n #handleInput = (): void => {\n this.#syncing = true\n this.value = this.#surface?.textContent ?? ''\n this.#internals.setFormValue(this.value || null)\n this.#updateEmptyState()\n this.#syncing = false\n\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n\n // Debounced search event\n if (this.type === 'search') {\n this.#scheduleSearchEvent()\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n // Search: Escape clears or blurs\n if (this.type === 'search' && e.key === 'Escape') {\n e.preventDefault()\n if (this.value?.trim()) {\n // Clear the value\n if (this.#surface) this.#surface.textContent = ''\n this.value = ''\n this.#internals.setFormValue(null)\n this.#updateEmptyState()\n this.#dispatchSearchEvent()\n } else {\n // Already empty — blur\n this.#surface?.blur()\n }\n return\n }\n\n // Single-line: block Enter\n if (e.key === 'Enter') {\n e.preventDefault()\n // Submit form if inside one\n this.#internals.form?.requestSubmit()\n return\n }\n\n // Number stepper: ArrowUp / ArrowDown\n if (this.type === 'number') {\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n this.#adjust(1)\n return\n }\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n this.#adjust(-1)\n return\n }\n }\n\n // Maxlength enforcement\n if (this.maxlength) {\n const max = parseInt(this.maxlength, 10)\n const len = this.#surface?.textContent?.length ?? 0\n if (len >= max && e.key.length === 1 && !e.ctrlKey && !e.metaKey) {\n const sel = window.getSelection()\n // Allow typing if there's a selection (will replace)\n if (!sel?.toString()) {\n e.preventDefault()\n }\n }\n }\n }\n\n #handleFocus = (): void => {\n this.#resetCaretIfEmpty()\n }\n\n #handleBlur = (): void => {\n // Clamp number value to [min, max] on blur\n if (this.type === 'number' && this.value.trim()) {\n const val = parseFloat(this.value)\n if (!isNaN(val)) {\n const min = this.hasAttribute('min') ? parseFloat(this.getAttribute('min')!) : -Infinity\n const max = this.hasAttribute('max') ? parseFloat(this.getAttribute('max')!) : Infinity\n const clamped = Math.min(max, Math.max(min, val))\n if (clamped !== val) {\n const newVal = String(clamped)\n this.value = newVal\n if (this.#surface) this.#surface.textContent = newVal\n this.#internals.setFormValue(newVal)\n this.#updateEmptyState()\n }\n }\n }\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handlePaste = (e: ClipboardEvent): void => {\n // Enforce single-line: strip newlines from pasted content\n e.preventDefault()\n let text = e.clipboardData?.getData('text/plain') ?? ''\n text = text.replace(/[\\r\\n]+/g, ' ')\n\n // Maxlength enforcement on paste\n if (this.maxlength) {\n const max = parseInt(this.maxlength, 10)\n const current = this.#surface?.textContent?.length ?? 0\n const sel = window.getSelection()\n const selLen = sel?.toString().length ?? 0\n const available = max - current + selLen\n text = text.slice(0, Math.max(0, available))\n }\n\n document.execCommand('insertText', false, text)\n }\n\n #handleWrapperClick = (e: Event): void => {\n const target = e.target as HTMLElement\n if (target === this || target.getAttribute('slot') === 'leading') {\n this.#surface?.focus()\n this.#resetCaretIfEmpty()\n } else if (target === this.#surface) {\n // Clicking on the surface when empty (placeholder visible):\n // the caret may land after the ::before pseudo-element content.\n // Force it to position 0.\n this.#resetCaretIfEmpty()\n }\n }\n\n #handleClear = (e: Event): void => {\n e.stopPropagation()\n if (this.#surface) {\n this.#surface.textContent = ''\n }\n this.value = ''\n this.#internals.setFormValue(null)\n this.#updateEmptyState()\n this.#surface?.focus()\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n // ── Number stepper ──────────────────────────────────────\n\n #adjust(delta: number): void {\n const val = parseFloat(this.value) || 0\n const step = parseFloat(this.getAttribute('step') || '1')\n const min = this.hasAttribute('min') ? parseFloat(this.getAttribute('min')!) : -Infinity\n const max = this.hasAttribute('max') ? parseFloat(this.getAttribute('max')!) : Infinity\n const next = Math.min(max, Math.max(min, val + delta * step))\n const newVal = String(next)\n this.value = newVal\n if (this.#surface) this.#surface.textContent = newVal\n this.#internals.setFormValue(newVal)\n this.#updateEmptyState()\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handleStepUp = (e: Event): void => {\n e.stopPropagation()\n this.#adjust(1)\n }\n\n #handleStepDown = (e: Event): void => {\n e.stopPropagation()\n this.#adjust(-1)\n }\n\n // ── Search helpers ──────────────────────────────────────────\n\n #scheduleSearchEvent(): void {\n if (this.#searchDebounceTimer) clearTimeout(this.#searchDebounceTimer)\n const delay = parseInt(this.debounce, 10) || 200\n this.#searchDebounceTimer = setTimeout(() => {\n this.#dispatchSearchEvent()\n }, delay)\n }\n\n #dispatchSearchEvent(): void {\n if (this.#searchDebounceTimer) {\n clearTimeout(this.#searchDebounceTimer)\n this.#searchDebounceTimer = null\n }\n this.dispatchEvent(new CustomEvent('search', {\n bubbles: true,\n composed: true,\n detail: { value: this.value ?? '' },\n }))\n }\n\n #handleSearchClear = (e: Event): void => {\n e.stopPropagation()\n if (this.#surface) this.#surface.textContent = ''\n this.value = ''\n this.#internals.setFormValue(null)\n this.#updateEmptyState()\n this.#surface?.focus()\n this.#dispatchSearchEvent()\n }\n}\n","// ── aui-input-otp ────────────────────────────────────────────\n//\n// Segmented OTP input — no native <input> elements.\n// Stamps N contenteditable spans as cells. Handles auto-advance,\n// backspace navigation, paste distribution.\n// Uses ElementInternals for form participation.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiInputOtp extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n length: { type: 'string', default: '6' },\n disabled: { type: 'boolean', default: false },\n value: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n }\n\n declare length: string\n declare disabled: boolean\n declare value: string\n declare name: string\n\n #internals: ElementInternals\n #cells: HTMLElement[] = []\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n }\n\n protected override activate(): void {\n const len = parseInt(this.length, 10) || 6\n\n this.setAttribute('role', 'group')\n this.setAttribute('aria-label', 'One-time code')\n\n // Stamp cells\n for (let i = 0; i < len; i++) {\n const cell = document.createElement('span')\n cell.setAttribute('data-cell', String(i))\n cell.setAttribute('contenteditable', 'plaintext-only')\n cell.setAttribute('inputmode', 'numeric')\n cell.setAttribute('tabindex', '0')\n cell.setAttribute('aria-label', `Digit ${i + 1} of ${len}`)\n this.appendChild(cell)\n this.#cells.push(cell)\n }\n\n // Sync disabled\n this.addEffect(() => {\n for (const cell of this.#cells) {\n cell.setAttribute('contenteditable', this.disabled ? 'false' : 'plaintext-only')\n cell.setAttribute('tabindex', this.disabled ? '-1' : '0')\n }\n this.#internals.setFormValue(this.value || null)\n })\n\n // Pre-fill\n if (this.value) this.#distributeValue(this.value)\n\n // Wire events\n for (const cell of this.#cells) {\n cell.addEventListener('input', this.#handleCellInput)\n cell.addEventListener('keydown', this.#handleCellKeydown)\n cell.addEventListener('paste', this.#handlePaste)\n cell.addEventListener('focus', this.#handleFocus)\n }\n }\n\n protected override dispose(): void {\n for (const cell of this.#cells) {\n cell.removeEventListener('input', this.#handleCellInput)\n cell.removeEventListener('keydown', this.#handleCellKeydown)\n cell.removeEventListener('paste', this.#handlePaste)\n cell.removeEventListener('focus', this.#handleFocus)\n }\n this.#cells = []\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void { this.clear() }\n\n focus(options?: FocusOptions): void {\n const first = this.#cells.find(c => !c.textContent) ?? this.#cells[0]\n first?.focus(options)\n }\n\n clear(): void {\n for (const cell of this.#cells) cell.textContent = ''\n this.#syncValue()\n this.#cells[0]?.focus()\n }\n\n #distributeValue(val: string): void {\n for (let i = 0; i < this.#cells.length; i++) {\n this.#cells[i].textContent = val[i] ?? ''\n }\n }\n\n #syncValue(): void {\n const val = this.#cells.map(c => c.textContent ?? '').join('')\n this.value = val\n this.#internals.setFormValue(val || null)\n\n if (val.length === this.#cells.length) {\n this.dispatchEvent(new CustomEvent('aui:complete', { bubbles: true, detail: { value: val } }))\n }\n }\n\n #getCellIndex(cell: HTMLElement): number {\n return this.#cells.indexOf(cell)\n }\n\n #handleCellInput = (e: Event): void => {\n const cell = e.target as HTMLElement\n const idx = this.#getCellIndex(cell)\n\n // Keep only last character\n const text = cell.textContent ?? ''\n if (text.length > 1) {\n cell.textContent = text.slice(-1)\n }\n\n this.#syncValue()\n\n // Auto-advance\n if (cell.textContent && idx < this.#cells.length - 1) {\n this.#cells[idx + 1].focus()\n }\n }\n\n #handleCellKeydown = (e: KeyboardEvent): void => {\n const cell = e.target as HTMLElement\n const idx = this.#getCellIndex(cell)\n\n if (e.key === 'Backspace') {\n if (!cell.textContent && idx > 0) {\n e.preventDefault()\n this.#cells[idx - 1].textContent = ''\n this.#cells[idx - 1].focus()\n this.#syncValue()\n }\n } else if (e.key === 'ArrowLeft' && idx > 0) {\n e.preventDefault()\n this.#cells[idx - 1].focus()\n } else if (e.key === 'ArrowRight' && idx < this.#cells.length - 1) {\n e.preventDefault()\n this.#cells[idx + 1].focus()\n } else if (e.key === 'Enter') {\n e.preventDefault()\n }\n }\n\n #handlePaste = (e: ClipboardEvent): void => {\n e.preventDefault()\n const text = e.clipboardData?.getData('text') ?? ''\n const digits = text.replace(/\\D/g, '').slice(0, this.#cells.length)\n this.#distributeValue(digits)\n this.#syncValue()\n const focusIdx = Math.min(digits.length, this.#cells.length - 1)\n this.#cells[focusIdx]?.focus()\n }\n\n #handleFocus = (e: Event): void => {\n const cell = e.target as HTMLElement\n // Select all content in cell\n const range = document.createRange()\n range.selectNodeContents(cell)\n const sel = window.getSelection()\n sel?.removeAllRanges()\n sel?.addRange(range)\n }\n}\n","// ── aui-checkbox ─────────────────────────────────────────────\n//\n// Custom checkbox — no native <input>.\n// Uses ElementInternals for form participation.\n// Visual box + check icon via CSS pseudo-element.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCheckbox extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n checked: { type: 'boolean', default: false },\n indeterminate: { type: 'boolean', default: false },\n required: { type: 'boolean', default: false },\n label: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n value: { type: 'string', default: 'on' },\n }\n\n declare disabled: boolean\n declare checked: boolean\n declare indeterminate: boolean\n declare required: boolean\n declare label: string\n declare name: string\n declare value: string\n\n #internals: ElementInternals\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'checkbox'\n }\n\n protected override activate(): void {\n // Stamp visual box\n if (!this.querySelector('[data-box]')) {\n const box = document.createElement('span')\n box.setAttribute('data-box', '')\n this.prepend(box)\n }\n\n // Sync state\n this.addEffect(() => {\n this.setAttribute('aria-checked', this.indeterminate ? 'mixed' : String(this.checked))\n this.setAttribute('aria-disabled', String(this.disabled))\n\n // Form value\n this.#internals.setFormValue(this.checked ? (this.value || 'on') : null)\n\n // Validation\n if (this.required && !this.checked) {\n this.#internals.setValidity({ valueMissing: true }, 'Please check this box')\n } else {\n this.#internals.setValidity({})\n }\n })\n\n // Sync label → aria-label\n this.addEffect(() => {\n if (this.label) this.setAttribute('aria-label', this.label)\n else this.removeAttribute('aria-label')\n })\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void { this.checked = false; this.indeterminate = false }\n\n #toggle(): void {\n if (this.disabled) return\n this.indeterminate = false\n this.checked = !this.checked\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handleClick = (e: Event): void => {\n e.preventDefault()\n this.#toggle()\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n this.#toggle()\n }\n }\n}\n","// ── aui-switch ──────────────────────────────────────────────\n//\n// Toggle switch — no native <input>.\n// Uses ElementInternals for form participation.\n// Visual track + thumb via CSS pseudo-element.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiSwitch extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n checked: { type: 'boolean', default: false },\n label: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n value: { type: 'string', default: 'on' },\n }\n\n declare disabled: boolean\n declare checked: boolean\n declare label: string\n declare name: string\n declare value: string\n\n #internals: ElementInternals\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'switch'\n }\n\n protected override activate(): void {\n // Stamp track\n if (!this.querySelector('[data-track]')) {\n const track = document.createElement('span')\n track.setAttribute('data-track', '')\n this.prepend(track)\n }\n\n this.addEffect(() => {\n this.setAttribute('aria-checked', String(this.checked))\n this.setAttribute('aria-disabled', String(this.disabled))\n this.#internals.setFormValue(this.checked ? (this.value || 'on') : null)\n })\n\n // Sync label → aria-label (CSS handles visual via ::after)\n this.addEffect(() => {\n if (this.label) this.setAttribute('aria-label', this.label)\n else this.removeAttribute('aria-label')\n })\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void { this.checked = false }\n\n #toggle(): void {\n if (this.disabled) return\n this.checked = !this.checked\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handleClick = (e: Event): void => {\n e.preventDefault()\n this.#toggle()\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n this.#toggle()\n }\n }\n}\n","// ── aui-radio ───────────────────────────────────────────────\n//\n// Radio button — no native <input>.\n// Uses ElementInternals for form participation.\n// Selection coordination via aui-radio-group.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiRadio extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n checked: { type: 'boolean', default: false },\n required: { type: 'boolean', default: false },\n label: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n value: { type: 'string', default: '' },\n }\n\n declare disabled: boolean\n declare checked: boolean\n declare required: boolean\n declare label: string\n declare name: string\n declare value: string\n\n #internals: ElementInternals\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'radio'\n }\n\n protected override activate(): void {\n // Stamp visual circle\n if (!this.querySelector('[data-circle]')) {\n const circle = document.createElement('span')\n circle.setAttribute('data-circle', '')\n this.prepend(circle)\n }\n\n this.addEffect(() => {\n this.setAttribute('aria-checked', String(this.checked))\n this.setAttribute('aria-disabled', String(this.disabled))\n this.#internals.setFormValue(this.checked ? (this.value || '') : null)\n })\n\n // Sync label → aria-label (CSS handles visual via ::after)\n this.addEffect(() => {\n if (this.label) this.setAttribute('aria-label', this.label)\n else this.removeAttribute('aria-label')\n })\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void { this.checked = false }\n\n #select(): void {\n if (this.disabled || this.checked) return\n this.checked = true\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handleClick = (e: Event): void => {\n e.preventDefault()\n this.#select()\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n this.#select()\n }\n }\n}\n","// ── aui-radio-group ─────────────────────────────────────────\n//\n// Container that coordinates aui-radio children.\n// Manages name propagation, single-selection enforcement,\n// and keyboard navigation (arrow keys).\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiRadioGroup extends AgentElement {\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n name: { type: 'string', default: '' },\n value: { type: 'string', default: '' },\n }\n\n declare disabled: boolean\n declare name: string\n declare value: string\n\n protected override activate(): void {\n this.setAttribute('role', 'radiogroup')\n\n // Propagate name and disabled to child radios\n this.addEffect(() => {\n for (const radio of this.#radios()) {\n if (this.name) radio.setAttribute('name', this.name)\n if (this.disabled) {\n radio.setAttribute('disabled', '')\n }\n }\n })\n\n // Sync value → check the matching radio\n this.addEffect(() => {\n if (!this.value) return\n for (const radio of this.#radios()) {\n const isMatch = radio.getAttribute('value') === this.value\n if (isMatch && !radio.hasAttribute('checked')) {\n radio.setAttribute('checked', '')\n } else if (!isMatch && radio.hasAttribute('checked')) {\n radio.removeAttribute('checked')\n }\n }\n })\n\n // Listen for change events from child radios\n this.addEventListener('change', this.#handleChange)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('change', this.#handleChange)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #radios(): HTMLElement[] {\n return Array.from(this.querySelectorAll('aui-radio'))\n }\n\n #handleChange = (e: Event): void => {\n const target = e.target as HTMLElement\n if (target.tagName !== 'AUI-RADIO') return\n\n const val = target.getAttribute('value') || ''\n this.value = val\n\n // Uncheck siblings\n for (const radio of this.#radios()) {\n if (radio !== target && radio.hasAttribute('checked')) {\n radio.removeAttribute('checked')\n }\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n const radios = this.#radios().filter(r => !r.hasAttribute('disabled'))\n if (radios.length === 0) return\n\n const current = radios.findIndex(r => r.hasAttribute('checked'))\n let next = -1\n\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault()\n next = current < radios.length - 1 ? current + 1 : 0\n break\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault()\n next = current > 0 ? current - 1 : radios.length - 1\n break\n default:\n return\n }\n\n if (next >= 0) {\n radios[next].click()\n radios[next].focus()\n }\n }\n}\n","// ── aui-textarea ────────────────────────────────────────────\n//\n// Multi-line text input using contenteditable — no native <textarea>.\n// Stamps a div[data-surface] as the editing area.\n// Supports autogrow via scrollHeight measurement.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTextarea extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n readonly: { type: 'boolean', default: false },\n required: { type: 'boolean', default: false },\n autogrow: { type: 'boolean', default: false },\n autofocus: { type: 'boolean', default: false },\n placeholder: { type: 'string', default: '' },\n value: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n rows: { type: 'string', default: '3' },\n maxlength: { type: 'string', default: '' },\n }\n\n declare disabled: boolean\n declare readonly: boolean\n declare required: boolean\n declare autogrow: boolean\n declare autofocus: boolean\n declare placeholder: string\n declare value: string\n declare name: string\n declare rows: string\n declare maxlength: string\n\n #internals: ElementInternals\n #surface: HTMLElement | null = null\n #syncing = false\n #autogrowRaf: number | null = null\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'textbox'\n this.#internals.ariaMultiLine = 'true'\n }\n\n protected override activate(): void {\n this.#surface = this.querySelector('[data-surface]')\n if (!this.#surface) {\n this.#surface = document.createElement('div')\n this.#surface.setAttribute('data-surface', '')\n this.#surface.setAttribute('contenteditable', 'plaintext-only')\n this.#surface.setAttribute('spellcheck', 'false')\n this.#surface.setAttribute('tabindex', '0')\n this.appendChild(this.#surface)\n }\n\n if (this.value && this.#surface) {\n this.#surface.textContent = this.value\n }\n\n this.addEffect(() => {\n const locked = this.disabled || this.readonly\n this.#surface?.setAttribute('contenteditable', locked ? 'false' : 'plaintext-only')\n this.#surface?.setAttribute('tabindex', this.disabled ? '-1' : '0')\n this.#surface?.setAttribute('data-placeholder', this.placeholder || '')\n\n const rows = parseInt(this.rows, 10) || 3\n this.style.setProperty('--_rows', String(rows))\n\n this.#internals.setFormValue(this.value || null)\n this.#updateEmptyState()\n })\n\n this.addEffect(() => {\n const val = this.value\n if (!this.#syncing && this.#surface && this.#surface.textContent !== val) {\n this.#surface.textContent = val\n this.#updateEmptyState()\n if (this.autogrow) this.#autoResize()\n }\n })\n\n this.#surface.addEventListener('input', this.#handleInput)\n this.#surface.addEventListener('blur', this.#handleBlur)\n this.addEventListener('click', this.#handleWrapperClick)\n\n if (this.autofocus) {\n requestAnimationFrame(() => this.#surface?.focus())\n }\n }\n\n protected override dispose(): void {\n this.#surface?.removeEventListener('input', this.#handleInput)\n this.#surface?.removeEventListener('blur', this.#handleBlur)\n this.removeEventListener('click', this.#handleWrapperClick)\n if (this.#autogrowRaf !== null) cancelAnimationFrame(this.#autogrowRaf)\n }\n\n focus(options?: FocusOptions): void { this.#surface?.focus(options) }\n blur(): void { this.#surface?.blur() }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void {\n this.value = ''\n if (this.#surface) this.#surface.textContent = ''\n this.#updateEmptyState()\n }\n\n #updateEmptyState(): void {\n const empty = !(this.#surface?.textContent?.trim())\n try {\n if (empty) this.#internals.states?.add('empty')\n else this.#internals.states?.delete('empty')\n } catch { /* CustomStateSet not supported */ }\n this.toggleAttribute('data-input-empty', empty)\n }\n\n #autoResize(): void {\n if (this.#autogrowRaf !== null) cancelAnimationFrame(this.#autogrowRaf)\n this.#autogrowRaf = requestAnimationFrame(() => {\n if (!this.#surface) return\n this.#surface.style.height = 'auto'\n this.#surface.style.height = this.#surface.scrollHeight + 'px'\n })\n }\n\n #handleInput = (): void => {\n this.#syncing = true\n this.value = this.#surface?.textContent ?? ''\n this.#internals.setFormValue(this.value || null)\n this.#updateEmptyState()\n if (this.autogrow) this.#autoResize()\n this.#syncing = false\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n }\n\n #handleBlur = (): void => {\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #handleWrapperClick = (e: Event): void => {\n if (e.target === this) this.#surface?.focus()\n }\n}\n","// ── aui-container ────────────────────────────────────────────\n//\n// Unified card/panel surface. Minimal JS — just interactive\n// card behavior (click-to-navigate) when [interactive] is set.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiContainer extends AgentElement {\n static override attributes: AttributeSchema = {\n bordered: { type: 'boolean', default: false },\n elevation: { type: 'string', default: '' },\n interactive: { type: 'boolean', default: false },\n href: { type: 'string', default: '' },\n }\n\n declare bordered: boolean\n declare elevation: string\n declare interactive: boolean\n declare href: string\n\n protected override activate(): void {\n if (this.interactive) {\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n this.setAttribute('role', 'button')\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #handleClick = (): void => {\n if (this.href) {\n window.location.href = this.href\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if ((e.key === 'Enter' || e.key === ' ') && this.href) {\n e.preventDefault()\n window.location.href = this.href\n }\n }\n}\n","// ── aui-dialog ──────────────────────────────────────────────\n//\n// Modal dialog using native <dialog> element.\n//\n// Pattern: <dialog> is a full-viewport shell (inset: 0, transparent).\n// Content wrapper [data-dialog-content] is absolutely positioned\n// inside and centered. Backdrop fades via ::backdrop.\n// Native <dialog> handles focus trapping and Escape key.\n//\n// Animations: content scales up + fades in, backdrop overlay fades.\n// Exit animation plays before dialog.close() via [data-dialog-closing].\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nfunction getDuration(el: Element): number {\n const raw = getComputedStyle(el).getPropertyValue('--aui-duration').trim()\n return parseFloat(raw) || 200\n}\n\nexport class AuiDialog extends AgentElement {\n static override attributes: AttributeSchema = {\n open: { type: 'boolean', default: false },\n size: { type: 'enum', values: ['sm', 'lg', 'xl', 'full'], default: '' },\n }\n\n declare open: boolean\n declare size: string\n\n #dialog: HTMLDialogElement | null = null\n #content: HTMLElement | null = null\n #closing = false\n\n get dialogElement(): HTMLDialogElement | null {\n return this.#dialog\n }\n\n #ensureDialog(): HTMLDialogElement {\n if (this.#dialog) return this.#dialog\n\n // Find or create the <dialog> shell\n this.#dialog = this.querySelector('dialog')\n if (!this.#dialog) {\n this.#dialog = document.createElement('dialog')\n\n // Create content wrapper inside the dialog\n this.#content = document.createElement('div')\n this.#content.setAttribute('data-dialog-content', '')\n\n // Move all children into the content wrapper\n while (this.firstChild && this.firstChild !== this.#dialog) {\n this.#content.appendChild(this.firstChild)\n }\n\n this.#dialog.appendChild(this.#content)\n this.appendChild(this.#dialog)\n } else {\n this.#content = this.#dialog.querySelector('[data-dialog-content]')\n }\n\n this.#dialog.addEventListener('cancel', this.#handleCancel)\n this.#dialog.addEventListener('close', this.#handleClose)\n this.#dialog.addEventListener('click', this.#handleBackdropClick)\n return this.#dialog\n }\n\n protected override activate(): void {\n this.#ensureDialog()\n\n this.addEffect(() => {\n if (this.open) {\n this.show()\n } else {\n this.hide()\n }\n })\n }\n\n protected override dispose(): void {\n this.#dialog?.removeEventListener('cancel', this.#handleCancel)\n this.#dialog?.removeEventListener('close', this.#handleClose)\n this.#dialog?.removeEventListener('click', this.#handleBackdropClick)\n }\n\n // ── Public API ──────────────────────────────────────────\n\n show(): void {\n const dialog = this.#ensureDialog()\n if (dialog.open) return\n\n dialog.showModal()\n\n // Trigger entry animation on next frame\n requestAnimationFrame(() => {\n dialog.setAttribute('data-dialog-open', '')\n })\n\n if (!this.hasAttribute('open')) {\n this.setAttribute('open', '')\n }\n }\n\n hide(): void {\n if (!this.#dialog || !this.#dialog.open || this.#closing) return\n\n this.#closing = true\n this.#dialog.removeAttribute('data-dialog-open')\n this.#dialog.setAttribute('data-dialog-closing', '')\n\n setTimeout(() => {\n this.#closing = false\n this.#dialog?.removeAttribute('data-dialog-closing')\n this.#dialog?.close()\n\n }, getDuration(this))\n }\n\n // ── Internal ────────────────────────────────────────────\n\n #handleCancel = (e: Event): void => {\n e.preventDefault()\n this.hide()\n }\n\n #handleClose = (): void => {\n this.removeAttribute('open')\n this.dispatchEvent(new Event('close', { bubbles: true }))\n }\n\n #handleBackdropClick = (e: MouseEvent): void => {\n // With full-viewport dialog, clicking outside the content panel\n // means clicking on the transparent dialog shell itself\n if (e.target === this.#dialog) {\n this.hide()\n }\n }\n}\n","// ── aui-drawer ──────────────────────────────────────────────\n//\n// Slide-out panel anchored to a viewport edge.\n//\n// Pattern: <dialog> is a full-viewport shell (inset: 0, transparent).\n// Content wrapper [data-drawer-content] is absolutely positioned\n// against one edge. Native <dialog> handles focus trapping,\n// Escape key, and ::backdrop.\n//\n// Animations: content slides in/out, backdrop overlay fades.\n// Exit animation plays before dialog.close() via [data-drawer-closing].\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nfunction getDuration(el: Element): number {\n const raw = getComputedStyle(el).getPropertyValue('--aui-duration').trim()\n return parseFloat(raw) || 200\n}\n\nexport class AuiDrawer extends AgentElement {\n static override attributes: AttributeSchema = {\n open: { type: 'boolean', default: false },\n side: { type: 'enum', values: ['left', 'right', 'top', 'bottom'], default: 'right' },\n 'scroll-lock': { type: 'boolean', default: false },\n }\n\n declare open: boolean\n declare side: string\n declare 'scroll-lock': boolean\n\n #dialog: HTMLDialogElement | null = null\n #content: HTMLElement | null = null\n #closing = false\n\n get dialogElement(): HTMLDialogElement | null {\n return this.#dialog\n }\n\n #ensureDialog(): HTMLDialogElement {\n if (this.#dialog) return this.#dialog\n\n this.#dialog = this.querySelector('dialog')\n if (!this.#dialog) {\n this.#dialog = document.createElement('dialog')\n\n // Create content wrapper inside the dialog\n this.#content = document.createElement('div')\n this.#content.setAttribute('data-drawer-content', '')\n\n // Move all children into the content wrapper\n while (this.firstChild && this.firstChild !== this.#dialog) {\n this.#content.appendChild(this.firstChild)\n }\n\n this.#dialog.appendChild(this.#content)\n this.appendChild(this.#dialog)\n } else {\n this.#content = this.#dialog.querySelector('[data-drawer-content]')\n }\n\n this.#dialog.addEventListener('cancel', this.#handleCancel)\n this.#dialog.addEventListener('close', this.#handleClose)\n this.#dialog.addEventListener('click', this.#handleBackdropClick)\n return this.#dialog\n }\n\n protected override activate(): void {\n this.#ensureDialog()\n\n this.addEffect(() => {\n if (this.open) {\n this.show()\n } else {\n this.hide()\n }\n })\n }\n\n protected override dispose(): void {\n if (this.#dialog) {\n this.#dialog.removeEventListener('cancel', this.#handleCancel)\n this.#dialog.removeEventListener('close', this.#handleClose)\n this.#dialog.removeEventListener('click', this.#handleBackdropClick)\n }\n }\n\n show(): void {\n const dialog = this.#ensureDialog()\n if (dialog.open) return\n\n if (this['scroll-lock']) {\n document.documentElement.style.overflow = 'hidden'\n }\n\n dialog.showModal()\n\n // Trigger entry animation on next frame\n requestAnimationFrame(() => {\n dialog.setAttribute('data-drawer-open', '')\n })\n\n if (!this.hasAttribute('open')) {\n this.setAttribute('open', '')\n }\n }\n\n hide(): void {\n if (!this.#dialog || !this.#dialog.open || this.#closing) return\n\n this.#closing = true\n this.#dialog.removeAttribute('data-drawer-open')\n this.#dialog.setAttribute('data-drawer-closing', '')\n\n setTimeout(() => {\n this.#closing = false\n this.#dialog?.removeAttribute('data-drawer-closing')\n this.#dialog?.close()\n\n if (this['scroll-lock'] && !document.querySelector('dialog[open]')) {\n document.documentElement.style.overflow = ''\n }\n }, getDuration(this))\n }\n\n #handleCancel = (e: Event): void => {\n // Intercept Escape key — prevent instant close so we can animate out\n e.preventDefault()\n this.hide()\n }\n\n #handleClose = (): void => {\n if (this['scroll-lock'] && !document.querySelector('dialog[open]')) {\n document.documentElement.style.overflow = ''\n }\n this.removeAttribute('open')\n this.dispatchEvent(new Event('close', { bubbles: true }))\n }\n\n #handleBackdropClick = (e: MouseEvent): void => {\n // With full-viewport dialog, clicking outside the content panel\n // means clicking on the transparent dialog shell itself\n if (e.target === this.#dialog) {\n this.hide()\n }\n }\n}\n","// ── aui-icon ─────────────────────────────────────────────────\n//\n// Renders an SVG icon from registry lookup, URL fetch, or inline child.\n//\n// Sources (in priority order):\n// 1. name=\"flask\" — lookup from global icon registry\n// 2. src=\"/icons/x.svg\" — fetch SVG from URL\n// 3. <svg> child — inline SVG (no attribute needed)\n//\n// Label:\n// label=\"Intelligence\" — renders text via ::after (CSS)\n// Also sets aria-label for accessibility.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\nimport { getIcon, onRegistryChange } from './registry.ts'\n\n// Cache fetched SVGs by URL\nconst fetchCache = new Map<string, string>()\n\nexport class AuiIcon extends AgentElement {\n static override attributes: AttributeSchema = {\n name: { type: 'string', default: '' },\n src: { type: 'string', default: '' },\n label: { type: 'string', default: '' },\n 'text-leading': { type: 'string', default: '' },\n 'text-trailing': { type: 'string', default: '' },\n }\n\n declare name: string\n declare src: string\n declare label: string\n declare 'text-leading': string\n declare 'text-trailing': string\n\n #registryDispose: (() => void) | null = null\n #hasInlineChild = false\n\n protected override activate(): void {\n // Check for inline SVG child (before we render anything)\n this.#hasInlineChild = this.querySelector('svg') !== null\n\n // Accessibility\n this.addEffect(() => {\n const text = this.label || this['text-leading'] || this['text-trailing']\n if (text) {\n this.setAttribute('role', 'img')\n this.setAttribute('aria-label', text)\n } else {\n this.setAttribute('role', 'presentation')\n this.setAttribute('aria-hidden', 'true')\n this.removeAttribute('aria-label')\n }\n })\n\n // Render from registry or src (skip if inline SVG child exists)\n this.addEffect(() => {\n if (this.#hasInlineChild) return\n\n const key = this.name\n if (key) {\n this.#renderFromRegistry(key)\n } else if (this.src) {\n this.#renderFromSrc(this.src)\n }\n })\n\n // Re-render when registry changes (late-registered icons)\n this.#registryDispose = onRegistryChange(() => {\n if (this.#hasInlineChild) return\n const key = this.name\n if (key && !this.querySelector('svg')) {\n this.#renderFromRegistry(key)\n }\n })\n }\n\n protected override dispose(): void {\n this.#registryDispose?.()\n this.#registryDispose = null\n if (this.#warnTimer) { clearTimeout(this.#warnTimer); this.#warnTimer = null }\n }\n\n #warnTimer: ReturnType<typeof setTimeout> | null = null\n\n #renderFromRegistry(key: string): void {\n const svg = getIcon(key)\n if (svg) {\n this.#setSvg(svg)\n if (this.#warnTimer) { clearTimeout(this.#warnTimer); this.#warnTimer = null }\n } else if (!this.src) {\n // Defer warning — icon may be late-registered\n if (this.#warnTimer) clearTimeout(this.#warnTimer)\n this.#warnTimer = setTimeout(() => {\n if (!getIcon(key) && !this.querySelector('svg')) {\n console.warn(`[aui-icon] Icon \"${key}\" not found in registry. Register it with registerIcons({ ${key}: svgString }).`)\n }\n this.#warnTimer = null\n }, 2000)\n }\n }\n\n async #renderFromSrc(url: string): Promise<void> {\n const cached = fetchCache.get(url)\n if (cached) { this.#setSvg(cached); return }\n\n try {\n const res = await fetch(url)\n if (!res.ok) return\n const text = await res.text()\n if (!text.includes('<svg')) return\n fetchCache.set(url, text)\n // Only apply if src hasn't changed during fetch\n if (this.src === url) this.#setSvg(text)\n } catch {}\n }\n\n #setSvg(svg: string): void {\n // Preserve existing ::after by only replacing SVG content\n const existing = this.querySelector('svg')\n if (existing) existing.remove()\n\n const template = document.createElement('template')\n template.innerHTML = svg\n const svgEl = template.content.firstElementChild\n if (svgEl) this.prepend(svgEl)\n }\n}\n","// ── aui-tooltip ──────────────────────────────────────────────\n//\n// Hover/focus tooltip using the Popover API.\n// Renders as a sibling to its anchor element. The previous\n// sibling (or parent) is auto-discovered as the anchor.\n//\n// Uses CSS anchor positioning for placement. The popover\n// surfaces in the top layer — no z-index management needed.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTooltip extends AgentElement {\n static override attributes: AttributeSchema = {\n content: { type: 'string', default: '' },\n position: { type: 'enum', values: ['top', 'bottom', 'left', 'right'], default: 'top' },\n }\n\n declare content: string\n declare position: string\n\n #popover: HTMLElement | null = null\n #anchor: HTMLElement | null = null\n #anchorName: string = ''\n\n protected override activate(): void {\n // Resolve anchor: previous sibling or parent\n this.#anchor = (this.previousElementSibling as HTMLElement) ?? this.parentElement\n\n // Generate unique anchor name\n const id = `tooltip-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // Create popover surface\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('role', 'tooltip')\n this.#popover.id = id\n this.appendChild(this.#popover)\n\n // Set CSS anchor name on the anchor element\n if (this.#anchor) {\n (this.#anchor.style as any).anchorName = this.#anchorName\n this.#anchor.setAttribute('aria-describedby', id)\n }\n\n // Pass anchor name to CSS via custom property\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // Sync content text\n this.addEffect(() => {\n if (this.#popover) this.#popover.textContent = this.content\n })\n\n // Wire show/hide on anchor\n if (this.#anchor) {\n this.#anchor.addEventListener('mouseenter', this.#show)\n this.#anchor.addEventListener('mouseleave', this.#hide)\n this.#anchor.addEventListener('focusin', this.#show)\n this.#anchor.addEventListener('focusout', this.#hide)\n }\n\n // Escape key dismisses tooltip\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n if (this.#anchor) {\n this.#anchor.removeEventListener('mouseenter', this.#show)\n this.#anchor.removeEventListener('mouseleave', this.#hide)\n this.#anchor.removeEventListener('focusin', this.#show)\n this.#anchor.removeEventListener('focusout', this.#hide)\n this.#anchor.removeAttribute('aria-describedby')\n ;(this.#anchor.style as any).anchorName = ''\n }\n this.#popover?.hidePopover()\n this.#popover?.remove()\n this.#popover = null\n this.#anchor = null\n }\n\n #show = (): void => {\n try { this.#popover?.showPopover() } catch { /* already open */ }\n }\n\n #hide = (): void => {\n try { this.#popover?.hidePopover() } catch { /* already closed */ }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') {\n this.#hide()\n }\n }\n}\n","// ── aui-range ────────────────────────────────────────────────\n//\n// Slider control — no native <input type=\"range\">.\n// Full-height pill track via CSS ::before/::after.\n// Thumb [data-thumb] is a direct child of the range element.\n// --_pct (0–1 float) drives fill width and thumb position via CSS.\n// Uses ElementInternals for form participation.\n// Keyboard: Arrow keys, Home/End, PageUp/PageDown.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiRange extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n min: { type: 'string', default: '0' },\n max: { type: 'string', default: '100' },\n step: { type: 'string', default: '1' },\n value: { type: 'string', default: '50' },\n label: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n }\n\n declare disabled: boolean\n declare min: string\n declare max: string\n declare step: string\n declare value: string\n declare label: string\n declare name: string\n\n #internals: ElementInternals\n #thumb: HTMLElement | null = null\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'slider'\n }\n\n protected override activate(): void {\n // Stamp thumb as direct child (track/fill are CSS ::before/::after)\n this.#thumb = this.querySelector('[data-thumb]')\n if (!this.#thumb) {\n this.#thumb = document.createElement('span')\n this.#thumb.setAttribute('data-thumb', '')\n this.appendChild(this.#thumb)\n }\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n // Sync state reactively\n this.addEffect(() => {\n const min = parseFloat(this.min) || 0\n const max = parseFloat(this.max) || 100\n const val = parseFloat(this.value) || 0\n\n this.setAttribute('aria-valuemin', String(min))\n this.setAttribute('aria-valuemax', String(max))\n this.setAttribute('aria-valuenow', String(val))\n this.setAttribute('aria-disabled', String(this.disabled))\n\n if (this.label) {\n this.setAttribute('aria-label', this.label)\n }\n\n // WHY: 0–1 float so CSS calc() can use it as a multiplier directly\n const pct = (max - min) > 0 ? (val - min) / (max - min) : 0\n this.style.setProperty('--_pct', String(Math.max(0, Math.min(1, pct))))\n\n this.#internals.setFormValue(this.value || null)\n })\n\n // Pointer events on the range element itself (whole pill is interactive)\n this.addEventListener('pointerdown', this.#handlePointerDown)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('pointerdown', this.#handlePointerDown)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void { this.value = '50' }\n\n // ── Pointer interaction ───────────────────────────────\n\n #handlePointerDown = (e: PointerEvent): void => {\n if (this.disabled) return\n // Ignore clicks on thumb (let it propagate to range)\n e.preventDefault()\n this.setPointerCapture(e.pointerId)\n this.setAttribute('data-range-pressed', '')\n this.#setValueFromPointer(e)\n\n this.addEventListener('pointermove', this.#handlePointerMove)\n this.addEventListener('pointerup', this.#handlePointerUp)\n }\n\n #handlePointerMove = (e: PointerEvent): void => {\n this.#setValueFromPointer(e)\n }\n\n #handlePointerUp = (_e: PointerEvent): void => {\n this.removeAttribute('data-range-pressed')\n this.removeEventListener('pointermove', this.#handlePointerMove)\n this.removeEventListener('pointerup', this.#handlePointerUp)\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n #setValueFromPointer(e: PointerEvent): void {\n const rect = this.getBoundingClientRect()\n const pct = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n const min = parseFloat(this.min) || 0\n const max = parseFloat(this.max) || 100\n const step = parseFloat(this.step) || 1\n const raw = min + pct * (max - min)\n const snapped = Math.round(raw / step) * step\n const clamped = Math.max(min, Math.min(max, snapped))\n this.value = String(clamped)\n this.dispatchEvent(new Event('input', { bubbles: true }))\n }\n\n // ── Keyboard interaction ──────────────────────────────\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n\n const min = parseFloat(this.min) || 0\n const max = parseFloat(this.max) || 100\n const step = parseFloat(this.step) || 1\n const val = parseFloat(this.value) || 0\n const bigStep = (max - min) / 10\n\n let next: number | undefined\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = Math.min(max, val + step)\n break\n case 'ArrowLeft':\n case 'ArrowDown':\n next = Math.max(min, val - step)\n break\n case 'PageUp':\n next = Math.min(max, val + bigStep)\n break\n case 'PageDown':\n next = Math.max(min, val - bigStep)\n break\n case 'Home':\n next = min\n break\n case 'End':\n next = max\n break\n default:\n return\n }\n\n e.preventDefault()\n this.value = String(next)\n this.dispatchEvent(new Event('input', { bubbles: true }))\n this.dispatchEvent(new Event('change', { bubbles: true }))\n }\n}\n","// ── aui-gripper ──────────────────────────────────────────────\n//\n// Resize handle. Reports frame-to-frame pointer deltas (not\n// cumulative from start). This avoids jump on first click\n// caused by pointer capture coordinate shift.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiGripper extends AgentElement {\n static override attributes: AttributeSchema = {\n orientation: { type: 'enum', values: ['horizontal', 'vertical'], default: 'horizontal' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare orientation: string\n declare disabled: boolean\n\n #lastX = 0\n #lastY = 0\n #dragging = false\n\n protected override activate(): void {\n this.setAttribute('role', 'separator')\n\n this.addEffect(() => {\n this.setAttribute('aria-orientation', this.orientation || 'horizontal')\n this.setAttribute('aria-disabled', String(this.disabled))\n })\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n\n this.addEventListener('pointerdown', this.#handlePointerDown)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('pointerdown', this.#handlePointerDown)\n this.removeEventListener('keydown', this.#handleKeydown)\n this.#stopDrag()\n }\n\n #handlePointerDown = (e: PointerEvent): void => {\n if (this.disabled) return\n e.preventDefault()\n\n this.#lastX = e.clientX\n this.#lastY = e.clientY\n this.#dragging = true\n\n this.setPointerCapture(e.pointerId)\n this.setAttribute('data-gripper-dragging', '')\n\n this.addEventListener('pointermove', this.#handlePointerMove)\n this.addEventListener('pointerup', this.#handlePointerUp)\n this.addEventListener('pointercancel', this.#handlePointerUp)\n\n this.dispatchEvent(new CustomEvent('aui:resize-start', { bubbles: true }))\n }\n\n #handlePointerMove = (e: PointerEvent): void => {\n if (!this.#dragging) return\n\n const dx = e.clientX - this.#lastX\n const dy = e.clientY - this.#lastY\n this.#lastX = e.clientX\n this.#lastY = e.clientY\n\n const isHorizontal = this.orientation !== 'vertical'\n\n this.dispatchEvent(new CustomEvent('aui:resize-move', {\n bubbles: true,\n detail: { dx, dy, delta: isHorizontal ? dx : dy },\n }))\n }\n\n #handlePointerUp = (): void => {\n if (!this.#dragging) return\n this.#stopDrag()\n this.dispatchEvent(new CustomEvent('aui:resize-end', { bubbles: true }))\n }\n\n #stopDrag(): void {\n this.#dragging = false\n this.removeAttribute('data-gripper-dragging')\n this.removeEventListener('pointermove', this.#handlePointerMove)\n this.removeEventListener('pointerup', this.#handlePointerUp)\n this.removeEventListener('pointercancel', this.#handlePointerUp)\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n\n const isHorizontal = this.orientation !== 'vertical'\n const step = e.shiftKey ? 10 : 1\n let delta = 0\n\n if (isHorizontal) {\n if (e.key === 'ArrowLeft') delta = -step\n else if (e.key === 'ArrowRight') delta = step\n else return\n } else {\n if (e.key === 'ArrowUp') delta = -step\n else if (e.key === 'ArrowDown') delta = step\n else return\n }\n\n e.preventDefault()\n this.dispatchEvent(new CustomEvent('aui:resize-move', {\n bubbles: true,\n detail: { dx: isHorizontal ? delta : 0, dy: isHorizontal ? 0 : delta, delta },\n }))\n }\n}\n","// ── aui-option ──────────────────────────────────────────────\n//\n// A selectable option within aui-select.\n// Lightweight — most behavior is coordinated by the parent listbox.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiOption extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n selected: { type: 'boolean', default: false },\n label: { type: 'string', default: '' },\n }\n\n declare value: string\n declare disabled: boolean\n declare selected: boolean\n declare label: string\n\n /** The display text for this option. */\n get displayLabel(): string {\n return this.label || this.textContent?.trim() || this.value\n }\n\n protected override activate(): void {\n this.setAttribute('role', 'option')\n\n this.addEffect(() => {\n this.setAttribute('aria-selected', String(this.selected))\n this.setAttribute('aria-disabled', String(this.disabled))\n })\n }\n}\n","// ── aui-optgroup ─────────────────────────────────────────────\n//\n// Groups options under a label header within aui-select.\n// Adds optional `divider` attribute for visual separation.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiOptgroup extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n divider: { type: 'boolean', default: false },\n }\n\n declare label: string\n declare disabled: boolean\n declare divider: boolean\n\n #header: HTMLElement | null = null\n\n protected override activate(): void {\n this.setAttribute('role', 'group')\n\n // Stamp group header\n this.#header = this.querySelector('[data-group-label]')\n if (!this.#header && this.label) {\n this.#header = document.createElement('div')\n this.#header.setAttribute('data-group-label', '')\n this.#header.setAttribute('role', 'presentation')\n this.#header.id = `optgroup-${crypto.randomUUID().slice(0, 8)}`\n this.prepend(this.#header)\n }\n\n this.addEffect(() => {\n if (this.#header) {\n this.#header.textContent = this.label\n this.setAttribute('aria-labelledby', this.#header.id)\n }\n this.setAttribute('aria-disabled', String(this.disabled))\n\n // Cascade disabled to child options\n for (const opt of this.querySelectorAll('aui-option')) {\n if (this.disabled) {\n opt.setAttribute('disabled', '')\n }\n }\n })\n }\n}\n","// ── aui-select ──────────────────────────────────────────────\n//\n// Unified select component with multiple interaction modes.\n//\n// Modes (via `mode` attribute):\n// (none) → dropdown: trigger + chevron + popover listbox\n// \"bar\" → toolbar: inline items, overflow via ResizeObserver\n// \"list\" → standalone listbox: all items visible, scrollable\n// \"combobox\" → searchable dropdown: contenteditable + filtered popover\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Constants ────────────────────────────────────────────────\n\nconst CHEVRON_SVG = `<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><polyline points=\"48,80 128,160 208,80\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"24\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\n\nconst MORE_ICON = `<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"1em\" height=\"1em\"><circle cx=\"128\" cy=\"128\" r=\"16\"/><circle cx=\"64\" cy=\"128\" r=\"16\"/><circle cx=\"192\" cy=\"128\" r=\"16\"/></svg>`\n\nconst PRIORITY_ORDER: Record<string, number> = { '0': 0, low: 0, '1': 1, normal: 1, '2': 2, high: 2, pin: 999 }\n\nconst FOCUSABLE_BAR = ':is(aui-option, aui-button, button, [tabindex]):not([disabled]):not([data-overflow-trigger])'\nconst FOCUSABLE_BAR_WITH_TRIGGER = ':is(aui-option, aui-button, button, [tabindex]):not([disabled])'\n\n// ── Overflow types ───────────────────────────────────────────\n\ninterface OverflowUnit {\n el: HTMLElement\n flexItems: HTMLElement[]\n priority: string // '0' | '1' | '2' | 'low' | 'normal' | 'high' | 'pin'\n pinned: boolean\n index: number\n width: number\n}\n\n// ── Helpers ──────────────────────────────────────────────────\n\nfunction isOptionTag(tag: string): boolean {\n return tag === 'AUI-OPTION'\n}\n\nfunction isGroupTag(tag: string): boolean {\n return tag === 'AUI-OPTGROUP'\n}\n\nfunction isOptionOrGroup(el: Element): boolean {\n return isOptionTag(el.tagName) || isGroupTag(el.tagName)\n}\n\n// ── Component ────────────────────────────────────────────────\n\nexport class AuiSelect extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n mode: { type: 'enum', values: ['bar', 'list', 'combobox'], default: '' },\n disabled: { type: 'boolean', default: false },\n required: { type: 'boolean', default: false },\n placeholder: { type: 'string', default: 'Select…' },\n value: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n open: { type: 'boolean', default: false },\n multiple: { type: 'boolean', default: false },\n // Bar mode\n orientation: { type: 'enum', values: ['vertical'], default: '' },\n transparent: { type: 'boolean', default: false },\n fill: { type: 'boolean', default: false },\n padding: { type: 'string', default: '' },\n }\n\n declare mode: string\n declare disabled: boolean\n declare required: boolean\n declare placeholder: string\n declare value: string\n declare name: string\n declare open: boolean\n declare multiple: boolean\n declare orientation: string\n declare transparent: boolean\n declare fill: boolean\n declare padding: string\n\n #internals: ElementInternals\n\n // ── Shared state ─────────────────────────────────────────\n #anchorName: string = ''\n\n // ── Dropdown mode state ──────────────────────────────────\n #trigger: HTMLElement | null = null\n #triggerLabel: HTMLElement | null = null\n #chevron: HTMLElement | null = null\n #popover: HTMLElement | null = null\n #listboxEl: HTMLElement | null = null\n\n // ── Bar mode state ───────────────────────────────────────\n #barTriggerBtn: HTMLElement | null = null\n #barOverflowPopover: HTMLElement | null = null\n #barOverflowList: HTMLElement | null = null\n #resizeObserver: ResizeObserver | null = null\n #mutationObserver: MutationObserver | null = null\n #measureRaf: number | null = null\n\n // ── List mode state ──────────────────────────────────────\n #listActiveIndex = -1\n #typeBuffer = ''\n #typeTimer: ReturnType<typeof setTimeout> | null = null\n\n // ── Combobox mode state ──────────────────────────────────\n #comboSurface: HTMLElement | null = null\n #comboPopover: HTMLElement | null = null\n #comboListbox: HTMLElement | null = null\n #allComboOptions: HTMLElement[] = []\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n }\n\n // ════════════════════════════════════════════════════════════\n // Lifecycle\n // ════════════════════════════════════════════════════════════\n\n protected override activate(): void {\n switch (this.mode) {\n case 'bar': this.#activateBar(); break\n case 'list': this.#activateList(); break\n case 'combobox': this.#activateCombobox(); break\n default: this.#activateDropdown(); break\n }\n }\n\n protected override dispose(): void {\n switch (this.mode) {\n case 'bar': this.#disposeBar(); break\n case 'list': this.#disposeList(); break\n case 'combobox': this.#disposeCombobox(); break\n default: this.#disposeDropdown(); break\n }\n }\n\n formDisabledCallback(disabled: boolean): void { this.disabled = disabled }\n formResetCallback(): void {\n this.value = ''\n if (this.#comboSurface) this.#comboSurface.textContent = ''\n }\n\n // ════════════════════════════════════════════════════════════\n // Public API\n // ════════════════════════════════════════════════════════════\n\n /** Get all option elements (including inside groups). */\n get options(): HTMLElement[] {\n if (this.mode === '' || this.mode === undefined) {\n // Dropdown — options are inside the internal listbox\n return Array.from(this.#listboxEl?.querySelectorAll('aui-option') ?? [])\n }\n if (this.mode === 'combobox') {\n return Array.from(this.#comboListbox?.querySelectorAll('aui-option') ?? [])\n }\n // List and bar modes — options are direct descendants\n return Array.from(this.querySelectorAll('aui-option'))\n }\n\n /** Get enabled options. */\n get enabledOptions(): HTMLElement[] {\n return this.options.filter(o => !o.hasAttribute('disabled'))\n }\n\n /** Get the currently active (highlighted) option. */\n get activeOption(): HTMLElement | null {\n if (this.mode === 'list') {\n const opts = this.enabledOptions\n return opts[this.#listActiveIndex] ?? null\n }\n // For dropdown/combobox, delegate to internal listbox\n const lb = this.#listboxEl ?? this.#comboListbox\n return (lb as any)?.activeOption ?? null\n }\n\n /** Internal listbox element (for dropdown mode). */\n get listboxElement(): HTMLElement | null { return this.#listboxEl }\n\n /** Programmatically select an option by value. */\n selectValue(val: string): void {\n if (this.mode === 'list') {\n const opt = this.options.find(\n o => (o.getAttribute('value') ?? o.textContent?.trim()) === val\n )\n if (opt && !opt.hasAttribute('disabled')) {\n this.#listSelectOption(opt)\n }\n } else {\n const lb = this.#listboxEl ?? this.#comboListbox\n ;(lb as any)?.selectValue?.(val)\n }\n }\n\n /** Highlight a specific option by index (for external control). */\n highlightIndex(index: number): void {\n if (this.mode === 'list') {\n this.#listSetActive(index)\n } else {\n const lb = this.#listboxEl ?? this.#comboListbox\n ;(lb as any)?.highlightIndex?.(index)\n }\n }\n\n /** Reset the active highlight. */\n clearHighlight(): void {\n if (this.mode === 'list') {\n this.#listClearActive()\n } else {\n const lb = this.#listboxEl ?? this.#comboListbox\n ;(lb as any)?.clearHighlight?.()\n }\n }\n\n // ════════════════════════════════════════════════════════════\n // Shared popover helpers (dropdown + combobox)\n // ════════════════════════════════════════════════════════════\n\n #openPopover(): void {\n const popover = this.#popover ?? this.#comboPopover\n if (!popover || this.disabled) return\n try { popover.showPopover() } catch {}\n this.open = true\n\n // For dropdown mode, highlight current value\n if (this.mode !== 'combobox') {\n const lb = this.#listboxEl as any\n if (lb?.enabledOptions && lb.value) {\n const idx = lb.enabledOptions.findIndex(\n (o: HTMLElement) => (o.getAttribute('value') ?? o.textContent?.trim()) === lb.value\n )\n if (idx >= 0) lb.highlightIndex(idx)\n }\n this.#listboxEl?.focus()\n }\n }\n\n #closePopover(): void {\n const popover = this.#popover ?? this.#comboPopover\n if (!popover) return\n try { popover.hidePopover() } catch {}\n this.open = false\n const lb = this.#listboxEl ?? this.#comboListbox\n ;(lb as any)?.clearHighlight?.()\n }\n\n // ════════════════════════════════════════════════════════════\n // MODE: Dropdown (default)\n // ════════════════════════════════════════════════════════════\n\n #activateDropdown(): void {\n const id = `select-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // ── Stamp trigger (span, not button) ─────────────\n this.#trigger = document.createElement('span')\n this.#trigger.setAttribute('data-trigger', '')\n this.#trigger.setAttribute('role', 'combobox')\n this.#trigger.setAttribute('aria-haspopup', 'listbox')\n this.#trigger.setAttribute('tabindex', '0')\n this.#trigger.id = id\n\n this.#triggerLabel = document.createElement('span')\n this.#triggerLabel.setAttribute('data-label', '')\n this.#trigger.appendChild(this.#triggerLabel)\n\n this.#chevron = document.createElement('span')\n this.#chevron.setAttribute('data-chevron', '')\n this.#chevron.innerHTML = CHEVRON_SVG\n this.#trigger.appendChild(this.#chevron)\n\n // ── Stamp popover + listbox ──────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('data-dropdown', '')\n\n this.#listboxEl = document.createElement('aui-listbox')\n this.#popover.appendChild(this.#listboxEl)\n\n // Move child options into listbox\n const children = Array.from(this.children)\n for (const child of children) {\n if (isOptionOrGroup(child)) {\n this.#listboxEl.appendChild(child)\n }\n }\n\n this.appendChild(this.#trigger!)\n this.appendChild(this.#popover!)\n\n // Anchor positioning\n ;(this.#trigger.style as any).anchorName = this.#anchorName\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // Sync state\n this.addEffect(() => {\n if (this.disabled) {\n this.#trigger!.setAttribute('tabindex', '-1')\n } else {\n this.#trigger!.setAttribute('tabindex', '0')\n }\n this.#trigger!.setAttribute('aria-expanded', String(this.open))\n this.#trigger!.setAttribute('aria-disabled', String(this.disabled))\n this.#internals.setFormValue(this.value || null)\n this.#dropdownUpdateLabel()\n })\n\n // Events\n this.#trigger.addEventListener('click', this.#dropdownTriggerClick)\n this.#trigger.addEventListener('keydown', this.#dropdownTriggerKeydown)\n this.#listboxEl.addEventListener('click', this.#dropdownListboxClick)\n this.#listboxEl.addEventListener('change', this.#dropdownListboxChange as EventListener)\n this.#listboxEl.addEventListener('keydown', this.#dropdownListboxKeydown)\n document.addEventListener('click', this.#dropdownOutsideClick)\n\n if (this.value) {\n (this.#listboxEl as any).value = this.value\n }\n }\n\n #dropdownListboxClick = (e: Event): void => {\n const option = (e.target as HTMLElement).closest('aui-option') as HTMLElement | null\n if (!option || option.hasAttribute('disabled')) return\n\n // Select the option\n for (const opt of this.#listboxEl!.querySelectorAll('aui-option')) {\n ;(opt as any).selected = false\n }\n ;(option as any).selected = true\n this.value = (option as any).value ?? option.getAttribute('value') ?? ''\n\n // Fire change\n this.#listboxEl!.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { value: this.value, option },\n }))\n\n this.#closePopover()\n }\n\n #disposeDropdown(): void {\n this.#trigger?.removeEventListener('click', this.#dropdownTriggerClick)\n this.#trigger?.removeEventListener('keydown', this.#dropdownTriggerKeydown)\n this.#listboxEl?.removeEventListener('click', this.#dropdownListboxClick)\n this.#listboxEl?.removeEventListener('change', this.#dropdownListboxChange as EventListener)\n this.#listboxEl?.removeEventListener('keydown', this.#dropdownListboxKeydown)\n document.removeEventListener('click', this.#dropdownOutsideClick)\n this.#closePopover()\n }\n\n #dropdownUpdateLabel(): void {\n if (!this.#triggerLabel) return\n const selected = this.#listboxEl?.querySelector('aui-option[selected]') as any\n if (selected) {\n this.#triggerLabel.textContent = selected.displayLabel ?? selected.textContent?.trim() ?? ''\n this.#triggerLabel.removeAttribute('data-placeholder')\n } else {\n this.#triggerLabel.textContent = this.placeholder\n this.#triggerLabel.setAttribute('data-placeholder', '')\n }\n }\n\n #dropdownTriggerClick = (): void => {\n if (this.disabled) return\n if (this.open) this.#closePopover()\n else this.#openPopover()\n }\n\n #dropdownTriggerKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n if (!this.open) this.#openPopover()\n } else if (e.key === 'Escape') {\n this.#closePopover()\n }\n }\n\n #dropdownListboxChange = (e: CustomEvent): void => {\n e.stopPropagation()\n this.value = e.detail.value\n this.#internals.setFormValue(this.value || null)\n this.#dropdownUpdateLabel()\n this.#closePopover()\n this.#trigger?.focus()\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, detail: e.detail }))\n }\n\n #dropdownListboxKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') { e.preventDefault(); this.#closePopover(); this.#trigger?.focus() }\n else if (e.key === 'Tab') { this.#closePopover() }\n }\n\n #dropdownOutsideClick = (e: Event): void => {\n if (this.open && !this.contains(e.target as Node)) this.#closePopover()\n }\n\n // ════════════════════════════════════════════════════════════\n // MODE: Bar (toolbar)\n // ════════════════════════════════════════════════════════════\n\n #activateBar(): void {\n this.setAttribute('role', 'toolbar')\n if (!this.hasAttribute('aria-label')) {\n this.setAttribute('aria-label', 'Toolbar')\n }\n if (this.orientation) {\n this.setAttribute('aria-orientation', this.orientation || 'horizontal')\n }\n\n // ── Stamp overflow trigger + popover ──────────────\n this.#barTriggerBtn = document.createElement('span')\n this.#barTriggerBtn.setAttribute('data-overflow-trigger', '')\n this.#barTriggerBtn.setAttribute('role', 'button')\n this.#barTriggerBtn.setAttribute('tabindex', '0')\n this.#barTriggerBtn.setAttribute('aria-label', 'More actions')\n this.#barTriggerBtn.setAttribute('aria-haspopup', 'true')\n this.#barTriggerBtn.innerHTML = MORE_ICON\n this.appendChild(this.#barTriggerBtn)\n\n this.#barOverflowPopover = document.createElement('div')\n this.#barOverflowPopover.setAttribute('data-overflow-popover', '')\n this.#barOverflowPopover.setAttribute('popover', 'auto')\n this.#barOverflowPopover.setAttribute('role', 'menu')\n this.appendChild(this.#barOverflowPopover)\n\n this.#barOverflowList = document.createElement('div')\n this.#barOverflowList.setAttribute('data-overflow-list', '')\n this.#barOverflowPopover.appendChild(this.#barOverflowList)\n\n // Wire trigger\n this.#barTriggerBtn.addEventListener('click', this.#barOnTriggerClick)\n this.#barTriggerBtn.addEventListener('keydown', this.#barOnTriggerKeydown)\n this.#barOverflowList.addEventListener('click', this.#barOnOverflowItemClick)\n\n // Keyboard navigation\n this.addEventListener('keydown', this.#barHandleKeydown)\n\n // Auto-stamp dividers between adjacent optgroups\n this.#barStampGroupDividers()\n\n // Observe resize\n this.#resizeObserver = new ResizeObserver(() => this.#barScheduleMeasure())\n this.#resizeObserver.observe(this)\n\n // Observe child changes (ignore mutations inside the overflow popover)\n this.#mutationObserver = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (this.#barOverflowPopover?.contains(m.target as Node)) continue\n this.#barScheduleMeasure()\n return\n }\n })\n this.#mutationObserver.observe(this, { childList: true, subtree: true })\n\n // Initial measure\n this.#barScheduleMeasure()\n }\n\n #disposeBar(): void {\n if (this.#measureRaf !== null) cancelAnimationFrame(this.#measureRaf)\n this.#resizeObserver?.disconnect()\n this.#mutationObserver?.disconnect()\n this.removeEventListener('keydown', this.#barHandleKeydown)\n this.#barTriggerBtn?.removeEventListener('click', this.#barOnTriggerClick)\n this.#barTriggerBtn?.removeEventListener('keydown', this.#barOnTriggerKeydown)\n this.#barOverflowList?.removeEventListener('click', this.#barOnOverflowItemClick)\n }\n\n // ── Bar: Group dividers ───────────────────────────────\n\n #barStampGroupDividers(): void {\n const children = Array.from(this.children)\n let prevWasGroup = false\n\n for (const child of children) {\n if (!(child instanceof HTMLElement)) continue\n if (child.hasAttribute('data-overflow-trigger') || child.hasAttribute('data-overflow-popover')) continue\n\n const isGroup = child.tagName === 'AUI-OPTGROUP'\n if (isGroup && prevWasGroup) {\n // Insert divider before this group\n const hr = document.createElement('hr')\n hr.setAttribute('data-group-divider', '')\n this.insertBefore(hr, child)\n }\n if (isGroup || isOptionTag(child.tagName)) {\n prevWasGroup = isGroup\n }\n }\n }\n\n // ── Bar: Measurement ───────────────────────────────────\n\n #barScheduleMeasure(): void {\n if (this.#measureRaf !== null) return\n this.#measureRaf = requestAnimationFrame(() => {\n this.#measureRaf = null\n this.#barMeasure()\n })\n }\n\n #barGetContentChildren(): HTMLElement[] {\n return Array.from(this.children).filter(\n (c): c is HTMLElement =>\n c instanceof HTMLElement &&\n !c.hasAttribute('data-overflow-trigger') &&\n !c.hasAttribute('data-overflow-popover')\n )\n }\n\n #barMeasure(): void {\n if (this.orientation === 'vertical') {\n this.#barClearOverflow()\n return\n }\n\n // Pause mutation observer to prevent loops\n this.#mutationObserver?.disconnect()\n\n // Ensure trigger + popover are at the end\n if (this.#barTriggerBtn && this.#barTriggerBtn.nextElementSibling !== this.#barOverflowPopover) {\n this.appendChild(this.#barTriggerBtn)\n }\n if (this.#barOverflowPopover && this.#barOverflowPopover !== this.lastElementChild) {\n this.appendChild(this.#barOverflowPopover)\n }\n\n const children = this.#barGetContentChildren()\n if (children.length === 0) {\n this.#barReconnectMutationObserver()\n return\n }\n\n // Reset\n for (const child of children) {\n child.removeAttribute('data-select-overflow')\n }\n this.removeAttribute('data-select-overflowing')\n\n // Enter measurement mode\n this.setAttribute('data-select-measuring', '')\n\n const cs = getComputedStyle(this)\n const gap = parseFloat(cs.gap) || 0\n const contentWidth =\n this.clientWidth -\n (parseFloat(cs.paddingInlineStart) || 0) -\n (parseFloat(cs.paddingInlineEnd) || 0)\n\n if (contentWidth <= 0) {\n this.removeAttribute('data-select-measuring')\n this.#barReconnectMutationObserver()\n return\n }\n\n const units = this.#barBuildOverflowUnits(children)\n\n // Sum intrinsic widths\n let totalWidth = 0\n let flatIndex = 0\n for (const unit of units) {\n for (const item of unit.flexItems) {\n if (flatIndex > 0) totalWidth += gap\n totalWidth += item.offsetWidth\n flatIndex++\n }\n }\n\n // No overflow (1px tolerance for subpixel rounding in offsetWidth)\n if (totalWidth <= contentWidth + 1) {\n this.removeAttribute('data-select-measuring')\n this.#barClearOverflowMenu()\n this.#barReconnectMutationObserver()\n return\n }\n\n // Overflow detected\n this.setAttribute('data-select-overflowing', '')\n\n // Measure per-unit widths\n for (const unit of units) {\n let w = 0\n for (let i = 0; i < unit.flexItems.length; i++) {\n if (i > 0) w += gap\n w += unit.flexItems[i].offsetWidth\n }\n unit.width = w\n }\n\n // Exit measurement mode\n this.removeAttribute('data-select-measuring')\n\n // Trigger button width\n const triggerWidth = this.#barTriggerBtn?.offsetWidth ?? 0\n\n // Filter candidates (not pinned)\n const candidates = units.filter(u => !u.pinned)\n if (candidates.length === 0) {\n this.#barClearOverflowMenu()\n this.#barReconnectMutationObserver()\n return\n }\n\n // Sort: low priority first, then reverse DOM order within same priority\n candidates.sort((a, b) => {\n const pa = PRIORITY_ORDER[a.priority] ?? 1\n const pb = PRIORITY_ORDER[b.priority] ?? 1\n if (pa !== pb) return pa - pb\n return b.index - a.index\n })\n\n // Greedy overflow: remove lowest-priority items until remaining fits\n const overflowed = new Set<HTMLElement>()\n let remaining = totalWidth\n const available = contentWidth - triggerWidth - gap\n\n for (const unit of candidates) {\n if (remaining <= available) break\n overflowed.add(unit.el)\n remaining -= unit.width + gap\n }\n\n if (overflowed.size === 0) {\n this.removeAttribute('data-select-overflowing')\n this.#barClearOverflowMenu()\n this.#barReconnectMutationObserver()\n return\n }\n\n // Apply data-overflow (and hide adjacent group dividers)\n for (const el of overflowed) {\n el.setAttribute('data-select-overflow', '')\n // Hide adjacent auto-stamped group dividers\n const prev = el.previousElementSibling\n if (prev?.hasAttribute('data-group-divider')) {\n prev.setAttribute('data-select-overflow', '')\n }\n const next = el.nextElementSibling\n if (next?.hasAttribute('data-group-divider')) {\n next.setAttribute('data-select-overflow', '')\n }\n }\n\n // Rebuild overflow menu\n this.#barRebuildOverflowMenu()\n this.#barReconnectMutationObserver()\n }\n\n #barBuildOverflowUnits(children: HTMLElement[]): OverflowUnit[] {\n const units: OverflowUnit[] = []\n for (let i = 0; i < children.length; i++) {\n const child = children[i]\n if (child.tagName === 'HR' || child.tagName === 'AUI-DIVIDER') continue\n\n // Read priority: data-priority > overflow-priority > default \"normal\"\n const rawPriority = child.getAttribute('data-priority')\n ?? child.getAttribute('overflow-priority')\n ?? 'normal'\n const priority = rawPriority as OverflowUnit['priority']\n const pinned = rawPriority === 'pin' || child.hasAttribute('overflow-pin')\n\n if (child.tagName === 'AUI-OPTGROUP') {\n const flexItems: HTMLElement[] = []\n for (const gc of child.children) {\n if (gc instanceof HTMLElement && gc.tagName !== 'HR' && gc.tagName !== 'AUI-DIVIDER') {\n flexItems.push(gc)\n }\n }\n units.push({ el: child, flexItems, priority, pinned, index: i, width: 0 })\n } else {\n units.push({ el: child, flexItems: [child], priority, pinned, index: i, width: 0 })\n }\n }\n return units\n }\n\n // ── Bar: Overflow menu ─────────────────────────────────\n\n #barClearOverflow(): void {\n for (const child of this.#barGetContentChildren()) {\n child.removeAttribute('data-select-overflow')\n }\n this.removeAttribute('data-select-overflowing')\n this.removeAttribute('data-select-measuring')\n this.#barClearOverflowMenu()\n }\n\n #barClearOverflowMenu(): void {\n if (this.#barOverflowList) this.#barOverflowList.innerHTML = ''\n }\n\n #barRebuildOverflowMenu(): void {\n this.#barClearOverflowMenu()\n if (!this.#barOverflowList) return\n\n const children = this.#barGetContentChildren()\n let itemIndex = 0\n\n for (const child of children) {\n if (!child.hasAttribute('data-select-overflow')) continue\n\n if (child.tagName === 'AUI-OPTGROUP') {\n // Clone the group with its options into the overflow menu\n const group = document.createElement('aui-optgroup')\n const groupLabel = child.getAttribute('label')\n if (groupLabel) group.setAttribute('label', groupLabel)\n group.setAttribute('divider', '')\n\n for (const gc of child.children) {\n if (!(gc instanceof HTMLElement)) continue\n if (gc.tagName === 'HR' || gc.tagName === 'AUI-DIVIDER' || gc.hasAttribute('data-group-label')) continue\n\n const option = document.createElement('aui-option')\n option.textContent = this.#barExtractLabel(gc)\n option.setAttribute('data-overflow-index', String(itemIndex))\n group.appendChild(option)\n itemIndex++\n }\n\n this.#barOverflowList.appendChild(group)\n } else if (child.tagName !== 'HR' && child.tagName !== 'AUI-DIVIDER') {\n const option = document.createElement('aui-option')\n option.textContent = this.#barExtractLabel(child)\n option.setAttribute('data-overflow-index', String(itemIndex))\n this.#barOverflowList.appendChild(option)\n itemIndex++\n }\n }\n }\n\n /** Flat list of overflowed source elements, in DOM order (for click dispatch). */\n #barGetOverflowSources(): HTMLElement[] {\n const sources: HTMLElement[] = []\n for (const child of this.#barGetContentChildren()) {\n if (!child.hasAttribute('data-select-overflow')) continue\n if (child.tagName === 'AUI-OPTGROUP') {\n for (const gc of child.children) {\n if (gc instanceof HTMLElement && gc.tagName !== 'HR' && gc.tagName !== 'AUI-DIVIDER' && !gc.hasAttribute('data-group-label')) {\n sources.push(gc)\n }\n }\n } else if (child.tagName !== 'HR' && child.tagName !== 'AUI-DIVIDER') {\n sources.push(child)\n }\n }\n return sources\n }\n\n #barExtractLabel(el: HTMLElement): string {\n const ariaLabel = el.getAttribute('aria-label')\n if (ariaLabel) return ariaLabel\n const labelAttr = el.getAttribute('label')\n if (labelAttr) return labelAttr\n const text = el.textContent?.trim()\n if (text) return text\n const icon = el.getAttribute('icon')\n if (icon) return icon.charAt(0).toUpperCase() + icon.slice(1).replace(/-/g, ' ')\n return 'Action'\n }\n\n #barReconnectMutationObserver(): void {\n this.#mutationObserver?.observe(this, { childList: true, subtree: true })\n }\n\n // ── Bar: Event handlers ────────────────────────────────\n\n #barOnTriggerClick = (e: Event): void => {\n e.stopPropagation()\n this.#barPositionPopover()\n this.#barOverflowPopover?.togglePopover()\n }\n\n #barOnTriggerKeydown = (e: Event): void => {\n const ke = e as KeyboardEvent\n if (ke.key === 'Enter' || ke.key === ' ') {\n ke.preventDefault()\n this.#barPositionPopover()\n this.#barOverflowPopover?.togglePopover()\n }\n }\n\n #barPositionPopover(): void {\n if (!this.#barTriggerBtn || !this.#barOverflowPopover) return\n const rect = this.#barTriggerBtn.getBoundingClientRect()\n this.#barOverflowPopover.style.top = `${rect.bottom + 2}px`\n this.#barOverflowPopover.style.right = `${window.innerWidth - rect.right}px`\n }\n\n #barOnOverflowItemClick = (e: Event): void => {\n const target = (e.target as HTMLElement).closest('[data-overflow-index]') as HTMLElement | null\n if (!target) return\n\n const index = parseInt(target.getAttribute('data-overflow-index')!, 10)\n const source = this.#barGetOverflowSources()[index]\n if (source) source.click()\n\n this.#barOverflowPopover?.hidePopover()\n }\n\n // ── Bar: Keyboard navigation ───────────────────────────\n\n #barGetFocusable(): HTMLElement[] {\n const all: HTMLElement[] = []\n const selector = this.hasAttribute('data-select-overflowing')\n ? FOCUSABLE_BAR_WITH_TRIGGER\n : FOCUSABLE_BAR\n\n for (const child of this.#barGetContentChildren()) {\n if (child.hasAttribute('data-select-overflow')) continue\n if (child.tagName === 'AUI-OPTGROUP') {\n for (const gc of child.children) {\n if (gc instanceof HTMLElement && gc.matches(selector)) all.push(gc)\n }\n } else if (child.matches(selector)) {\n all.push(child)\n }\n }\n\n // Include trigger when overflowing\n if (this.#barTriggerBtn && this.hasAttribute('data-select-overflowing')) {\n all.push(this.#barTriggerBtn)\n }\n\n return all\n }\n\n #barHandleKeydown = (e: KeyboardEvent): void => {\n const isVertical = this.orientation === 'vertical'\n const forward = isVertical ? 'ArrowDown' : 'ArrowRight'\n const backward = isVertical ? 'ArrowUp' : 'ArrowLeft'\n\n if (e.key !== forward && e.key !== backward && e.key !== 'Home' && e.key !== 'End') return\n\n const items = this.#barGetFocusable()\n if (items.length === 0) return\n\n const current = items.indexOf(document.activeElement as HTMLElement)\n let next: number | undefined\n\n switch (e.key) {\n case forward:\n next = current < items.length - 1 ? current + 1 : 0\n break\n case backward:\n next = current > 0 ? current - 1 : items.length - 1\n break\n case 'Home':\n next = 0\n break\n case 'End':\n next = items.length - 1\n break\n }\n\n if (next !== undefined) {\n e.preventDefault()\n items[next].setAttribute('tabindex', '0')\n items[next].focus()\n if (current >= 0 && current !== next) {\n items[current].setAttribute('tabindex', '-1')\n }\n }\n }\n\n // ════════════════════════════════════════════════════════════\n // MODE: List (standalone listbox)\n // ════════════════════════════════════════════════════════════\n\n #activateList(): void {\n this.setAttribute('role', 'listbox')\n\n this.addEffect(() => {\n if (this.multiple) {\n this.setAttribute('aria-multiselectable', 'true')\n } else {\n this.removeAttribute('aria-multiselectable')\n }\n })\n\n // Initial selection from value\n if (this.value) {\n this.#listSyncSelection()\n }\n\n this.addEventListener('click', this.#listHandleClick)\n this.addEventListener('keydown', this.#listHandleKeydown)\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0')\n }\n }\n\n #disposeList(): void {\n this.removeEventListener('click', this.#listHandleClick)\n this.removeEventListener('keydown', this.#listHandleKeydown)\n if (this.#typeTimer) clearTimeout(this.#typeTimer)\n }\n\n // ── List: Selection ────────────────────────────────────\n\n #listSelectOption(opt: HTMLElement): void {\n if (!this.multiple) {\n for (const o of this.options) {\n o.removeAttribute('selected')\n }\n }\n\n const wasSelected = opt.hasAttribute('selected')\n if (this.multiple && wasSelected) {\n opt.removeAttribute('selected')\n } else {\n opt.setAttribute('selected', '')\n }\n\n this.#listSyncValue()\n\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: {\n value: this.value,\n option: opt,\n label: (opt as any).displayLabel ?? opt.textContent?.trim() ?? '',\n },\n }))\n }\n\n #listSyncValue(): void {\n const selected = this.options.filter(o => o.hasAttribute('selected'))\n if (this.multiple) {\n this.value = selected.map(o => o.getAttribute('value') ?? o.textContent?.trim() ?? '').join(',')\n } else {\n const opt = selected[0]\n this.value = opt?.getAttribute('value') ?? opt?.textContent?.trim() ?? ''\n }\n this.#internals.setFormValue(this.value || null)\n }\n\n #listSyncSelection(): void {\n const values = this.value.split(',').map(v => v.trim()).filter(Boolean)\n for (const opt of this.options) {\n const optVal = opt.getAttribute('value') ?? opt.textContent?.trim() ?? ''\n if (values.includes(optVal)) {\n opt.setAttribute('selected', '')\n } else {\n opt.removeAttribute('selected')\n }\n }\n }\n\n // ── List: Active (keyboard highlight) ──────────────────\n\n #listSetActive(index: number): void {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n\n this.#listClearActive()\n\n this.#listActiveIndex = Math.max(0, Math.min(index, opts.length - 1))\n const opt = opts[this.#listActiveIndex]\n opt.setAttribute('data-navigate-active', '')\n opt.scrollIntoView({ block: 'nearest' })\n\n if (opt.id) {\n this.setAttribute('aria-activedescendant', opt.id)\n }\n }\n\n #listClearActive(): void {\n for (const opt of this.options) {\n opt.removeAttribute('data-navigate-active')\n }\n this.removeAttribute('aria-activedescendant')\n }\n\n // ── List: Event handlers ───────────────────────────────\n\n #listHandleClick = (e: Event): void => {\n const target = (e.target as HTMLElement).closest('aui-option')\n if (!target || target.hasAttribute('disabled')) return\n\n this.#listSelectOption(target as HTMLElement)\n\n const idx = this.enabledOptions.indexOf(target as HTMLElement)\n if (idx >= 0) this.#listSetActive(idx)\n }\n\n #listHandleKeydown = (e: KeyboardEvent): void => {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const next = this.#listActiveIndex < opts.length - 1 ? this.#listActiveIndex + 1 : 0\n this.#listSetActive(next)\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const prev = this.#listActiveIndex > 0 ? this.#listActiveIndex - 1 : opts.length - 1\n this.#listSetActive(prev)\n break\n }\n case 'Home': {\n e.preventDefault()\n this.#listSetActive(0)\n break\n }\n case 'End': {\n e.preventDefault()\n this.#listSetActive(opts.length - 1)\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n const active = opts[this.#listActiveIndex]\n if (active) this.#listSelectOption(active)\n break\n }\n default: {\n // Type-ahead\n if (e.key.length === 1 && !e.ctrlKey && !e.metaKey) {\n this.#listHandleTypeAhead(e.key)\n }\n }\n }\n }\n\n #listHandleTypeAhead(char: string): void {\n this.#typeBuffer += char.toLowerCase()\n if (this.#typeTimer) clearTimeout(this.#typeTimer)\n this.#typeTimer = setTimeout(() => { this.#typeBuffer = '' }, 500)\n\n const opts = this.enabledOptions\n const match = opts.findIndex(o => {\n const label = (o as any).displayLabel?.toLowerCase() ?? o.textContent?.trim().toLowerCase() ?? ''\n return label.startsWith(this.#typeBuffer)\n })\n\n if (match >= 0) this.#listSetActive(match)\n }\n\n // ════════════════════════════════════════════════════════════\n // MODE: Combobox (searchable dropdown)\n // ════════════════════════════════════════════════════════════\n\n #activateCombobox(): void {\n const id = `combobox-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // Stamp contenteditable search surface\n this.#comboSurface = document.createElement('span')\n this.#comboSurface.setAttribute('data-input', '')\n this.#comboSurface.setAttribute('contenteditable', 'plaintext-only')\n this.#comboSurface.setAttribute('role', 'combobox')\n this.#comboSurface.setAttribute('aria-haspopup', 'listbox')\n this.#comboSurface.setAttribute('aria-autocomplete', 'list')\n this.#comboSurface.setAttribute('tabindex', '0')\n this.#comboSurface.id = id\n\n // Stamp popover + listbox\n this.#comboPopover = document.createElement('div')\n this.#comboPopover.setAttribute('popover', 'manual')\n this.#comboPopover.setAttribute('data-dropdown', '')\n\n this.#comboListbox = document.createElement('aui-listbox')\n this.#comboListbox.id = `${id}-listbox`\n this.#comboSurface.setAttribute('aria-controls', this.#comboListbox.id)\n this.#comboPopover.appendChild(this.#comboListbox)\n\n // Move child options into listbox\n const children = Array.from(this.children)\n for (const child of children) {\n if (isOptionOrGroup(child)) {\n this.#comboListbox.appendChild(child)\n }\n }\n this.#allComboOptions = Array.from(this.#comboListbox.querySelectorAll('aui-option'))\n\n this.appendChild(this.#comboSurface!)\n this.appendChild(this.#comboPopover!)\n\n ;(this.#comboSurface!.style as any).anchorName = this.#anchorName\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // Sync state\n this.addEffect(() => {\n const locked = this.disabled\n this.#comboSurface!.setAttribute('contenteditable', locked ? 'false' : 'plaintext-only')\n this.#comboSurface!.setAttribute('tabindex', locked ? '-1' : '0')\n this.#comboSurface!.setAttribute('aria-expanded', String(this.open))\n this.#comboSurface!.setAttribute('data-placeholder', this.placeholder || '')\n this.#internals.setFormValue(this.value || null)\n\n const empty = !(this.#comboSurface!.textContent?.trim())\n this.toggleAttribute('data-input-empty', empty)\n })\n\n // Set initial display value\n if (this.value) {\n const match = this.#allComboOptions.find(\n o => (o.getAttribute('value') ?? o.textContent?.trim()) === this.value\n )\n if (match && this.#comboSurface) {\n this.#comboSurface.textContent = (match as any).displayLabel ?? match.textContent?.trim() ?? ''\n }\n }\n\n this.#comboSurface.addEventListener('input', this.#comboHandleInput)\n this.#comboSurface.addEventListener('focus', this.#comboHandleFocus)\n this.#comboSurface.addEventListener('keydown', this.#comboHandleKeydown)\n this.#comboListbox.addEventListener('change', this.#comboHandleListboxChange as EventListener)\n this.#comboListbox.addEventListener('keydown', this.#comboHandleListboxKeydown)\n document.addEventListener('click', this.#comboHandleOutsideClick)\n }\n\n #disposeCombobox(): void {\n this.#comboSurface?.removeEventListener('input', this.#comboHandleInput)\n this.#comboSurface?.removeEventListener('focus', this.#comboHandleFocus)\n this.#comboSurface?.removeEventListener('keydown', this.#comboHandleKeydown)\n this.#comboListbox?.removeEventListener('change', this.#comboHandleListboxChange as EventListener)\n this.#comboListbox?.removeEventListener('keydown', this.#comboHandleListboxKeydown)\n document.removeEventListener('click', this.#comboHandleOutsideClick)\n this.#closePopover()\n }\n\n #comboFilter(query: string): void {\n const q = query.toLowerCase()\n for (const opt of this.#allComboOptions) {\n const label = (opt as any).displayLabel?.toLowerCase() ?? opt.textContent?.trim().toLowerCase() ?? ''\n opt.style.display = (!q || label.includes(q)) ? '' : 'none'\n }\n // Filter groups — hide groups with no visible options\n const groups = this.#comboListbox?.querySelectorAll('aui-optgroup') ?? []\n for (const group of groups) {\n const hasVisible = group.querySelector('aui-option:not([style*=\"display: none\"])')\n ;(group as HTMLElement).style.display = hasVisible ? '' : 'none'\n }\n }\n\n #comboHandleInput = (): void => {\n if (!this.open) this.#openPopover()\n this.#comboFilter(this.#comboSurface?.textContent ?? '')\n this.toggleAttribute('data-input-empty', !(this.#comboSurface?.textContent?.trim()))\n }\n\n #comboHandleFocus = (): void => {\n this.#openPopover()\n this.#comboFilter(this.#comboSurface?.textContent ?? '')\n }\n\n #comboHandleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter') {\n e.preventDefault()\n const lb = this.#comboListbox as any\n const active = lb?.activeOption\n if (active && this.open) active.click()\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n if (!this.open) this.#openPopover()\n this.#comboListbox?.focus()\n } else if (e.key === 'Escape') {\n this.#closePopover()\n }\n }\n\n #comboHandleListboxChange = (e: CustomEvent): void => {\n e.stopPropagation()\n this.value = e.detail.value\n this.#internals.setFormValue(this.value || null)\n if (this.#comboSurface) this.#comboSurface.textContent = e.detail.label ?? ''\n this.toggleAttribute('data-input-empty', !this.value)\n this.#closePopover()\n this.#comboSurface?.focus()\n this.#comboFilter('')\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, detail: e.detail }))\n }\n\n #comboHandleListboxKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') { e.preventDefault(); this.#closePopover(); this.#comboSurface?.focus() }\n else if (e.key === 'Tab') { this.#closePopover() }\n }\n\n #comboHandleOutsideClick = (e: Event): void => {\n if (this.open && !this.contains(e.target as Node)) this.#closePopover()\n }\n}\n","// ── aui-toast ────────────────────────────────────────────────\n//\n// Toast notification — no native <button> elements.\n// Close indicator is a span[role=\"button\"].\n// Imperative API: AuiToast.show({ message, intent, duration }).\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport interface ToastOptions {\n message: string\n intent?: 'info' | 'success' | 'warning' | 'danger'\n duration?: number\n closeable?: boolean\n}\n\nlet containerEl: HTMLElement | null = null\n\nfunction getContainer(): HTMLElement {\n if (containerEl && containerEl.isConnected) return containerEl\n containerEl = document.querySelector('aui-toast-container')\n if (!containerEl) {\n containerEl = document.createElement('aui-toast-container')\n document.body.appendChild(containerEl)\n }\n return containerEl\n}\n\nexport class AuiToast extends AgentElement {\n static override attributes: AttributeSchema = {\n open: { type: 'boolean', default: false },\n message: { type: 'string', default: '' },\n duration: { type: 'string', default: '4000' },\n closeable: { type: 'boolean', default: true },\n }\n\n declare open: boolean\n declare message: string\n declare duration: string\n declare closeable: boolean\n\n #timer: ReturnType<typeof setTimeout> | null = null\n #closeEl: HTMLElement | null = null\n #content: HTMLElement | null = null\n\n static show(opts: ToastOptions): AuiToast {\n const toast = document.createElement('aui-toast') as AuiToast\n toast.setAttribute('message', opts.message)\n if (opts.intent) toast.setAttribute(opts.intent, '')\n if (opts.duration !== undefined) toast.setAttribute('duration', String(opts.duration))\n if (opts.closeable === false) toast.removeAttribute('closeable')\n else toast.setAttribute('closeable', '')\n getContainer().appendChild(toast)\n requestAnimationFrame(() => toast.setAttribute('open', ''))\n return toast\n }\n\n protected override activate(): void {\n this.setAttribute('role', 'status')\n this.setAttribute('aria-live', 'polite')\n\n this.#content = document.createElement('span')\n this.#content.setAttribute('data-message', '')\n this.appendChild(this.#content)\n\n this.#closeEl = document.createElement('span')\n this.#closeEl.setAttribute('data-close', '')\n this.#closeEl.setAttribute('role', 'button')\n this.#closeEl.setAttribute('tabindex', '0')\n this.#closeEl.setAttribute('aria-label', 'Dismiss')\n this.#closeEl.textContent = '✕'\n this.appendChild(this.#closeEl)\n\n this.addEffect(() => {\n if (this.#content) this.#content.textContent = this.message\n })\n\n this.addEffect(() => {\n if (this.#closeEl) {\n this.#closeEl.style.display = this.closeable ? '' : 'none'\n }\n })\n\n this.addEffect(() => {\n if (this.#timer) clearTimeout(this.#timer)\n if (this.open) {\n const ms = parseInt(this.duration, 10) || 4000\n if (ms > 0) {\n this.#timer = setTimeout(() => this.dismiss(), ms)\n }\n }\n })\n\n this.#closeEl.addEventListener('click', this.#handleClose)\n this.#closeEl.addEventListener('keydown', this.#handleCloseKeydown)\n }\n\n protected override dispose(): void {\n if (this.#timer) clearTimeout(this.#timer)\n this.#closeEl?.removeEventListener('click', this.#handleClose)\n this.#closeEl?.removeEventListener('keydown', this.#handleCloseKeydown)\n }\n\n dismiss(): void {\n this.open = false\n this.dispatchEvent(new Event('dismiss', { bubbles: true }))\n setTimeout(() => this.remove(), 200)\n }\n\n #handleClose = (e: Event): void => {\n e.stopPropagation()\n this.dismiss()\n }\n\n #handleCloseKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n this.dismiss()\n }\n }\n}\n","// ── aui-tabs ─────────────────────────────────────────────────\n//\n// Tabbed interface coordinator. Contains aui-tab triggers and\n// aui-tab-panel content. Handles selection, keyboard navigation\n// (roving tabindex with arrow keys), and ARIA wiring.\n//\n// Structure:\n// <aui-tabs value=\"general\">\n// <aui-tab value=\"general\">General</aui-tab>\n// <aui-tab value=\"advanced\">Advanced</aui-tab>\n// <aui-tab-panel value=\"general\">…</aui-tab-panel>\n// <aui-tab-panel value=\"advanced\">…</aui-tab-panel>\n// </aui-tabs>\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTabs extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n orientation: { type: 'enum', values: ['vertical'], default: '' },\n }\n\n declare value: string\n declare orientation: string\n\n protected override activate(): void {\n this.setAttribute('role', 'tablist')\n\n this.addEffect(() => {\n if (this.orientation) {\n this.setAttribute('aria-orientation', this.orientation)\n } else {\n this.removeAttribute('aria-orientation')\n }\n })\n\n // Wire ARIA ids between tabs and panels\n this.#wireAria()\n\n // Set tab count for CSS grid\n this.style.setProperty('--_tab-count', String(this.#tabs.length))\n\n // Sync selection\n this.addEffect(() => {\n this.#syncSelection()\n })\n\n // Auto-select first tab if no value set\n if (!this.value) {\n const firstTab = this.querySelector('aui-tab:not([disabled])')\n if (firstTab) {\n this.value = firstTab.getAttribute('value') ?? ''\n }\n }\n\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n // ── Internal ──────────────────────────────────────────\n\n get #tabs(): HTMLElement[] {\n return Array.from(this.querySelectorAll('aui-tab'))\n }\n\n get #enabledTabs(): HTMLElement[] {\n return this.#tabs.filter(t => !t.hasAttribute('disabled'))\n }\n\n get #panels(): HTMLElement[] {\n return Array.from(this.querySelectorAll('aui-tab-panel'))\n }\n\n #wireAria(): void {\n const tabs = this.#tabs\n const panels = this.#panels\n\n for (const tab of tabs) {\n const val = tab.getAttribute('value') ?? ''\n if (!tab.id) tab.id = `tab-${val}-${crypto.randomUUID().slice(0, 4)}`\n\n const panel = panels.find(p => p.getAttribute('value') === val)\n if (panel) {\n if (!panel.id) panel.id = `panel-${val}-${crypto.randomUUID().slice(0, 4)}`\n tab.setAttribute('aria-controls', panel.id)\n panel.setAttribute('aria-labelledby', tab.id)\n }\n }\n }\n\n #syncSelection(): void {\n const val = this.value\n const tabs = this.#tabs\n let selectedIdx = -1\n\n for (let i = 0; i < tabs.length; i++) {\n const isSelected = tabs[i].getAttribute('value') === val\n if (isSelected) {\n tabs[i].setAttribute('selected', '')\n selectedIdx = i\n } else {\n tabs[i].removeAttribute('selected')\n }\n }\n\n for (const panel of this.#panels) {\n const isActive = panel.getAttribute('value') === val\n if (isActive) panel.setAttribute('active', '')\n else panel.removeAttribute('active')\n }\n\n // Update indicator position via CSS custom properties\n this.style.setProperty('--_tab-count', String(tabs.length))\n if (selectedIdx >= 0) {\n this.style.setProperty('--_indicator-index', String(selectedIdx))\n this.setAttribute('data-indicator-ready', '')\n } else {\n this.removeAttribute('data-indicator-ready')\n }\n }\n\n #select(tab: HTMLElement): void {\n if (tab.hasAttribute('disabled')) return\n const val = tab.getAttribute('value') ?? ''\n this.value = val\n\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { value: val },\n }))\n }\n\n #handleClick = (e: Event): void => {\n const tab = (e.target as HTMLElement).closest('aui-tab')\n if (tab && this.contains(tab)) {\n this.#select(tab as HTMLElement)\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n const target = e.target as HTMLElement\n if (target.tagName !== 'AUI-TAB') return\n\n const isVertical = this.orientation === 'vertical'\n const forward = isVertical ? 'ArrowDown' : 'ArrowRight'\n const backward = isVertical ? 'ArrowUp' : 'ArrowLeft'\n\n const tabs = this.#enabledTabs\n const idx = tabs.indexOf(target)\n if (idx < 0) return\n\n let next: number | undefined\n\n switch (e.key) {\n case forward:\n next = idx < tabs.length - 1 ? idx + 1 : 0\n break\n case backward:\n next = idx > 0 ? idx - 1 : tabs.length - 1\n break\n case 'Home':\n next = 0\n break\n case 'End':\n next = tabs.length - 1\n break\n default:\n return\n }\n\n e.preventDefault()\n const nextTab = tabs[next]\n nextTab.focus()\n this.#select(nextTab)\n }\n}\n","// ── aui-tab ──────────────────────────────────────────────────\n//\n// Individual tab trigger within aui-tabs. Lightweight — most\n// behavior is coordinated by the parent tabs component.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTab extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n selected: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare disabled: boolean\n declare selected: boolean\n\n protected override activate(): void {\n this.setAttribute('role', 'tab')\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', this.selected ? '0' : '-1')\n }\n\n this.addEffect(() => {\n this.setAttribute('aria-selected', String(this.selected))\n this.setAttribute('aria-disabled', String(this.disabled))\n this.setAttribute('tabindex', this.selected ? '0' : '-1')\n })\n }\n}\n","// ── aui-tab-panel ────────────────────────────────────────────\n//\n// Content panel associated with a tab. Shown/hidden by the\n// parent aui-tabs based on the active tab value.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTabPanel extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n active: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare active: boolean\n\n protected override activate(): void {\n this.setAttribute('role', 'tabpanel')\n\n this.addEffect(() => {\n this.setAttribute('aria-hidden', String(!this.active))\n if (!this.active) {\n this.setAttribute('tabindex', '-1')\n } else {\n this.setAttribute('tabindex', '0')\n }\n })\n }\n}\n","// ── aui-accordion ────────────────────────────────────────────\n//\n// Coordinator for aui-accordion-item children.\n// Enforces single-open behavior when `multiple` is not set.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiAccordion extends AgentElement {\n static override attributes: AttributeSchema = {\n multiple: { type: 'boolean', default: false },\n caret: { type: 'enum', values: ['leading', 'trailing'], default: 'leading' },\n }\n\n declare multiple: boolean\n declare caret: string\n\n protected override activate(): void {\n this.addEventListener('toggle', this.#handleToggle)\n }\n\n protected override dispose(): void {\n this.removeEventListener('toggle', this.#handleToggle)\n }\n\n #handleToggle = (e: Event): void => {\n if (this.multiple) return\n\n const target = e.target as HTMLElement\n if (target.tagName !== 'AUI-ACCORDION-ITEM') return\n if (!target.hasAttribute('open')) return\n\n // Close all other items\n const items = this.querySelectorAll('aui-accordion-item[open]')\n for (const item of items) {\n if (item !== target) {\n item.removeAttribute('open')\n }\n }\n }\n}\n","// ── aui-accordion-item ───────────────────────────────────────\n//\n// Collapsible section — no native <details>/<summary>.\n// Uses [data-header] as the trigger and [data-content] as the\n// collapsible panel. Open/close driven by the [open] attribute.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiAccordionItem extends AgentElement {\n static override attributes: AttributeSchema = {\n open: { type: 'boolean', default: false },\n disabled: { type: 'boolean', default: false },\n }\n\n declare open: boolean\n declare disabled: boolean\n\n #header: HTMLElement | null = null\n #content: HTMLElement | null = null\n\n protected override activate(): void {\n // Find or stamp header\n this.#header = this.querySelector('[data-header]')\n if (!this.#header) {\n this.#header = document.createElement('div')\n this.#header.setAttribute('data-header', '')\n this.#header.setAttribute('role', 'button')\n this.#header.setAttribute('tabindex', '0')\n\n // Stamp chevron using aui-icon\n const chevron = document.createElement('aui-icon')\n chevron.setAttribute('name', 'caret-right')\n chevron.setAttribute('data-chevron', '')\n this.#header.appendChild(chevron)\n\n // Move [data-trigger] content into header, or use first element child\n const triggerEl = this.querySelector('[data-trigger]')\n if (triggerEl) {\n this.#header.appendChild(triggerEl)\n } else {\n // First element child becomes the trigger label\n const firstEl = Array.from(this.childNodes).find(\n c => c.nodeType === Node.ELEMENT_NODE\n ) as HTMLElement | undefined\n if (firstEl) {\n this.#header.appendChild(firstEl)\n }\n }\n\n // Wrap remaining children in content panel\n this.#content = document.createElement('div')\n this.#content.setAttribute('data-content', '')\n while (this.firstChild && this.firstChild !== this.#header) {\n this.#content.appendChild(this.firstChild)\n }\n\n this.appendChild(this.#header)\n this.appendChild(this.#content)\n } else {\n this.#content = this.querySelector('[data-content]')\n }\n\n // ARIA\n const headerId = `acc-h-${crypto.randomUUID().slice(0, 6)}`\n const contentId = `acc-c-${crypto.randomUUID().slice(0, 6)}`\n this.#header.id = headerId\n if (this.#content) {\n this.#content.id = contentId\n this.#content.setAttribute('role', 'region')\n this.#content.setAttribute('aria-labelledby', headerId)\n }\n this.#header.setAttribute('aria-controls', contentId)\n\n this.addEffect(() => {\n this.#header!.setAttribute('aria-expanded', String(this.open))\n this.#header!.setAttribute('aria-disabled', String(this.disabled))\n })\n\n this.#header.addEventListener('click', this.#handleClick)\n this.#header.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.#header?.removeEventListener('click', this.#handleClick)\n this.#header?.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #toggle(): void {\n if (this.disabled) return\n this.open = !this.open\n this.dispatchEvent(new CustomEvent('toggle', { bubbles: true, detail: { open: this.open } }))\n }\n\n #handleClick = (): void => { this.#toggle() }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n this.#toggle()\n }\n }\n}\n","// ── aui-breadcrumb ───────────────────────────────────────────\n//\n// Breadcrumb navigation container. Sets nav + aria-label.\n// Children are aui-breadcrumb-item elements.\n// Auto-marks the last item as [current].\n// max-depth collapses middle items into an ellipsis trigger.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiBreadcrumb extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: 'Breadcrumb' },\n joiner: { type: 'string', default: '/' },\n 'max-depth': { type: 'string', default: '' },\n }\n\n declare label: string\n declare joiner: string\n declare 'max-depth': string\n\n #ellipsis: HTMLElement | null = null\n #dropdown: HTMLElement | null = null\n\n protected override activate(): void {\n this.setAttribute('role', 'navigation')\n\n this.addEffect(() => {\n this.setAttribute('aria-label', this.label || 'Breadcrumb')\n this.style.setProperty('--_joiner', `\"${this.joiner || '/'}\"`)\n this.#applyCurrentMark()\n this.#applyMaxDepth()\n })\n }\n\n /** Mark the last breadcrumb-item as [current] */\n #applyCurrentMark(): void {\n const items = Array.from(this.querySelectorAll('aui-breadcrumb-item'))\n for (const item of items) item.removeAttribute('current')\n const last = items[items.length - 1]\n if (last) last.setAttribute('current', '')\n }\n\n /** Collapse middle items when max-depth is set */\n #applyMaxDepth(): void {\n const maxDepth = parseInt(this['max-depth']) || 0\n const items = Array.from(this.children).filter(\n (c): c is HTMLElement => c.tagName === 'AUI-BREADCRUMB-ITEM'\n )\n\n // Clean up previous ellipsis\n if (this.#ellipsis) {\n this.#ellipsis.remove()\n this.#ellipsis = null\n }\n if (this.#dropdown) {\n this.#dropdown.remove()\n this.#dropdown = null\n }\n\n // Show all items first\n for (const item of items) item.style.display = ''\n\n if (!maxDepth || items.length <= maxDepth + 1) return\n\n // Hide middle items (keep first + last N)\n const hidden: HTMLElement[] = []\n const keepEnd = maxDepth\n for (let i = 1; i < items.length - keepEnd; i++) {\n items[i].style.display = 'none'\n hidden.push(items[i])\n }\n\n // Insert ellipsis button after first item\n const ellipsis = document.createElement('aui-breadcrumb-item')\n const btn = document.createElement('aui-button') as HTMLElement\n btn.setAttribute('ghost', '')\n btn.setAttribute('size', 'sm')\n btn.textContent = '…'\n btn.setAttribute('aria-label', `Show ${hidden.length} more levels`)\n ellipsis.appendChild(btn)\n this.#ellipsis = ellipsis\n\n // Insert after first item\n if (items[1]) {\n this.insertBefore(ellipsis, items[1])\n }\n\n // Click expands all\n btn.addEventListener('click', () => {\n for (const item of hidden) item.style.display = ''\n ellipsis.remove()\n this.#ellipsis = null\n })\n }\n}\n","// ── aui-breadcrumb-item ──────────────────────────────────────\n//\n// Individual breadcrumb link or current-page indicator.\n// Lightweight — mostly CSS-driven.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiBreadcrumbItem extends AgentElement {\n static override attributes: AttributeSchema = {\n href: { type: 'string', default: '' },\n current: { type: 'boolean', default: false },\n }\n\n declare href: string\n declare current: boolean\n\n #link: HTMLAnchorElement | null = null\n\n protected override activate(): void {\n this.addEffect(() => {\n if (this.current) {\n this.setAttribute('aria-current', 'page')\n } else {\n this.removeAttribute('aria-current')\n }\n })\n\n // Stamp <a> if href is set and not already present\n this.addEffect(() => {\n if (this.href && !this.current) {\n if (!this.#link) {\n this.#link = document.createElement('a')\n // Move text content into link\n while (this.firstChild && this.firstChild !== this.#link) {\n this.#link.appendChild(this.firstChild)\n }\n this.appendChild(this.#link)\n }\n this.#link.href = this.href\n }\n })\n }\n}\n","// ── aui-segmented-control ────────────────────────────────────\n//\n// Toggle between mutually exclusive options.\n// Floating indicator element animates between segments via\n// CSS transform — GPU-accelerated, no @property needed.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiSegmentedControl extends AgentElement {\n static formAssociated = true\n\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n name: { type: 'string', default: '' },\n }\n\n declare value: string\n declare name: string\n\n #internals: ElementInternals\n #indicator: HTMLElement | null = null\n\n constructor() {\n super()\n this.#internals = this.attachInternals()\n this.#internals.role = 'radiogroup'\n }\n\n protected override activate(): void {\n this.addEffect(() => {\n this.#internals.setFormValue(this.value || null)\n this.#syncSelection()\n this.#updateIndicator()\n })\n\n if (!this.value) {\n const first = this.querySelector('aui-segment:not([disabled])')\n if (first) this.value = first.getAttribute('value') ?? ''\n }\n\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n formDisabledCallback(disabled: boolean): void {\n for (const seg of this.#segments) seg.toggleAttribute('disabled', disabled)\n }\n\n formResetCallback(): void {\n const first = this.querySelector('aui-segment:not([disabled])')\n this.value = first?.getAttribute('value') ?? ''\n }\n\n get #segments(): HTMLElement[] {\n return Array.from(this.querySelectorAll('aui-segment'))\n }\n\n get #enabledSegments(): HTMLElement[] {\n return this.#segments.filter(s => !s.hasAttribute('disabled'))\n }\n\n #syncSelection(): void {\n for (const seg of this.#segments) {\n if (seg.getAttribute('value') === this.value) {\n seg.setAttribute('selected', '')\n } else {\n seg.removeAttribute('selected')\n }\n }\n }\n\n #updateIndicator(): void {\n const segs = this.#segments\n const selectedIdx = segs.findIndex(s => s.getAttribute('value') === this.value)\n\n if (selectedIdx < 0) {\n this.removeAttribute('data-indicator-ready')\n return\n }\n\n // Lazy-create floating indicator (real DOM element, not pseudo)\n if (!this.#indicator) {\n this.#indicator = document.createElement('div')\n this.#indicator.setAttribute('data-indicator', '')\n this.prepend(this.#indicator)\n }\n\n this.style.setProperty('--_segment-count', `${segs.length}`)\n this.#indicator.style.transform = `translateX(${selectedIdx * 100}%)`\n this.setAttribute('data-indicator-ready', '')\n }\n\n #select(seg: HTMLElement): void {\n if (seg.hasAttribute('disabled')) return\n this.value = seg.getAttribute('value') ?? ''\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, detail: { value: this.value } }))\n }\n\n #handleClick = (e: Event): void => {\n const seg = (e.target as HTMLElement).closest('aui-segment')\n if (seg && this.contains(seg)) this.#select(seg as HTMLElement)\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n const target = e.target as HTMLElement\n if (target.tagName !== 'AUI-SEGMENT') return\n const segs = this.#enabledSegments\n const idx = segs.indexOf(target)\n if (idx < 0) return\n let next: number | undefined\n switch (e.key) {\n case 'ArrowRight': case 'ArrowDown': next = idx < segs.length - 1 ? idx + 1 : 0; break\n case 'ArrowLeft': case 'ArrowUp': next = idx > 0 ? idx - 1 : segs.length - 1; break\n case 'Home': next = 0; break\n case 'End': next = segs.length - 1; break\n default: return\n }\n e.preventDefault()\n segs[next].focus()\n this.#select(segs[next])\n }\n}\n","// ── aui-segment ──────────────────────────────────────────────\n//\n// Individual segment within aui-segmented-control.\n// Lightweight — selection coordinated by parent.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiSegment extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n selected: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare disabled: boolean\n declare selected: boolean\n\n protected override activate(): void {\n this.setAttribute('role', 'radio')\n\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', this.selected ? '0' : '-1')\n }\n\n this.addEffect(() => {\n this.setAttribute('aria-checked', String(this.selected))\n this.setAttribute('aria-disabled', String(this.disabled))\n this.setAttribute('tabindex', this.selected ? '0' : '-1')\n })\n }\n}\n","// ── aui-pagination ───────────────────────────────────────────\n//\n// Page navigation — no native <button> elements.\n// Stamps span[role=\"button\"] for page numbers and prev/next.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiPagination extends AgentElement {\n static override attributes: AttributeSchema = {\n page: { type: 'string', default: '1' },\n total: { type: 'string', default: '1' },\n siblings: { type: 'string', default: '1' },\n }\n\n declare page: string\n declare total: string\n declare siblings: string\n\n protected override activate(): void {\n this.setAttribute('role', 'navigation')\n this.setAttribute('aria-label', 'Pagination')\n\n this.addEffect(() => { this.#render() })\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #render(): void {\n const current = parseInt(this.page, 10) || 1\n const total = parseInt(this.total, 10) || 1\n const siblings = parseInt(this.siblings, 10) || 1\n const pages = this.#computePages(current, total, siblings)\n\n this.innerHTML = ''\n\n const prev = this.#createPageEl('‹', current - 1, current <= 1)\n prev.setAttribute('aria-label', 'Previous page')\n prev.setAttribute('data-pagination-prev', '')\n this.appendChild(prev)\n\n for (const p of pages) {\n if (p === '…') {\n const el = document.createElement('span')\n el.setAttribute('data-pagination-ellipsis', '')\n el.textContent = '…'\n this.appendChild(el)\n } else {\n const num = p as number\n const el = this.#createPageEl(String(num), num, false)\n if (num === current) {\n el.setAttribute('aria-current', 'page')\n el.setAttribute('data-pagination-current', '')\n }\n this.appendChild(el)\n }\n }\n\n const next = this.#createPageEl('›', current + 1, current >= total)\n next.setAttribute('aria-label', 'Next page')\n next.setAttribute('data-pagination-next', '')\n this.appendChild(next)\n }\n\n #createPageEl(label: string, page: number, disabled: boolean): HTMLElement {\n const el = document.createElement('span')\n el.setAttribute('role', 'button')\n el.setAttribute('tabindex', disabled ? '-1' : '0')\n el.setAttribute('data-pagination-page', String(page))\n el.textContent = label\n if (disabled) el.setAttribute('aria-disabled', 'true')\n return el\n }\n\n #computePages(current: number, total: number, siblings: number): (number | '…')[] {\n if (total <= (siblings * 2 + 5)) {\n return Array.from({ length: total }, (_, i) => i + 1)\n }\n const pages: (number | '…')[] = []\n const leftSibling = Math.max(current - siblings, 2)\n const rightSibling = Math.min(current + siblings, total - 1)\n\n pages.push(1)\n if (leftSibling > 2) pages.push('…')\n else for (let i = 2; i < leftSibling; i++) pages.push(i)\n for (let i = leftSibling; i <= rightSibling; i++) pages.push(i)\n if (rightSibling < total - 1) pages.push('…')\n else for (let i = rightSibling + 1; i < total; i++) pages.push(i)\n pages.push(total)\n return pages\n }\n\n #handleClick = (e: Event): void => {\n const el = (e.target as HTMLElement).closest('[data-pagination-page]')\n if (!el || el.getAttribute('aria-disabled') === 'true') return\n const newPage = parseInt(el.getAttribute('data-pagination-page') ?? '', 10)\n if (isNaN(newPage)) return\n this.page = String(newPage)\n this.dispatchEvent(new CustomEvent('change', { bubbles: true, detail: { page: newPage } }))\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter' || e.key === ' ') {\n const el = e.target as HTMLElement\n if (el.hasAttribute('data-pagination-page')) { e.preventDefault(); el.click() }\n }\n }\n}\n","// ── aui-command ──────────────────────────────────────────────\n//\n// Command palette root. Composes: aui-command-input (search),\n// aui-command-list (scrollable results), aui-command-item (actions),\n// aui-command-group (grouping), aui-command-empty (no results).\n//\n// Handles: filtering, keyboard navigation (arrow/enter/escape),\n// active item tracking, and event dispatch.\n//\n// Designed to be placed inside aui-dialog for modal usage.\n\nimport { AgentElement } from '#element'\n\nexport class AuiCommand extends AgentElement {\n #activeIndex = -1\n\n protected override activate(): void {\n this.setAttribute('role', 'search')\n\n // Listen for input from command-input\n this.addEventListener('input', this.#handleInput)\n this.addEventListener('keydown', this.#handleKeydown)\n this.addEventListener('click', this.#handleClick)\n\n // Highlight first item\n requestAnimationFrame(() => {\n this.#setActive(0)\n })\n }\n\n protected override dispose(): void {\n this.removeEventListener('input', this.#handleInput)\n this.removeEventListener('keydown', this.#handleKeydown)\n this.removeEventListener('click', this.#handleClick)\n }\n\n // ── Queries ───────────────────────────────────────────\n\n get #items(): HTMLElement[] {\n return Array.from(this.querySelectorAll('aui-command-item'))\n }\n\n get #visibleItems(): HTMLElement[] {\n return this.#items.filter(i => !i.hasAttribute('hidden') && !i.hasAttribute('disabled'))\n }\n\n get #inputEl(): HTMLElement | null {\n return this.querySelector('aui-command-input')\n }\n\n get #emptyEl(): HTMLElement | null {\n return this.querySelector('aui-command-empty')\n }\n\n get #listEl(): HTMLElement | null {\n return this.querySelector('aui-command-list')\n }\n\n // ── Filtering ─────────────────────────────────────────\n\n #filter(query: string): void {\n const q = query.toLowerCase().trim()\n\n for (const item of this.#items) {\n const text = (item as any).searchText ?? item.textContent?.toLowerCase() ?? ''\n const matches = !q || text.includes(q)\n item.toggleAttribute('hidden', !matches)\n }\n\n // Toggle empty state\n const visible = this.#visibleItems\n if (this.#emptyEl) {\n this.#emptyEl.toggleAttribute('hidden', visible.length > 0)\n }\n\n // Reset active to first visible\n this.#setActive(0)\n }\n\n // ── Active item tracking ──────────────────────────────\n\n #setActive(index: number): void {\n const items = this.#visibleItems\n if (items.length === 0) {\n this.#activeIndex = -1\n this.#clearActive()\n return\n }\n\n this.#clearActive()\n this.#activeIndex = Math.max(0, Math.min(index, items.length - 1))\n const item = items[this.#activeIndex]\n item.setAttribute('data-navigate-active', '')\n item.scrollIntoView({ block: 'nearest' })\n\n // Update aria-activedescendant on listbox\n if (item.id && this.#listEl) {\n this.#listEl.setAttribute('aria-activedescendant', item.id)\n }\n }\n\n #clearActive(): void {\n for (const item of this.#items) {\n item.removeAttribute('data-navigate-active')\n }\n this.#listEl?.removeAttribute('aria-activedescendant')\n }\n\n // ── Event handlers ────────────────────────────────────\n\n #handleInput = (): void => {\n const query = (this.#inputEl as any)?.query ?? ''\n this.#filter(query)\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n const items = this.#visibleItems\n if (items.length === 0 && e.key !== 'Escape') return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const next = this.#activeIndex < items.length - 1 ? this.#activeIndex + 1 : 0\n this.#setActive(next)\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const prev = this.#activeIndex > 0 ? this.#activeIndex - 1 : items.length - 1\n this.#setActive(prev)\n break\n }\n case 'Home': {\n e.preventDefault()\n this.#setActive(0)\n break\n }\n case 'End': {\n e.preventDefault()\n this.#setActive(items.length - 1)\n break\n }\n case 'Enter': {\n e.preventDefault()\n const active = items[this.#activeIndex]\n if (active) this.#selectItem(active)\n break\n }\n case 'Escape': {\n this.dispatchEvent(new Event('dismiss', { bubbles: true }))\n break\n }\n }\n }\n\n #handleClick = (e: Event): void => {\n const item = (e.target as HTMLElement).closest('aui-command-item') as HTMLElement | null\n if (!item || item.hasAttribute('disabled') || item.hasAttribute('hidden')) return\n this.#selectItem(item)\n }\n\n #selectItem(item: HTMLElement): void {\n const value = item.getAttribute('value') ?? item.textContent?.trim() ?? ''\n const label = item.textContent?.trim() ?? ''\n\n this.dispatchEvent(new CustomEvent('select', {\n bubbles: true,\n detail: { value, label, item },\n }))\n }\n}\n","// ── aui-command-empty ────────────────────────────────────────\n//\n// Shown when no command items match the search query.\n// CSS-only visibility via [hidden] attribute toggled by parent.\n\nimport { AgentElement } from '#element'\n\nexport class AuiCommandEmpty extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'status')\n // Start hidden — parent command will toggle\n if (!this.hasAttribute('hidden')) {\n this.setAttribute('hidden', '')\n }\n }\n}\n","// ── aui-command-group ────────────────────────────────────────\n//\n// Groups command items under a heading label.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCommandGroup extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n }\n\n declare label: string\n\n protected override activate(): void {\n this.setAttribute('role', 'group')\n\n // Stamp heading if label is set\n let heading = this.querySelector('[data-heading]')\n if (!heading && this.label) {\n heading = document.createElement('span')\n heading.setAttribute('data-heading', '')\n heading.id = `cmdg-${crypto.randomUUID().slice(0, 6)}`\n this.prepend(heading)\n }\n\n this.addEffect(() => {\n const h = this.querySelector('[data-heading]')\n if (h) {\n h.textContent = this.label\n this.setAttribute('aria-labelledby', h.id)\n }\n })\n }\n}\n","// ── aui-command-input ────────────────────────────────────────\n//\n// Search input for the command palette.\n// Uses contenteditable span — no native <input>.\n// Fires 'input' events that the parent aui-command listens to.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCommandInput extends AgentElement {\n static override attributes: AttributeSchema = {\n placeholder: { type: 'string', default: 'Search…' },\n }\n\n declare placeholder: string\n\n #surface: HTMLElement | null = null\n\n get query(): string {\n return this.#surface?.textContent?.trim() ?? ''\n }\n\n set query(val: string) {\n if (this.#surface) this.#surface.textContent = val\n this.#updateEmptyState()\n }\n\n protected override activate(): void {\n this.#surface = this.querySelector('[data-surface]')\n if (!this.#surface) {\n this.#surface = document.createElement('span')\n this.#surface.setAttribute('data-surface', '')\n this.#surface.setAttribute('contenteditable', 'plaintext-only')\n this.#surface.setAttribute('tabindex', '0')\n this.#surface.setAttribute('role', 'searchbox')\n this.#surface.setAttribute('aria-label', 'Search commands')\n this.appendChild(this.#surface)\n }\n\n this.addEffect(() => {\n this.#surface?.setAttribute('data-placeholder', this.placeholder || 'Search…')\n })\n\n this.#updateEmptyState()\n\n this.#surface.addEventListener('input', this.#handleInput)\n this.#surface.addEventListener('keydown', this.#handleKeydown)\n this.#surface.addEventListener('focus', this.#handleFocus)\n }\n\n protected override dispose(): void {\n this.#surface?.removeEventListener('input', this.#handleInput)\n this.#surface?.removeEventListener('keydown', this.#handleKeydown)\n this.#surface?.removeEventListener('focus', this.#handleFocus)\n }\n\n focus(options?: FocusOptions): void {\n this.#surface?.focus(options)\n }\n\n clear(): void {\n if (this.#surface) this.#surface.textContent = ''\n this.#updateEmptyState()\n this.dispatchEvent(new Event('input', { bubbles: true }))\n }\n\n #updateEmptyState(): void {\n this.toggleAttribute('data-input-empty', !this.#surface?.textContent?.trim())\n }\n\n #handleInput = (): void => {\n this.#updateEmptyState()\n this.dispatchEvent(new Event('input', { bubbles: true }))\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n // Block Enter (single-line), let ArrowDown/Up/Escape bubble to parent\n if (e.key === 'Enter') {\n e.preventDefault()\n }\n }\n\n #handleFocus = (): void => {\n // Reset caret if empty\n if (!this.#surface?.textContent?.trim()) {\n const sel = window.getSelection()\n sel?.setPosition(this.#surface!, 0)\n }\n }\n}\n","// ── aui-command-item ─────────────────────────────────────────\n//\n// Selectable item within aui-command-list. Lightweight — most\n// behavior coordinated by the parent command component.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCommandItem extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n keywords: { type: 'string', default: '' },\n }\n\n declare value: string\n declare disabled: boolean\n declare keywords: string\n\n /** Combined search text for filtering. */\n get searchText(): string {\n return `${this.textContent?.trim() ?? ''} ${this.value} ${this.keywords}`.toLowerCase()\n }\n\n protected override activate(): void {\n this.setAttribute('role', 'option')\n\n this.addEffect(() => {\n this.setAttribute('aria-disabled', String(this.disabled))\n })\n }\n}\n","// ── aui-command-list ─────────────────────────────────────────\n//\n// Scrollable container for command items and groups.\n\nimport { AgentElement } from '#element'\n\nexport class AuiCommandList extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'listbox')\n }\n}\n","// ── aui-panes ────────────────────────────────────────────────\n//\n// Split-pane layout with pointer-proximity resize between children.\n// No handle elements — hit-tests pointer position against pane\n// boundaries and renders accent bar via ::after on the hovered pane.\n// Light DOM. Children should be <aui-pane> elements.\n//\n// Resize algorithm based on VS Code's SplitView:\n// - Cascade: delta propagates through all panes in each direction\n// - Priority: high-priority panes resize first, low-priority last\n// - Proportional: container resize maintains pane proportions\n// - Constraints: min/max sizes respected at every step\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nconst Priority = { High: 0, Normal: 1, Low: 2 } as const\ntype Priority = (typeof Priority)[keyof typeof Priority]\n\nconst clamp = (v: number, min: number, max: number): number =>\n Math.min(max, Math.max(min, v))\n\n/** Resolve --aui-sidebar-width-collapsed to pixels via a temporary element. */\nlet cachedCollapsedWidth: number | null = null\nfunction resolveCollapsedWidth(el: HTMLElement): number {\n if (cachedCollapsedWidth !== null) return cachedCollapsedWidth\n const probe = document.createElement('div')\n probe.style.cssText = 'position:absolute;visibility:hidden;width:var(--aui-sidebar-width-collapsed,2.75rem)'\n el.appendChild(probe)\n cachedCollapsedWidth = probe.offsetWidth || 44\n probe.remove()\n return cachedCollapsedWidth\n}\n\nexport class AuiPanes extends AgentElement {\n static override attributes: AttributeSchema = {\n direction: { type: 'enum', values: ['vertical'], default: '' },\n }\n\n static override deferChildren = true\n\n declare direction: string\n\n #observer: MutationObserver | null = null\n #resizeObserver: ResizeObserver | null = null\n\n // Hover state\n #hoverPane: HTMLElement | null = null\n\n // Resize state\n #activeIndex = -1\n #startSizes: number[] = []\n #panes: HTMLElement[] = []\n #startX = 0\n #startY = 0\n\n // Drag pointer ID (for releasing capture)\n #dragPointerId = -1\n\n // Pixel-based sizes — source of truth during/after resize\n #sizes: number[] = []\n\n // Proportional layout\n #proportions: number[] | null = null\n\n get isVertical(): boolean {\n return this.direction === 'vertical'\n }\n\n protected override activate(): void {\n this.addEventListener('pointermove', this.#onHover)\n this.addEventListener('pointerleave', this.#onLeave)\n // Capture phase so we intercept before children\n this.addEventListener('pointerdown', this.#onPointerDown, true)\n\n this.#initSizes()\n\n this.#observer = new MutationObserver(this.#onChildChange)\n this.#observer.observe(this, {\n childList: true,\n attributes: true,\n attributeFilter: ['hidden', 'minimized', 'priority'],\n subtree: true,\n })\n\n // Observe container resize for proportional layout\n this.#resizeObserver = new ResizeObserver(this.#onContainerResize)\n this.#resizeObserver.observe(this)\n\n // React to direction changes\n this.addEffect(() => {\n // Read direction to track it\n void this.direction\n this.#initSizes()\n })\n }\n\n protected override dispose(): void {\n this.#clearHover()\n this.#cleanupDrag()\n this.#observer?.disconnect()\n this.#observer = null\n this.#resizeObserver?.disconnect()\n this.#resizeObserver = null\n this.removeEventListener('pointermove', this.#onHover)\n this.removeEventListener('pointerleave', this.#onLeave)\n this.removeEventListener('pointerdown', this.#onPointerDown, true)\n }\n\n // ── Pane queries ──\n\n #getVisibleChildren(): HTMLElement[] {\n return Array.from(this.children).filter(\n c => c instanceof HTMLElement && !c.hidden\n ) as HTMLElement[]\n }\n\n #getMinSize(el: HTMLElement): number {\n const v = el.getAttribute('size-min')\n return v ? Number(v) : resolveCollapsedWidth(el)\n }\n\n #getMaxSize(el: HTMLElement): number {\n const v = el.getAttribute('size-max')\n return v ? Number(v) : Infinity\n }\n\n #getPriority(el: HTMLElement): Priority {\n const v = el.getAttribute('priority')\n if (v === 'high') return Priority.High\n if (v === 'low') return Priority.Low\n return Priority.Normal\n }\n\n // ── Size management ──\n\n /** Read current pixel sizes from layout and establish initial state. */\n #initSizes(): void {\n const panes = this.#getVisibleChildren()\n const isVertical = this.isVertical\n\n // Apply declared sizes first\n for (const pane of panes) {\n if (pane.hasAttribute('minimized')) continue\n const fixedSize = pane.getAttribute('fixed-size')\n const basis = pane.getAttribute('basis')\n if (fixedSize && fixedSize !== 'auto') {\n pane.style.flex = `0 1 ${fixedSize}`\n } else if (basis) {\n pane.style.flex = `1 1 ${basis}`\n } else {\n pane.style.removeProperty('flex')\n pane.style.removeProperty('flex-basis')\n }\n }\n\n // Force layout, then read pixel sizes\n const sizes = panes.map(p => {\n const rect = p.getBoundingClientRect()\n return isVertical ? rect.height : rect.width\n })\n\n this.#sizes = sizes\n this.#panes = panes\n this.#saveProportions()\n this.#applySizes()\n }\n\n /** Apply pixel sizes as flex values. */\n #applySizes(): void {\n const panes = this.#getVisibleChildren()\n const total = this.#sizes.reduce((s, v) => s + v, 0)\n if (total <= 0) return\n\n for (let i = 0; i < panes.length; i++) {\n if (panes[i].hasAttribute('minimized')) continue\n const size = this.#sizes[i] ?? 0\n // Use flex-grow proportional to pixel size, flex-basis 0\n panes[i].style.flex = `${size} 1 0px`\n }\n }\n\n /** Save current proportions for proportional container resize. */\n #saveProportions(): void {\n const total = this.#sizes.reduce((s, v) => s + v, 0)\n if (total <= 0) {\n this.#proportions = null\n return\n }\n this.#proportions = this.#sizes.map(s => s / total)\n }\n\n // ── Cascade resize algorithm ──\n\n /**\n * Resize panes at the given sash index by delta pixels.\n * Delta cascades through \"before\" panes (index -> 0) and\n * \"after\" panes (index+1 -> end), respecting min/max constraints\n * and priority ordering.\n */\n #resize(index: number, delta: number, sizes: number[]): number[] {\n const panes = this.#panes\n const result = [...sizes]\n\n // Build index arrays for each side of the sash\n const beforeIndexes: number[] = []\n for (let i = index; i >= 0; i--) beforeIndexes.push(i)\n const afterIndexes: number[] = []\n for (let i = index + 1; i < panes.length; i++) afterIndexes.push(i)\n\n // Sort by priority: high-priority panes consume delta first\n const sortByPriority = (indexes: number[]): number[] => {\n const high: number[] = []\n const normal: number[] = []\n const low: number[] = []\n for (const i of indexes) {\n const p = this.#getPriority(panes[i])\n if (p === Priority.High) high.push(i)\n else if (p === Priority.Low) low.push(i)\n else normal.push(i)\n }\n return [...high, ...normal, ...low]\n }\n\n const sortedBefore = sortByPriority(beforeIndexes)\n const sortedAfter = sortByPriority(afterIndexes)\n\n // Calculate how much delta each side can absorb\n let minDelta = 0\n let maxDelta = 0\n for (const i of sortedBefore) {\n minDelta += this.#getMinSize(panes[i]) - sizes[i]\n maxDelta += this.#getMaxSize(panes[i]) - sizes[i]\n }\n let minDeltaAfter = 0\n let maxDeltaAfter = 0\n for (const i of sortedAfter) {\n minDeltaAfter += sizes[i] - this.#getMaxSize(panes[i])\n maxDeltaAfter += sizes[i] - this.#getMinSize(panes[i])\n }\n\n // Clamp delta to the intersection of both sides' constraints\n const effectiveMin = Math.max(minDelta, minDeltaAfter)\n const effectiveMax = Math.min(maxDelta, maxDeltaAfter)\n delta = clamp(delta, effectiveMin, effectiveMax)\n\n // Distribute delta to \"before\" panes (they grow with positive delta)\n let remaining = delta\n for (const i of sortedBefore) {\n const newSize = clamp(\n sizes[i] + remaining,\n this.#getMinSize(panes[i]),\n this.#getMaxSize(panes[i]),\n )\n const consumed = newSize - sizes[i]\n remaining -= consumed\n result[i] = newSize\n }\n\n // Distribute negative delta to \"after\" panes (they shrink with positive delta)\n remaining = delta\n for (const i of sortedAfter) {\n const newSize = clamp(\n sizes[i] - remaining,\n this.#getMinSize(panes[i]),\n this.#getMaxSize(panes[i]),\n )\n const consumed = sizes[i] - newSize\n remaining -= consumed\n result[i] = newSize\n }\n\n return result\n }\n\n /**\n * After any size change, distribute leftover space (positive or negative)\n * across all panes in priority order.\n */\n #distributeEmptySpace(sizes: number[]): number[] {\n const panes = this.#panes\n const result = [...sizes]\n const containerSize = this.#getContainerSize()\n let emptyDelta = containerSize - result.reduce((s, v) => s + v, 0)\n\n if (Math.abs(emptyDelta) < 0.5) return result\n\n // Build priority-sorted index list\n const high: number[] = []\n const normal: number[] = []\n const low: number[] = []\n for (let i = 0; i < panes.length; i++) {\n const p = this.#getPriority(panes[i])\n if (p === Priority.High) high.push(i)\n else if (p === Priority.Low) low.push(i)\n else normal.push(i)\n }\n const sorted = [...high, ...normal, ...low]\n\n for (let i = 0; Math.abs(emptyDelta) >= 0.5 && i < sorted.length; i++) {\n const idx = sorted[i]\n const pane = panes[idx]\n const newSize = clamp(\n result[idx] + emptyDelta,\n this.#getMinSize(pane),\n this.#getMaxSize(pane),\n )\n const consumed = newSize - result[idx]\n emptyDelta -= consumed\n result[idx] = newSize\n }\n\n return result\n }\n\n #getContainerSize(): number {\n const rect = this.getBoundingClientRect()\n return this.isVertical ? rect.height : rect.width\n }\n\n // ── Proportional container resize ──\n\n #lastContainerSize = 0\n\n #onContainerResize = (): void => {\n // Skip during active drag\n if (this.#activeIndex >= 0) return\n\n const containerSize = this.#getContainerSize()\n if (containerSize <= 0) return\n\n // Skip initial or no-change\n if (this.#lastContainerSize === 0) {\n this.#lastContainerSize = containerSize\n return\n }\n if (Math.abs(containerSize - this.#lastContainerSize) < 1) return\n this.#lastContainerSize = containerSize\n\n const panes = this.#getVisibleChildren()\n if (panes.length === 0) return\n this.#panes = panes\n\n if (this.#proportions && this.#proportions.length === panes.length) {\n // Proportional resize: scale each pane by its saved proportion\n const newSizes = this.#proportions.map((p, i) =>\n clamp(\n Math.round(p * containerSize),\n this.#getMinSize(panes[i]),\n this.#getMaxSize(panes[i]),\n )\n )\n this.#sizes = this.#distributeEmptySpace(newSizes)\n } else {\n // No proportions saved — distribute empty space\n this.#sizes = this.#distributeEmptySpace(this.#sizes)\n }\n\n this.#applySizes()\n }\n\n // ── Boundary hit-testing ──\n\n #hitBoundary(clientX: number, clientY: number): number {\n const panes = this.#getVisibleChildren()\n if (panes.length < 2) return -1\n const isVertical = this.isVertical\n const threshold = 8\n\n for (let i = 0; i < panes.length - 1; i++) {\n const rect = panes[i].getBoundingClientRect()\n const edge = isVertical ? rect.bottom : rect.right\n const pos = isVertical ? clientY : clientX\n if (Math.abs(pos - edge) <= threshold) return i\n }\n return -1\n }\n\n // ── Hover ──\n\n #onHover = (e: PointerEvent): void => {\n if (this.#activeIndex >= 0) return\n const index = this.#hitBoundary(e.clientX, e.clientY)\n const panes = this.#getVisibleChildren()\n\n if (index >= 0) {\n const pane = panes[index]\n if (this.#hoverPane !== pane) {\n this.#clearHover()\n const edge = this.isVertical ? 'bottom' : 'right'\n pane.setAttribute('data-panes-edge-near', edge)\n this.#hoverPane = pane\n }\n } else {\n this.#clearHover()\n }\n }\n\n #onLeave = (): void => {\n if (this.#activeIndex >= 0) return\n this.#clearHover()\n }\n\n #clearHover(): void {\n if (this.#hoverPane) {\n this.#hoverPane.removeAttribute('data-panes-edge-near')\n this.#hoverPane = null\n }\n }\n\n // ── Drag resize ──\n\n #onPointerDown = (e: PointerEvent): void => {\n if (e.button !== 0) return\n const index = this.#hitBoundary(e.clientX, e.clientY)\n if (index < 0) return\n\n e.preventDefault()\n e.stopPropagation()\n this.#clearHover()\n\n this.#activeIndex = index\n this.#panes = this.#getVisibleChildren()\n this.#startX = e.clientX\n this.#startY = e.clientY\n\n // Snapshot current sizes\n const isVertical = this.isVertical\n this.#startSizes = this.#panes.map(p => {\n const rect = p.getBoundingClientRect()\n return isVertical ? rect.height : rect.width\n })\n this.#sizes = [...this.#startSizes]\n\n this.setAttribute('data-panes-resizing', '')\n const edge = isVertical ? 'bottom' : 'right'\n this.#panes[index].setAttribute('data-panes-edge-active', edge)\n\n this.#dragPointerId = e.pointerId\n this.setPointerCapture(e.pointerId)\n document.addEventListener('pointermove', this.#onDragMove)\n document.addEventListener('pointerup', this.#onDragEnd)\n document.addEventListener('pointercancel', this.#onDragCancel)\n document.addEventListener('keydown', this.#onKeyDown)\n }\n\n #onDragMove = (e: PointerEvent): void => {\n if (this.#activeIndex < 0) return\n\n const delta = this.isVertical\n ? e.clientY - this.#startY\n : e.clientX - this.#startX\n\n // Cascade resize from start sizes\n this.#sizes = this.#resize(this.#activeIndex, delta, this.#startSizes)\n this.#applySizes()\n }\n\n #onDragEnd = (): void => {\n if (this.#activeIndex < 0) return\n\n // Read final sizes from layout\n const isVertical = this.isVertical\n this.#sizes = this.#panes.map(p => {\n const rect = p.getBoundingClientRect()\n return isVertical ? rect.height : rect.width\n })\n this.#saveProportions()\n\n this.dispatchEvent(new CustomEvent('aui:panes-resize', {\n bubbles: true,\n composed: true,\n detail: {\n sizes: this.#sizes,\n index: this.#activeIndex,\n },\n }))\n\n this.#cleanupDrag()\n }\n\n #onDragCancel = (): void => {\n if (this.#activeIndex < 0) return\n // Revert to start sizes\n this.#sizes = [...this.#startSizes]\n this.#applySizes()\n this.#cleanupDrag()\n }\n\n #onKeyDown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.#activeIndex >= 0) {\n e.preventDefault()\n this.#onDragCancel()\n }\n }\n\n #cleanupDrag(): void {\n if (this.#activeIndex >= 0) {\n this.#panes[this.#activeIndex]?.removeAttribute('data-panes-edge-active')\n }\n if (this.#dragPointerId >= 0) {\n try { this.releasePointerCapture(this.#dragPointerId) } catch { /* already released */ }\n this.#dragPointerId = -1\n }\n this.#activeIndex = -1\n this.#startSizes = []\n this.removeAttribute('data-panes-resizing')\n document.removeEventListener('pointermove', this.#onDragMove)\n document.removeEventListener('pointerup', this.#onDragEnd)\n document.removeEventListener('pointercancel', this.#onDragCancel)\n document.removeEventListener('keydown', this.#onKeyDown)\n }\n\n // ── Child mutation observer (debounced) ──\n\n #pendingDistribute = 0\n\n #onChildChange = (mutations: MutationRecord[]): void => {\n // Only react to changes on direct children (not deep descendants)\n let relevant = false\n for (const m of mutations) {\n const target = m.target as HTMLElement\n if (m.type === 'childList' && target === (this as unknown as HTMLElement)) { relevant = true; break }\n if (m.type === 'attributes' && target.parentElement === this) { relevant = true; break }\n }\n if (!relevant) return\n\n if (this.#pendingDistribute) return\n this.#pendingDistribute = requestAnimationFrame(() => {\n this.#pendingDistribute = 0\n this.#initSizes()\n })\n }\n}\n","// ── aui-pane ─────────────────────────────────────────────────\n//\n// Individual pane within <aui-panes>. Light DOM.\n// If `label` is set and no <aui-header> child exists, stamps a\n// compact header with label, optional icon, and close/minimize buttons.\n//\n// Attributes: label, icon, closeable, minimizable, minimized,\n// size, basis, priority, tabs, collapse\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nconst headerTpl = document.createElement('template')\nheaderTpl.innerHTML = `\n <aui-header data-pane-header>\n <aui-pane-label></aui-pane-label>\n </aui-header>\n`\n\nconst headerBtnTpl = document.createElement('template')\nheaderBtnTpl.innerHTML = `<aui-button ghost></aui-button>`\n\nexport class AuiPane extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n icon: { type: 'string', default: '' },\n closeable: { type: 'boolean', default: false },\n minimizable: { type: 'boolean', default: false },\n minimized: { type: 'boolean', default: false },\n 'fixed-size': { type: 'string', default: '' },\n basis: { type: 'string', default: '' },\n priority: { type: 'enum', values: ['high', 'normal', 'low'], default: 'normal' },\n tabs: { type: 'boolean', default: false },\n collapse: { type: 'string', default: '' },\n }\n\n declare label: string\n declare icon: string\n declare closeable: boolean\n declare minimizable: boolean\n declare minimized: boolean\n declare 'fixed-size': string\n declare basis: string\n declare priority: string\n declare tabs: boolean\n declare collapse: string\n\n // Stamped header references\n #stampedHeader: HTMLElement | null = null\n #labelEl: HTMLElement | null = null\n #iconEl: HTMLElement | null = null\n #minimizeBtn: HTMLElement | null = null\n #closeBtn: HTMLElement | null = null\n\n // Tabs\n #tabsEl: HTMLElement | null = null\n\n // Collapse state (internal)\n #collapsed = false\n\n protected override activate(): void {\n this.#stampHeader()\n this.#wrapContent()\n this.#syncSize()\n\n // Label effect\n this.addEffect(() => {\n const label = this.label\n if (this.#labelEl) this.#labelEl.textContent = label\n\n // Stamp/remove header when label changes\n if (label && !this.#stampedHeader) this.#stampHeader()\n else if (!label && this.#stampedHeader) this.#removeStampedHeader()\n })\n\n // Minimized effect\n this.addEffect(() => {\n const min = this.minimized\n if (this.#minimizeBtn) {\n const icon = this.#minimizeBtn.querySelector('aui-icon')\n if (icon) icon.setAttribute('icon', min ? 'caret-up' : 'minus')\n }\n })\n\n // Fixed-size effect\n this.addEffect(() => {\n void this['fixed-size']\n this.#syncSize()\n })\n\n // Basis effect\n this.addEffect(() => {\n const basis = this.basis\n if (basis) this.style.flexBasis = basis\n else this.style.removeProperty('flex-basis')\n })\n\n // Icon effect\n this.addEffect(() => {\n const val = this.icon\n this.#syncIcon(val || null)\n })\n\n // Closeable effect\n this.addEffect(() => {\n this.#syncCloseButton(this.closeable)\n })\n\n // Minimizable effect\n this.addEffect(() => {\n this.#syncMinimizeButton(this.minimizable)\n })\n\n // Tabs effect\n this.addEffect(() => {\n if (this.tabs && !this.#tabsEl) this.#stampTabs()\n else if (!this.tabs && this.#tabsEl) this.#removeTabs()\n })\n\n // Collapse effect\n this.addEffect(() => {\n // collapse attr just configures direction — actual collapsing is via method\n void this.collapse\n })\n }\n\n // ── Public methods ──\n\n /** Collapse the pane to a thin strip. */\n collapsePane(): void {\n this.#collapsed = true\n this.setAttribute('collapsed', '')\n this.dispatchEvent(new CustomEvent('aui:pane-collapse', {\n bubbles: true,\n composed: true,\n detail: { pane: this },\n }))\n }\n\n /** Restore from collapsed state. */\n expand(): void {\n this.#collapsed = false\n this.removeAttribute('collapsed')\n this.dispatchEvent(new CustomEvent('aui:pane-expand', {\n bubbles: true,\n composed: true,\n detail: { pane: this },\n }))\n }\n\n /** Close the pane. Dispatches cancelable `aui:pane-close`. */\n close(): void {\n const event = new CustomEvent('aui:pane-close', {\n bubbles: true,\n composed: true,\n cancelable: true,\n detail: { pane: this },\n })\n if (this.dispatchEvent(event)) {\n this.hidden = true\n }\n }\n\n /** Minimize the pane to header-only. */\n minimize(): void {\n this.minimized = true\n this.dispatchEvent(new CustomEvent('aui:pane-minimize', {\n bubbles: true,\n composed: true,\n detail: { pane: this },\n }))\n }\n\n /** Restore from minimized state. */\n restore(): void {\n this.minimized = false\n this.dispatchEvent(new CustomEvent('aui:pane-restore', {\n bubbles: true,\n composed: true,\n detail: { pane: this },\n }))\n }\n\n // ── Size sync ──\n\n #syncSize(): void {\n const size = this['fixed-size']\n if (size && size !== 'auto') {\n this.style.flex = `0 1 ${size}`\n } else {\n this.style.removeProperty('flex')\n }\n }\n\n // ── Content wrapping ──\n\n /** Wrap non-structural children in <aui-content>. */\n #wrapContent(): void {\n // Skip if already wrapped\n if (this.querySelector(':scope > aui-content')) return\n\n const content = document.createElement('aui-content')\n const toWrap: Node[] = []\n\n for (const child of Array.from(this.childNodes)) {\n // Keep headers, slotted elements, and the stamped header in place\n if (child instanceof HTMLElement) {\n if (child.tagName === 'AUI-HEADER' || child.hasAttribute('data-pane-header')) continue\n if (child.hasAttribute('slot')) continue\n if (child.tagName === 'AUI-CANVAS') continue\n }\n toWrap.push(child)\n }\n\n if (toWrap.length === 0) return\n\n for (const node of toWrap) content.appendChild(node)\n this.appendChild(content)\n }\n\n // ── Header stamping ──\n\n #stampHeader(): void {\n if (this.querySelector(':scope > aui-header')) return\n const label = this.label\n if (!label) return\n\n const fragment = headerTpl.content.cloneNode(true) as DocumentFragment\n const header = fragment.firstElementChild as HTMLElement\n const labelEl = header.querySelector('aui-pane-label') as HTMLElement\n\n labelEl.textContent = label\n this.#labelEl = labelEl\n\n // Icon (optional)\n const icon = this.icon\n if (icon) {\n const iconEl = document.createElement('aui-icon')\n iconEl.setAttribute('icon', icon)\n header.insertBefore(iconEl, labelEl)\n this.#iconEl = iconEl\n }\n\n // Minimize button\n if (this.minimizable) {\n this.#minimizeBtn = this.#createHeaderButton(\n this.minimized ? 'caret-up' : 'minus',\n () => { if (this.minimized) this.restore(); else this.minimize() },\n )\n header.appendChild(this.#minimizeBtn)\n }\n\n // Close button\n if (this.closeable) {\n this.#closeBtn = this.#createHeaderButton('x', () => this.close())\n header.appendChild(this.#closeBtn)\n }\n\n this.prepend(header)\n this.#stampedHeader = header\n }\n\n #removeStampedHeader(): void {\n if (!this.#stampedHeader) return\n this.#stampedHeader.remove()\n this.#stampedHeader = null\n this.#labelEl = null\n this.#iconEl = null\n this.#minimizeBtn = null\n this.#closeBtn = null\n }\n\n #createHeaderButton(iconName: string, handler: () => void): HTMLElement {\n const btn = headerBtnTpl.content.firstElementChild!.cloneNode(true) as HTMLElement\n btn.setAttribute('icon', iconName)\n btn.setAttribute('slot', 'trailing')\n btn.addEventListener('click', handler)\n return btn\n }\n\n #syncIcon(val: string | null): void {\n if (!this.#stampedHeader) return\n if (val && this.#iconEl) {\n this.#iconEl.setAttribute('icon', val)\n } else if (val && !this.#iconEl) {\n const iconEl = document.createElement('aui-icon')\n iconEl.setAttribute('icon', val)\n this.#stampedHeader.prepend(iconEl)\n this.#iconEl = iconEl\n } else if (!val && this.#iconEl) {\n this.#iconEl.remove()\n this.#iconEl = null\n }\n }\n\n #syncCloseButton(show: boolean): void {\n if (!this.#stampedHeader) return\n if (show && !this.#closeBtn) {\n this.#closeBtn = this.#createHeaderButton('x', () => this.close())\n this.#stampedHeader.appendChild(this.#closeBtn)\n } else if (!show && this.#closeBtn) {\n this.#closeBtn.remove()\n this.#closeBtn = null\n }\n }\n\n #syncMinimizeButton(show: boolean): void {\n if (!this.#stampedHeader) return\n if (show && !this.#minimizeBtn) {\n this.#minimizeBtn = this.#createHeaderButton(\n this.minimized ? 'caret-up' : 'minus',\n () => { if (this.minimized) this.restore(); else this.minimize() },\n )\n if (this.#closeBtn) {\n this.#stampedHeader.insertBefore(this.#minimizeBtn, this.#closeBtn)\n } else {\n this.#stampedHeader.appendChild(this.#minimizeBtn)\n }\n } else if (!show && this.#minimizeBtn) {\n this.#minimizeBtn.remove()\n this.#minimizeBtn = null\n }\n }\n\n // ── Tabs ──\n\n #stampTabs(): void {\n if (this.#tabsEl) return\n this.#tabsEl = document.createElement('aui-tabs')\n\n // Find children with data-tab-id and create tabs\n for (const child of this.children) {\n if (!(child instanceof HTMLElement)) continue\n const tabId = child.getAttribute('data-tab-id')\n const tabLabel = child.getAttribute('data-tab-label')\n if (!tabId || !tabLabel) continue\n\n const tab = document.createElement('aui-tab')\n tab.setAttribute('label', tabLabel)\n tab.setAttribute('data-for', tabId)\n this.#tabsEl.appendChild(tab)\n }\n\n // Listen for tab changes\n this.#tabsEl.addEventListener('change', (e: Event) => {\n const detail = (e as CustomEvent).detail as { tab?: HTMLElement }\n const tabId = detail.tab?.getAttribute('data-for')\n if (!tabId) return\n this.#showTabContent(tabId)\n })\n\n // Insert after header\n const header = this.querySelector(':scope > aui-header, :scope > [data-pane-header]')\n if (header) header.after(this.#tabsEl)\n else this.prepend(this.#tabsEl)\n\n // Show first tab's content\n queueMicrotask(() => {\n const firstTab = this.#tabsEl?.querySelector('aui-tab')\n const firstId = firstTab?.getAttribute('data-for')\n if (firstId) this.#showTabContent(firstId)\n })\n }\n\n #removeTabs(): void {\n this.#tabsEl?.remove()\n this.#tabsEl = null\n // Show all tab content again\n for (const child of this.children) {\n if (child instanceof HTMLElement && child.hasAttribute('data-tab-id')) {\n child.removeAttribute('hidden')\n }\n }\n }\n\n #showTabContent(activeId: string): void {\n for (const child of this.children) {\n if (!(child instanceof HTMLElement)) continue\n const tabId = child.getAttribute('data-tab-id')\n if (!tabId) continue\n if (tabId === activeId) child.removeAttribute('hidden')\n else child.setAttribute('hidden', '')\n }\n }\n\n protected override dispose(): void {\n this.#removeStampedHeader()\n this.#removeTabs()\n }\n}\n","// ── aui-table ────────────────────────────────────────────────\n//\n// CSS grid table. Uses subgrid for aligned columns.\n//\n// Supports two modes:\n// 1. Declarative HTML — static rows via <aui-table-head>/<aui-table-body>\n// 2. Data-driven — columns via <aui-table-column>, data via <script> or src\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\ninterface ColumnDef {\n key: string\n label: string\n sortable: boolean\n filterable: boolean\n width: string\n type: 'string' | 'number' | 'date'\n align: 'start' | 'center' | 'end'\n}\n\ntype SortDir = 'asc' | 'desc' | 'none'\n\nexport class AuiTable extends AgentElement {\n static override attributes: AttributeSchema = {\n cols: { type: 'string', default: '' },\n src: { type: 'string', default: '' },\n selectable: { type: 'boolean', default: false },\n sortable: { type: 'boolean', default: false },\n searchable: { type: 'boolean', default: false },\n paginate: { type: 'string', default: '0' },\n }\n\n declare cols: string\n declare src: string\n declare selectable: boolean\n declare sortable: boolean\n declare searchable: boolean\n declare paginate: string\n\n #columns: ColumnDef[] = []\n #data: Record<string, unknown>[] = []\n #sortKey = ''\n #sortDir: SortDir = 'none'\n #searchTerm = ''\n #currentPage = 1\n #selectedIds = new Set<string>()\n #dataMode = false\n\n // Stable DOM refs (created once, never destroyed)\n #toolbar: HTMLElement | null = null\n #headEl: HTMLElement | null = null\n #bodyEl: HTMLElement | null = null\n #footerEl: HTMLElement | null = null\n #searchDebounceId: ReturnType<typeof setTimeout> | null = null\n\n get selectedIds(): Set<string> { return new Set(this.#selectedIds) }\n get dataMode(): boolean { return this.#dataMode }\n\n setData(data: Record<string, unknown>[]): void {\n this.#data = [...data]\n this.#currentPage = 1\n this.#selectedIds.clear()\n this.#render()\n }\n\n protected override activate(): void {\n this.setAttribute('role', 'table')\n this.#columns = this.#parseColumns()\n this.#dataMode = this.#columns.length > 0\n\n if (!this.#dataMode) {\n // Declarative mode\n this.addEffect(() => {\n if (this.cols) this.style.gridTemplateColumns = this.cols\n })\n return\n }\n\n // Data mode\n this.#loadData()\n this.#buildStructure()\n this.#render()\n\n // Event delegation — single handler survives re-renders\n this.addEventListener('click', this.#onClick)\n\n // Src changes\n this.addEffect(() => {\n if (this.src) this.#fetchData(this.src)\n })\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#onClick)\n if (this.#searchDebounceId) clearTimeout(this.#searchDebounceId)\n }\n\n // ── Column parsing ─────────────────────────────────────────\n\n #parseColumns(): ColumnDef[] {\n return Array.from(this.querySelectorAll('aui-table-column')).map(el => ({\n key: el.getAttribute('key') || '',\n label: el.getAttribute('label') || el.getAttribute('key') || '',\n sortable: el.hasAttribute('sortable'),\n filterable: el.hasAttribute('filterable'),\n width: el.getAttribute('width') || '1fr',\n type: (el.getAttribute('type') as ColumnDef['type']) || 'string',\n align: (el.getAttribute('align') as ColumnDef['align']) || 'start',\n })).filter(c => c.key)\n }\n\n // ── Data loading ───────────────────────────────────────────\n\n #loadData(): void {\n const script = this.querySelector('script[type=\"application/json\"]')\n if (script?.textContent) {\n try {\n const parsed = JSON.parse(script.textContent)\n if (Array.isArray(parsed)) this.#data = parsed\n } catch { /* ignore */ }\n return\n }\n if (this.src) this.#fetchData(this.src)\n }\n\n async #fetchData(url: string): Promise<void> {\n try {\n const res = await fetch(url)\n if (!res.ok) return\n const json = await res.json()\n this.#data = Array.isArray(json) ? json : json?.data ?? []\n this.#currentPage = 1\n this.#selectedIds.clear()\n this.#render()\n } catch { /* ignore */ }\n }\n\n // ── Structure (built once) ─────────────────────────────────\n\n #buildStructure(): void {\n // Remove non-config children\n for (const child of [...this.children]) {\n const tag = child.tagName?.toLowerCase()\n if (tag !== 'aui-table-column' && tag !== 'script') child.remove()\n }\n\n // Grid columns\n const widths = this.#columns.map(c => c.width)\n if (this.selectable) widths.unshift('2.5rem')\n this.style.gridTemplateColumns = widths.join(' ')\n\n // Search toolbar\n if (this.searchable) {\n const toolbar = document.createElement('div')\n toolbar.setAttribute('data-table-toolbar', '')\n const input = document.createElement('aui-input')\n input.setAttribute('placeholder', 'Search...')\n input.setAttribute('type', 'search')\n input.setAttribute('width', 'full')\n toolbar.appendChild(input)\n this.#toolbar = toolbar\n this.appendChild(toolbar)\n\n // Listen for input events\n const onSearch = () => {\n if (this.#searchDebounceId) clearTimeout(this.#searchDebounceId)\n this.#searchDebounceId = setTimeout(() => {\n this.#searchTerm = ((input as any).value || '').trim()\n this.#currentPage = 1\n this.#render()\n }, 200)\n }\n input.addEventListener('input', onSearch)\n }\n\n // Head (stable container)\n this.#headEl = document.createElement('aui-table-head')\n this.appendChild(this.#headEl)\n\n // Body (stable container)\n this.#bodyEl = document.createElement('aui-table-body')\n this.appendChild(this.#bodyEl)\n\n // Footer (stable container)\n if (this.#pageSize > 0) {\n this.#footerEl = document.createElement('div')\n this.#footerEl.setAttribute('data-table-footer', '')\n this.appendChild(this.#footerEl)\n }\n }\n\n // ── Event delegation ───────────────────────────────────────\n\n #onClick = (e: Event): void => {\n const target = e.target as HTMLElement\n\n // Sort: click on header\n const header = target.closest('aui-table-header[data-table-sortable]') as HTMLElement\n if (header) {\n const key = header.dataset.key\n if (key) {\n this.#toggleSort(key)\n return\n }\n }\n\n // Select: click on checkbox\n const checkbox = target.closest('aui-checkbox[data-table-check]') as HTMLElement\n if (checkbox) {\n const rowId = checkbox.dataset.rowId\n if (rowId === '__all__') {\n this.#toggleSelectAll()\n } else if (rowId) {\n this.#toggleSelect(rowId)\n }\n return\n }\n\n // Pagination\n const pageBtn = target.closest('[data-table-page]') as HTMLElement\n if (pageBtn) {\n const page = parseInt(pageBtn.dataset.tablePage!, 10)\n if (!isNaN(page) && page !== this.#currentPage) {\n this.#currentPage = page\n this.dispatchEvent(new CustomEvent('aui:page-change', { bubbles: true, detail: { page } }))\n this.#render()\n }\n }\n }\n\n // ── Sort ───────────────────────────────────────────────────\n\n #toggleSort(key: string): void {\n if (this.#sortKey === key) {\n const cycle: SortDir[] = ['asc', 'desc', 'none']\n this.#sortDir = cycle[(cycle.indexOf(this.#sortDir) + 1) % 3]\n if (this.#sortDir === 'none') this.#sortKey = ''\n } else {\n this.#sortKey = key\n this.#sortDir = 'asc'\n }\n this.#currentPage = 1\n this.dispatchEvent(new CustomEvent('aui:sort-change', { bubbles: true, detail: { key: this.#sortKey, dir: this.#sortDir } }))\n this.#render()\n }\n\n // ── Selection ──────────────────────────────────────────────\n\n #rowId(row: Record<string, unknown>): string {\n return row.id != null ? String(row.id) : JSON.stringify(row)\n }\n\n #toggleSelect(id: string): void {\n if (this.#selectedIds.has(id)) this.#selectedIds.delete(id)\n else this.#selectedIds.add(id)\n this.dispatchEvent(new CustomEvent('aui:selection-change', { bubbles: true, detail: { selectedIds: [...this.#selectedIds] } }))\n this.#render()\n }\n\n #toggleSelectAll(): void {\n const pageRows = this.#paginate(this.#derive())\n const allSelected = pageRows.length > 0 && pageRows.every(r => this.#selectedIds.has(this.#rowId(r)))\n for (const r of pageRows) {\n const id = this.#rowId(r)\n if (allSelected) this.#selectedIds.delete(id)\n else this.#selectedIds.add(id)\n }\n this.dispatchEvent(new CustomEvent('aui:selection-change', { bubbles: true, detail: { selectedIds: [...this.#selectedIds] } }))\n this.#render()\n }\n\n // ── Derived data ───────────────────────────────────────────\n\n get #pageSize(): number { return parseInt(this.paginate, 10) || 0 }\n\n #derive(): Record<string, unknown>[] {\n let view = [...this.#data]\n\n // Search\n if (this.#searchTerm) {\n const term = this.#searchTerm.toLowerCase()\n const keys = this.#columns.map(c => c.key)\n view = view.filter(row => keys.some(k => {\n const v = row[k]\n return v != null && String(v).toLowerCase().includes(term)\n }))\n }\n\n // Sort\n if (this.#sortKey && this.#sortDir !== 'none') {\n const col = this.#columns.find(c => c.key === this.#sortKey)\n const type = col?.type || 'string'\n const mult = this.#sortDir === 'desc' ? -1 : 1\n const key = this.#sortKey\n view.sort((a, b) => {\n const av = a[key], bv = b[key]\n if (av == null && bv == null) return 0\n if (av == null) return 1\n if (bv == null) return -1\n if (type === 'number') return (Number(av) - Number(bv)) * mult\n if (type === 'date') return (new Date(String(av)).getTime() - new Date(String(bv)).getTime()) * mult\n return String(av).localeCompare(String(bv)) * mult\n })\n }\n\n return view\n }\n\n #paginate(view: Record<string, unknown>[]): Record<string, unknown>[] {\n const size = this.#pageSize\n if (size <= 0) return view\n const start = (this.#currentPage - 1) * size\n return view.slice(start, start + size)\n }\n\n // ── Render (updates innerHTML of stable containers) ────────\n\n #render(): void {\n if (!this.#dataMode || !this.#headEl || !this.#bodyEl) return\n\n const filtered = this.#derive()\n const paged = this.#paginate(filtered)\n\n // HEAD\n this.#headEl.innerHTML = ''\n const headerRow = document.createElement('aui-table-row')\n\n if (this.selectable) {\n const th = document.createElement('aui-table-header')\n const allSel = paged.length > 0 && paged.every(r => this.#selectedIds.has(this.#rowId(r)))\n const cb = document.createElement('aui-checkbox')\n cb.setAttribute('data-table-check', '')\n cb.setAttribute('data-row-id', '__all__')\n if (allSel) cb.setAttribute('checked', '')\n th.appendChild(cb)\n headerRow.appendChild(th)\n }\n\n for (const col of this.#columns) {\n const th = document.createElement('aui-table-header')\n const isSortable = col.sortable || this.sortable\n if (col.align !== 'start') th.style.justifyContent = col.align\n if (isSortable) {\n th.setAttribute('data-table-sortable', '')\n th.dataset.key = col.key\n th.style.cursor = 'pointer'\n\n const label = document.createElement('span')\n label.textContent = col.label\n th.appendChild(label)\n\n const sortIcon = document.createElement('aui-icon')\n sortIcon.setAttribute('size', 'xs')\n sortIcon.setAttribute('data-table-sort-icon', '')\n if (this.#sortKey === col.key && this.#sortDir !== 'none') {\n th.setAttribute('data-table-sort', this.#sortDir)\n sortIcon.setAttribute('name', this.#sortDir === 'asc' ? 'caret-up' : 'caret-down')\n } else {\n sortIcon.setAttribute('name', 'caret-up')\n sortIcon.style.opacity = '0.3'\n }\n th.appendChild(sortIcon)\n } else {\n th.textContent = col.label\n }\n headerRow.appendChild(th)\n }\n this.#headEl.appendChild(headerRow)\n\n // BODY\n this.#bodyEl.innerHTML = ''\n for (const rowData of paged) {\n const row = document.createElement('aui-table-row')\n const id = this.#rowId(rowData)\n const isSel = this.#selectedIds.has(id)\n if (isSel) row.setAttribute('data-table-selected', '')\n\n if (this.selectable) {\n const td = document.createElement('aui-table-cell')\n const cb = document.createElement('aui-checkbox')\n cb.setAttribute('data-table-check', '')\n cb.setAttribute('data-row-id', id)\n if (isSel) cb.setAttribute('checked', '')\n td.appendChild(cb)\n row.appendChild(td)\n }\n\n for (const col of this.#columns) {\n const td = document.createElement('aui-table-cell')\n const val = rowData[col.key]\n td.textContent = val != null ? String(val) : ''\n if (col.align !== 'start') td.style.justifyContent = col.align\n row.appendChild(td)\n }\n\n this.#bodyEl.appendChild(row)\n }\n\n // FOOTER\n if (this.#footerEl) {\n this.#footerEl.innerHTML = ''\n const size = this.#pageSize\n const total = filtered.length\n const totalPages = Math.max(1, Math.ceil(total / size))\n if (this.#currentPage > totalPages) this.#currentPage = totalPages\n\n const start = total === 0 ? 0 : (this.#currentPage - 1) * size + 1\n const end = Math.min(this.#currentPage * size, total)\n\n const info = document.createElement('span')\n info.setAttribute('data-table-page-info', '')\n info.textContent = `${start}\\u2013${end} of ${total}`\n this.#footerEl.appendChild(info)\n\n const controls = document.createElement('span')\n controls.setAttribute('data-table-page-controls', '')\n controls.style.cssText = 'display:inline-flex;gap:0.25rem;align-items:center;'\n\n const prevBtn = document.createElement('aui-button') as HTMLElement\n prevBtn.setAttribute('ghost', '')\n prevBtn.setAttribute('icon-leading', 'caret-left')\n prevBtn.setAttribute('hide-label', '')\n prevBtn.setAttribute('label', 'Previous page')\n prevBtn.setAttribute('data-table-page', String(this.#currentPage - 1))\n if (this.#currentPage <= 1) {\n prevBtn.setAttribute('disabled', '')\n prevBtn.style.opacity = '0.4'\n }\n controls.appendChild(prevBtn)\n\n for (let i = 1; i <= totalPages; i++) {\n const btn = document.createElement('aui-button') as HTMLElement\n btn.setAttribute('ghost', '')\n btn.setAttribute('data-table-page', String(i))\n btn.textContent = String(i)\n if (i === this.#currentPage) btn.setAttribute('data-table-page-current', '')\n controls.appendChild(btn)\n }\n\n const nextBtn = document.createElement('aui-button') as HTMLElement\n nextBtn.setAttribute('ghost', '')\n nextBtn.setAttribute('icon-leading', 'caret-right')\n nextBtn.setAttribute('hide-label', '')\n nextBtn.setAttribute('label', 'Next page')\n nextBtn.setAttribute('data-table-page', String(this.#currentPage + 1))\n if (this.#currentPage >= totalPages) {\n nextBtn.setAttribute('disabled', '')\n nextBtn.style.opacity = '0.4'\n }\n controls.appendChild(nextBtn)\n\n this.#footerEl.appendChild(controls)\n }\n }\n}\n","import { AgentElement } from '#element'\n\nexport class AuiTableBody extends AgentElement {}\n","import { AgentElement } from '#element'\n\nexport class AuiTableCell extends AgentElement {}\n","import { AgentElement } from '#element'\n\nexport class AuiTableHead extends AgentElement {}\n","import { AgentElement } from '#element'\n\nexport class AuiTableHeader extends AgentElement {}\n","import { AgentElement } from '#element'\n\nexport class AuiTableRow extends AgentElement {}\n","// ── aui-tree ─────────────────────────────────────────────────\n//\n// Tree view container. Hosts aui-tree-item children with\n// nested expand/collapse. Keyboard navigation via arrow keys.\n\nimport { AgentElement } from '#element'\n\nexport class AuiTree extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'tree')\n this.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('keydown', this.#handleKeydown)\n }\n\n get #visibleLabels(): HTMLElement[] {\n const labels: HTMLElement[] = []\n for (const label of this.querySelectorAll('[data-label]')) {\n const item = label.closest('aui-tree-item') as HTMLElement | null\n if (!item) continue\n // Skip hidden (inside collapsed parent)\n const parent = item.parentElement?.closest('aui-tree-item') as HTMLElement | null\n if (parent && !parent.hasAttribute('expanded') && item.parentElement?.hasAttribute('data-children')) continue\n labels.push(label as HTMLElement)\n }\n return labels\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return\n\n const labels = this.#visibleLabels\n const current = labels.indexOf(document.activeElement as HTMLElement)\n if (current < 0) return\n\n e.preventDefault()\n let next: number\n if (e.key === 'ArrowDown') {\n next = current < labels.length - 1 ? current + 1 : 0\n } else {\n next = current > 0 ? current - 1 : labels.length - 1\n }\n labels[next].focus()\n }\n}\n","// ── aui-tree-item ────────────────────────────────────────────\n//\n// Tree node with expand/collapse. Nests children inside\n// [data-children] container. Depth tracked via --_depth CSS var.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// Uses registered caret-right icon if available, falls back to inline SVG\nconst CARET_TAG = `<aui-icon name=\"caret-right\" size=\"sm\"></aui-icon>`\n\nexport class AuiTreeItem extends AgentElement {\n static override attributes: AttributeSchema = {\n expanded: { type: 'boolean', default: false },\n selected: { type: 'boolean', default: false },\n disabled: { type: 'boolean', default: false },\n }\n\n declare expanded: boolean\n declare selected: boolean\n declare disabled: boolean\n\n #label: HTMLElement | null = null\n #childContainer: HTMLElement | null = null\n #caret: HTMLElement | null = null\n\n get expandable(): boolean {\n return !!this.querySelector(':scope > [data-children] > aui-tree-item')\n }\n\n protected override activate(): void {\n this.setAttribute('role', 'treeitem')\n\n // Organize: find or stamp label + children container\n this.#label = this.querySelector(':scope > [data-label]')\n if (!this.#label) {\n this.#label = document.createElement('div')\n this.#label.setAttribute('data-label', '')\n this.#label.setAttribute('tabindex', '0')\n\n // Stamp caret\n this.#caret = document.createElement('span')\n this.#caret.setAttribute('data-caret', '')\n this.#caret.innerHTML = CARET_TAG\n this.#label.appendChild(this.#caret)\n\n // Move first text/inline content into label\n const triggerEl = this.querySelector(':scope > [data-trigger]')\n if (triggerEl) {\n this.#label.appendChild(triggerEl)\n } else {\n // Move non-tree-item children into label\n const toMove: Node[] = []\n for (const child of Array.from(this.childNodes)) {\n if (child instanceof HTMLElement && (child.tagName === 'AUI-TREE-ITEM' || child.hasAttribute('data-children'))) continue\n toMove.push(child)\n }\n for (const node of toMove) this.#label.appendChild(node)\n }\n\n // Wrap nested tree items in children container\n const nestedItems = Array.from(this.querySelectorAll(':scope > aui-tree-item'))\n if (nestedItems.length > 0) {\n this.#childContainer = document.createElement('div')\n this.#childContainer.setAttribute('data-children', '')\n this.#childContainer.setAttribute('role', 'group')\n for (const item of nestedItems) {\n this.#childContainer.appendChild(item)\n }\n this.prepend(this.#label)\n this.appendChild(this.#childContainer)\n } else {\n this.prepend(this.#label)\n }\n } else {\n this.#caret = this.querySelector(':scope > [data-label] > [data-caret]')\n this.#childContainer = this.querySelector(':scope > [data-children]')\n }\n\n // Calculate depth\n let depth = 0\n let parent = this.parentElement\n while (parent) {\n if (parent.tagName === 'AUI-TREE-ITEM') depth++\n if (parent.tagName === 'AUI-TREE') break\n parent = parent.parentElement\n }\n this.#label?.style.setProperty('--_depth', String(depth))\n\n // Sync state\n this.addEffect(() => {\n this.setAttribute('aria-expanded', this.expandable ? String(this.expanded) : '')\n this.setAttribute('aria-selected', String(this.selected))\n this.setAttribute('aria-disabled', String(this.disabled))\n\n // Hide caret if not expandable\n if (this.#caret) {\n this.#caret.style.visibility = this.expandable ? 'visible' : 'hidden'\n }\n })\n\n this.#label?.addEventListener('click', this.#handleClick)\n this.#label?.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.#label?.removeEventListener('click', this.#handleClick)\n this.#label?.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #handleClick = (): void => {\n if (this.disabled) return\n if (this.expandable) {\n this.expanded = !this.expanded\n }\n this.selected = true\n this.dispatchEvent(new CustomEvent('select', { bubbles: true, detail: { item: this } }))\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n this.#handleClick()\n } else if (e.key === 'ArrowRight' && this.expandable && !this.expanded) {\n e.preventDefault()\n this.expanded = true\n } else if (e.key === 'ArrowLeft' && this.expanded) {\n e.preventDefault()\n this.expanded = false\n }\n }\n}\n","// ── aui-feed ─────────────────────────────────────────────────\n//\n// Scrollable feed container for messages, activity streams,\n// or any chronological content. Supports bottom-anchoring\n// (chat-style) and auto-scroll on new children.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiFeed extends AgentElement {\n static override attributes: AttributeSchema = {\n align: { type: 'enum', values: ['end'], default: '' },\n scrollable: { type: 'boolean', default: false },\n autoscroll: { type: 'boolean', default: false },\n }\n\n declare align: string\n declare scrollable: boolean\n declare autoscroll: boolean\n\n #observer: MutationObserver | null = null\n\n protected override activate(): void {\n this.setAttribute('role', 'feed')\n\n if (this.autoscroll) {\n this.#observer = new MutationObserver(() => {\n if (this.#isPinned()) {\n this.#scrollToEnd()\n }\n })\n this.#observer.observe(this, { childList: true, subtree: true })\n }\n }\n\n protected override dispose(): void {\n this.#observer?.disconnect()\n }\n\n #isPinned(): boolean {\n return this.scrollHeight - this.scrollTop - this.clientHeight < 40\n }\n\n #scrollToEnd(): void {\n requestAnimationFrame(() => {\n this.scrollTop = this.scrollHeight\n })\n }\n\n scrollToEnd(): void {\n this.#scrollToEnd()\n }\n}\n","// ── aui-root ─────────────────────────────────────────────────\n//\n// App shell root element. Block container that establishes\n// the component context (tokens, layers). Simple pass-through.\n\nimport { AgentElement } from '#element'\n\nexport class AuiRoot extends AgentElement {\n protected override activate(): void {\n // Root is a semantic shell — no special behavior needed.\n // Tokens and layers are established by CSS foundation import.\n }\n}\n","// ── aui-calendar-picker ─────────────────────────────────────\n//\n// Compound input component: trigger (read-only input look) +\n// popover containing an aui-calendar for date selection.\n//\n// On calendar date select → update value, close popover, fire change.\n// On trigger click → toggle popover.\n// Sync value ↔ calendar selected date.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Constants ────────────────────────────────────────────────\n\nconst CALENDAR_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><rect x=\"40\" y=\"40\" width=\"176\" height=\"176\" rx=\"8\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"176\" y1=\"24\" x2=\"176\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"80\" y1=\"24\" x2=\"80\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"40\" y1=\"88\" x2=\"216\" y2=\"88\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/></svg>`\n\nconst CHEVRON_SVG = `<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><polyline points=\"48,80 128,160 208,80\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"24\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\n\n// ── Format helpers ──────────────────────────────────────────\n\nfunction formatDate(iso: string, format: string): string {\n if (!iso) return ''\n const [y, m, d] = iso.split('-').map(Number)\n if (!y || !m || !d) return iso\n\n // Named format presets using Intl\n const date = new Date(y, m - 1, d)\n switch (format) {\n case 'long': return date.toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' })\n case 'medium': return date.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' })\n case 'short': return date.toLocaleDateString(undefined, { year: 'numeric', month: '2-digit', day: '2-digit' })\n }\n\n // Token-based format\n return format\n .replace('YYYY', String(y).padStart(4, '0'))\n .replace('yyyy', String(y).padStart(4, '0'))\n .replace('MM', String(m).padStart(2, '0'))\n .replace('DD', String(d).padStart(2, '0'))\n .replace('dd', String(d).padStart(2, '0'))\n}\n\n// ── Component ────────────────────────────────────────────────\n\nexport class AuiCalendarPicker extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n placeholder: { type: 'string', default: 'Select date' },\n min: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n format: { type: 'string', default: 'medium' },\n open: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare placeholder: string\n declare min: string\n declare max: string\n declare disabled: boolean\n declare format: string\n declare open: boolean\n\n // ── Internal references ────────────────────────────────────\n\n #anchorName: string = ''\n #trigger: HTMLElement | null = null\n #triggerLabel: HTMLElement | null = null\n #chevron: HTMLElement | null = null\n #popover: HTMLElement | null = null\n #calendar: HTMLElement | null = null\n\n // ════════════════════════════════════════════════════════════\n // Lifecycle\n // ════════════════════════════════════════════════════════════\n\n protected override activate(): void {\n const id = `cal-picker-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // ── Stamp trigger ────────────────────────────────────\n this.#trigger = document.createElement('span')\n this.#trigger.setAttribute('data-trigger', '')\n this.#trigger.setAttribute('role', 'combobox')\n this.#trigger.setAttribute('aria-haspopup', 'dialog')\n this.#trigger.setAttribute('tabindex', '0')\n this.#trigger.id = id\n\n this.#triggerLabel = document.createElement('span')\n this.#triggerLabel.setAttribute('data-label', '')\n this.#trigger.appendChild(this.#triggerLabel)\n\n // Calendar icon\n const icon = document.createElement('span')\n icon.setAttribute('data-icon', '')\n icon.innerHTML = CALENDAR_SVG\n this.#trigger.appendChild(icon)\n\n // Chevron\n this.#chevron = document.createElement('span')\n this.#chevron.setAttribute('data-chevron', '')\n this.#chevron.innerHTML = CHEVRON_SVG\n this.#trigger.appendChild(this.#chevron)\n\n // ── Stamp popover + calendar ─────────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('data-dropdown', '')\n\n this.#calendar = document.createElement('aui-calendar')\n this.#popover.appendChild(this.#calendar)\n\n this.appendChild(this.#trigger!)\n this.appendChild(this.#popover!)\n\n // Anchor positioning\n ;(this.#trigger.style as any).anchorName = this.#anchorName\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // ── Sync state via effects ───────────────────────────\n this.addEffect(() => {\n if (this.disabled) {\n this.#trigger!.setAttribute('tabindex', '-1')\n } else {\n this.#trigger!.setAttribute('tabindex', '0')\n }\n this.#trigger!.setAttribute('aria-expanded', String(this.open))\n this.#trigger!.setAttribute('aria-disabled', String(this.disabled))\n this.#updateLabel()\n })\n\n // Sync min/max to calendar\n this.addEffect(() => {\n if (this.min) {\n this.#calendar!.setAttribute('min', this.min)\n } else {\n this.#calendar!.removeAttribute('min')\n }\n if (this.max) {\n this.#calendar!.setAttribute('max', this.max)\n } else {\n this.#calendar!.removeAttribute('max')\n }\n })\n\n // Sync value to calendar\n this.addEffect(() => {\n if (this.value) {\n this.#calendar!.setAttribute('value', this.value)\n } else {\n this.#calendar!.removeAttribute('value')\n }\n })\n\n // ── Events ───────────────────────────────────────────\n this.#trigger.addEventListener('click', this.#onTriggerClick)\n this.#trigger.addEventListener('keydown', this.#onTriggerKeydown)\n this.#calendar.addEventListener('change', this.#onCalendarChange as EventListener)\n document.addEventListener('click', this.#onOutsideClick)\n document.addEventListener('keydown', this.#onDocumentKeydown)\n }\n\n protected override dispose(): void {\n this.#trigger?.removeEventListener('click', this.#onTriggerClick)\n this.#trigger?.removeEventListener('keydown', this.#onTriggerKeydown)\n this.#calendar?.removeEventListener('change', this.#onCalendarChange as EventListener)\n document.removeEventListener('click', this.#onOutsideClick)\n document.removeEventListener('keydown', this.#onDocumentKeydown)\n this.#closePopover()\n }\n\n // ════════════════════════════════════════════════════════════\n // Popover control\n // ════════════════════════════════════════════════════════════\n\n #openPopover(): void {\n if (!this.#popover || this.disabled) return\n try { this.#popover.showPopover() } catch {}\n this.open = true\n // Focus the calendar for keyboard nav\n this.#calendar?.focus()\n }\n\n #closePopover(): void {\n if (!this.#popover) return\n try { this.#popover.hidePopover() } catch {}\n this.open = false\n }\n\n // ════════════════════════════════════════════════════════════\n // Display\n // ════════════════════════════════════════════════════════════\n\n #updateLabel(): void {\n if (!this.#triggerLabel) return\n if (this.value) {\n this.#triggerLabel.textContent = formatDate(this.value, this.format)\n this.#triggerLabel.removeAttribute('data-placeholder')\n } else {\n this.#triggerLabel.textContent = this.placeholder\n this.#triggerLabel.setAttribute('data-placeholder', '')\n }\n }\n\n // ════════════════════════════════════════════════════════════\n // Event handlers\n // ════════════════════════════════════════════════════════════\n\n #onTriggerClick = (): void => {\n if (this.disabled) return\n if (this.open) this.#closePopover()\n else this.#openPopover()\n }\n\n #onTriggerKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n if (!this.open) this.#openPopover()\n } else if (e.key === 'Escape') {\n this.#closePopover()\n }\n }\n\n #onCalendarChange = (e: CustomEvent): void => {\n e.stopPropagation()\n const iso = e.detail?.value ?? ''\n this.value = iso\n this.#updateLabel()\n this.#closePopover()\n this.#trigger?.focus()\n\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: {\n value: iso,\n date: iso ? new Date(iso + 'T00:00:00') : null,\n },\n }))\n }\n\n #onOutsideClick = (e: Event): void => {\n if (this.open && !this.contains(e.target as Node)) {\n this.#closePopover()\n }\n }\n\n #onDocumentKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n this.#closePopover()\n this.#trigger?.focus()\n }\n }\n}\n","// ── aui-calendar-range-picker ──────────────────────────────────\n//\n// Compound input component: trigger (read-only input look) +\n// popover containing an aui-calendar in range selection mode.\n//\n// On calendar range select -> update start/end, close popover, fire change.\n// On trigger click -> toggle popover.\n// Sync start/end <-> calendar range dates.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Constants ────────────────────────────────────────────────\n\nconst CALENDAR_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><rect x=\"40\" y=\"40\" width=\"176\" height=\"176\" rx=\"8\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"176\" y1=\"24\" x2=\"176\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"80\" y1=\"24\" x2=\"80\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"40\" y1=\"88\" x2=\"216\" y2=\"88\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/></svg>`\n\nconst CHEVRON_SVG = `<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><polyline points=\"48,80 128,160 208,80\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"24\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\n\n// ── Format helpers ──────────────────────────────────────────\n\nfunction formatDateShort(iso: string): string {\n if (!iso) return ''\n const [y, m, d] = iso.split('-').map(Number)\n if (!y || !m || !d) return iso\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n return `${months[m - 1]} ${d}`\n}\n\n// ── Component ────────────────────────────────────────────────\n\nexport class AuiCalendarRangePicker extends AgentElement {\n static override attributes: AttributeSchema = {\n start: { type: 'string', default: '' },\n end: { type: 'string', default: '' },\n placeholder: { type: 'string', default: 'Select dates' },\n min: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n open: { type: 'boolean', default: false },\n }\n\n declare start: string\n declare end: string\n declare placeholder: string\n declare min: string\n declare max: string\n declare disabled: boolean\n declare open: boolean\n\n // ── Internal references ────────────────────────────────────\n\n #anchorName: string = ''\n #trigger: HTMLElement | null = null\n #triggerLabel: HTMLElement | null = null\n #chevron: HTMLElement | null = null\n #popover: HTMLElement | null = null\n #calendar: HTMLElement | null = null\n\n // ════════════════════════════════════════════════════════════\n // Lifecycle\n // ════════════════════════════════════════════════════════════\n\n protected override activate(): void {\n const id = `cal-range-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // ── Stamp trigger ────────────────────────────────────\n this.#trigger = document.createElement('span')\n this.#trigger.setAttribute('data-trigger', '')\n this.#trigger.setAttribute('role', 'combobox')\n this.#trigger.setAttribute('aria-haspopup', 'dialog')\n this.#trigger.setAttribute('tabindex', '0')\n this.#trigger.id = id\n\n this.#triggerLabel = document.createElement('span')\n this.#triggerLabel.setAttribute('data-label', '')\n this.#trigger.appendChild(this.#triggerLabel)\n\n // Calendar icon\n const icon = document.createElement('span')\n icon.setAttribute('data-icon', '')\n icon.innerHTML = CALENDAR_SVG\n this.#trigger.appendChild(icon)\n\n // Chevron\n this.#chevron = document.createElement('span')\n this.#chevron.setAttribute('data-chevron', '')\n this.#chevron.innerHTML = CHEVRON_SVG\n this.#trigger.appendChild(this.#chevron)\n\n // ── Stamp popover + calendar ─────────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('data-dropdown', '')\n\n this.#calendar = document.createElement('aui-calendar')\n this.#calendar.setAttribute('range', '')\n this.#popover.appendChild(this.#calendar)\n\n this.appendChild(this.#trigger!)\n this.appendChild(this.#popover!)\n\n // Anchor positioning\n ;(this.#trigger.style as any).anchorName = this.#anchorName\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // ── Sync state via effects ───────────────────────────\n this.addEffect(() => {\n if (this.disabled) {\n this.#trigger!.setAttribute('tabindex', '-1')\n } else {\n this.#trigger!.setAttribute('tabindex', '0')\n }\n this.#trigger!.setAttribute('aria-expanded', String(this.open))\n this.#trigger!.setAttribute('aria-disabled', String(this.disabled))\n this.#updateLabel()\n })\n\n // Sync min/max to calendar\n this.addEffect(() => {\n if (this.min) {\n this.#calendar!.setAttribute('min', this.min)\n } else {\n this.#calendar!.removeAttribute('min')\n }\n if (this.max) {\n this.#calendar!.setAttribute('max', this.max)\n } else {\n this.#calendar!.removeAttribute('max')\n }\n })\n\n // Sync start/end to calendar\n this.addEffect(() => {\n if (this.start) {\n this.#calendar!.setAttribute('start', this.start)\n } else {\n this.#calendar!.removeAttribute('start')\n }\n if (this.end) {\n this.#calendar!.setAttribute('end', this.end)\n } else {\n this.#calendar!.removeAttribute('end')\n }\n })\n\n // ── Events ───────────────────────────────────────────\n this.#trigger.addEventListener('click', this.#onTriggerClick)\n this.#trigger.addEventListener('keydown', this.#onTriggerKeydown)\n this.#calendar.addEventListener('aui:range-select', this.#onCalendarRangeSelect as EventListener)\n document.addEventListener('click', this.#onOutsideClick)\n document.addEventListener('keydown', this.#onDocumentKeydown)\n }\n\n protected override dispose(): void {\n this.#trigger?.removeEventListener('click', this.#onTriggerClick)\n this.#trigger?.removeEventListener('keydown', this.#onTriggerKeydown)\n this.#calendar?.removeEventListener('aui:range-select', this.#onCalendarRangeSelect as EventListener)\n document.removeEventListener('click', this.#onOutsideClick)\n document.removeEventListener('keydown', this.#onDocumentKeydown)\n this.#closePopover()\n }\n\n // ════════════════════════════════════════════════════════════\n // Popover control\n // ════════════════════════════════════════════════════════════\n\n #openPopover(): void {\n if (!this.#popover || this.disabled) return\n try { this.#popover.showPopover() } catch {}\n this.open = true\n // Focus the calendar for keyboard nav\n this.#calendar?.focus()\n }\n\n #closePopover(): void {\n if (!this.#popover) return\n try { this.#popover.hidePopover() } catch {}\n this.open = false\n }\n\n // ════════════════════════════════════════════════════════════\n // Display\n // ════════════════════════════════════════════════════════════\n\n #updateLabel(): void {\n if (!this.#triggerLabel) return\n if (this.start && this.end) {\n this.#triggerLabel.textContent = `${formatDateShort(this.start)} \\u2014 ${formatDateShort(this.end)}`\n this.#triggerLabel.removeAttribute('data-placeholder')\n } else if (this.start) {\n this.#triggerLabel.textContent = `${formatDateShort(this.start)} \\u2014 ...`\n this.#triggerLabel.removeAttribute('data-placeholder')\n } else {\n this.#triggerLabel.textContent = this.placeholder\n this.#triggerLabel.setAttribute('data-placeholder', '')\n }\n }\n\n // ════════════════════════════════════════════════════════════\n // Event handlers\n // ════════════════════════════════════════════════════════════\n\n #onTriggerClick = (): void => {\n if (this.disabled) return\n if (this.open) this.#closePopover()\n else this.#openPopover()\n }\n\n #onTriggerKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n if (!this.open) this.#openPopover()\n } else if (e.key === 'Escape') {\n this.#closePopover()\n }\n }\n\n #onCalendarRangeSelect = (e: CustomEvent): void => {\n e.stopPropagation()\n const start = e.detail?.start ?? ''\n const end = e.detail?.end ?? ''\n this.start = start\n this.end = end\n this.#updateLabel()\n this.#closePopover()\n this.#trigger?.focus()\n\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: { start, end },\n }))\n }\n\n #onOutsideClick = (e: Event): void => {\n if (this.open && !this.contains(e.target as Node)) {\n this.#closePopover()\n }\n }\n\n #onDocumentKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n this.#closePopover()\n this.#trigger?.focus()\n }\n }\n}\n","// ── aui-app-shell ────────────────────────────────────────────\n//\n// Full-page application shell. Flex layout with collapsible\n// sidebar and content column.\n//\n// DOM structure:\n//\n// <aui-app-shell>\n// <aui-sidebar>…</aui-sidebar>\n// <aui-page>\n// <aui-page-context>context bar</aui-page-context>\n// <aui-page-main>\n// <main>page content</main>\n// </aui-page-main>\n// </aui-page>\n// </aui-app-shell>\n\nimport { AgentElement } from '#element'\n\nexport class AuiAppShell extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'application')\n }\n}\n","// ── aui-page ─────────────────────────────────────────────────\n//\n// Content column within the <aui-app-shell>.\n// Contains <aui-page-context> (header bar) and <aui-page-main> (canvas).\n\nimport { AgentElement } from '#element'\n\nexport class AuiPage extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'main')\n }\n}\n","// ── aui-page-main ────────────────────────────────────────────\n//\n// Canvas area below the page context bar.\n// Contains <main> with scrollable, rounded content panel.\n\nimport { AgentElement } from '#element'\n\nexport class AuiPageMain extends AgentElement {}\n","// ── aui-page-context ─────────────────────────────────────────\n//\n// Page context bar with leading, center, and trailing sections.\n// Adaptive 3-column grid via :has() selectors.\n//\n// Children: <div> (leading), <aui-breadcrumb>, <aside> (trailing)\n\nimport { AgentElement } from '#element'\n\nexport class AuiPageContext extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'navigation')\n this.setAttribute('aria-label', 'Breadcrumb')\n }\n}\n","// ── <aui-sidebar> ────────────────────────────────────────────\n//\n// Layout shell for sidebar navigation. Flex column, sticky,\n// resizable, collapsible to icon-rail via container queries.\n//\n// Attributes: width, min-width, max-width, collapsed,\n// collapsible, side, disabled\n// Events: aui:sidebar-resize, aui:sidebar-collapse\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\nimport { signal, untrack } from '#reactivity'\n\nconst handleTpl = document.createElement('template')\nhandleTpl.innerHTML = '<aui-sidebar-resize-handle></aui-sidebar-resize-handle>'\n\nexport class AuiSidebar extends AgentElement {\n static override attributes: AttributeSchema = {\n 'width': { type: 'string', default: '240' },\n 'min-width': { type: 'string', default: '56' },\n 'max-width': { type: 'string', default: '480' },\n 'collapsed': { type: 'boolean', default: false },\n 'collapsible': { type: 'boolean', default: false },\n 'side': { type: 'enum', values: ['left', 'right'] as const, default: 'left' },\n 'disabled': { type: 'boolean', default: false },\n }\n\n declare collapsed: boolean\n declare collapsible: boolean\n declare side: 'left' | 'right'\n declare disabled: boolean\n\n #width = signal(240)\n #minWidth = 56\n #maxWidth = 480\n\n // Resize state\n #handleEl: HTMLElement | null = null\n #resizing = false\n #startX = 0\n #startWidth = 0\n #dragPointerId = -1\n\n protected override activate(): void {\n this.setAttribute('role', 'complementary')\n\n const w = parseInt(this.getAttribute('width') ?? '', 10)\n if (w > 0) this.#width.value = w\n this.#minWidth = parseInt(this.getAttribute('min-width') ?? '', 10) || 56\n this.#maxWidth = parseInt(this.getAttribute('max-width') ?? '', 10) || 480\n\n // Stamp resize handle\n const frag = handleTpl.content.cloneNode(true) as DocumentFragment\n this.#handleEl = frag.querySelector('aui-sidebar-resize-handle')!\n this.appendChild(frag)\n\n this.#handleEl.addEventListener('pointerdown', this.#onResizeDown)\n\n // Width effect\n this.addEffect(() => {\n const w = this.#width.value\n this.style.setProperty('--aui-sidebar-width', `${w}px`)\n })\n }\n\n // ── Public API ──\n\n collapse(): void {\n this.setAttribute('collapsed', '')\n this.dispatchEvent(new CustomEvent('aui:sidebar-collapse', {\n bubbles: true,\n detail: { collapsed: true },\n }))\n }\n\n expand(): void {\n this.removeAttribute('collapsed')\n this.dispatchEvent(new CustomEvent('aui:sidebar-collapse', {\n bubbles: true,\n detail: { collapsed: false },\n }))\n }\n\n toggle(): void {\n if (this.collapsed) this.expand()\n else this.collapse()\n }\n\n // ── Resize ──\n\n #onResizeDown = (e: PointerEvent): void => {\n if (this.disabled) return\n if (this.collapsed) return\n e.preventDefault()\n\n this.#resizing = true\n this.#startX = e.clientX\n this.#startWidth = untrack(() => this.#width.value)\n this.#dragPointerId = e.pointerId\n this.setAttribute('data-sidebar-resizing', '')\n\n this.#handleEl!.setPointerCapture(e.pointerId)\n document.documentElement.setAttribute('data-sidebar-resizing', '')\n\n this.#handleEl!.addEventListener('pointermove', this.#onResizeMove)\n this.#handleEl!.addEventListener('pointerup', this.#onResizeUp)\n this.#handleEl!.addEventListener('pointercancel', this.#onResizeUp)\n }\n\n #onResizeMove = (e: PointerEvent): void => {\n if (!this.#resizing) return\n const side = this.getAttribute('side')\n const delta = side === 'right'\n ? this.#startX - e.clientX\n : e.clientX - this.#startX\n const w = Math.round(Math.max(this.#minWidth, Math.min(this.#maxWidth, this.#startWidth + delta)))\n this.#width.value = w\n }\n\n #onResizeUp = (): void => {\n if (!this.#resizing) return\n this.#resizing = false\n this.removeAttribute('data-sidebar-resizing')\n document.documentElement.removeAttribute('data-sidebar-resizing')\n\n if (this.#dragPointerId >= 0 && this.#handleEl) {\n this.#handleEl.releasePointerCapture(this.#dragPointerId)\n }\n this.#dragPointerId = -1\n\n this.#handleEl?.removeEventListener('pointermove', this.#onResizeMove)\n this.#handleEl?.removeEventListener('pointerup', this.#onResizeUp)\n this.#handleEl?.removeEventListener('pointercancel', this.#onResizeUp)\n\n this.dispatchEvent(new CustomEvent('aui:sidebar-resize', {\n bubbles: true,\n detail: { width: untrack(() => this.#width.value) },\n }))\n }\n\n // ── Cleanup ──\n\n protected override dispose(): void {\n this.#handleEl?.removeEventListener('pointerdown', this.#onResizeDown)\n this.#handleEl?.remove()\n this.#handleEl = null\n document.documentElement.removeAttribute('data-sidebar-resizing')\n }\n}\n","// ── <aui-sidebar-header> ─────────────────────────────────────\n//\n// Sticky top overlay within aui-sidebar.\n// Pinned above the scrollable content area.\n\nimport { AgentElement } from '#element'\n\nexport class AuiSidebarHeader extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'none')\n }\n}\n","// ── <aui-sidebar-content> ────────────────────────────────────\n//\n// Scrollable content area within aui-sidebar.\n// Sits between the header and footer overlays.\n// Mask-image driven by parent's height custom properties.\n\nimport { AgentElement } from '#element'\n\nexport class AuiSidebarContent extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'none')\n }\n}\n","// ── <aui-sidebar-footer> ─────────────────────────────────────\n//\n// Sticky bottom overlay within aui-sidebar.\n// Pinned below the scrollable content area.\n\nimport { AgentElement } from '#element'\n\nexport class AuiSidebarFooter extends AgentElement {\n protected override activate(): void {\n this.setAttribute('role', 'none')\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiProgress extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '0' },\n }\n\n declare value: string\n\n protected override activate(): void {\n this.addEffect(() => {\n const v = Math.max(0, Math.min(100, Number(this.value) || 0))\n this.style.setProperty('--aui-progress-value', String(v))\n })\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCodeBlock extends AgentElement {\n static override attributes: AttributeSchema = {\n language: { type: 'string', default: '' },\n filename: { type: 'string', default: '' },\n copyable: { type: 'boolean', default: false },\n 'max-height': { type: 'string', default: '' },\n }\n\n declare language: string\n declare filename: string\n declare copyable: boolean\n declare 'max-height': string\n\n #header: HTMLElement | null = null\n #labelEl: HTMLElement | null = null\n #copyBtn: HTMLElement | null = null\n #codeEl: HTMLElement | null = null\n\n protected override activate(): void {\n // Wrap existing text content in an aui-code element\n if (!this.querySelector('aui-code')) {\n this.#codeEl = document.createElement('aui-code')\n // Move all child nodes into aui-code\n while (this.firstChild) {\n this.#codeEl.appendChild(this.firstChild)\n }\n this.appendChild(this.#codeEl)\n } else {\n this.#codeEl = this.querySelector('aui-code')\n }\n\n // Reactive: stamp/update header\n this.addEffect(() => {\n const label = this.filename || this.language\n const showHeader = !!label || this.copyable\n\n if (showHeader && !this.#header) {\n this.#header = document.createElement('div')\n this.#header.setAttribute('data-code-header', '')\n\n this.#labelEl = document.createElement('span')\n this.#labelEl.setAttribute('data-code-label', '')\n this.#header.appendChild(this.#labelEl)\n\n const spacer = document.createElement('span')\n spacer.style.flex = '1'\n this.#header.appendChild(spacer)\n\n this.#copyBtn = document.createElement('aui-copy-button') as HTMLElement\n this.#copyBtn.setAttribute('data-code-copy', '')\n this.#copyBtn.setAttribute('size', 'sm')\n this.#header.appendChild(this.#copyBtn)\n\n // Insert header before code\n this.insertBefore(this.#header, this.#codeEl)\n }\n\n if (this.#labelEl) {\n this.#labelEl.textContent = label\n }\n\n if (this.#copyBtn) {\n this.#copyBtn.style.display = this.copyable ? '' : 'none'\n if (this.copyable && this.#codeEl) {\n this.#copyBtn.setAttribute('value', this.#codeEl.textContent ?? '')\n }\n }\n\n if (!showHeader && this.#header) {\n this.#header.remove()\n this.#header = null\n this.#labelEl = null\n this.#copyBtn = null\n }\n })\n\n // Reactive: max-height\n this.addEffect(() => {\n const mh = this['max-height']\n if (mh && this.#codeEl) {\n this.#codeEl.style.maxHeight = mh\n this.#codeEl.style.overflow = 'auto'\n } else if (this.#codeEl) {\n this.#codeEl.style.removeProperty('max-height')\n this.#codeEl.style.removeProperty('overflow')\n }\n })\n }\n\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiSparkline extends AgentElement {\n static override attributes: AttributeSchema = {\n values: { type: 'string', default: '' },\n color: { type: 'string', default: '1' },\n highlight: { type: 'string', default: 'last' },\n }\n\n declare values: string\n declare color: string\n declare highlight: string\n\n protected override activate(): void {\n this.addEffect(() => {\n const raw = this.values\n if (!raw) { this.innerHTML = ''; return }\n\n const vals = raw.split(',').map(v => Number(v.trim())).filter(v => !isNaN(v))\n if (vals.length === 0) { this.innerHTML = ''; return }\n\n const max = Math.max(...vals)\n const colorVar = `var(--aui-chart-${this.color})`\n const highlightMode = this.highlight\n\n // Find highlight index\n let highlightIdx = -1\n if (highlightMode === 'last') highlightIdx = vals.length - 1\n else if (highlightMode === 'max') highlightIdx = vals.indexOf(max)\n\n // Stamp bars\n this.innerHTML = ''\n for (let i = 0; i < vals.length; i++) {\n const pct = max > 0 ? (vals[i] / max) * 100 : 0\n const bar = document.createElement('div')\n bar.setAttribute('data-sparkline-bar', '')\n bar.style.height = `${pct}%`\n bar.style.background = colorVar\n if (i !== highlightIdx && highlightMode !== 'none') {\n bar.style.opacity = '0.4'\n }\n this.appendChild(bar)\n }\n })\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiChip extends AgentElement {\n static override attributes: AttributeSchema = {\n removable: { type: 'boolean', default: false },\n }\n\n declare removable: boolean\n\n #removeBtn: HTMLElement | null = null\n\n protected override activate(): void {\n this.#stampRemoveButton()\n }\n\n protected override dispose(): void {\n this.#removeBtn?.remove()\n this.#removeBtn = null\n }\n\n #stampRemoveButton(): void {\n if (!this.removable) return\n\n const btn = document.createElement('aui-button') as HTMLElement\n btn.setAttribute('ghost', '')\n btn.setAttribute('hide-label', '')\n btn.setAttribute('label', 'Remove')\n btn.setAttribute('icon-leading', 'x')\n btn.setAttribute('size', 'sm')\n btn.setAttribute('data-chip-remove', '')\n btn.addEventListener('click', () => {\n this.dispatchEvent(new CustomEvent('remove', { bubbles: true }))\n this.remove()\n })\n this.append(btn)\n this.#removeBtn = btn\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiDisclosure extends AgentElement {\n static override attributes: AttributeSchema = {\n summary: { type: 'string', default: '' },\n open: { type: 'boolean', default: false },\n }\n\n declare summary: string\n declare open: boolean\n\n #trigger: HTMLElement | null = null\n\n protected override activate(): void {\n this.#stamp()\n }\n\n protected override dispose(): void {\n this.#trigger?.removeEventListener('click', this.#handleClick)\n this.#trigger = null\n }\n\n #handleClick = (): void => {\n this.toggleAttribute('open')\n this.#trigger?.setAttribute(\n 'aria-expanded',\n String(this.hasAttribute('open')),\n )\n }\n\n toggle(): void {\n this.toggleAttribute('open')\n this.#trigger?.setAttribute(\n 'aria-expanded',\n String(this.hasAttribute('open')),\n )\n }\n\n #stamp(): void {\n // Collect existing children (the content)\n const children = Array.from(this.childNodes)\n\n // Create trigger button\n const trigger = document.createElement('aui-button') as HTMLElement\n trigger.setAttribute('ghost', '')\n trigger.setAttribute('width', 'full')\n trigger.setAttribute('data-disclosure-trigger', '')\n trigger.setAttribute('aria-expanded', String(this.hasAttribute('open')))\n trigger.innerHTML = `\n <span data-disclosure-label>${this.getAttribute('summary') || ''}</span>\n <aui-icon name=\"caret-down\" size=\"xs\" data-disclosure-chevron></aui-icon>\n `\n trigger.addEventListener('click', this.#handleClick)\n this.#trigger = trigger\n\n // Wrap content\n const inner = document.createElement('div')\n inner.setAttribute('data-disclosure-inner', '')\n for (const child of children) {\n inner.appendChild(child)\n }\n\n const content = document.createElement('div')\n content.setAttribute('data-disclosure-content', '')\n content.appendChild(inner)\n\n // Stamp into host\n this.appendChild(trigger)\n this.appendChild(content)\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiAvatarGroup extends AgentElement {\n static override attributes: AttributeSchema = {\n max: { type: 'string', default: '' },\n size: { type: 'string', default: '' },\n }\n\n static override deferChildren = true\n\n declare max: string\n declare size: string\n\n #counter: HTMLSpanElement | null = null\n\n protected override activate(): void {\n this.#applyMax()\n this.#applySize()\n }\n\n protected override dispose(): void {\n this.#counter?.remove()\n this.#counter = null\n }\n\n #applyMax(): void {\n const max = parseInt(this.max || '0')\n if (!max) return\n\n const avatars = Array.from(this.querySelectorAll(':scope > aui-avatar'))\n if (avatars.length <= max) return\n\n const overflow = avatars.length - max\n avatars.slice(max).forEach((a) => ((a as HTMLElement).style.display = 'none'))\n\n const counter = document.createElement('span')\n counter.setAttribute('data-avatar-group-overflow', '')\n counter.textContent = `+${overflow}`\n this.append(counter)\n this.#counter = counter\n }\n\n #applySize(): void {\n if (!this.size) return\n const avatars = this.querySelectorAll(':scope > aui-avatar')\n for (const avatar of avatars) {\n avatar.setAttribute('size', this.size)\n }\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiProgressCircle extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '0' },\n label: { type: 'string', default: '' },\n }\n\n declare value: string\n declare label: string\n\n #svg: SVGSVGElement | null = null\n #fill: SVGCircleElement | null = null\n #labelEl: HTMLSpanElement | null = null\n\n protected override activate(): void {\n this.#stamp()\n this.addEffect(() => {\n this.#updateValue()\n this.#updateLabel()\n })\n }\n\n protected override dispose(): void {\n this.#svg = null\n this.#fill = null\n this.#labelEl = null\n }\n\n #stamp(): void {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n svg.setAttribute('viewBox', '0 0 36 36')\n\n const track = document.createElementNS('http://www.w3.org/2000/svg', 'circle')\n track.setAttribute('cx', '18')\n track.setAttribute('cy', '18')\n track.setAttribute('r', '15.9')\n track.setAttribute('data-progress-circle-track', '')\n\n const fill = document.createElementNS('http://www.w3.org/2000/svg', 'circle')\n fill.setAttribute('cx', '18')\n fill.setAttribute('cy', '18')\n fill.setAttribute('r', '15.9')\n fill.setAttribute('data-progress-circle-fill', '')\n\n svg.appendChild(track)\n svg.appendChild(fill)\n this.appendChild(svg)\n this.#svg = svg\n this.#fill = fill\n\n const labelEl = document.createElement('span')\n labelEl.setAttribute('data-progress-circle-label', '')\n this.appendChild(labelEl)\n this.#labelEl = labelEl\n }\n\n #updateValue(): void {\n const v = Math.max(0, Math.min(100, Number(this.value) || 0))\n this.style.setProperty('--aui-progress-circle-value', String(v))\n }\n\n #updateLabel(): void {\n if (!this.#labelEl) return\n const text = this.getAttribute('label') || ''\n this.#labelEl.textContent = text\n this.#labelEl.style.display = text ? '' : 'none'\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiDisclosureGroup extends AgentElement {\n static override attributes: AttributeSchema = {\n exclusive: { type: 'boolean', default: false },\n }\n\n declare exclusive: boolean\n\n #handleToggle = (e: Event): void => {\n if (!this.exclusive) return\n\n const target = e.target as HTMLElement\n // Only handle direct child disclosures\n if (target.parentElement !== this) return\n if (target.localName !== 'aui-disclosure') return\n if (!target.hasAttribute('open')) return\n\n for (const child of this.querySelectorAll(':scope > aui-disclosure[open]')) {\n if (child !== target) {\n child.removeAttribute('open')\n }\n }\n }\n\n #observer: MutationObserver | null = null\n\n protected override activate(): void {\n // Listen for attribute changes on child disclosures\n this.#observer = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (\n m.type === 'attributes' &&\n m.attributeName === 'open' &&\n (m.target as HTMLElement).hasAttribute('open')\n ) {\n this.#handleToggle({ target: m.target } as unknown as Event)\n }\n }\n })\n\n this.#observer.observe(this, {\n attributes: true,\n attributeFilter: ['open'],\n subtree: false,\n })\n\n // Also observe direct children (subtree:false only catches this element)\n // We need to observe each child disclosure for attribute changes\n this.#observeChildren()\n }\n\n protected override dispose(): void {\n this.#observer?.disconnect()\n this.#observer = null\n }\n\n #observeChildren(): void {\n if (!this.#observer) return\n for (const child of this.querySelectorAll(':scope > aui-disclosure')) {\n this.#observer.observe(child, {\n attributes: true,\n attributeFilter: ['open'],\n })\n }\n\n // Watch for dynamically added children\n const childObserver = new MutationObserver(() => {\n if (!this.#observer) return\n for (const child of this.querySelectorAll(':scope > aui-disclosure')) {\n this.#observer.observe(child, {\n attributes: true,\n attributeFilter: ['open'],\n })\n }\n })\n childObserver.observe(this, { childList: true })\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTagGroup extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n }\n\n declare label: string\n declare max: string\n\n protected override activate(): void {\n this.setAttribute('role', 'list')\n\n this.addEffect(() => {\n const lbl = this.getAttribute('label') || ''\n if (lbl) {\n this.setAttribute('aria-label', lbl)\n } else {\n this.removeAttribute('aria-label')\n }\n })\n\n this.addEventListener('keydown', this.#handleKeydown)\n this.addEventListener('remove', this.#handleRemove)\n }\n\n protected override dispose(): void {\n this.removeEventListener('keydown', this.#handleKeydown)\n this.removeEventListener('remove', this.#handleRemove)\n }\n\n #getChips(): HTMLElement[] {\n return Array.from(this.querySelectorAll(':scope > aui-chip')) as HTMLElement[]\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n const chips = this.#getChips()\n if (chips.length === 0) return\n\n const target = e.target as HTMLElement\n const currentIndex = chips.indexOf(target.closest('aui-chip') as HTMLElement)\n if (currentIndex === -1) return\n\n let nextIndex = -1\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n e.preventDefault()\n nextIndex = currentIndex < chips.length - 1 ? currentIndex + 1 : 0\n break\n case 'ArrowLeft':\n case 'ArrowUp':\n e.preventDefault()\n nextIndex = currentIndex > 0 ? currentIndex - 1 : chips.length - 1\n break\n case 'Home':\n e.preventDefault()\n nextIndex = 0\n break\n case 'End':\n e.preventDefault()\n nextIndex = chips.length - 1\n break\n case 'Delete':\n case 'Backspace': {\n if (!target.closest('aui-chip')?.hasAttribute('removable')) return\n e.preventDefault()\n const chip = chips[currentIndex]\n // Focus neighbor before removing\n const neighbor = chips[currentIndex + 1] || chips[currentIndex - 1]\n chip.dispatchEvent(new CustomEvent('remove', { bubbles: true }))\n chip.remove()\n if (neighbor) {\n neighbor.setAttribute('tabindex', '0')\n neighbor.focus()\n }\n return\n }\n default:\n return\n }\n\n if (nextIndex >= 0) {\n // Update roving tabindex\n for (const c of chips) c.setAttribute('tabindex', '-1')\n chips[nextIndex].setAttribute('tabindex', '0')\n chips[nextIndex].focus()\n }\n }\n\n #handleRemove = (e: Event): void => {\n const chip = (e.target as HTMLElement).closest('aui-chip')\n if (!chip || chip.parentElement !== this) return\n\n const chips = this.#getChips()\n const idx = chips.indexOf(chip as HTMLElement)\n const neighbor = chips[idx + 1] || chips[idx - 1]\n\n // After removal, focus neighbor\n requestAnimationFrame(() => {\n const remaining = this.#getChips()\n if (neighbor && remaining.includes(neighbor)) {\n neighbor.setAttribute('tabindex', '0')\n neighbor.focus()\n } else if (remaining.length > 0) {\n remaining[0].setAttribute('tabindex', '0')\n remaining[0].focus()\n }\n })\n }\n\n get atMax(): boolean {\n const m = Number(this.max)\n if (!m) return false\n return this.#getChips().length >= m\n }\n}\n","// ── OKLCH ↔ sRGB ↔ Hex conversion utilities ──────────────────\n//\n// Implements CSS Color Level 4 conversions:\n// OKLCH → OKLab → linear-sRGB → sRGB → Hex\n// Hex → sRGB → linear-sRGB → OKLab → OKLCH\n\n// ── OKLCH → OKLab ────────────────────────────────────────────\n\nfunction oklchToOklab(L: number, C: number, H: number): [number, number, number] {\n const hRad = (H * Math.PI) / 180\n return [L, C * Math.cos(hRad), C * Math.sin(hRad)]\n}\n\n// ── OKLab → OKLCH ────────────────────────────────────────────\n\nfunction oklabToOklch(L: number, a: number, b: number): [number, number, number] {\n const C = Math.sqrt(a * a + b * b)\n let H = (Math.atan2(b, a) * 180) / Math.PI\n if (H < 0) H += 360\n return [L, C, H]\n}\n\n// ── OKLab → linear sRGB ─────────────────────────────────────\n\nfunction oklabToLinearSrgb(L: number, a: number, b: number): [number, number, number] {\n const l_ = L + 0.3963377774 * a + 0.2158037573 * b\n const m_ = L - 0.1055613458 * a - 0.0638541728 * b\n const s_ = L - 0.0894841775 * a - 1.2914855480 * b\n\n const l = l_ * l_ * l_\n const m = m_ * m_ * m_\n const s = s_ * s_ * s_\n\n return [\n +4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s,\n ]\n}\n\n// ── linear sRGB → OKLab ─────────────────────────────────────\n\nfunction linearSrgbToOklab(r: number, g: number, b: number): [number, number, number] {\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b\n\n const l_ = Math.cbrt(l)\n const m_ = Math.cbrt(m)\n const s_ = Math.cbrt(s)\n\n return [\n 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_,\n 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_,\n 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_,\n ]\n}\n\n// ── sRGB gamma ───────────────────────────────────────────────\n\nfunction linearToSrgb(c: number): number {\n if (c <= 0.0031308) return 12.92 * c\n return 1.055 * Math.pow(c, 1 / 2.4) - 0.055\n}\n\nfunction srgbToLinear(c: number): number {\n if (c <= 0.04045) return c / 12.92\n return Math.pow((c + 0.055) / 1.055, 2.4)\n}\n\n// ── Gamut clipping (simple clamp) ────────────────────────────\n\nfunction clamp01(v: number): number {\n return Math.max(0, Math.min(1, v))\n}\n\n// ── Public API ───────────────────────────────────────────────\n\nexport function oklchToHex(l: number, c: number, h: number, a = 1): string {\n const [labL, labA, labB] = oklchToOklab(l, c, h)\n const [lr, lg, lb] = oklabToLinearSrgb(labL, labA, labB)\n\n const sr = clamp01(linearToSrgb(lr))\n const sg = clamp01(linearToSrgb(lg))\n const sb = clamp01(linearToSrgb(lb))\n\n const toHex = (v: number) => Math.round(v * 255).toString(16).padStart(2, '0')\n let hex = `#${toHex(sr)}${toHex(sg)}${toHex(sb)}`\n\n if (a < 1) {\n hex += toHex(clamp01(a))\n }\n\n return hex\n}\n\nexport function hexToOklch(hex: string): { l: number; c: number; h: number; a: number } {\n let r = 0, g = 0, b = 0, a = 1\n hex = hex.replace(/^#/, '')\n\n if (hex.length === 3 || hex.length === 4) {\n r = parseInt(hex[0] + hex[0], 16) / 255\n g = parseInt(hex[1] + hex[1], 16) / 255\n b = parseInt(hex[2] + hex[2], 16) / 255\n if (hex.length === 4) a = parseInt(hex[3] + hex[3], 16) / 255\n } else if (hex.length === 6 || hex.length === 8) {\n r = parseInt(hex.slice(0, 2), 16) / 255\n g = parseInt(hex.slice(2, 4), 16) / 255\n b = parseInt(hex.slice(4, 6), 16) / 255\n if (hex.length === 8) a = parseInt(hex.slice(6, 8), 16) / 255\n }\n\n const lr = srgbToLinear(r)\n const lg = srgbToLinear(g)\n const lb = srgbToLinear(b)\n\n const [labL, labA, labB] = linearSrgbToOklab(lr, lg, lb)\n const [L, C, H] = oklabToOklch(labL, labA, labB)\n\n return {\n l: Math.round(L * 1000) / 1000,\n c: Math.round(C * 1000) / 1000,\n h: Math.round(H * 10) / 10,\n a: Math.round(a * 100) / 100,\n }\n}\n\nexport function oklchToString(l: number, c: number, h: number, a?: number): string {\n const lStr = Math.round(l * 1000) / 1000\n const cStr = Math.round(c * 1000) / 1000\n const hStr = Math.round(h * 10) / 10\n\n if (a !== undefined && a < 1) {\n return `oklch(${lStr} ${cStr} ${hStr} / ${Math.round(a * 100) / 100})`\n }\n return `oklch(${lStr} ${cStr} ${hStr})`\n}\n\nexport function parseOklchString(str: string): { l: number; c: number; h: number; a: number } | null {\n const match = str.match(/oklch\\(\\s*([\\d.]+)\\s+([\\d.]+)\\s+([\\d.]+)(?:\\s*\\/\\s*([\\d.]+))?\\s*\\)/)\n if (!match) return null\n return {\n l: parseFloat(match[1]),\n c: parseFloat(match[2]),\n h: parseFloat(match[3]),\n a: match[4] !== undefined ? parseFloat(match[4]) : 1,\n }\n}\n\n/**\n * Check whether an OKLCH color is within sRGB gamut.\n */\nexport function isInGamut(l: number, c: number, h: number): boolean {\n const [labL, labA, labB] = oklchToOklab(l, c, h)\n const [lr, lg, lb] = oklabToLinearSrgb(labL, labA, labB)\n const sr = linearToSrgb(lr)\n const sg = linearToSrgb(lg)\n const sb = linearToSrgb(lb)\n const eps = 0.001\n return sr >= -eps && sr <= 1 + eps &&\n sg >= -eps && sg <= 1 + eps &&\n sb >= -eps && sb <= 1 + eps\n}\n","// ── aui-color-area ────────────────────────────────────────────\n//\n// 2D gradient surface for picking chroma and lightness values\n// at a given hue. Uses OKLCH color model.\n//\n// X axis = Chroma (0 to 0.4), Y axis = Lightness (1 at top to 0 at bottom).\n// Renders via a <canvas> element since CSS can't do OKLCH 2D gradients.\n// Pointer and keyboard driven. No native form elements.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\nimport { oklchToHex, isInGamut } from '../color-picker/oklch-utils.ts'\n\nexport class AuiColorArea extends AgentElement {\n static override attributes: AttributeSchema = {\n hue: { type: 'string', default: '0' },\n chroma: { type: 'string', default: '0.15' },\n lightness: { type: 'string', default: '0.65' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare hue: string\n declare chroma: string\n declare lightness: string\n declare disabled: boolean\n\n #canvas: HTMLCanvasElement | null = null\n #thumb: HTMLElement | null = null\n\n static readonly MAX_CHROMA = 0.4\n\n protected override activate(): void {\n // Stamp internal structure\n if (!this.querySelector('[data-color-area-canvas]')) {\n this.#canvas = document.createElement('canvas')\n this.#canvas.setAttribute('data-color-area-canvas', '')\n this.prepend(this.#canvas)\n } else {\n this.#canvas = this.querySelector('[data-color-area-canvas]')\n }\n\n if (!this.querySelector('[data-color-area-thumb]')) {\n this.#thumb = document.createElement('div')\n this.#thumb.setAttribute('data-color-area-thumb', '')\n this.#thumb.setAttribute('tabindex', '0')\n this.#thumb.setAttribute('role', 'slider')\n this.#thumb.setAttribute('aria-label', 'Color')\n this.appendChild(this.#thumb)\n } else {\n this.#thumb = this.querySelector('[data-color-area-thumb]')\n }\n\n // Sync state reactively\n this.addEffect(() => {\n const h = this.#clamp(parseFloat(this.hue) || 0, 0, 360)\n const c = this.#clamp(parseFloat(this.chroma) || 0, 0, AuiColorArea.MAX_CHROMA)\n const l = this.#clamp(parseFloat(this.lightness) || 0, 0, 1)\n\n // Position thumb: x = chroma/maxChroma, y = 1 - lightness (top = light)\n const xPct = c / AuiColorArea.MAX_CHROMA\n const yPct = 1 - l\n this.style.setProperty('--_x', String(xPct))\n this.style.setProperty('--_y', String(yPct))\n\n if (this.#thumb) {\n this.#thumb.setAttribute('aria-valuetext', `oklch(${l} ${c} ${h})`)\n }\n\n // Redraw canvas gradient\n this.#drawGradient(h)\n })\n\n // Resize observer to keep canvas in sync with element size\n const ro = new ResizeObserver(() => {\n const h = parseFloat(this.hue) || 0\n this.#drawGradient(h)\n })\n ro.observe(this)\n\n this.addEventListener('mousedown', this.#handleMouseDown)\n this.#thumb!.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('mousedown', this.#handleMouseDown)\n this.#thumb?.removeEventListener('keydown', this.#handleKeydown)\n }\n\n // ── Canvas gradient rendering ─────────────────────────────\n\n #drawGradient(hue: number): void {\n const canvas = this.#canvas\n if (!canvas) return\n\n const rect = this.getBoundingClientRect()\n const w = Math.max(1, Math.round(rect.width))\n const h = Math.max(1, Math.round(rect.height))\n\n // Render at half resolution for performance, CSS scales up smoothly\n const dpr = Math.min(window.devicePixelRatio || 1, 2)\n const cw = Math.max(1, Math.round(w * dpr * 0.5))\n const ch = Math.max(1, Math.round(h * dpr * 0.5))\n\n if (canvas.width !== cw || canvas.height !== ch) {\n canvas.width = cw\n canvas.height = ch\n }\n\n const ctx = canvas.getContext('2d', { willReadFrequently: false })\n if (!ctx) return\n\n const imageData = ctx.createImageData(cw, ch)\n const data = imageData.data\n\n for (let y = 0; y < ch; y++) {\n const L = 1 - y / (ch - 1) // top = 1, bottom = 0\n for (let x = 0; x < cw; x++) {\n let C = (x / (cw - 1)) * AuiColorArea.MAX_CHROMA\n const idx = (y * cw + x) * 4\n\n // Gamut-map: if out of sRGB gamut, reduce chroma until in-gamut\n if (!isInGamut(L, C, hue)) {\n let lo = 0, hi = C\n for (let i = 0; i < 8; i++) {\n const mid = (lo + hi) / 2\n if (isInGamut(L, mid, hue)) lo = mid\n else hi = mid\n }\n C = lo\n }\n\n const hex = oklchToHex(L, C, hue)\n data[idx] = parseInt(hex.slice(1, 3), 16)\n data[idx + 1] = parseInt(hex.slice(3, 5), 16)\n data[idx + 2] = parseInt(hex.slice(5, 7), 16)\n data[idx + 3] = 255\n }\n }\n\n ctx.putImageData(imageData, 0, 0)\n }\n\n // ── Mouse interaction (mousedown used instead of pointerdown\n // because pointerdown doesn't fire inside popover top-layer) ──\n\n #handleMouseDown = (e: MouseEvent): void => {\n if (this.disabled) return\n e.preventDefault()\n this.setAttribute('data-color-area-pressed', '')\n this.#setValueFromMouse(e)\n this.#thumb?.focus()\n\n document.addEventListener('mousemove', this.#handleMouseMove)\n document.addEventListener('mouseup', this.#handleMouseUp)\n }\n\n #handleMouseMove = (e: MouseEvent): void => {\n this.#setValueFromMouse(e)\n }\n\n #handleMouseUp = (_e: MouseEvent): void => {\n this.removeAttribute('data-color-area-pressed')\n document.removeEventListener('mousemove', this.#handleMouseMove)\n document.removeEventListener('mouseup', this.#handleMouseUp)\n this.#dispatchChange()\n }\n\n #setValueFromMouse(e: MouseEvent): void {\n const rect = this.getBoundingClientRect()\n const x = this.#clamp((e.clientX - rect.left) / rect.width, 0, 1)\n const y = this.#clamp((e.clientY - rect.top) / rect.height, 0, 1)\n\n const c = Math.round(x * AuiColorArea.MAX_CHROMA * 1000) / 1000\n const l = Math.round((1 - y) * 1000) / 1000\n\n this.chroma = String(c)\n this.lightness = String(l)\n\n this.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n detail: { l, c, h: parseFloat(this.hue) || 0 },\n }))\n }\n\n // ── Keyboard interaction ──────────────────────────────\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n\n const chromaStep = e.shiftKey ? 0.04 : 0.004\n const lightnessStep = e.shiftKey ? 0.1 : 0.01\n let c = parseFloat(this.chroma) || 0\n let l = parseFloat(this.lightness) || 0\n\n switch (e.key) {\n case 'ArrowRight': c = Math.min(AuiColorArea.MAX_CHROMA, c + chromaStep); break\n case 'ArrowLeft': c = Math.max(0, c - chromaStep); break\n case 'ArrowUp': l = Math.min(1, l + lightnessStep); break\n case 'ArrowDown': l = Math.max(0, l - lightnessStep); break\n default: return\n }\n\n e.preventDefault()\n c = Math.round(c * 1000) / 1000\n l = Math.round(l * 1000) / 1000\n this.chroma = String(c)\n this.lightness = String(l)\n\n this.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n detail: { l, c, h: parseFloat(this.hue) || 0 },\n }))\n this.#dispatchChange()\n }\n\n #dispatchChange(): void {\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: {\n l: parseFloat(this.lightness) || 0,\n c: parseFloat(this.chroma) || 0,\n h: parseFloat(this.hue) || 0,\n },\n }))\n }\n\n #clamp(val: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, val))\n }\n}\n","// ── aui-color-slider ──────────────────────────────────────────\n//\n// Single-axis gradient slider for a specific OKLCH color channel\n// (hue, chroma, lightness, or alpha). Renders a gradient\n// track and draggable thumb. Pointer and keyboard driven.\n// No native form elements.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\nimport { oklchToHex } from '../color-picker/oklch-utils.ts'\n\nconst CHANNEL_DEFAULTS: Record<string, { min: number; max: number; step: number }> = {\n hue: { min: 0, max: 360, step: 1 },\n chroma: { min: 0, max: 0.4, step: 0.004 },\n lightness: { min: 0, max: 1, step: 0.01 },\n alpha: { min: 0, max: 1, step: 0.01 },\n}\n\nexport class AuiColorSlider extends AgentElement {\n static override attributes: AttributeSchema = {\n channel: { type: 'string', default: 'hue' },\n value: { type: 'string', default: '0' },\n min: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n hue: { type: 'string', default: '0' },\n chroma: { type: 'string', default: '0.15' },\n lightness: { type: 'string', default: '0.65' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare channel: string\n declare value: string\n declare min: string\n declare max: string\n declare hue: string\n declare chroma: string\n declare lightness: string\n declare disabled: boolean\n\n #track: HTMLElement | null = null\n #thumb: HTMLElement | null = null\n\n protected override activate(): void {\n // Stamp internal structure\n if (!this.querySelector('[data-color-slider-track]')) {\n this.#track = document.createElement('div')\n this.#track.setAttribute('data-color-slider-track', '')\n this.prepend(this.#track)\n } else {\n this.#track = this.querySelector('[data-color-slider-track]')\n }\n\n if (!this.querySelector('[data-color-slider-thumb]')) {\n this.#thumb = document.createElement('div')\n this.#thumb.setAttribute('data-color-slider-thumb', '')\n this.#thumb.setAttribute('tabindex', '0')\n this.#thumb.setAttribute('role', 'slider')\n this.appendChild(this.#thumb)\n } else {\n this.#thumb = this.querySelector('[data-color-slider-thumb]')\n }\n\n // Sync state reactively\n this.addEffect(() => {\n const ch = this.channel || 'hue'\n const defaults = CHANNEL_DEFAULTS[ch] || CHANNEL_DEFAULTS.hue\n const min = this.min !== '' ? parseFloat(this.min) : defaults.min\n const max = this.max !== '' ? parseFloat(this.max) : defaults.max\n const val = parseFloat(this.value) || 0\n const h = parseFloat(this.hue) || 0\n const c = parseFloat(this.chroma) || 0.15\n const l = parseFloat(this.lightness) || 0.65\n\n // Position thumb\n const pct = (max - min) > 0 ? (val - min) / (max - min) : 0\n this.style.setProperty('--_pct', String(Math.max(0, Math.min(1, pct))))\n\n // ARIA\n if (this.#thumb) {\n this.#thumb.setAttribute('aria-label', ch.charAt(0).toUpperCase() + ch.slice(1))\n this.#thumb.setAttribute('aria-valuemin', String(min))\n this.#thumb.setAttribute('aria-valuemax', String(max))\n this.#thumb.setAttribute('aria-valuenow', String(val))\n }\n\n // Dynamic gradient for each channel\n if (this.#track) {\n if (ch === 'hue') {\n // OKLCH hue gradient at the current lightness and chroma\n const stops: string[] = []\n for (let deg = 0; deg <= 360; deg += 30) {\n stops.push(oklchToHex(l, c, deg) + ` ${(deg / 360 * 100).toFixed(1)}%`)\n }\n this.#track.style.background = `linear-gradient(to right, ${stops.join(', ')})`\n } else if (ch === 'chroma') {\n // Chroma gradient: 0 to 0.4 at current L and H\n const stops: string[] = []\n const steps = 10\n for (let i = 0; i <= steps; i++) {\n const cv = (i / steps) * 0.4\n stops.push(oklchToHex(l, cv, h) + ` ${(i / steps * 100).toFixed(1)}%`)\n }\n this.#track.style.background = `linear-gradient(to right, ${stops.join(', ')})`\n } else if (ch === 'lightness') {\n // Lightness gradient: 0 to 1 at current C and H\n const stops: string[] = []\n const steps = 10\n for (let i = 0; i <= steps; i++) {\n const lv = i / steps\n stops.push(oklchToHex(lv, c, h) + ` ${(i / steps * 100).toFixed(1)}%`)\n }\n this.#track.style.background = `linear-gradient(to right, ${stops.join(', ')})`\n } else if (ch === 'alpha') {\n // Alpha gradient: transparent to opaque color\n const color = oklchToHex(l, c, h)\n this.#track.style.background = `linear-gradient(to right, transparent, ${color})`\n } else {\n this.#track.style.background = ''\n }\n }\n })\n\n this.addEventListener('mousedown', this.#handleMouseDown)\n this.#thumb!.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('mousedown', this.#handleMouseDown)\n this.#thumb?.removeEventListener('keydown', this.#handleKeydown)\n }\n\n #getRange(): { min: number; max: number; step: number } {\n const ch = this.channel || 'hue'\n const defaults = CHANNEL_DEFAULTS[ch] || CHANNEL_DEFAULTS.hue\n const min = this.min !== '' ? parseFloat(this.min) : defaults.min\n const max = this.max !== '' ? parseFloat(this.max) : defaults.max\n return { min, max, step: defaults.step }\n }\n\n // ── Mouse interaction (mousedown used instead of pointerdown\n // because pointerdown doesn't fire inside popover top-layer) ──\n\n #handleMouseDown = (e: MouseEvent): void => {\n if (this.disabled) return\n e.preventDefault()\n this.setAttribute('data-color-slider-pressed', '')\n this.#setValueFromMouse(e)\n this.#thumb?.focus()\n\n document.addEventListener('mousemove', this.#handleMouseMove)\n document.addEventListener('mouseup', this.#handleMouseUp)\n }\n\n #handleMouseMove = (e: MouseEvent): void => {\n this.#setValueFromMouse(e)\n }\n\n #handleMouseUp = (_e: MouseEvent): void => {\n this.removeAttribute('data-color-slider-pressed')\n document.removeEventListener('mousemove', this.#handleMouseMove)\n document.removeEventListener('mouseup', this.#handleMouseUp)\n this.#dispatchChange()\n }\n\n #setValueFromMouse(e: MouseEvent): void {\n const rect = this.getBoundingClientRect()\n const pct = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n const { min, max, step } = this.#getRange()\n const raw = min + pct * (max - min)\n const snapped = Math.round(raw / step) * step\n const clamped = Math.max(min, Math.min(max, snapped))\n // Round to avoid float artifacts\n this.value = String(Math.round(clamped * 1000) / 1000)\n\n this.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n detail: { channel: this.channel, value: parseFloat(this.value) },\n }))\n }\n\n // ── Keyboard interaction ──────────────────────────────\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n\n const { min, max, step } = this.#getRange()\n const val = parseFloat(this.value) || 0\n const bigStep = e.shiftKey ? step * 10 : step\n let next: number | undefined\n\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = Math.min(max, val + bigStep)\n break\n case 'ArrowLeft':\n case 'ArrowDown':\n next = Math.max(min, val - bigStep)\n break\n case 'Home':\n next = min\n break\n case 'End':\n next = max\n break\n default:\n return\n }\n\n e.preventDefault()\n this.value = String(Math.round(next * 1000) / 1000)\n this.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n detail: { channel: this.channel, value: parseFloat(this.value) },\n }))\n this.#dispatchChange()\n }\n\n #dispatchChange(): void {\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { channel: this.channel, value: parseFloat(this.value) },\n }))\n }\n}\n","// ── aui-color-field ───────────────────────────────────────────\n//\n// Text input for color values with an inline color swatch preview.\n// Supports hex, rgb, and oklch formats. Validates on blur and\n// normalizes to the specified format.\n//\n// Internal structure:\n// aui-color-field\n// span[data-color-field-swatch] color preview circle\n// span[data-color-field-input] contenteditable text surface\n//\n// No native form elements (<input>, <select>, etc.).\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiColorField extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n format: { type: 'string', default: 'hex' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare format: string\n declare disabled: boolean\n\n #anchorName = ''\n #swatch: HTMLElement | null = null\n #input: HTMLElement | null = null\n #popover: HTMLElement | null = null\n #picker: HTMLElement | null = null\n #popoverOpen = false\n\n protected override activate(): void {\n // Dynamic anchor name for CSS anchor positioning (unique per instance)\n this.#anchorName = `--color-field-${crypto.randomUUID().slice(0, 8)}`\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // Stamp swatch (clickable — opens color picker popover)\n if (!this.querySelector('[data-color-field-swatch]')) {\n this.#swatch = document.createElement('span')\n this.#swatch.setAttribute('data-color-field-swatch', '')\n this.#swatch.setAttribute('role', 'button')\n this.#swatch.setAttribute('tabindex', '-1')\n this.#swatch.setAttribute('aria-label', 'Pick color')\n this.#swatch.style.cursor = 'pointer'\n this.prepend(this.#swatch)\n } else {\n this.#swatch = this.querySelector('[data-color-field-swatch]')\n }\n\n // Stamp input surface\n if (!this.querySelector('[data-color-field-input]')) {\n this.#input = document.createElement('span')\n this.#input.setAttribute('data-color-field-input', '')\n this.#input.setAttribute('contenteditable', 'plaintext-only')\n this.#input.setAttribute('spellcheck', 'false')\n this.#input.setAttribute('role', 'textbox')\n this.#input.setAttribute('aria-label', 'Color value')\n this.appendChild(this.#input)\n } else {\n this.#input = this.querySelector('[data-color-field-input]')\n }\n\n // Sync state\n this.addEffect(() => {\n const v = this.value || ''\n if (this.#swatch) {\n this.#swatch.style.setProperty('--_swatch-color', v || 'transparent')\n }\n // Only sync to input if not currently editing\n if (this.#input && document.activeElement !== this.#input) {\n this.#input.textContent = v\n }\n // Empty state for placeholder\n if (v) {\n this.removeAttribute('data-color-field-empty')\n } else {\n this.setAttribute('data-color-field-empty', '')\n }\n })\n\n this.addEffect(() => {\n if (this.#input) {\n if (this.disabled) {\n this.#input.removeAttribute('contenteditable')\n this.#input.setAttribute('aria-disabled', 'true')\n } else {\n this.#input.setAttribute('contenteditable', 'plaintext-only')\n this.#input.removeAttribute('aria-disabled')\n }\n }\n })\n\n this.#input!.addEventListener('input', this.#handleInput)\n this.#input!.addEventListener('blur', this.#handleBlur)\n this.#input!.addEventListener('keydown', this.#handleKeydown)\n\n // Swatch click toggles popover\n this.#swatch?.addEventListener('click', this.#togglePopover)\n\n // Close on outside click and Escape\n document.addEventListener('pointerdown', this.#handleOutsideClick)\n document.addEventListener('keydown', this.#handleEscape)\n }\n\n protected override dispose(): void {\n this.#input?.removeEventListener('input', this.#handleInput)\n this.#input?.removeEventListener('blur', this.#handleBlur)\n this.#input?.removeEventListener('keydown', this.#handleKeydown)\n this.#swatch?.removeEventListener('click', this.#togglePopover)\n document.removeEventListener('pointerdown', this.#handleOutsideClick)\n document.removeEventListener('keydown', this.#handleEscape)\n this.#popover?.remove()\n }\n\n #handleInput = (): void => {\n const text = this.#input?.textContent?.trim() || ''\n // Live swatch update for valid colors\n if (this.#isValidColor(text)) {\n this.removeAttribute('data-color-field-invalid')\n if (this.#swatch) {\n this.#swatch.style.setProperty('--_swatch-color', text)\n }\n } else if (text) {\n this.setAttribute('data-color-field-invalid', '')\n }\n }\n\n #handleBlur = (): void => {\n const text = this.#input?.textContent?.trim() || ''\n if (!text) {\n this.value = ''\n this.removeAttribute('data-color-field-invalid')\n return\n }\n if (this.#isValidColor(text)) {\n this.value = text\n this.removeAttribute('data-color-field-invalid')\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { value: this.value, format: this.format },\n }))\n } else {\n this.setAttribute('data-color-field-invalid', '')\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Enter') {\n e.preventDefault()\n this.#input?.blur()\n }\n }\n\n #ensurePopover(): void {\n if (this.#popover) return\n\n this.#popover = document.createElement('aui-container')\n this.#popover.setAttribute('kind', 'popover')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('data-color-field-popover', '')\n\n this.#picker = document.createElement('aui-color-picker')\n this.#picker.setAttribute('alpha', '')\n this.#popover.appendChild(this.#picker)\n this.appendChild(this.#popover)\n\n // Picker change syncs back to field\n this.#picker.addEventListener('change', this.#handlePickerChange as EventListener)\n }\n\n #togglePopover = (e: Event): void => {\n e.stopPropagation()\n if (this.disabled) return\n\n if (this.#popoverOpen) {\n this.#closePopover()\n return\n }\n\n this.#ensurePopover()\n\n // Sync picker value before opening\n if (this.#picker && this.value) this.#picker.setAttribute('value', this.value)\n\n try { this.#popover!.showPopover() } catch {}\n this.#popoverOpen = true\n }\n\n #handlePickerChange = (e: CustomEvent): void => {\n e.stopPropagation()\n const val = e.detail?.value\n if (!val) return\n this.value = val\n this.removeAttribute('data-color-field-invalid')\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { value: this.value, format: this.format },\n }))\n }\n\n #handleOutsideClick = (e: PointerEvent): void => {\n if (!this.#popoverOpen) return\n const target = e.target as HTMLElement\n // Don't close if clicking inside the popover or the field itself\n if (this.#popover?.contains(target) || this.contains(target)) return\n this.#closePopover()\n }\n\n #handleEscape = (e: KeyboardEvent): void => {\n if (!this.#popoverOpen) return\n if (e.key === 'Escape') {\n e.preventDefault()\n this.#closePopover()\n }\n }\n\n #closePopover(): void {\n if (!this.#popover || !this.#popoverOpen) return\n try { this.#popover.hidePopover() } catch {}\n this.#popoverOpen = false\n }\n\n #isValidColor(str: string): boolean {\n // Test using CSS.supports for broad format coverage\n if (typeof CSS !== 'undefined' && CSS.supports) {\n return CSS.supports('color', str)\n }\n // Fallback: check common patterns\n return /^#([0-9a-f]{3,8})$/i.test(str) ||\n /^rgb/i.test(str) ||\n /^oklch/i.test(str) ||\n /^hsl/i.test(str)\n }\n}\n","// ── aui-time-field ────────────────────────────────────────────\n//\n// Segmented time input with independently editable hour and minute\n// segments. Supports 12h and 24h formats.\n//\n// Internal structure:\n// aui-time-field\n// span[data-time-segment=\"hour\"] spinbutton\n// span[data-time-separator] \":\"\n// span[data-time-segment=\"minute\"] spinbutton\n// span[data-time-segment=\"period\"] AM/PM (12h only)\n//\n// Each segment is a contenteditable-free span with tabindex and\n// spinbutton role. Keyboard: Arrow Up/Down to increment, digit\n// typing with auto-advance, Left/Right/Tab between segments.\n// No native form elements.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiTimeField extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n min: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n step: { type: 'string', default: '1' },\n format: { type: 'string', default: '24h' },\n 'show-seconds': { type: 'boolean', default: false },\n placeholder: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare min: string\n declare max: string\n declare step: string\n declare format: string\n declare 'show-seconds': boolean\n declare placeholder: string\n declare disabled: boolean\n\n #segments: HTMLElement[] = []\n #digitBuffer = ''\n #digitTimer: ReturnType<typeof setTimeout> | null = null\n\n protected override activate(): void {\n this.#buildSegments()\n\n this.addEffect(() => {\n this.#updateFromValue()\n })\n\n this.addEffect(() => {\n for (const seg of this.#segments) {\n seg.setAttribute('tabindex', this.disabled ? '-1' : '0')\n }\n })\n\n this.addEventListener('keydown', this.#handleKeydown)\n this.addEventListener('focusin', this.#handleFocusIn)\n }\n\n protected override dispose(): void {\n this.removeEventListener('keydown', this.#handleKeydown)\n this.removeEventListener('focusin', this.#handleFocusIn)\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n }\n\n #buildSegments(): void {\n // Clear existing content\n this.innerHTML = ''\n this.#segments = []\n\n const hourSeg = this.#createSegment('hour', 'Hour', 0, this.format === '12h' ? 12 : 23)\n const sep = document.createElement('span')\n sep.setAttribute('data-time-separator', '')\n sep.textContent = ':'\n const minSeg = this.#createSegment('minute', 'Minute', 0, 59)\n\n this.append(hourSeg, sep, minSeg)\n this.#segments = [hourSeg, minSeg]\n\n if (this['show-seconds']) {\n const sep2 = document.createElement('span')\n sep2.setAttribute('data-time-separator', '')\n sep2.textContent = ':'\n const secSeg = this.#createSegment('second', 'Second', 0, 59)\n this.append(sep2, secSeg)\n this.#segments.push(secSeg)\n }\n\n if (this.format === '12h') {\n const periodSeg = document.createElement('span')\n periodSeg.setAttribute('data-time-segment', 'period')\n periodSeg.setAttribute('tabindex', '0')\n periodSeg.setAttribute('role', 'spinbutton')\n periodSeg.setAttribute('aria-label', 'AM/PM')\n periodSeg.setAttribute('aria-valuemin', '0')\n periodSeg.setAttribute('aria-valuemax', '1')\n periodSeg.textContent = 'AM'\n this.appendChild(periodSeg)\n this.#segments.push(periodSeg)\n }\n }\n\n #createSegment(name: string, label: string, min: number, max: number): HTMLElement {\n const seg = document.createElement('span')\n seg.setAttribute('data-time-segment', name)\n seg.setAttribute('tabindex', '0')\n seg.setAttribute('role', 'spinbutton')\n seg.setAttribute('aria-label', label)\n seg.setAttribute('aria-valuemin', String(min))\n seg.setAttribute('aria-valuemax', String(max))\n seg.textContent = '--'\n return seg\n }\n\n #updateFromValue(): void {\n const val = this.value\n if (!val || !/^\\d{1,2}:\\d{2}(:\\d{2})?$/.test(val)) {\n for (const seg of this.#segments) {\n if (seg.getAttribute('data-time-segment') === 'period') {\n seg.textContent = 'AM'\n } else {\n seg.textContent = '--'\n }\n }\n return\n }\n\n const parts = val.split(':')\n let h = parseInt(parts[0], 10)\n const m = parseInt(parts[1], 10)\n const s = parts[2] ? parseInt(parts[2], 10) : 0\n\n const hourSeg = this.querySelector('[data-time-segment=\"hour\"]') as HTMLElement\n const minSeg = this.querySelector('[data-time-segment=\"minute\"]') as HTMLElement\n const secSeg = this.querySelector('[data-time-segment=\"second\"]') as HTMLElement\n const periodSeg = this.querySelector('[data-time-segment=\"period\"]') as HTMLElement\n\n if (this.format === '12h') {\n const period = h >= 12 ? 'PM' : 'AM'\n h = h % 12 || 12\n if (hourSeg) hourSeg.textContent = String(h).padStart(2, '0')\n if (minSeg) minSeg.textContent = String(m).padStart(2, '0')\n if (secSeg) secSeg.textContent = String(s).padStart(2, '0')\n if (periodSeg) periodSeg.textContent = period\n } else {\n if (hourSeg) hourSeg.textContent = String(h).padStart(2, '0')\n if (minSeg) minSeg.textContent = String(m).padStart(2, '0')\n if (secSeg) secSeg.textContent = String(s).padStart(2, '0')\n }\n }\n\n #handleFocusIn = (e: FocusEvent): void => {\n this.#digitBuffer = ''\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n // Select segment text visually\n const seg = (e.target as HTMLElement)\n if (seg.hasAttribute('data-time-segment')) {\n const range = document.createRange()\n range.selectNodeContents(seg)\n const sel = window.getSelection()\n sel?.removeAllRanges()\n sel?.addRange(range)\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n const seg = e.target as HTMLElement\n if (!seg.hasAttribute('data-time-segment')) return\n const segType = seg.getAttribute('data-time-segment')!\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault()\n this.#incrementSegment(seg, segType, e.key === 'ArrowUp' ? 1 : -1)\n return\n }\n\n if (e.key === 'ArrowRight' || e.key === 'Tab' && !e.shiftKey) {\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n if (e.key === 'ArrowRight') e.preventDefault()\n if (e.key === 'Tab') e.preventDefault()\n this.#segments[idx + 1].focus()\n }\n return\n }\n\n if (e.key === 'ArrowLeft' || e.key === 'Tab' && e.shiftKey) {\n const idx = this.#segments.indexOf(seg)\n if (idx > 0) {\n if (e.key === 'ArrowLeft') e.preventDefault()\n if (e.key === 'Tab') e.preventDefault()\n this.#segments[idx - 1].focus()\n }\n return\n }\n\n if (e.key === 'Backspace') {\n e.preventDefault()\n seg.textContent = '--'\n this.#digitBuffer = ''\n this.#commitValue()\n return\n }\n\n // Digit entry\n if (/^\\d$/.test(e.key) && segType !== 'period') {\n e.preventDefault()\n this.#enterDigit(seg, segType, e.key)\n return\n }\n\n // AM/PM toggle\n if (segType === 'period' && (e.key === 'a' || e.key === 'A' || e.key === 'p' || e.key === 'P')) {\n e.preventDefault()\n seg.textContent = e.key.toLowerCase() === 'a' ? 'AM' : 'PM'\n this.#commitValue()\n return\n }\n }\n\n #enterDigit(seg: HTMLElement, segType: string, digit: string): void {\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n\n this.#digitBuffer += digit\n\n if (this.#digitBuffer.length >= 2) {\n const num = parseInt(this.#digitBuffer, 10)\n const max = segType === 'hour'\n ? (this.format === '12h' ? 12 : 23)\n : 59\n const clamped = Math.min(num, max)\n seg.textContent = String(clamped).padStart(2, '0')\n this.#digitBuffer = ''\n this.#commitValue()\n // Auto-advance to next segment\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n this.#segments[idx + 1].focus()\n }\n } else {\n seg.textContent = digit.padStart(2, '0')\n this.#digitTimer = setTimeout(() => {\n this.#digitBuffer = ''\n this.#commitValue()\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n this.#segments[idx + 1].focus()\n }\n }, 800)\n }\n }\n\n #incrementSegment(seg: HTMLElement, segType: string, dir: number): void {\n if (segType === 'period') {\n seg.textContent = seg.textContent === 'AM' ? 'PM' : 'AM'\n this.#commitValue()\n return\n }\n\n const text = seg.textContent || '--'\n const current = text === '--' ? 0 : parseInt(text, 10)\n const max = segType === 'hour'\n ? (this.format === '12h' ? 12 : 23)\n : 59\n const min = segType === 'hour' && this.format === '12h' ? 1 : 0\n const step = (segType === 'minute' || segType === 'second') ? (parseInt(this.step, 10) || 1) : 1\n\n let next = current + dir * step\n if (next > max) next = min\n if (next < min) next = max\n\n seg.textContent = String(next).padStart(2, '0')\n this.#commitValue()\n }\n\n #commitValue(): void {\n const hourSeg = this.querySelector('[data-time-segment=\"hour\"]') as HTMLElement\n const minSeg = this.querySelector('[data-time-segment=\"minute\"]') as HTMLElement\n\n const hText = hourSeg?.textContent || '--'\n const mText = minSeg?.textContent || '--'\n\n if (hText === '--' || mText === '--') {\n this.value = ''\n return\n }\n\n let h = parseInt(hText, 10)\n const m = parseInt(mText, 10)\n\n if (this.format === '12h') {\n const periodSeg = this.querySelector('[data-time-segment=\"period\"]') as HTMLElement\n const period = periodSeg?.textContent || 'AM'\n if (period === 'PM' && h < 12) h += 12\n if (period === 'AM' && h === 12) h = 0\n }\n\n const secSeg = this.querySelector('[data-time-segment=\"second\"]') as HTMLElement\n const sText = secSeg?.textContent || '--'\n const s = sText === '--' ? 0 : parseInt(sText, 10)\n\n const newValue = this['show-seconds']\n ? `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`\n : `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`\n if (newValue !== this.value) {\n this.value = newValue\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { value: this.value },\n }))\n }\n }\n}\n","// ── aui-date-field ────────────────────────────────────────────\n//\n// Segmented date input with independently editable month, day,\n// and year segments. Segment order determined by format attribute.\n//\n// Internal structure (MM/DD/YYYY):\n// aui-date-field\n// span[data-date-segment=\"month\"] spinbutton\n// span[data-date-separator] \"/\"\n// span[data-date-segment=\"day\"] spinbutton\n// span[data-date-separator] \"/\"\n// span[data-date-segment=\"year\"] spinbutton\n//\n// Keyboard: Arrow Up/Down to increment, digit typing with\n// auto-advance, Left/Right/Tab between segments. Validates\n// on blur (e.g. Feb 30 clamps to Feb 28/29). No native form elements.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\ninterface SegmentDef {\n name: string\n label: string\n min: number\n max: number\n digits: number\n}\n\nconst FORMATS: Record<string, { segments: string[]; separator: string }> = {\n 'MM/DD/YYYY': { segments: ['month', 'day', 'year'], separator: '/' },\n 'DD/MM/YYYY': { segments: ['day', 'month', 'year'], separator: '/' },\n 'YYYY-MM-DD': { segments: ['year', 'month', 'day'], separator: '-' },\n}\n\nconst SEGMENT_DEFS: Record<string, SegmentDef> = {\n month: { name: 'month', label: 'Month', min: 1, max: 12, digits: 2 },\n day: { name: 'day', label: 'Day', min: 1, max: 31, digits: 2 },\n year: { name: 'year', label: 'Year', min: 1900, max: 2100, digits: 4 },\n}\n\nexport class AuiDateField extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n min: { type: 'string', default: '' },\n max: { type: 'string', default: '' },\n format: { type: 'string', default: 'MM/DD/YYYY' },\n placeholder: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare min: string\n declare max: string\n declare format: string\n declare placeholder: string\n declare disabled: boolean\n\n #segments: HTMLElement[] = []\n #digitBuffer = ''\n #digitTimer: ReturnType<typeof setTimeout> | null = null\n\n protected override activate(): void {\n this.#buildSegments()\n\n this.addEffect(() => {\n this.#updateFromValue()\n })\n\n this.addEffect(() => {\n for (const seg of this.#segments) {\n seg.setAttribute('tabindex', this.disabled ? '-1' : '0')\n }\n })\n\n this.addEventListener('keydown', this.#handleKeydown)\n this.addEventListener('focusin', this.#handleFocusIn)\n }\n\n protected override dispose(): void {\n this.removeEventListener('keydown', this.#handleKeydown)\n this.removeEventListener('focusin', this.#handleFocusIn)\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n }\n\n #buildSegments(): void {\n this.innerHTML = ''\n this.#segments = []\n\n const fmt = FORMATS[this.format] || FORMATS['MM/DD/YYYY']\n\n for (let i = 0; i < fmt.segments.length; i++) {\n if (i > 0) {\n const sep = document.createElement('span')\n sep.setAttribute('data-date-separator', '')\n sep.textContent = fmt.separator\n this.appendChild(sep)\n }\n\n const def = SEGMENT_DEFS[fmt.segments[i]]\n const seg = document.createElement('span')\n seg.setAttribute('data-date-segment', def.name)\n seg.setAttribute('tabindex', '0')\n seg.setAttribute('role', 'spinbutton')\n seg.setAttribute('aria-label', def.label)\n seg.setAttribute('aria-valuemin', String(def.min))\n seg.setAttribute('aria-valuemax', String(def.max))\n seg.textContent = def.name === 'year' ? '----' : '--'\n this.appendChild(seg)\n this.#segments.push(seg)\n }\n }\n\n #updateFromValue(): void {\n const val = this.value\n if (!val || !/^\\d{4}-\\d{2}-\\d{2}$/.test(val)) {\n for (const seg of this.#segments) {\n const name = seg.getAttribute('data-date-segment')\n seg.textContent = name === 'year' ? '----' : '--'\n }\n return\n }\n\n const [yStr, mStr, dStr] = val.split('-')\n const monthSeg = this.querySelector('[data-date-segment=\"month\"]') as HTMLElement\n const daySeg = this.querySelector('[data-date-segment=\"day\"]') as HTMLElement\n const yearSeg = this.querySelector('[data-date-segment=\"year\"]') as HTMLElement\n\n if (monthSeg) monthSeg.textContent = mStr\n if (daySeg) daySeg.textContent = dStr\n if (yearSeg) yearSeg.textContent = yStr\n }\n\n #handleFocusIn = (e: FocusEvent): void => {\n this.#digitBuffer = ''\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n const seg = e.target as HTMLElement\n if (seg.hasAttribute('data-date-segment')) {\n const range = document.createRange()\n range.selectNodeContents(seg)\n const sel = window.getSelection()\n sel?.removeAllRanges()\n sel?.addRange(range)\n }\n }\n\n #handleKeydown = (e: KeyboardEvent): void => {\n if (this.disabled) return\n const seg = e.target as HTMLElement\n if (!seg.hasAttribute('data-date-segment')) return\n const segType = seg.getAttribute('data-date-segment')!\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault()\n this.#incrementSegment(seg, segType, e.key === 'ArrowUp' ? 1 : -1)\n return\n }\n\n if (e.key === 'ArrowRight' || (e.key === 'Tab' && !e.shiftKey)) {\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n e.preventDefault()\n this.#segments[idx + 1].focus()\n }\n return\n }\n\n if (e.key === 'ArrowLeft' || (e.key === 'Tab' && e.shiftKey)) {\n const idx = this.#segments.indexOf(seg)\n if (idx > 0) {\n e.preventDefault()\n this.#segments[idx - 1].focus()\n }\n return\n }\n\n if (e.key === 'Backspace') {\n e.preventDefault()\n const def = SEGMENT_DEFS[segType]\n seg.textContent = def.digits === 4 ? '----' : '--'\n this.#digitBuffer = ''\n this.#commitValue()\n return\n }\n\n // Digit entry\n if (/^\\d$/.test(e.key)) {\n e.preventDefault()\n this.#enterDigit(seg, segType, e.key)\n return\n }\n }\n\n #enterDigit(seg: HTMLElement, segType: string, digit: string): void {\n if (this.#digitTimer) clearTimeout(this.#digitTimer)\n const def = SEGMENT_DEFS[segType]\n\n this.#digitBuffer += digit\n\n if (this.#digitBuffer.length >= def.digits) {\n const num = parseInt(this.#digitBuffer, 10)\n const clamped = Math.max(def.min, Math.min(def.max, num))\n seg.textContent = String(clamped).padStart(def.digits, '0')\n this.#digitBuffer = ''\n this.#commitValue()\n // Auto-advance\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n this.#segments[idx + 1].focus()\n }\n } else {\n seg.textContent = this.#digitBuffer.padStart(def.digits, '0')\n this.#digitTimer = setTimeout(() => {\n const num = parseInt(this.#digitBuffer, 10)\n if (!isNaN(num)) {\n const clamped = Math.max(def.min, Math.min(def.max, num))\n seg.textContent = String(clamped).padStart(def.digits, '0')\n }\n this.#digitBuffer = ''\n this.#commitValue()\n const idx = this.#segments.indexOf(seg)\n if (idx < this.#segments.length - 1) {\n this.#segments[idx + 1].focus()\n }\n }, 800)\n }\n }\n\n #incrementSegment(seg: HTMLElement, segType: string, dir: number): void {\n const def = SEGMENT_DEFS[segType]\n const text = seg.textContent || ''\n const isEmpty = text === '--' || text === '----'\n const current = isEmpty ? (dir > 0 ? def.min - 1 : def.max + 1) : parseInt(text, 10)\n\n let next = current + dir\n if (next > def.max) next = def.min\n if (next < def.min) next = def.max\n\n seg.textContent = String(next).padStart(def.digits, '0')\n this.#commitValue()\n }\n\n #commitValue(): void {\n const monthSeg = this.querySelector('[data-date-segment=\"month\"]') as HTMLElement\n const daySeg = this.querySelector('[data-date-segment=\"day\"]') as HTMLElement\n const yearSeg = this.querySelector('[data-date-segment=\"year\"]') as HTMLElement\n\n const mText = monthSeg?.textContent || '--'\n const dText = daySeg?.textContent || '--'\n const yText = yearSeg?.textContent || '----'\n\n if (mText === '--' || dText === '--' || yText === '----') {\n this.value = ''\n return\n }\n\n let m = parseInt(mText, 10)\n let d = parseInt(dText, 10)\n const y = parseInt(yText, 10)\n\n // Clamp day to valid range for month\n const maxDay = new Date(y, m, 0).getDate()\n if (d > maxDay) {\n d = maxDay\n if (daySeg) daySeg.textContent = String(d).padStart(2, '0')\n }\n\n const newValue = `${String(y).padStart(4, '0')}-${String(m).padStart(2, '0')}-${String(d).padStart(2, '0')}`\n if (newValue !== this.value) {\n this.value = newValue\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { value: this.value, date: new Date(y, m - 1, d) },\n }))\n }\n }\n}\n","// ── aui-context-menu ────────────────────────────────────────\n//\n// Right-click triggered context menu using the Popover API.\n// Positions a popover at the pointer location on `contextmenu`\n// event. Reuses aui-option for items and aui-optgroup for groups.\n//\n// Keyboard: ArrowDown/Up to navigate, Enter to select, Escape to close.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Helpers ────────────────────────────────────────────────\n\nfunction isOptionOrGroup(el: Element): boolean {\n return el.tagName === 'AUI-OPTION' || el.tagName === 'AUI-OPTGROUP'\n}\n\n// ── Component ──────────────────────────────────────────────\n\nexport class AuiContextMenu extends AgentElement {\n static override attributes: AttributeSchema = {\n target: { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n open: { type: 'boolean', default: false },\n }\n\n declare target: string\n declare disabled: boolean\n declare open: boolean\n\n #popover: HTMLElement | null = null\n #listbox: HTMLElement | null = null\n #targetEl: Element | null = null\n #activeIndex = -1\n\n protected override activate(): void {\n // ── Stamp popover + listbox ────────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('data-context-menu-popover', '')\n this.#popover.setAttribute('role', 'menu')\n\n this.#listbox = document.createElement('div')\n this.#listbox.setAttribute('data-context-menu-list', '')\n this.#listbox.setAttribute('role', 'menu')\n this.#listbox.setAttribute('tabindex', '-1')\n this.#popover.appendChild(this.#listbox)\n\n // Move child options/groups into listbox\n const children = Array.from(this.children)\n for (const child of children) {\n if (isOptionOrGroup(child)) {\n this.#listbox.appendChild(child)\n }\n }\n\n this.appendChild(this.#popover)\n\n // ── Resolve target ─────────────────────────────────\n this.addEffect(() => {\n // Detach from previous target\n if (this.#targetEl) {\n this.#targetEl.removeEventListener('contextmenu', this.#onContextMenu as EventListener)\n this.#targetEl = null\n }\n\n // Resolve new target\n const selector = this.target\n if (selector) {\n this.#targetEl = document.querySelector(selector)\n }\n if (!this.#targetEl) {\n // Fallback: parent element\n this.#targetEl = this.parentElement\n }\n\n if (this.#targetEl) {\n this.#targetEl.addEventListener('contextmenu', this.#onContextMenu as EventListener)\n }\n })\n\n // ── Events ─────────────────────────────────────────\n this.#listbox.addEventListener('click', this.#onListboxClick)\n this.#listbox.addEventListener('keydown', this.#onListboxKeydown)\n document.addEventListener('click', this.#onOutsideClick)\n document.addEventListener('keydown', this.#onDocumentKeydown)\n }\n\n protected override dispose(): void {\n if (this.#targetEl) {\n this.#targetEl.removeEventListener('contextmenu', this.#onContextMenu as EventListener)\n }\n this.#listbox?.removeEventListener('click', this.#onListboxClick)\n this.#listbox?.removeEventListener('keydown', this.#onListboxKeydown)\n document.removeEventListener('click', this.#onOutsideClick)\n document.removeEventListener('keydown', this.#onDocumentKeydown)\n this.#closeMenu()\n }\n\n // ── Options ─────────────────────────────────────────────\n\n get options(): HTMLElement[] {\n return Array.from(this.#listbox?.querySelectorAll('aui-option') ?? [])\n }\n\n get enabledOptions(): HTMLElement[] {\n return this.options.filter(o => !o.hasAttribute('disabled'))\n }\n\n // ── Popover control ─────────────────────────────────────\n\n #openMenu(x: number, y: number): void {\n if (!this.#popover || this.disabled) return\n this.#popover.style.left = `${x}px`\n this.#popover.style.top = `${y}px`\n try { this.#popover.showPopover() } catch {}\n this.open = true\n this.#activeIndex = -1\n this.#clearActive()\n // Focus the listbox for keyboard nav\n requestAnimationFrame(() => this.#listbox?.focus())\n }\n\n #closeMenu(): void {\n if (!this.#popover) return\n try { this.#popover.hidePopover() } catch {}\n this.open = false\n this.#activeIndex = -1\n this.#clearActive()\n }\n\n // ── Active (keyboard highlight) ─────────────────────────\n\n #setActive(index: number): void {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n this.#clearActive()\n this.#activeIndex = Math.max(0, Math.min(index, opts.length - 1))\n const opt = opts[this.#activeIndex]\n opt.setAttribute('data-navigate-active', '')\n opt.scrollIntoView({ block: 'nearest' })\n }\n\n #clearActive(): void {\n for (const opt of this.options) {\n opt.removeAttribute('data-navigate-active')\n }\n }\n\n // ── Select ──────────────────────────────────────────────\n\n #selectOption(opt: HTMLElement): void {\n const value = opt.getAttribute('value') ?? opt.textContent?.trim() ?? ''\n this.#closeMenu()\n this.dispatchEvent(new CustomEvent('select', {\n bubbles: true,\n composed: true,\n detail: { value },\n }))\n }\n\n // ── Event handlers ──────────────────────────────────────\n\n #onContextMenu = (e: MouseEvent): void => {\n if (this.disabled) return\n e.preventDefault()\n // Close any currently open menu first\n if (this.open) this.#closeMenu()\n this.#openMenu(e.clientX, e.clientY)\n }\n\n #onListboxClick = (e: Event): void => {\n const option = (e.target as HTMLElement).closest('aui-option') as HTMLElement | null\n if (!option || option.hasAttribute('disabled')) return\n this.#selectOption(option)\n }\n\n #onListboxKeydown = (e: KeyboardEvent): void => {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const next = this.#activeIndex < opts.length - 1 ? this.#activeIndex + 1 : 0\n this.#setActive(next)\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const prev = this.#activeIndex > 0 ? this.#activeIndex - 1 : opts.length - 1\n this.#setActive(prev)\n break\n }\n case 'Home': {\n e.preventDefault()\n this.#setActive(0)\n break\n }\n case 'End': {\n e.preventDefault()\n this.#setActive(opts.length - 1)\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n const active = opts[this.#activeIndex]\n if (active) this.#selectOption(active)\n break\n }\n case 'Escape': {\n e.preventDefault()\n this.#closeMenu()\n break\n }\n }\n }\n\n #onOutsideClick = (e: Event): void => {\n if (this.open && !this.#popover?.contains(e.target as Node)) {\n this.#closeMenu()\n }\n }\n\n #onDocumentKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n this.#closeMenu()\n }\n }\n}\n","// ── aui-dropdown-menu ───────────────────────────────────────\n//\n// Trigger button + popover menu for ACTIONS (not selection).\n// Unlike aui-select, does not track selection state — items\n// are fire-and-forget actions that emit a `select` event.\n//\n// Stamps a trigger span with button styling, opens a popover\n// with aui-option items on click. Keyboard: arrow nav, Enter\n// to select, Escape to close.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\n// ── Constants ────────────────────────────────────────────────\n\nconst CHEVRON_SVG = `<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><polyline points=\"48,80 128,160 208,80\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"24\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\n\n// ── Helpers ──────────────────────────────────────────────────\n\nfunction isOptionOrGroup(el: Element): boolean {\n return el.tagName === 'AUI-OPTION' || el.tagName === 'AUI-OPTGROUP'\n}\n\n// ── Component ────────────────────────────────────────────────\n\nexport class AuiDropdownMenu extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n 'icon-leading': { type: 'string', default: '' },\n 'icon-trailing': { type: 'string', default: '' },\n 'hide-label': { type: 'boolean', default: false },\n disabled: { type: 'boolean', default: false },\n open: { type: 'boolean', default: false },\n }\n\n declare label: string\n declare disabled: boolean\n declare open: boolean\n\n #anchorName: string = ''\n #trigger: HTMLElement | null = null\n #triggerLabel: HTMLElement | null = null\n #chevron: HTMLElement | null = null\n #popover: HTMLElement | null = null\n #listbox: HTMLElement | null = null\n #activeIndex = -1\n\n protected override activate(): void {\n const id = `dropdown-menu-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // ── Stamp trigger ────────────────────────────────────\n this.#trigger = document.createElement('span')\n this.#trigger.setAttribute('data-trigger', '')\n this.#trigger.setAttribute('role', 'button')\n this.#trigger.setAttribute('aria-haspopup', 'menu')\n this.#trigger.setAttribute('tabindex', '0')\n this.#trigger.id = id\n\n this.#triggerLabel = document.createElement('span')\n this.#triggerLabel.setAttribute('data-label', '')\n this.#trigger.appendChild(this.#triggerLabel)\n\n this.#chevron = document.createElement('span')\n this.#chevron.setAttribute('data-chevron', '')\n this.#chevron.innerHTML = CHEVRON_SVG\n this.#trigger.appendChild(this.#chevron)\n\n // ── Stamp popover + listbox ──────────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'auto')\n this.#popover.setAttribute('data-dropdown', '')\n\n this.#listbox = document.createElement('div')\n this.#listbox.setAttribute('data-dropdown-menu-list', '')\n this.#listbox.setAttribute('role', 'menu')\n this.#listbox.setAttribute('tabindex', '-1')\n this.#popover.appendChild(this.#listbox)\n\n // Move child options/groups into listbox\n const children = Array.from(this.children)\n for (const child of children) {\n if (isOptionOrGroup(child)) {\n this.#listbox.appendChild(child)\n }\n }\n\n this.appendChild(this.#trigger!)\n this.appendChild(this.#popover!)\n\n // Anchor positioning\n ;(this.#trigger.style as any).anchorName = this.#anchorName\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // ── Sync state ───────────────────────────────────────\n this.addEffect(() => {\n if (this.disabled) {\n this.#trigger!.setAttribute('tabindex', '-1')\n } else {\n this.#trigger!.setAttribute('tabindex', '0')\n }\n this.#trigger!.setAttribute('aria-expanded', String(this.open))\n this.#trigger!.setAttribute('aria-disabled', String(this.disabled))\n\n // Label\n const label = this.label || ''\n this.#triggerLabel!.textContent = label\n })\n\n // ── Events ───────────────────────────────────────────\n this.#trigger.addEventListener('click', this.#onTriggerClick)\n this.#trigger.addEventListener('keydown', this.#onTriggerKeydown)\n this.#listbox.addEventListener('click', this.#onListboxClick)\n this.#listbox.addEventListener('keydown', this.#onListboxKeydown)\n document.addEventListener('click', this.#onOutsideClick)\n }\n\n protected override dispose(): void {\n this.#trigger?.removeEventListener('click', this.#onTriggerClick)\n this.#trigger?.removeEventListener('keydown', this.#onTriggerKeydown)\n this.#listbox?.removeEventListener('click', this.#onListboxClick)\n this.#listbox?.removeEventListener('keydown', this.#onListboxKeydown)\n document.removeEventListener('click', this.#onOutsideClick)\n this.#closeMenu()\n }\n\n // ── Options ─────────────────────────────────────────────\n\n get options(): HTMLElement[] {\n return Array.from(this.#listbox?.querySelectorAll('aui-option') ?? [])\n }\n\n get enabledOptions(): HTMLElement[] {\n return this.options.filter(o => !o.hasAttribute('disabled'))\n }\n\n // ── Popover control ─────────────────────────────────────\n\n #openMenu(): void {\n if (!this.#popover || this.disabled) return\n try { this.#popover.showPopover() } catch {}\n this.open = true\n this.#activeIndex = -1\n this.#clearActive()\n requestAnimationFrame(() => this.#listbox?.focus())\n }\n\n #closeMenu(): void {\n if (!this.#popover) return\n try { this.#popover.hidePopover() } catch {}\n this.open = false\n this.#activeIndex = -1\n this.#clearActive()\n }\n\n // ── Active (keyboard highlight) ─────────────────────────\n\n #setActive(index: number): void {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n this.#clearActive()\n this.#activeIndex = Math.max(0, Math.min(index, opts.length - 1))\n const opt = opts[this.#activeIndex]\n opt.setAttribute('data-navigate-active', '')\n opt.scrollIntoView({ block: 'nearest' })\n }\n\n #clearActive(): void {\n for (const opt of this.options) {\n opt.removeAttribute('data-navigate-active')\n }\n }\n\n // ── Select ──────────────────────────────────────────────\n\n #selectOption(opt: HTMLElement): void {\n const value = opt.getAttribute('value') ?? opt.textContent?.trim() ?? ''\n this.#closeMenu()\n this.#trigger?.focus()\n this.dispatchEvent(new CustomEvent('select', {\n bubbles: true,\n composed: true,\n detail: { value },\n }))\n }\n\n // ── Event handlers ──────────────────────────────────────\n\n #onTriggerClick = (): void => {\n if (this.disabled) return\n if (this.open) this.#closeMenu()\n else this.#openMenu()\n }\n\n #onTriggerKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n if (!this.open) this.#openMenu()\n } else if (e.key === 'Escape') {\n this.#closeMenu()\n }\n }\n\n #onListboxClick = (e: Event): void => {\n const option = (e.target as HTMLElement).closest('aui-option') as HTMLElement | null\n if (!option || option.hasAttribute('disabled')) return\n this.#selectOption(option)\n }\n\n #onListboxKeydown = (e: KeyboardEvent): void => {\n const opts = this.enabledOptions\n if (opts.length === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const next = this.#activeIndex < opts.length - 1 ? this.#activeIndex + 1 : 0\n this.#setActive(next)\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const prev = this.#activeIndex > 0 ? this.#activeIndex - 1 : opts.length - 1\n this.#setActive(prev)\n break\n }\n case 'Home': {\n e.preventDefault()\n this.#setActive(0)\n break\n }\n case 'End': {\n e.preventDefault()\n this.#setActive(opts.length - 1)\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n const active = opts[this.#activeIndex]\n if (active) this.#selectOption(active)\n break\n }\n case 'Escape': {\n e.preventDefault()\n this.#closeMenu()\n this.#trigger?.focus()\n break\n }\n case 'Tab': {\n this.#closeMenu()\n break\n }\n }\n }\n\n #onOutsideClick = (e: Event): void => {\n if (this.open && !this.contains(e.target as Node)) {\n this.#closeMenu()\n }\n }\n}\n","// ── aui-hover-card ──────────────────────────────────────────\n//\n// Rich preview card shown on hover/focus with configurable delay.\n// Uses Popover API + CSS anchor positioning. Resolves anchor from\n// a CSS selector or falls back to previous sibling / parent.\n//\n// On hover: show after delay. On leave: hide after hide-delay.\n// Moving pointer into the card cancels the hide timer.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiHoverCard extends AgentElement {\n static override attributes: AttributeSchema = {\n anchor: { type: 'string', default: '' },\n delay: { type: 'string', default: '300' },\n 'hide-delay': { type: 'string', default: '200' },\n side: { type: 'enum', values: ['top', 'bottom', 'left', 'right'], default: 'bottom' },\n open: { type: 'boolean', default: false },\n }\n\n declare anchor: string\n declare delay: string\n declare side: string\n declare open: boolean\n\n #popover: HTMLElement | null = null\n #anchorEl: HTMLElement | null = null\n #anchorName: string = ''\n #showTimer: ReturnType<typeof setTimeout> | null = null\n #hideTimer: ReturnType<typeof setTimeout> | null = null\n\n protected override activate(): void {\n const id = `hover-card-${crypto.randomUUID().slice(0, 8)}`\n this.#anchorName = `--${id}`\n\n // ── Create popover surface ────────────────────────\n this.#popover = document.createElement('div')\n this.#popover.setAttribute('popover', 'manual')\n this.#popover.setAttribute('data-hover-card-popover', '')\n this.#popover.setAttribute('role', 'tooltip')\n this.#popover.id = id\n\n // Move all child content into the popover\n while (this.firstChild) {\n this.#popover.appendChild(this.firstChild)\n }\n this.appendChild(this.#popover)\n\n // Pass anchor name to CSS\n this.style.setProperty('--_anchor', this.#anchorName)\n\n // ── Resolve anchor ────────────────────────────────\n this.addEffect(() => {\n // Detach from previous anchor\n if (this.#anchorEl) {\n this.#anchorEl.removeEventListener('mouseenter', this.#onAnchorEnter)\n this.#anchorEl.removeEventListener('mouseleave', this.#onAnchorLeave)\n this.#anchorEl.removeEventListener('focusin', this.#onAnchorFocusIn)\n this.#anchorEl.removeEventListener('focusout', this.#onAnchorFocusOut)\n ;(this.#anchorEl.style as any).anchorName = ''\n this.#anchorEl.removeAttribute('aria-describedby')\n this.#anchorEl = null\n }\n\n // Resolve new anchor\n const selector = this.anchor\n if (selector) {\n this.#anchorEl = document.querySelector(selector)\n }\n if (!this.#anchorEl) {\n this.#anchorEl = (this.previousElementSibling as HTMLElement) ?? this.parentElement\n }\n\n if (this.#anchorEl) {\n ;(this.#anchorEl.style as any).anchorName = this.#anchorName\n this.#anchorEl.setAttribute('aria-describedby', id)\n this.#anchorEl.addEventListener('mouseenter', this.#onAnchorEnter)\n this.#anchorEl.addEventListener('mouseleave', this.#onAnchorLeave)\n this.#anchorEl.addEventListener('focusin', this.#onAnchorFocusIn)\n this.#anchorEl.addEventListener('focusout', this.#onAnchorFocusOut)\n }\n })\n\n // ── Popover pointer events (cancel hide when hovering card) ──\n this.#popover.addEventListener('mouseenter', this.#onPopoverEnter)\n this.#popover.addEventListener('mouseleave', this.#onPopoverLeave)\n\n // ── Escape key ────────────────────────────────────\n this.addEventListener('keydown', this.#onKeydown)\n }\n\n protected override dispose(): void {\n this.#clearTimers()\n if (this.#anchorEl) {\n this.#anchorEl.removeEventListener('mouseenter', this.#onAnchorEnter)\n this.#anchorEl.removeEventListener('mouseleave', this.#onAnchorLeave)\n this.#anchorEl.removeEventListener('focusin', this.#onAnchorFocusIn)\n this.#anchorEl.removeEventListener('focusout', this.#onAnchorFocusOut)\n ;(this.#anchorEl.style as any).anchorName = ''\n this.#anchorEl.removeAttribute('aria-describedby')\n }\n this.#popover?.removeEventListener('mouseenter', this.#onPopoverEnter)\n this.#popover?.removeEventListener('mouseleave', this.#onPopoverLeave)\n this.removeEventListener('keydown', this.#onKeydown)\n this.#hide()\n }\n\n // ── Show / Hide ─────────────────────────────────────────\n\n #show(): void {\n if (!this.#popover) return\n try { this.#popover.showPopover() } catch {}\n this.open = true\n }\n\n #hide(): void {\n if (!this.#popover) return\n try { this.#popover.hidePopover() } catch {}\n this.open = false\n }\n\n #clearTimers(): void {\n if (this.#showTimer !== null) { clearTimeout(this.#showTimer); this.#showTimer = null }\n if (this.#hideTimer !== null) { clearTimeout(this.#hideTimer); this.#hideTimer = null }\n }\n\n #scheduleShow(): void {\n this.#clearTimers()\n const ms = parseInt(this.delay) || 300\n this.#showTimer = setTimeout(() => {\n this.#showTimer = null\n this.#show()\n }, ms)\n }\n\n #scheduleHide(): void {\n if (this.#showTimer !== null) { clearTimeout(this.#showTimer); this.#showTimer = null }\n const hideDelay = this.getAttribute('hide-delay')\n const ms = hideDelay !== null ? (parseInt(hideDelay) || 200) : 200\n this.#hideTimer = setTimeout(() => {\n this.#hideTimer = null\n this.#hide()\n }, ms)\n }\n\n // ── Event handlers ──────────────────────────────────────\n\n #onAnchorEnter = (): void => {\n this.#scheduleShow()\n }\n\n #onAnchorLeave = (): void => {\n this.#scheduleHide()\n }\n\n #onAnchorFocusIn = (): void => {\n this.#scheduleShow()\n }\n\n #onAnchorFocusOut = (): void => {\n this.#scheduleHide()\n }\n\n #onPopoverEnter = (): void => {\n // Cancel pending hide — user moved into the card\n if (this.#hideTimer !== null) {\n clearTimeout(this.#hideTimer)\n this.#hideTimer = null\n }\n }\n\n #onPopoverLeave = (): void => {\n this.#scheduleHide()\n }\n\n #onKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n this.#clearTimers()\n this.#hide()\n }\n }\n}\n","// ── aui-color-picker ────────────────────────────────────────\n//\n// Compound color picker composing:\n// - aui-color-area (chroma + lightness 2D surface)\n// - aui-color-slider[channel=\"hue\"]\n// - aui-color-slider[channel=\"alpha\"] (optional)\n// - Output row with aui-copy-button elements\n//\n// Uses OKLCH as the native color model. Syncs all sub-components\n// bidirectionally. Parses/serializes between OKLCH and hex.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\nimport { oklchToHex, hexToOklch, oklchToString, parseOklchString } from './oklch-utils.ts'\n\n// ── Component ────────────────────────────────────────────────\n\nexport class AuiColorPicker extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '#000000' },\n format: { type: 'string', default: 'oklch' },\n alpha: { type: 'boolean', default: false },\n disabled: { type: 'boolean', default: false },\n }\n\n declare value: string\n declare format: string\n declare alpha: boolean\n declare disabled: boolean\n\n #area: HTMLElement | null = null\n #hueSlider: HTMLElement | null = null\n #chromaSlider: HTMLElement | null = null\n #lightnessSlider: HTMLElement | null = null\n #alphaSlider: HTMLElement | null = null\n #alphaRow: HTMLElement | null = null\n #outputRow: HTMLElement | null = null\n #oklchCopy: HTMLElement | null = null\n #oklchLabel: HTMLElement | null = null\n #hexCopy: HTMLElement | null = null\n #hexLabel: HTMLElement | null = null\n #valueEls: Map<string, HTMLElement> = new Map()\n\n // Internal OKLCH(A) state\n #l = 0\n #c = 0\n #h = 0\n #a = 1\n #updating = false\n\n protected override activate(): void {\n // ── Stamp sub-components ──────────────────────────\n\n // Color area\n this.#area = document.createElement('aui-color-area')\n this.#area.setAttribute('data-color-picker-area', '')\n this.appendChild(this.#area)\n\n // Slider rows container\n const sliders = document.createElement('div')\n sliders.setAttribute('data-color-picker-sliders', '')\n\n // Helper: create [Label][slider][value] row\n const makeRow = (label: string, channel: string): HTMLElement => {\n const row = document.createElement('div')\n row.setAttribute('data-color-picker-slider-row', '')\n\n const lbl = document.createElement('span')\n lbl.setAttribute('data-color-picker-slider-label', '')\n lbl.textContent = label\n\n const slider = document.createElement('aui-color-slider')\n slider.setAttribute('channel', channel)\n\n const val = document.createElement('span')\n val.setAttribute('data-color-picker-slider-value', '')\n this.#valueEls.set(channel, val)\n\n row.appendChild(lbl)\n row.appendChild(slider)\n row.appendChild(val)\n sliders.appendChild(row)\n return slider\n }\n\n this.#hueSlider = makeRow('H', 'hue')\n this.#chromaSlider = makeRow('C', 'chroma')\n this.#lightnessSlider = makeRow('L', 'lightness')\n this.#alphaSlider = makeRow('A', 'alpha')\n this.#alphaRow = this.#alphaSlider.parentElement\n\n this.appendChild(sliders)\n\n // Output rows\n this.#outputRow = document.createElement('div')\n this.#outputRow.setAttribute('data-color-picker-output', '')\n\n const oklchGroup = document.createElement('div')\n oklchGroup.setAttribute('data-color-picker-output-group', '')\n this.#oklchLabel = document.createElement('span')\n this.#oklchLabel.setAttribute('data-color-picker-value', '')\n this.#oklchCopy = document.createElement('aui-copy-button')\n this.#oklchCopy.setAttribute('density', 'compact')\n oklchGroup.appendChild(this.#oklchLabel)\n oklchGroup.appendChild(this.#oklchCopy)\n\n const hexGroup = document.createElement('div')\n hexGroup.setAttribute('data-color-picker-output-group', '')\n this.#hexLabel = document.createElement('span')\n this.#hexLabel.setAttribute('data-color-picker-value', '')\n this.#hexCopy = document.createElement('aui-copy-button')\n this.#hexCopy.setAttribute('density', 'compact')\n hexGroup.appendChild(this.#hexLabel)\n hexGroup.appendChild(this.#hexCopy)\n\n this.#outputRow.appendChild(oklchGroup)\n this.#outputRow.appendChild(hexGroup)\n this.appendChild(this.#outputRow)\n\n // ── Parse initial value ──────────────────────────\n this.#parseValue()\n\n // ── Sync state to sub-components ─────────────────\n this.addEffect(() => {\n if (this.#alphaRow) {\n this.#alphaRow.style.display = this.alpha ? '' : 'none'\n }\n\n const allSliders = [this.#hueSlider, this.#chromaSlider, this.#lightnessSlider, this.#alphaSlider]\n if (this.disabled) {\n this.#area!.setAttribute('disabled', '')\n for (const s of allSliders) s?.setAttribute('disabled', '')\n } else {\n this.#area!.removeAttribute('disabled')\n for (const s of allSliders) s?.removeAttribute('disabled')\n }\n })\n\n this.addEffect(() => {\n if (this.#updating) return\n this.#parseValue()\n this.#syncToSubComponents()\n })\n\n // ── Listen to sub-component events ───────────────\n this.#area!.addEventListener('input', this.#onAreaInput as EventListener)\n this.#area!.addEventListener('change', this.#onAreaChange as EventListener)\n\n const sliderHandler = (channel: string) => (e: Event) => {\n const ce = e as CustomEvent\n ce.stopPropagation()\n const v = ce.detail?.value ?? 0\n if (channel === 'hue') this.#h = v\n else if (channel === 'chroma') this.#c = v\n else if (channel === 'lightness') this.#l = v\n else if (channel === 'alpha') this.#a = v\n this.#updateValue()\n if (e.type === 'change') this.#dispatchChange()\n }\n\n for (const [ch, slider] of [\n ['hue', this.#hueSlider],\n ['chroma', this.#chromaSlider],\n ['lightness', this.#lightnessSlider],\n ['alpha', this.#alphaSlider],\n ] as [string, HTMLElement | null][]) {\n if (!slider) continue\n slider.addEventListener('input', sliderHandler(ch))\n slider.addEventListener('change', sliderHandler(ch))\n }\n }\n\n protected override dispose(): void {\n // Event listeners are on stamped children that get removed with the component\n }\n\n // ── Value parsing ───────────────────────────────────────\n\n #parseValue(): void {\n const val = (this.value || '').trim()\n\n if (val.startsWith('oklch(')) {\n const parsed = parseOklchString(val)\n if (parsed) {\n this.#l = parsed.l\n this.#c = parsed.c\n this.#h = parsed.h\n this.#a = parsed.a\n return\n }\n }\n\n if (val.startsWith('#')) {\n const oklch = hexToOklch(val)\n this.#l = oklch.l\n this.#c = oklch.c\n this.#h = oklch.h\n this.#a = oklch.a\n return\n }\n\n // Fallback to black\n this.#l = 0\n this.#c = 0\n this.#h = 0\n this.#a = 1\n }\n\n // ── Sync sub-components ─────────────────────────────────\n\n #syncToSubComponents(): void {\n const attrs = { hue: String(this.#h), chroma: String(this.#c), lightness: String(this.#l) }\n\n if (this.#area) {\n this.#area.setAttribute('hue', attrs.hue)\n this.#area.setAttribute('chroma', attrs.chroma)\n this.#area.setAttribute('lightness', attrs.lightness)\n }\n\n // Sync all sliders with current OKLCH state\n const syncSlider = (slider: HTMLElement | null, value: string) => {\n if (!slider) return\n slider.setAttribute('value', value)\n slider.setAttribute('hue', attrs.hue)\n slider.setAttribute('chroma', attrs.chroma)\n slider.setAttribute('lightness', attrs.lightness)\n }\n\n syncSlider(this.#hueSlider, attrs.hue)\n syncSlider(this.#chromaSlider, attrs.chroma)\n syncSlider(this.#lightnessSlider, attrs.lightness)\n syncSlider(this.#alphaSlider, String(this.#a))\n\n // Update value displays next to each slider\n const hVal = this.#valueEls.get('hue')\n const cVal = this.#valueEls.get('chroma')\n const lVal = this.#valueEls.get('lightness')\n const aVal = this.#valueEls.get('alpha')\n if (hVal) hVal.textContent = String(Math.round(this.#h))\n if (cVal) cVal.textContent = (Math.round(this.#c * 1000) / 1000).toFixed(3)\n if (lVal) lVal.textContent = (Math.round(this.#l * 1000) / 1000).toFixed(3)\n if (aVal) aVal.textContent = (Math.round(this.#a * 100) / 100).toFixed(2)\n\n // Update output rows\n const oklchStr = oklchToString(this.#l, this.#c, this.#h, this.#a < 1 ? this.#a : undefined)\n const hexStr = oklchToHex(this.#l, this.#c, this.#h, this.#a)\n\n if (this.#oklchCopy) this.#oklchCopy.setAttribute('value', oklchStr)\n if (this.#oklchLabel) this.#oklchLabel.textContent = oklchStr\n if (this.#hexCopy) this.#hexCopy.setAttribute('value', hexStr)\n if (this.#hexLabel) this.#hexLabel.textContent = hexStr\n }\n\n #updateValue(): void {\n this.#updating = true\n if (this.format === 'hex') {\n this.value = oklchToHex(this.#l, this.#c, this.#h, this.#a)\n } else {\n this.value = oklchToString(this.#l, this.#c, this.#h, this.#a < 1 ? this.#a : undefined)\n }\n this.#syncToSubComponents()\n this.#updating = false\n }\n\n #dispatchChange(): void {\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: {\n value: this.value,\n l: this.#l,\n c: this.#c,\n h: this.#h,\n a: this.#a,\n },\n }))\n }\n\n // ── Event handlers ──────────────────────────────────────\n\n #onAreaInput = (e: CustomEvent): void => {\n e.stopPropagation()\n this.#l = e.detail.l\n this.#c = e.detail.c\n this.#updateValue()\n }\n\n #onAreaChange = (e: CustomEvent): void => {\n e.stopPropagation()\n this.#l = e.detail.l\n this.#c = e.detail.c\n this.#updateValue()\n this.#dispatchChange()\n }\n\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nfunction parseMaxSize(str: string): number {\n const match = str.match(/^(\\d+(?:\\.\\d+)?)\\s*(KB|MB|GB)$/i)\n if (!match) return Infinity\n const val = parseFloat(match[1])\n const unit = match[2].toUpperCase()\n if (unit === 'KB') return val * 1024\n if (unit === 'MB') return val * 1024 * 1024\n if (unit === 'GB') return val * 1024 * 1024 * 1024\n return Infinity\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\nexport class AuiFileUpload extends AgentElement {\n static override attributes: AttributeSchema = {\n accept: { type: 'string', default: '' },\n multiple: { type: 'boolean', default: false },\n 'max-size': { type: 'string', default: '' },\n 'max-files': { type: 'string', default: '' },\n disabled: { type: 'boolean', default: false },\n }\n\n declare accept: string\n declare multiple: boolean\n declare 'max-size': string\n declare 'max-files': string\n declare disabled: boolean\n\n #zone: HTMLElement | null = null\n #input: HTMLInputElement | null = null\n #list: HTMLElement | null = null\n #files: File[] = []\n\n get files(): File[] {\n return [...this.#files]\n }\n\n protected override activate(): void {\n // Stamp drop zone\n this.#zone = document.createElement('div')\n this.#zone.setAttribute('data-file-upload-zone', '')\n\n const icon = document.createElement('aui-icon')\n icon.setAttribute('name', 'upload-simple')\n icon.setAttribute('size', 'lg')\n this.#zone.appendChild(icon)\n\n const text = document.createElement('span')\n text.setAttribute('data-file-upload-text', '')\n text.textContent = 'Drop files here or click to browse'\n this.#zone.appendChild(text)\n\n this.#input = document.createElement('input')\n this.#input.type = 'file'\n this.#input.setAttribute('data-file-upload-input', '')\n this.#input.hidden = true\n this.#zone.appendChild(this.#input)\n\n this.#list = document.createElement('div')\n this.#list.setAttribute('data-file-upload-list', '')\n\n this.prepend(this.#zone)\n this.appendChild(this.#list)\n\n // Reactive: sync input attrs\n this.addEffect(() => {\n if (!this.#input) return\n if (this.accept) this.#input.accept = this.accept\n else this.#input.removeAttribute('accept')\n this.#input.multiple = this.multiple\n })\n\n // Event: click zone to open file picker\n this.#zone.addEventListener('click', this.#onZoneClick)\n\n // Event: file input change\n this.#input.addEventListener('change', this.#onInputChange)\n\n // Drag events\n this.#zone.addEventListener('dragover', this.#onDragOver)\n this.#zone.addEventListener('dragleave', this.#onDragLeave)\n this.#zone.addEventListener('drop', this.#onDrop)\n }\n\n protected override dispose(): void {\n this.#zone?.removeEventListener('click', this.#onZoneClick)\n this.#zone?.removeEventListener('dragover', this.#onDragOver)\n this.#zone?.removeEventListener('dragleave', this.#onDragLeave)\n this.#zone?.removeEventListener('drop', this.#onDrop)\n this.#input?.removeEventListener('change', this.#onInputChange)\n this.#zone?.remove()\n this.#list?.remove()\n this.#zone = null\n this.#input = null\n this.#list = null\n this.#files = []\n }\n\n #onZoneClick = (): void => {\n if (this.disabled) return\n this.#input?.click()\n }\n\n #onInputChange = (): void => {\n if (!this.#input?.files) return\n this.#addFiles(Array.from(this.#input.files))\n this.#input.value = ''\n }\n\n #onDragOver = (e: DragEvent): void => {\n e.preventDefault()\n if (this.disabled) return\n this.#zone?.setAttribute('data-file-upload-drag-active', '')\n }\n\n #onDragLeave = (): void => {\n this.#zone?.removeAttribute('data-file-upload-drag-active')\n }\n\n #onDrop = (e: DragEvent): void => {\n e.preventDefault()\n this.#zone?.removeAttribute('data-file-upload-drag-active')\n if (this.disabled) return\n if (!e.dataTransfer?.files) return\n this.#addFiles(Array.from(e.dataTransfer.files))\n }\n\n #addFiles(incoming: File[]): void {\n const maxSize = this['max-size'] ? parseMaxSize(this['max-size']) : Infinity\n const maxFiles = this['max-files'] ? parseInt(this['max-files'], 10) : Infinity\n\n for (const file of incoming) {\n if (file.size > maxSize) continue\n if (this.#files.length >= maxFiles) break\n // Skip duplicates by name+size\n if (this.#files.some(f => f.name === file.name && f.size === file.size)) continue\n this.#files.push(file)\n }\n\n this.#renderList()\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { files: this.files },\n }))\n }\n\n #removeFile(index: number): void {\n const file = this.#files[index]\n if (!file) return\n this.#files.splice(index, 1)\n this.#renderList()\n this.dispatchEvent(new CustomEvent('remove', {\n bubbles: true,\n detail: { file, index },\n }))\n }\n\n #renderList(): void {\n if (!this.#list) return\n this.#list.innerHTML = ''\n\n for (let i = 0; i < this.#files.length; i++) {\n const file = this.#files[i]\n const item = document.createElement('div')\n item.setAttribute('data-file-upload-item', '')\n\n // Image preview\n if (file.type.startsWith('image/')) {\n const preview = document.createElement('img')\n preview.setAttribute('data-file-upload-preview', '')\n preview.src = URL.createObjectURL(file)\n preview.alt = file.name\n item.appendChild(preview)\n } else {\n const icon = document.createElement('aui-icon')\n icon.setAttribute('name', 'file-text')\n icon.setAttribute('size', 'sm')\n icon.setAttribute('data-file-upload-file-icon', '')\n item.appendChild(icon)\n }\n\n const nameEl = document.createElement('span')\n nameEl.setAttribute('data-file-upload-name', '')\n nameEl.textContent = file.name\n item.appendChild(nameEl)\n\n const sizeEl = document.createElement('span')\n sizeEl.setAttribute('data-file-upload-size', '')\n sizeEl.textContent = formatSize(file.size)\n item.appendChild(sizeEl)\n\n const removeBtn = document.createElement('button')\n removeBtn.setAttribute('data-file-upload-remove', '')\n removeBtn.setAttribute('aria-label', `Remove ${file.name}`)\n removeBtn.innerHTML = '<aui-icon name=\"x\" size=\"xs\"></aui-icon>'\n const idx = i\n removeBtn.addEventListener('click', (e) => {\n e.stopPropagation()\n this.#removeFile(idx)\n })\n item.appendChild(removeBtn)\n\n this.#list.appendChild(item)\n }\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCopyButton extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '' },\n label: { type: 'string', default: 'Copy' },\n size: { type: 'enum', default: '', values: ['sm', '', 'lg'] },\n }\n\n declare value: string\n declare label: string\n declare size: string\n\n #trigger: HTMLElement | null = null\n #copyIcon: HTMLElement | null = null\n #checkIcon: HTMLElement | null = null\n #timeout: ReturnType<typeof setTimeout> | null = null\n\n protected override activate(): void {\n this.#trigger = document.createElement('aui-button') as HTMLElement\n this.#trigger.setAttribute('ghost', '')\n this.#trigger.setAttribute('hide-label', '')\n this.#trigger.setAttribute('label', 'Copy')\n this.#trigger.setAttribute('data-copy-trigger', '')\n\n this.#copyIcon = document.createElement('aui-icon')\n this.#copyIcon.setAttribute('name', 'copy')\n this.#copyIcon.setAttribute('data-copy-icon', '')\n\n this.#checkIcon = document.createElement('aui-icon')\n this.#checkIcon.setAttribute('name', 'check')\n this.#checkIcon.setAttribute('data-copy-check', '')\n this.#checkIcon.style.display = 'none'\n\n this.#trigger.appendChild(this.#copyIcon)\n this.#trigger.appendChild(this.#checkIcon)\n\n // Insert trigger before existing children (content to copy)\n const firstChild = this.firstChild\n if (firstChild) {\n this.insertBefore(this.#trigger, firstChild)\n } else {\n this.appendChild(this.#trigger)\n }\n\n // Reactive: sync label\n this.addEffect(() => {\n if (this.#trigger) {\n this.#trigger.setAttribute('aria-label', this.label || 'Copy')\n }\n })\n\n // Reactive: sync icon size\n this.addEffect(() => {\n const iconSize = this.size === 'sm' ? 'xs' : this.size === 'lg' ? 'md' : 'sm'\n if (this.#copyIcon) this.#copyIcon.setAttribute('size', iconSize)\n if (this.#checkIcon) this.#checkIcon.setAttribute('size', iconSize)\n })\n\n this.#trigger.addEventListener('click', this.#onCopy)\n }\n\n protected override dispose(): void {\n if (this.#timeout) clearTimeout(this.#timeout)\n this.#trigger?.removeEventListener('click', this.#onCopy)\n this.#trigger?.remove()\n this.#trigger = null\n this.#copyIcon = null\n this.#checkIcon = null\n }\n\n #onCopy = async (): Promise<void> => {\n // Determine text: value attr takes priority, then textContent of non-trigger children\n let text = this.value\n if (!text) {\n // Collect text from children that aren't the trigger\n const children = Array.from(this.childNodes)\n text = children\n .filter(n => n !== this.#trigger)\n .map(n => n.textContent)\n .join('')\n .trim()\n }\n\n if (!text) return\n\n try {\n await navigator.clipboard.writeText(text)\n this.#showCheck()\n } catch {\n // Clipboard API failed (e.g. not HTTPS)\n }\n }\n\n #showCheck(): void {\n if (this.#timeout) clearTimeout(this.#timeout)\n\n if (this.#copyIcon) this.#copyIcon.style.display = 'none'\n if (this.#checkIcon) this.#checkIcon.style.display = ''\n this.#trigger?.setAttribute('data-copy-copied', '')\n\n this.#timeout = setTimeout(() => {\n if (this.#copyIcon) this.#copyIcon.style.display = ''\n if (this.#checkIcon) this.#checkIcon.style.display = 'none'\n this.#trigger?.removeAttribute('data-copy-copied')\n this.#timeout = null\n }, 3000)\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiStat extends AgentElement {\n static override attributes: AttributeSchema = {\n label: { type: 'string', default: '' },\n value: { type: 'string', default: '' },\n trend: { type: 'enum', default: '', values: ['up', 'down', 'neutral', ''] },\n change: { type: 'string', default: '' },\n 'animate-count': { type: 'boolean', default: false },\n 'animate-count-start': { type: 'string', default: '0' },\n 'animate-scramble': { type: 'boolean', default: false },\n 'duration-ms': { type: 'string', default: '2000' },\n }\n\n declare label: string\n declare value: string\n declare trend: string\n declare change: string\n declare 'animate-count': boolean\n declare 'animate-count-start': string\n declare 'animate-scramble': boolean\n declare 'duration-ms': string\n\n #labelEl: HTMLElement | null = null\n #valueEl: HTMLElement | null = null\n #changeEl: HTMLElement | null = null\n #animFrame: number | null = null\n #hasAnimated = false\n\n protected override activate(): void {\n // Stamp label\n this.#labelEl = document.createElement('span')\n this.#labelEl.setAttribute('data-stat-label', '')\n\n // Stamp value\n this.#valueEl = document.createElement('span')\n this.#valueEl.setAttribute('data-stat-value', '')\n\n // Stamp change row\n this.#changeEl = document.createElement('span')\n this.#changeEl.setAttribute('data-stat-change', '')\n\n // Insert before any existing children (e.g. sparkline)\n const firstChild = this.firstChild\n if (firstChild) {\n this.insertBefore(this.#changeEl, firstChild)\n this.insertBefore(this.#valueEl, this.#changeEl)\n this.insertBefore(this.#labelEl, this.#valueEl)\n } else {\n this.appendChild(this.#labelEl)\n this.appendChild(this.#valueEl)\n this.appendChild(this.#changeEl)\n }\n\n // Reactive: update content\n this.addEffect(() => {\n if (this.#labelEl) {\n this.#labelEl.textContent = this.label\n this.#labelEl.style.display = this.label ? '' : 'none'\n }\n })\n\n this.addEffect(() => {\n if (!this.#valueEl) return\n this.#valueEl.style.display = this.value ? '' : 'none'\n\n if (this.value && (this['animate-count'] || this['animate-scramble']) && !this.#hasAnimated) {\n this.#hasAnimated = true\n if (this['animate-scramble']) {\n this.#runScramble(this.value)\n } else {\n this.#runCountUp(this.value)\n }\n } else {\n this.#valueEl.textContent = this.value\n }\n })\n\n this.addEffect(() => {\n if (!this.#changeEl) return\n const trend = this.trend\n const change = this.change\n\n if (!change && !trend) {\n this.#changeEl.style.display = 'none'\n return\n }\n\n this.#changeEl.style.display = ''\n\n if (trend) {\n this.#changeEl.setAttribute('data-stat-trend', trend)\n } else {\n this.#changeEl.removeAttribute('data-stat-trend')\n }\n\n // Build: arrow + text\n let html = ''\n if (trend === 'up' || trend === 'down') {\n html += '<span data-stat-arrow></span>'\n }\n html += change || ''\n this.#changeEl.innerHTML = html\n })\n }\n\n /** Parse a formatted value into { prefix, number, suffix, decimals, useCommas } */\n #parseValue(val: string): { prefix: string; num: number; suffix: string; decimals: number; useCommas: boolean } {\n const match = val.match(/^([^0-9]*?)([\\d,]+\\.?\\d*)(.*?)$/)\n if (!match) return { prefix: '', num: 0, suffix: '', decimals: 0, useCommas: false }\n const prefix = match[1]\n const numStr = match[2]\n const suffix = match[3]\n const useCommas = numStr.includes(',')\n const clean = numStr.replace(/,/g, '')\n const num = parseFloat(clean)\n const dotIdx = clean.indexOf('.')\n const decimals = dotIdx >= 0 ? clean.length - dotIdx - 1 : 0\n return { prefix, num, suffix, decimals, useCommas }\n }\n\n /** Format a number back with prefix, suffix, commas, decimals */\n #formatValue(n: number, prefix: string, suffix: string, decimals: number, useCommas: boolean): string {\n let s = decimals > 0 ? n.toFixed(decimals) : String(Math.round(n))\n if (useCommas) {\n const [intPart, decPart] = s.split('.')\n const withCommas = intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n s = decPart ? `${withCommas}.${decPart}` : withCommas\n }\n return `${prefix}${s}${suffix}`\n }\n\n /** Animate count-up from start to target */\n #runCountUp(targetVal: string): void {\n const { prefix, num: target, suffix, decimals, useCommas } = this.#parseValue(targetVal)\n const startStr = this['animate-count-start'] || '0'\n const { num: start } = this.#parseValue(startStr.match(/\\d/) ? startStr : `${prefix}${startStr}${suffix}`)\n const duration = parseInt(this['duration-ms'], 10) || 2000\n const t0 = performance.now()\n\n const tick = (now: number) => {\n const elapsed = now - t0\n const progress = Math.min(elapsed / duration, 1)\n // Ease out cubic\n const eased = 1 - Math.pow(1 - progress, 3)\n const current = start + (target - start) * eased\n\n if (this.#valueEl) {\n this.#valueEl.textContent = this.#formatValue(current, prefix, suffix, decimals, useCommas)\n }\n\n if (progress < 1) {\n this.#animFrame = requestAnimationFrame(tick)\n }\n }\n\n this.#animFrame = requestAnimationFrame(tick)\n }\n\n /** Animate scramble — randomize characters then resolve to target */\n #runScramble(targetVal: string): void {\n const chars = '0123456789'\n const duration = parseInt(this['duration-ms'], 10) || 2000\n const t0 = performance.now()\n\n const tick = (now: number) => {\n const elapsed = now - t0\n const progress = Math.min(elapsed / duration, 1)\n\n if (this.#valueEl) {\n // Resolve characters left-to-right as progress advances\n let result = ''\n for (let i = 0; i < targetVal.length; i++) {\n const charProgress = (progress * targetVal.length - i)\n if (charProgress >= 1 || !/\\d/.test(targetVal[i])) {\n result += targetVal[i]\n } else if (charProgress > 0) {\n result += chars[Math.floor(Math.random() * chars.length)]\n } else {\n result += chars[Math.floor(Math.random() * chars.length)]\n }\n }\n this.#valueEl.textContent = result\n }\n\n if (progress < 1) {\n this.#animFrame = requestAnimationFrame(tick)\n } else if (this.#valueEl) {\n this.#valueEl.textContent = targetVal\n }\n }\n\n this.#animFrame = requestAnimationFrame(tick)\n }\n\n protected override dispose(): void {\n if (this.#animFrame) cancelAnimationFrame(this.#animFrame)\n this.#labelEl?.remove()\n this.#valueEl?.remove()\n this.#changeEl?.remove()\n this.#labelEl = null\n this.#valueEl = null\n this.#changeEl = null\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiImage extends AgentElement {\n static override attributes: AttributeSchema = {\n src: { type: 'string', default: '' },\n alt: { type: 'string', default: '' },\n aspect: { type: 'string', default: '' },\n fallback: { type: 'string', default: '' },\n fit: { type: 'enum', default: 'cover', values: ['cover', 'contain'] },\n zoomable: { type: 'boolean', default: false },\n }\n\n declare src: string\n declare alt: string\n declare aspect: string\n declare fallback: string\n declare fit: string\n declare zoomable: boolean\n\n #img: HTMLImageElement | null = null\n #dialog: HTMLDialogElement | null = null\n #fallbackShown = false\n\n protected override activate(): void {\n this.#stamp()\n this.addEffect(() => this.#syncSrc())\n this.addEffect(() => this.#syncAlt())\n this.addEffect(() => this.#syncAspect())\n this.addEffect(() => this.#syncFit())\n }\n\n protected override dispose(): void {\n this.#dialog?.remove()\n this.#img = null\n this.#dialog = null\n }\n\n #stamp(): void {\n const img = document.createElement('img')\n img.loading = 'lazy'\n img.draggable = false\n img.setAttribute('data-image-el', '')\n\n img.addEventListener('load', () => {\n this.setAttribute('data-image-loaded', '')\n this.removeAttribute('data-image-error')\n this.#fallbackShown = false\n })\n\n img.addEventListener('error', () => {\n if (this.#fallbackShown) return\n this.#fallbackShown = true\n this.removeAttribute('data-image-loaded')\n this.setAttribute('data-image-error', '')\n\n if (this.fallback) {\n img.src = this.fallback\n }\n })\n\n this.prepend(img)\n this.#img = img\n\n if (this.zoomable) {\n this.setAttribute('data-image-zoomable', '')\n this.addEventListener('click', this.#openLightbox)\n }\n }\n\n #syncSrc(): void {\n const s = this.src\n if (this.#img && s) {\n this.#fallbackShown = false\n this.#img.src = s\n }\n }\n\n #syncAlt(): void {\n const a = this.alt\n if (this.#img) this.#img.alt = a\n }\n\n #syncAspect(): void {\n const a = this.aspect\n if (a) {\n this.style.aspectRatio = a\n } else {\n this.style.removeProperty('aspect-ratio')\n }\n }\n\n #syncFit(): void {\n const f = this.fit\n if (this.#img) this.#img.style.objectFit = f\n }\n\n #openLightbox = (): void => {\n if (!this.src) return\n\n const dialog = document.createElement('dialog')\n dialog.setAttribute('data-image-lightbox', '')\n\n const img = document.createElement('img')\n img.src = this.src\n img.alt = this.alt\n\n dialog.append(img)\n\n dialog.addEventListener('click', () => {\n dialog.close()\n })\n\n dialog.addEventListener('close', () => {\n dialog.remove()\n this.#dialog = null\n })\n\n document.body.append(dialog)\n this.#dialog = dialog\n dialog.showModal()\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCarousel extends AgentElement {\n static override deferChildren = true\n\n static override attributes: AttributeSchema = {\n 'auto-play': { type: 'boolean', default: false },\n interval: { type: 'string', default: '4000' },\n loop: { type: 'boolean', default: false },\n 'show-arrows': { type: 'boolean', default: false },\n 'show-dots': { type: 'boolean', default: false },\n }\n\n declare 'auto-play': boolean\n declare interval: string\n declare loop: boolean\n declare 'show-arrows': boolean\n declare 'show-dots': boolean\n\n #track: HTMLDivElement | null = null\n #dotsContainer: HTMLDivElement | null = null\n #prevBtn: HTMLElement | null = null\n #nextBtn: HTMLElement | null = null\n #autoPlayTimer: ReturnType<typeof setInterval> | null = null\n #observer: IntersectionObserver | null = null\n #currentIndex = 0\n\n protected override activate(): void {\n this.#stamp()\n this.addEffect(() => this.#syncAutoPlay())\n this.addEffect(() => this.#syncArrows())\n this.addEffect(() => this.#syncDots())\n }\n\n protected override dispose(): void {\n this.#stopAutoPlay()\n this.#observer?.disconnect()\n this.#track = null\n this.#dotsContainer = null\n this.#prevBtn = null\n this.#nextBtn = null\n }\n\n #stamp(): void {\n // Wrap existing children in a track\n const track = document.createElement('div')\n track.setAttribute('data-carousel-track', '')\n track.setAttribute('tabindex', '0')\n track.setAttribute('role', 'group')\n track.setAttribute('aria-roledescription', 'carousel')\n\n // Move all children into the track\n while (this.firstChild) {\n const child = this.firstChild\n if (child instanceof HTMLElement) {\n child.setAttribute('data-carousel-slide', '')\n child.setAttribute('role', 'group')\n child.setAttribute('aria-roledescription', 'slide')\n }\n track.append(child)\n }\n\n this.append(track)\n this.#track = track\n\n // Scroll listener for dot sync\n track.addEventListener('scroll', this.#onScroll, { passive: true })\n\n // Keyboard navigation\n track.addEventListener('keydown', this.#onKeydown)\n\n // Pause auto-play on hover/focus\n this.addEventListener('mouseenter', this.#pauseAutoPlay)\n this.addEventListener('mouseleave', this.#resumeAutoPlay)\n this.addEventListener('focusin', this.#pauseAutoPlay)\n this.addEventListener('focusout', this.#resumeAutoPlay)\n\n // Set up intersection observer for slide visibility\n this.#observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const slides = this.#getSlides()\n const idx = slides.indexOf(entry.target as HTMLElement)\n if (idx !== -1) {\n this.#currentIndex = idx\n this.#updateDots()\n this.dispatchEvent(\n new CustomEvent('aui:carousel-change', {\n bubbles: true,\n detail: { index: idx },\n }),\n )\n }\n }\n }\n },\n { root: track, threshold: 0.5 },\n )\n\n for (const slide of this.#getSlides()) {\n this.#observer.observe(slide)\n }\n }\n\n #getSlides(): HTMLElement[] {\n if (!this.#track) return []\n return Array.from(this.#track.querySelectorAll('[data-carousel-slide]'))\n }\n\n #syncArrows(): void {\n const show = this['show-arrows']\n if (show && !this.#prevBtn) {\n const prev = document.createElement('aui-button')\n prev.setAttribute('data-carousel-prev', '')\n prev.setAttribute('scrim', '')\n prev.setAttribute('hide-label', '')\n prev.setAttribute('label', 'Previous slide')\n prev.setAttribute('icon-leading', 'caret-left')\n prev.setAttribute('size', 'sm')\n prev.addEventListener('click', () => this.#goTo(this.#currentIndex - 1))\n\n const next = document.createElement('aui-button')\n next.setAttribute('data-carousel-next', '')\n next.setAttribute('scrim', '')\n next.setAttribute('hide-label', '')\n next.setAttribute('label', 'Next slide')\n next.setAttribute('icon-leading', 'caret-right')\n next.setAttribute('size', 'sm')\n next.addEventListener('click', () => this.#goTo(this.#currentIndex + 1))\n\n this.append(prev, next)\n this.#prevBtn = prev\n this.#nextBtn = next\n } else if (!show && this.#prevBtn) {\n this.#prevBtn.remove()\n this.#nextBtn?.remove()\n this.#prevBtn = null\n this.#nextBtn = null\n }\n }\n\n #syncDots(): void {\n const show = this['show-dots']\n if (show && !this.#dotsContainer) {\n const dots = document.createElement('div')\n dots.setAttribute('data-carousel-dots', '')\n dots.setAttribute('role', 'tablist')\n\n const slides = this.#getSlides()\n for (let i = 0; i < slides.length; i++) {\n const dot = document.createElement('button')\n dot.setAttribute('data-carousel-dot', '')\n dot.setAttribute('role', 'tab')\n dot.setAttribute('aria-label', `Go to slide ${i + 1}`)\n if (i === this.#currentIndex) dot.setAttribute('data-carousel-dot-active', '')\n dot.addEventListener('click', () => this.#goTo(i))\n dots.append(dot)\n }\n\n this.append(dots)\n this.#dotsContainer = dots\n } else if (!show && this.#dotsContainer) {\n this.#dotsContainer.remove()\n this.#dotsContainer = null\n }\n }\n\n #updateDots(): void {\n if (!this.#dotsContainer) return\n const dots = this.#dotsContainer.querySelectorAll('[data-carousel-dot]')\n for (let i = 0; i < dots.length; i++) {\n if (i === this.#currentIndex) {\n dots[i].setAttribute('data-carousel-dot-active', '')\n } else {\n dots[i].removeAttribute('data-carousel-dot-active')\n }\n }\n }\n\n #goTo(index: number): void {\n const slides = this.#getSlides()\n if (!slides.length || !this.#track) return\n\n let target = index\n if (this.loop) {\n target = ((index % slides.length) + slides.length) % slides.length\n } else {\n target = Math.max(0, Math.min(index, slides.length - 1))\n }\n\n const slide = slides[target]\n if (slide) {\n slide.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' })\n }\n }\n\n #syncAutoPlay(): void {\n const play = this['auto-play']\n if (play) {\n this.#startAutoPlay()\n } else {\n this.#stopAutoPlay()\n }\n }\n\n #startAutoPlay(): void {\n this.#stopAutoPlay()\n const ms = parseInt(this.interval, 10) || 4000\n this.#autoPlayTimer = setInterval(() => {\n const slides = this.#getSlides()\n const next = this.#currentIndex + 1\n if (next >= slides.length && !this.loop) {\n this.#goTo(0)\n } else {\n this.#goTo(next)\n }\n }, ms)\n }\n\n #stopAutoPlay(): void {\n if (this.#autoPlayTimer !== null) {\n clearInterval(this.#autoPlayTimer)\n this.#autoPlayTimer = null\n }\n }\n\n #pauseAutoPlay = (): void => {\n this.#stopAutoPlay()\n }\n\n #resumeAutoPlay = (): void => {\n if (this['auto-play']) this.#startAutoPlay()\n }\n\n #onScroll = (): void => {\n // Handled by IntersectionObserver\n }\n\n #onKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowLeft') {\n e.preventDefault()\n this.#goTo(this.#currentIndex - 1)\n } else if (e.key === 'ArrowRight') {\n e.preventDefault()\n this.#goTo(this.#currentIndex + 1)\n }\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport interface Notification {\n id: string\n title: string\n message?: string\n intent?: string\n timestamp: number\n read: boolean\n}\n\nlet _idCounter = 0\n\nexport class AuiNotificationCenter extends AgentElement {\n static override attributes: AttributeSchema = {\n max: { type: 'string', default: '50' },\n }\n\n declare max: string\n\n #notifications: Notification[] = []\n #trigger: HTMLButtonElement | null = null\n #badge: HTMLSpanElement | null = null\n #panel: HTMLDivElement | null = null\n #list: HTMLDivElement | null = null\n #emptyEl: HTMLDivElement | null = null\n #clearBtn: HTMLButtonElement | null = null\n\n protected override activate(): void {\n this.#stamp()\n }\n\n protected override dispose(): void {\n this.#trigger = null\n this.#badge = null\n this.#panel = null\n this.#list = null\n this.#emptyEl = null\n this.#clearBtn = null\n this.#notifications.length = 0\n }\n\n // ── Public API ──────────────────────────────────────────────\n\n add(opts: { title: string; message?: string; intent?: string; timestamp?: number }): string {\n const id = `notif-${++_idCounter}`\n const notif: Notification = {\n id,\n title: opts.title,\n message: opts.message,\n intent: opts.intent,\n timestamp: opts.timestamp ?? Date.now(),\n read: false,\n }\n\n this.#notifications.unshift(notif)\n\n // Enforce max\n const limit = parseInt(this.max, 10) || 50\n if (this.#notifications.length > limit) {\n this.#notifications.length = limit\n }\n\n this.#render()\n return id\n }\n\n markRead(id: string): void {\n const notif = this.#notifications.find((n) => n.id === id)\n if (notif && !notif.read) {\n notif.read = true\n this.#render()\n this.dispatchEvent(\n new CustomEvent('aui:notification-read', { bubbles: true, detail: { id } }),\n )\n }\n }\n\n dismiss(id: string): void {\n const idx = this.#notifications.findIndex((n) => n.id === id)\n if (idx !== -1) {\n this.#notifications.splice(idx, 1)\n this.#render()\n this.dispatchEvent(\n new CustomEvent('aui:notification-dismiss', { bubbles: true, detail: { id } }),\n )\n }\n }\n\n clearAll(): void {\n this.#notifications.length = 0\n this.#render()\n }\n\n get notifications(): ReadonlyArray<Notification> {\n return this.#notifications\n }\n\n get unreadCount(): number {\n return this.#notifications.filter((n) => !n.read).length\n }\n\n // ── Internal ────────────────────────────────────────────────\n\n #stamp(): void {\n // Trigger button\n const trigger = document.createElement('aui-button') as HTMLElement\n trigger.setAttribute('data-nc-trigger', '')\n trigger.setAttribute('ghost', '')\n trigger.setAttribute('hide-label', '')\n trigger.setAttribute('label', 'Notifications')\n trigger.setAttribute('icon-leading', 'bell')\n trigger.addEventListener('click', this.#togglePanel)\n\n const badge = document.createElement('span')\n badge.setAttribute('data-nc-badge', '')\n badge.hidden = true\n trigger.append(badge)\n\n // Panel\n const panel = document.createElement('div')\n panel.setAttribute('data-nc-panel', '')\n panel.setAttribute('popover', 'auto')\n\n // Panel header\n const header = document.createElement('div')\n header.setAttribute('data-nc-header', '')\n\n const title = document.createElement('span')\n title.setAttribute('data-nc-title', '')\n title.textContent = 'Notifications'\n\n const clearBtn = document.createElement('aui-button') as HTMLElement\n clearBtn.setAttribute('data-nc-clear', '')\n clearBtn.setAttribute('ghost', '')\n clearBtn.setAttribute('size', 'sm')\n clearBtn.textContent = 'Clear all'\n clearBtn.addEventListener('click', () => this.clearAll())\n this.#clearBtn = clearBtn\n\n header.append(title, clearBtn)\n\n // List\n const list = document.createElement('div')\n list.setAttribute('data-nc-list', '')\n this.#list = list\n\n // Empty state\n const empty = document.createElement('div')\n empty.setAttribute('data-nc-empty', '')\n empty.textContent = 'No notifications'\n this.#emptyEl = empty\n\n panel.append(header, list, empty)\n\n this.append(trigger, panel)\n this.#trigger = trigger\n this.#badge = badge\n this.#panel = panel\n\n this.#render()\n }\n\n #togglePanel = (): void => {\n if (!this.#panel) return\n\n try {\n this.#panel.togglePopover()\n } catch {\n // Fallback if popover not supported\n const visible = this.#panel.hasAttribute('data-nc-visible')\n if (visible) {\n this.#panel.removeAttribute('data-nc-visible')\n } else {\n this.#panel.setAttribute('data-nc-visible', '')\n }\n }\n\n // Anchor positioning\n if (this.#trigger) {\n const anchorName = '--aui-nc-anchor'\n this.#trigger.style.anchorName = anchorName\n this.#panel.style.positionAnchor = anchorName\n }\n }\n\n #render(): void {\n if (!this.#list || !this.#badge || !this.#emptyEl || !this.#clearBtn) return\n\n // Badge\n const unread = this.unreadCount\n if (unread > 0) {\n this.#badge.textContent = unread > 99 ? '99+' : String(unread)\n this.#badge.hidden = false\n } else {\n this.#badge.hidden = true\n }\n\n // Clear button visibility\n this.#clearBtn.hidden = this.#notifications.length === 0\n\n // Empty state\n this.#emptyEl.hidden = this.#notifications.length > 0\n\n // Render list\n this.#list.innerHTML = ''\n for (const notif of this.#notifications) {\n const item = document.createElement('div')\n item.setAttribute('data-nc-item', '')\n if (!notif.read) item.setAttribute('data-nc-unread', '')\n if (notif.intent) item.setAttribute('data-nc-intent', notif.intent)\n\n item.addEventListener('click', () => this.markRead(notif.id))\n\n const content = document.createElement('div')\n content.setAttribute('data-nc-item-content', '')\n\n const titleEl = document.createElement('div')\n titleEl.setAttribute('data-nc-item-title', '')\n titleEl.textContent = notif.title\n\n content.append(titleEl)\n\n if (notif.message) {\n const msgEl = document.createElement('div')\n msgEl.setAttribute('data-nc-item-message', '')\n msgEl.textContent = notif.message\n content.append(msgEl)\n }\n\n const timeEl = document.createElement('div')\n timeEl.setAttribute('data-nc-item-time', '')\n timeEl.textContent = this.#formatTime(notif.timestamp)\n content.append(timeEl)\n\n const dismissBtn = document.createElement('aui-button') as HTMLElement\n dismissBtn.setAttribute('data-nc-item-dismiss', '')\n dismissBtn.setAttribute('ghost', '')\n dismissBtn.setAttribute('hide-label', '')\n dismissBtn.setAttribute('label', 'Dismiss')\n dismissBtn.setAttribute('icon-leading', 'x')\n dismissBtn.setAttribute('size', 'sm')\n dismissBtn.addEventListener('click', (e) => {\n e.stopPropagation()\n this.dismiss(notif.id)\n })\n\n item.append(content, dismissBtn)\n this.#list.append(item)\n }\n }\n\n #formatTime(ts: number): string {\n const diff = Date.now() - ts\n const minutes = Math.floor(diff / 60000)\n if (minutes < 1) return 'Just now'\n if (minutes < 60) return `${minutes}m ago`\n const hours = Math.floor(minutes / 60)\n if (hours < 24) return `${hours}h ago`\n const days = Math.floor(hours / 24)\n return `${days}d ago`\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiEmptyState extends AgentElement {\n static override attributes: AttributeSchema = {\n icon: { type: 'string', default: '' },\n heading: { type: 'string', default: '' },\n description: { type: 'string', default: '' },\n }\n\n declare icon: string\n declare heading: string\n declare description: string\n\n #iconEl: HTMLElement | null = null\n #headingEl: HTMLElement | null = null\n #descEl: HTMLElement | null = null\n #actionSlot: HTMLDivElement | null = null\n\n protected override activate(): void {\n this.#stamp()\n this.addEffect(() => this.#syncIcon())\n this.addEffect(() => this.#syncHeading())\n this.addEffect(() => this.#syncDescription())\n }\n\n protected override dispose(): void {\n this.#iconEl = null\n this.#headingEl = null\n this.#descEl = null\n this.#actionSlot = null\n }\n\n #stamp(): void {\n // Capture existing children for the action slot\n const children = Array.from(this.childNodes)\n\n // Icon\n const iconEl = document.createElement('aui-icon')\n iconEl.setAttribute('data-empty-state-icon', '')\n iconEl.setAttribute('size', '3xl')\n this.#iconEl = iconEl\n\n // Heading\n const headingEl = document.createElement('aui-heading')\n headingEl.setAttribute('data-empty-state-heading', '')\n headingEl.setAttribute('size', 'md')\n this.#headingEl = headingEl\n\n // Description\n const descEl = document.createElement('aui-text')\n descEl.setAttribute('data-empty-state-description', '')\n descEl.setAttribute('muted', '')\n descEl.setAttribute('size', 'sm')\n this.#descEl = descEl\n\n // Action slot\n const actionSlot = document.createElement('aui-button-group')\n actionSlot.setAttribute('data-empty-state-actions', '')\n for (const child of children) {\n actionSlot.append(child)\n }\n this.#actionSlot = actionSlot\n\n this.append(iconEl, headingEl, descEl, actionSlot)\n }\n\n #syncIcon(): void {\n const name = this.icon\n if (this.#iconEl) {\n if (name) {\n this.#iconEl.setAttribute('name', name)\n this.#iconEl.hidden = false\n } else {\n this.#iconEl.hidden = true\n }\n }\n }\n\n #syncHeading(): void {\n const text = this.heading\n if (this.#headingEl) {\n this.#headingEl.textContent = text\n this.#headingEl.hidden = !text\n }\n }\n\n #syncDescription(): void {\n const text = this.description\n if (this.#descEl) {\n this.#descEl.textContent = text\n this.#descEl.hidden = !text\n }\n }\n}\n","import { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiMeter extends AgentElement {\n static override attributes: AttributeSchema = {\n value: { type: 'string', default: '0' },\n min: { type: 'string', default: '0' },\n max: { type: 'string', default: '100' },\n }\n\n declare value: string\n declare min: string\n declare max: string\n\n protected override activate(): void {\n this.addEffect(() => {\n const min = Number(this.min) || 0\n const max = Number(this.max) || 100\n const val = Number(this.value) || 0\n const pct = Math.max(0, Math.min(100, ((val - min) / (max - min)) * 100))\n this.style.setProperty('--aui-meter-pct', String(pct))\n })\n }\n}\n","// ── aui-checkbox-group ──────────────────────────────────────\n//\n// Container that coordinates multiple aui-checkbox children.\n// Manages name propagation, multi-selection tracking,\n// and min/max selection constraints.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiCheckboxGroup extends AgentElement {\n static override attributes: AttributeSchema = {\n disabled: { type: 'boolean', default: false },\n required: { type: 'boolean', default: false },\n name: { type: 'string', default: '' },\n value: { type: 'string', default: '' },\n label: { type: 'string', default: '' },\n min: { type: 'number', default: 0 },\n max: { type: 'number', default: 0 },\n }\n\n declare disabled: boolean\n declare required: boolean\n declare name: string\n declare value: string\n declare label: string\n declare min: number\n declare max: number\n\n protected override activate(): void {\n this.setAttribute('role', 'group')\n\n // Propagate name and disabled to child checkboxes\n this.addEffect(() => {\n for (const cb of this.#checkboxes()) {\n if (this.name) cb.setAttribute('name', this.name)\n if (this.disabled) {\n cb.setAttribute('disabled', '')\n }\n }\n })\n\n // Sync value → check matching checkboxes\n this.addEffect(() => {\n const selected = this.#parseValues(this.value)\n for (const cb of this.#checkboxes()) {\n const cbValue = cb.getAttribute('value') || ''\n const isMatch = selected.includes(cbValue)\n if (isMatch && !cb.hasAttribute('checked')) {\n cb.setAttribute('checked', '')\n } else if (!isMatch && cb.hasAttribute('checked')) {\n cb.removeAttribute('checked')\n }\n }\n })\n\n // Enforce max constraint — disable unchecked when max reached\n this.addEffect(() => {\n if (this.disabled) return\n const max = this.max\n if (!max) {\n // Clear any max-driven disabled state\n for (const cb of this.#checkboxes()) {\n if (cb.hasAttribute('data-checkbox-group-disabled')) {\n cb.removeAttribute('disabled')\n cb.removeAttribute('data-checkbox-group-disabled')\n }\n }\n return\n }\n\n const selected = this.#parseValues(this.value)\n const atMax = selected.length >= max\n\n for (const cb of this.#checkboxes()) {\n const isChecked = cb.hasAttribute('checked')\n if (atMax && !isChecked) {\n cb.setAttribute('disabled', '')\n cb.setAttribute('data-checkbox-group-disabled', '')\n } else if (cb.hasAttribute('data-checkbox-group-disabled')) {\n cb.removeAttribute('disabled')\n cb.removeAttribute('data-checkbox-group-disabled')\n }\n }\n })\n\n // Sync label → aria-label\n this.addEffect(() => {\n if (this.label) this.setAttribute('aria-label', this.label)\n else this.removeAttribute('aria-label')\n })\n\n this.addEventListener('change', this.#handleChange)\n }\n\n protected override dispose(): void {\n this.removeEventListener('change', this.#handleChange)\n }\n\n #checkboxes(): HTMLElement[] {\n return Array.from(this.querySelectorAll('aui-checkbox'))\n }\n\n #parseValues(raw: string): string[] {\n if (!raw) return []\n return raw.split(',').map(v => v.trim()).filter(Boolean)\n }\n\n #handleChange = (e: Event): void => {\n const target = e.target as HTMLElement\n if (target.tagName !== 'AUI-CHECKBOX') return\n\n // Prevent the child's native change from propagating further;\n // we'll dispatch our own group-level change.\n e.stopPropagation()\n\n // Rebuild values from current checkbox states\n const values: string[] = []\n for (const cb of this.#checkboxes()) {\n if (cb.hasAttribute('checked')) {\n values.push(cb.getAttribute('value') || '')\n }\n }\n\n this.value = values.join(',')\n\n this.dispatchEvent(new CustomEvent('change', {\n bubbles: true,\n detail: { values },\n }))\n }\n}\n","// ── aui-form ────────────────────────────────────────────────\n//\n// Form coordinator — validates child fields and collects\n// form data on submit. Does not stamp a native <form>.\n// Listens for click on [type=\"submit\"] or [data-submit] buttons.\n\nimport { AgentElement } from '#element'\nimport type { AttributeSchema } from '#element'\n\nexport class AuiForm extends AgentElement {\n static override attributes: AttributeSchema = {\n action: { type: 'string', default: '' },\n method: { type: 'string', default: 'post' },\n 'no-validate': { type: 'boolean', default: false },\n }\n\n declare action: string\n declare method: string\n\n get noValidate(): boolean {\n return this.hasAttribute('no-validate')\n }\n\n protected override activate(): void {\n this.addEventListener('click', this.#handleClick)\n }\n\n protected override dispose(): void {\n this.removeEventListener('click', this.#handleClick)\n }\n\n #handleClick = (e: Event): void => {\n const target = (e.target as HTMLElement)?.closest?.(\n '[type=\"submit\"], [data-submit]'\n )\n if (!target || !this.contains(target)) return\n\n e.preventDefault()\n this.submit()\n }\n\n /** Programmatic submit — runs validation then dispatches. */\n submit(): void {\n if (!this.noValidate) {\n const errors = this.#validate()\n if (errors.length > 0) {\n this.dispatchEvent(new CustomEvent('invalid', {\n bubbles: true,\n detail: { errors },\n }))\n return\n }\n }\n\n const data = this.#collectData()\n this.dispatchEvent(new CustomEvent('submit', {\n bubbles: true,\n detail: { data },\n }))\n }\n\n /** Validate all required fields. Returns array of error objects. */\n #validate(): Array<{ field: Element; message: string }> {\n const errors: Array<{ field: Element; message: string }> = []\n const fields = this.querySelectorAll('aui-field[required]')\n\n for (const field of fields) {\n const hasValue = this.#fieldHasValue(field)\n if (!hasValue) {\n const label = field.getAttribute('label') || 'This field'\n const message = `${label} is required`\n field.setAttribute('error', message)\n errors.push({ field, message })\n } else {\n // Clear previous error if now valid\n if (field.hasAttribute('error')) {\n field.removeAttribute('error')\n }\n }\n }\n\n // Also check fields that already have an error attr (server-set errors)\n const errorFields = this.querySelectorAll('aui-field[error]')\n for (const field of errorFields) {\n // Skip if already captured above\n if (errors.some(e => e.field === field)) continue\n const message = field.getAttribute('error') || 'Invalid'\n errors.push({ field, message })\n }\n\n return errors\n }\n\n /** Check whether a field's input child has a value. */\n #fieldHasValue(field: Element): boolean {\n // Check common form-associated children\n const input = field.querySelector(\n 'aui-input, aui-textarea, aui-select, aui-checkbox, aui-radio-group, aui-checkbox-group'\n )\n if (!input) return false\n\n const tag = input.tagName\n\n // Checkboxes: must be checked\n if (tag === 'AUI-CHECKBOX') {\n return input.hasAttribute('checked')\n }\n\n // Checkbox group / radio group: must have a value\n if (tag === 'AUI-CHECKBOX-GROUP' || tag === 'AUI-RADIO-GROUP') {\n return !!input.getAttribute('value')\n }\n\n // Input, textarea, select: check value attr or property\n const value = (input as any).value ?? input.getAttribute('value') ?? ''\n return String(value).trim() !== ''\n }\n\n /** Collect form data from all named inputs within the form. */\n #collectData(): Record<string, string | string[]> {\n const data: Record<string, string | string[]> = {}\n const inputs = this.querySelectorAll(\n 'aui-input[name], aui-textarea[name], aui-select[name], aui-checkbox[name], aui-radio-group[name], aui-checkbox-group[name], aui-range[name], aui-switch[name]'\n )\n\n for (const input of inputs) {\n const name = input.getAttribute('name')\n if (!name) continue\n\n const tag = input.tagName\n\n if (tag === 'AUI-CHECKBOX') {\n if (input.hasAttribute('checked')) {\n const val = input.getAttribute('value') || 'on'\n // Multiple checkboxes with same name → array\n if (name in data) {\n const existing = data[name]\n if (Array.isArray(existing)) {\n existing.push(val)\n } else {\n data[name] = [existing, val]\n }\n } else {\n data[name] = val\n }\n }\n continue\n }\n\n if (tag === 'AUI-SWITCH') {\n data[name] = input.hasAttribute('checked') ? 'on' : ''\n continue\n }\n\n if (tag === 'AUI-CHECKBOX-GROUP') {\n const raw = input.getAttribute('value') || ''\n data[name] = raw ? raw.split(',').map(v => v.trim()) : []\n continue\n }\n\n // Default: read value property or attribute\n const value = (input as any).value ?? input.getAttribute('value') ?? ''\n data[name] = String(value)\n }\n\n return data\n }\n}\n"],"names":["AuiButton","AgentElement","#stampedLeading","#stampedLeadingText","#stampedTrailing","#stampedTrailingText","#handleClick","#handleKeydown","n","name","text","leading","trailing","e","href","btnType","form","SEARCH_SVG","X_SVG","AuiInput","#internals","#surface","#clearEl","#stepUpEl","#stepDownEl","#syncing","#searchIcon","#searchClearEl","#searchDebounceTimer","locked","#updateEmptyState","#validate","val","#handleInput","#handleFocus","#handleBlur","#handlePaste","#handleWrapperClick","#handleClear","next","#handleStepDown","#handleStepUp","#handleSearchClear","options","range","sel","disabled","state","empty","#resetCaretIfEmpty","#scheduleSearchEvent","#dispatchSearchEvent","#adjust","max","min","clamped","newVal","current","selLen","available","target","delta","step","delay","AuiInputOtp","#cells","len","i","cell","#distributeValue","#handleCellInput","#handleCellKeydown","c","#syncValue","#getCellIndex","idx","digits","focusIdx","AuiCheckbox","box","#toggle","AuiSwitch","track","AuiRadio","circle","#select","AuiRadioGroup","radio","#radios","isMatch","#handleChange","radios","r","AuiTextarea","#autogrowRaf","rows","#autoResize","AuiContainer","getDuration","el","raw","AuiDialog","#dialog","#content","#closing","#ensureDialog","#handleCancel","#handleClose","#handleBackdropClick","dialog","AuiDrawer","fetchCache","AuiIcon","#registryDispose","#hasInlineChild","key","#renderFromRegistry","#renderFromSrc","onRegistryChange","#warnTimer","svg","getIcon","#setSvg","url","cached","res","existing","template","svgEl","AuiTooltip","#popover","#anchor","#anchorName","id","#show","#hide","AuiRange","#thumb","pct","#handlePointerDown","#setValueFromPointer","#handlePointerMove","#handlePointerUp","_e","rect","snapped","bigStep","AuiGripper","#lastX","#lastY","#dragging","#stopDrag","dx","dy","isHorizontal","AuiOption","AuiOptgroup","#header","opt","CHEVRON_SVG","MORE_ICON","PRIORITY_ORDER","FOCUSABLE_BAR","FOCUSABLE_BAR_WITH_TRIGGER","isOptionTag","tag","isGroupTag","isOptionOrGroup","AuiSelect","#trigger","#triggerLabel","#chevron","#listboxEl","#barTriggerBtn","#barOverflowPopover","#barOverflowList","#resizeObserver","#mutationObserver","#measureRaf","#listActiveIndex","#typeBuffer","#typeTimer","#comboSurface","#comboPopover","#comboListbox","#allComboOptions","#activateBar","#activateList","#activateCombobox","#activateDropdown","#disposeBar","#disposeList","#disposeCombobox","#disposeDropdown","o","#listSelectOption","index","#listSetActive","#listClearActive","#openPopover","popover","lb","#closePopover","children","child","#dropdownUpdateLabel","#dropdownTriggerClick","#dropdownTriggerKeydown","#dropdownListboxClick","#dropdownListboxChange","#dropdownListboxKeydown","#dropdownOutsideClick","option","selected","#barOnTriggerClick","#barOnTriggerKeydown","#barOnOverflowItemClick","#barHandleKeydown","#barStampGroupDividers","#barScheduleMeasure","mutations","m","prevWasGroup","isGroup","hr","#barMeasure","#barGetContentChildren","#barClearOverflow","#barReconnectMutationObserver","cs","gap","contentWidth","units","#barBuildOverflowUnits","totalWidth","flatIndex","unit","item","#barClearOverflowMenu","w","triggerWidth","candidates","u","a","b","pa","pb","overflowed","remaining","prev","#barRebuildOverflowMenu","rawPriority","priority","pinned","flexItems","gc","itemIndex","group","groupLabel","#barExtractLabel","#barGetOverflowSources","sources","ariaLabel","labelAttr","icon","#barPositionPopover","ke","source","#barGetFocusable","all","selector","isVertical","forward","backward","items","#listSyncSelection","#listHandleClick","#listHandleKeydown","wasSelected","#listSyncValue","values","v","optVal","opts","active","#listHandleTypeAhead","char","match","#comboHandleInput","#comboHandleFocus","#comboHandleKeydown","#comboHandleListboxChange","#comboHandleListboxKeydown","#comboHandleOutsideClick","#comboFilter","query","q","label","groups","hasVisible","containerEl","getContainer","AuiToast","#timer","#closeEl","toast","ms","#handleCloseKeydown","AuiTabs","#wireAria","#tabs","#syncSelection","firstTab","#enabledTabs","#panels","tabs","panels","tab","panel","p","selectedIdx","nextTab","AuiTab","AuiTabPanel","AuiAccordion","#handleToggle","AuiAccordionItem","chevron","triggerEl","firstEl","headerId","contentId","AuiBreadcrumb","#ellipsis","#dropdown","#applyCurrentMark","#applyMaxDepth","last","maxDepth","hidden","keepEnd","ellipsis","btn","AuiBreadcrumbItem","#link","AuiSegmentedControl","#indicator","#updateIndicator","first","seg","#segments","#enabledSegments","s","segs","AuiSegment","AuiPagination","#render","total","siblings","pages","#computePages","#createPageEl","num","page","_","leftSibling","rightSibling","newPage","AuiCommand","#activeIndex","#setActive","#items","#visibleItems","#inputEl","#emptyEl","#listEl","#filter","matches","visible","#clearActive","#selectItem","value","AuiCommandEmpty","AuiCommandGroup","heading","h","AuiCommandInput","AuiCommandItem","AuiCommandList","Priority","clamp","cachedCollapsedWidth","resolveCollapsedWidth","probe","AuiPanes","#observer","#hoverPane","#startSizes","#panes","#startX","#startY","#dragPointerId","#sizes","#proportions","#onHover","#onLeave","#onPointerDown","#initSizes","#onChildChange","#onContainerResize","#clearHover","#cleanupDrag","#getVisibleChildren","#getMinSize","#getMaxSize","#getPriority","panes","pane","fixedSize","basis","sizes","#saveProportions","#applySizes","size","#resize","result","beforeIndexes","afterIndexes","sortByPriority","indexes","high","normal","low","sortedBefore","sortedAfter","minDelta","maxDelta","minDeltaAfter","maxDeltaAfter","effectiveMin","effectiveMax","newSize","consumed","#distributeEmptySpace","emptyDelta","#getContainerSize","sorted","#lastContainerSize","containerSize","newSizes","#hitBoundary","clientX","clientY","threshold","edge","#onDragMove","#onDragEnd","#onDragCancel","#onKeyDown","#pendingDistribute","relevant","headerTpl","headerBtnTpl","AuiPane","#stampedHeader","#labelEl","#iconEl","#minimizeBtn","#closeBtn","#tabsEl","#collapsed","#stampHeader","#wrapContent","#syncSize","#removeStampedHeader","#syncIcon","#syncCloseButton","#syncMinimizeButton","#stampTabs","#removeTabs","event","content","toWrap","node","header","labelEl","iconEl","#createHeaderButton","iconName","handler","show","tabId","tabLabel","#showTabContent","firstId","activeId","AuiTable","#columns","#data","#sortKey","#sortDir","#searchTerm","#currentPage","#selectedIds","#dataMode","#toolbar","#headEl","#bodyEl","#footerEl","#searchDebounceId","data","#parseColumns","#loadData","#buildStructure","#onClick","#fetchData","script","parsed","json","widths","toolbar","input","onSearch","#pageSize","#toggleSort","checkbox","rowId","#toggleSelectAll","#toggleSelect","pageBtn","cycle","#rowId","row","pageRows","#paginate","#derive","allSelected","view","term","keys","k","type","mult","av","bv","start","filtered","paged","headerRow","th","allSel","cb","col","isSortable","sortIcon","rowData","isSel","td","totalPages","end","info","controls","prevBtn","nextBtn","AuiTableBody","AuiTableCell","AuiTableHead","AuiTableHeader","AuiTableRow","AuiTree","#visibleLabels","labels","parent","CARET_TAG","AuiTreeItem","#label","#childContainer","#caret","toMove","nestedItems","depth","AuiFeed","#isPinned","#scrollToEnd","AuiRoot","CALENDAR_SVG","formatDate","iso","format","y","d","date","AuiCalendarPicker","#calendar","#updateLabel","#onTriggerClick","#onTriggerKeydown","#onCalendarChange","#onOutsideClick","#onDocumentKeydown","formatDateShort","AuiCalendarRangePicker","#onCalendarRangeSelect","AuiAppShell","AuiPage","AuiPageMain","AuiPageContext","handleTpl","AuiSidebar","#width","signal","#minWidth","#maxWidth","#handleEl","#resizing","#startWidth","frag","#onResizeDown","untrack","#onResizeMove","#onResizeUp","AuiSidebarHeader","AuiSidebarContent","AuiSidebarFooter","AuiProgress","AuiCodeBlock","#copyBtn","#codeEl","showHeader","spacer","mh","AuiSparkline","vals","colorVar","highlightMode","highlightIdx","bar","AuiChip","#removeBtn","#stampRemoveButton","AuiDisclosure","#stamp","trigger","inner","AuiAvatarGroup","#counter","#applyMax","#applySize","avatars","overflow","counter","avatar","AuiProgressCircle","#svg","#fill","#updateValue","fill","AuiDisclosureGroup","#observeChildren","AuiTagGroup","lbl","#handleRemove","#getChips","chips","currentIndex","nextIndex","chip","neighbor","oklchToOklab","L","C","H","hRad","oklabToOklch","oklabToLinearSrgb","l_","m_","s_","l","linearSrgbToOklab","g","linearToSrgb","srgbToLinear","clamp01","oklchToHex","labL","labA","labB","lr","lg","sr","sg","sb","toHex","hex","hexToOklch","oklchToString","lStr","cStr","hStr","parseOklchString","str","isInGamut","eps","AuiColorArea","#canvas","#clamp","xPct","yPct","#drawGradient","#handleMouseDown","hue","canvas","dpr","cw","ch","ctx","imageData","x","lo","hi","mid","#setValueFromMouse","#handleMouseMove","#handleMouseUp","#dispatchChange","chromaStep","lightnessStep","CHANNEL_DEFAULTS","AuiColorSlider","#track","defaults","stops","deg","cv","lv","color","#getRange","AuiColorField","#swatch","#input","#picker","#popoverOpen","#togglePopover","#handleOutsideClick","#handleEscape","#isValidColor","#ensurePopover","#handlePickerChange","AuiTimeField","#digitBuffer","#digitTimer","#buildSegments","#updateFromValue","#handleFocusIn","hourSeg","#createSegment","sep","minSeg","sep2","secSeg","periodSeg","parts","period","segType","#incrementSegment","#commitValue","#enterDigit","digit","dir","hText","mText","sText","newValue","FORMATS","SEGMENT_DEFS","AuiDateField","fmt","def","yStr","mStr","dStr","monthSeg","daySeg","yearSeg","dText","yText","maxDay","AuiContextMenu","#listbox","#targetEl","#onContextMenu","#onListboxClick","#onListboxKeydown","#closeMenu","#openMenu","#selectOption","AuiDropdownMenu","AuiHoverCard","#anchorEl","#showTimer","#hideTimer","#onAnchorEnter","#onAnchorLeave","#onAnchorFocusIn","#onAnchorFocusOut","#onPopoverEnter","#onPopoverLeave","#onKeydown","#clearTimers","#scheduleShow","#scheduleHide","hideDelay","AuiColorPicker","#area","#hueSlider","#chromaSlider","#lightnessSlider","#alphaSlider","#alphaRow","#outputRow","#oklchCopy","#oklchLabel","#hexCopy","#hexLabel","#valueEls","#l","#c","#h","#a","#updating","sliders","makeRow","channel","slider","oklchGroup","hexGroup","#parseValue","allSliders","#syncToSubComponents","#onAreaInput","#onAreaChange","sliderHandler","ce","oklch","attrs","syncSlider","hVal","cVal","lVal","aVal","oklchStr","hexStr","parseMaxSize","formatSize","bytes","AuiFileUpload","#zone","#list","#files","#onZoneClick","#onInputChange","#onDragOver","#onDragLeave","#onDrop","#addFiles","incoming","maxSize","maxFiles","file","f","#renderList","#removeFile","preview","nameEl","sizeEl","removeBtn","AuiCopyButton","#copyIcon","#checkIcon","#timeout","firstChild","iconSize","#onCopy","#showCheck","AuiStat","#valueEl","#changeEl","#animFrame","#hasAnimated","#runScramble","#runCountUp","trend","change","html","prefix","numStr","suffix","useCommas","clean","dotIdx","decimals","#formatValue","intPart","decPart","withCommas","targetVal","startStr","duration","t0","tick","now","elapsed","progress","eased","chars","charProgress","AuiImage","#img","#fallbackShown","#syncSrc","#syncAlt","#syncAspect","#syncFit","img","#openLightbox","AuiCarousel","#dotsContainer","#prevBtn","#nextBtn","#autoPlayTimer","#currentIndex","#syncAutoPlay","#syncArrows","#syncDots","#stopAutoPlay","#onScroll","#pauseAutoPlay","#resumeAutoPlay","entries","entry","#getSlides","#updateDots","slide","#goTo","dots","slides","dot","#startAutoPlay","_idCounter","AuiNotificationCenter","#notifications","#badge","#panel","#clearBtn","notif","limit","#togglePanel","badge","title","clearBtn","list","anchorName","unread","titleEl","msgEl","timeEl","#formatTime","dismissBtn","ts","diff","minutes","hours","AuiEmptyState","#headingEl","#descEl","#actionSlot","#syncHeading","#syncDescription","headingEl","descEl","actionSlot","AuiMeter","AuiCheckboxGroup","#checkboxes","#parseValues","cbValue","atMax","isChecked","AuiForm","errors","#collectData","fields","field","#fieldHasValue","message","errorFields","inputs"],"mappings":"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"}
|