@agent-ui-kit/web-components 0.0.15 → 0.0.16
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 +463 -150
- package/dist/api.tokens.json +3 -3
- package/dist/api.tokens.yaml +3 -3
- 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/agent-chat.yaml +33 -25
- package/dist/docs/blocks/announcement-card.yaml +14 -10
- 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/contributors.yaml +17 -11
- package/dist/docs/blocks/cyber-threat.yaml +158 -4
- package/dist/docs/blocks/dashboard-layout.yaml +25 -18
- package/dist/docs/blocks/data-eng-dag.yaml +222 -6
- 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/financial-risk.yaml +161 -4
- package/dist/docs/blocks/flow-editor.yaml +27 -18
- 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/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/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/notification-list.yaml +18 -13
- package/dist/docs/blocks/oncology-pathway.yaml +227 -4
- 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 +18 -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 +23 -22
- package/dist/docs/blocks/sidebar-nav.yaml +23 -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/components/agent-activity.yaml +27 -7
- 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 +13 -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/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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"meter-Dju8ik6C.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"],"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('pointerdown', this.#handlePointerDown)\n this.#thumb!.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('pointerdown', this.#handlePointerDown)\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 // ── Pointer interaction ───────────────────────────────\n\n #handlePointerDown = (e: PointerEvent): void => {\n if (this.disabled) return\n e.preventDefault()\n this.setPointerCapture(e.pointerId)\n this.setAttribute('data-color-area-pressed', '')\n this.#setValueFromPointer(e)\n this.#thumb?.focus()\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-color-area-pressed')\n this.removeEventListener('pointermove', this.#handlePointerMove)\n this.removeEventListener('pointerup', this.#handlePointerUp)\n this.#dispatchChange()\n }\n\n #setValueFromPointer(e: PointerEvent): 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('pointerdown', this.#handlePointerDown)\n this.#thumb!.addEventListener('keydown', this.#handleKeydown)\n }\n\n protected override dispose(): void {\n this.removeEventListener('pointerdown', this.#handlePointerDown)\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 // ── Pointer interaction ───────────────────────────────\n\n #handlePointerDown = (e: PointerEvent): void => {\n if (this.disabled) return\n e.preventDefault()\n this.setPointerCapture(e.pointerId)\n this.setAttribute('data-color-slider-pressed', '')\n this.#setValueFromPointer(e)\n this.#thumb?.focus()\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-color-slider-pressed')\n this.removeEventListener('pointermove', this.#handlePointerMove)\n this.removeEventListener('pointerup', this.#handlePointerUp)\n this.#dispatchChange()\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, 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 #swatch: HTMLElement | null = null\n #input: HTMLElement | null = null\n\n protected override activate(): void {\n // Stamp swatch\n if (!this.querySelector('[data-color-field-swatch]')) {\n this.#swatch = document.createElement('span')\n this.#swatch.setAttribute('data-color-field-swatch', '')\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\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 }\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 #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('size', 'sm')\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('size', 'sm')\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"],"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","hue","canvas","dpr","cw","ch","ctx","imageData","x","lo","hi","mid","#dispatchChange","chromaStep","lightnessStep","CHANNEL_DEFAULTS","AuiColorSlider","#track","defaults","stops","deg","cv","lv","color","#getRange","AuiColorField","#swatch","#input","#isValidColor","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"],"mappings":"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"}
|