@avento-space/ts-ui 1.2.2 → 1.2.4

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/button.wc.ts","../src/components/input.wc.ts","../src/components/box.wc.ts","../src/components/list.wc.ts","../src/components/portal.wc.ts","../src/components/text.wc.ts","../src/components/stack.wc.ts","../src/components/grid.wc.ts","../src/components/slot.wc.ts","../src/components/pressable.wc.ts","../src/components/focus-scope.wc.ts","../src/components/dismissable-layer.wc.ts","../src/components/overlay.wc.ts","../src/components/field.wc.ts","../src/components/checkbox.wc.ts","../src/components/select.wc.ts","../src/components/link.wc.ts","../src/components/spacer.wc.ts","../src/components/container.wc.ts","../src/components/hoverable.wc.ts","../src/components/focus-trap.wc.ts","../src/core/position.ts","../src/components/popper.wc.ts","../src/core/utils.ts","../src/components/dialog-root.wc.ts","../src/components/tooltip-root.wc.ts","../src/components/textarea.wc.ts","../src/components/radio-group.wc.ts","../src/components/switch.wc.ts","../src/components/label.wc.ts","../src/components/collection.wc.ts","../src/components/tree.wc.ts","../src/components/table.wc.ts","../src/components/router-view.wc.ts","../src/components/breadcrumb.wc.ts","../src/components/tabs.wc.ts","../src/components/visually-hidden.wc.ts","../src/components/live-region.wc.ts","../src/components/focus-manager.wc.ts","../src/components/keyboard-navigation.wc.ts","../src/components/presence.wc.ts","../src/components/transition.wc.ts","../src/components/animate.wc.ts","../src/core/scroll-lock.ts","../src/components/modal.wc.ts","../src/components/drawer.wc.ts","../src/components/popover.wc.ts","../src/components/dropdown.wc.ts","../src/components/accordion.wc.ts","../src/components/combobox.wc.ts","../src/components/calendar.wc.ts","../src/components/data-table.wc.ts","../src/components/command-palette.wc.ts","../src/components/toast.wc.ts","../src/components/context-menu.wc.ts","../src/components/sortable.wc.ts","../src/components/form.wc.ts","../src/components/badge.wc.ts","../src/components/card.wc.ts"],"names":["FOCUSABLE"],"mappings":"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","file":"chunk-2JEFDU25.js","sourcesContent":["import { UElement } from '../core/element.js';\r\nimport { buttonStyles } from './styles.js';\r\n\r\nexport interface ButtonProps {\r\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger' | 'link';\r\n size?: 'sm' | 'md' | 'lg';\r\n disabled?: boolean;\r\n type?: 'button' | 'submit' | 'reset';\r\n class?: string;\r\n onClick?: (e: MouseEvent) => void;\r\n}\r\n\r\nexport class UButton extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['variant', 'size', 'disabled', 'type', 'class'];\r\n }\r\n\r\n private _variant: string = 'primary';\r\n private _size: string = 'md';\r\n private _disabled: boolean = false;\r\n private _buttonType: string = 'button';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${buttonStyles}</style><button part=\"button\"><slot></slot></button>`;\r\n }\r\n\r\n get variant(): string {\r\n return this._variant;\r\n }\r\n set variant(val: string) {\r\n this._variant = val;\r\n this._updateAttr('variant', val);\r\n }\r\n get size(): string {\r\n return this._size;\r\n }\r\n set size(val: string) {\r\n this._size = val;\r\n this._updateAttr('size', val);\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(val: boolean) {\r\n this._disabled = val;\r\n this._updateAttr('disabled', val ? '' : null);\r\n }\r\n get buttonType(): string {\r\n return this._buttonType;\r\n }\r\n set buttonType(val: string) {\r\n this._buttonType = val;\r\n this._updateAttr('type', val);\r\n }\r\n\r\n private _updateAttr(name: string, val: string | null): void {\r\n if (val === null) {\r\n this.removeAttribute(name);\r\n } else {\r\n this.setAttribute(name, val);\r\n }\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'variant':\r\n this._variant = newVal ?? 'primary';\r\n break;\r\n case 'size':\r\n this._size = newVal ?? 'md';\r\n break;\r\n case 'disabled':\r\n this._disabled = newVal !== null;\r\n break;\r\n case 'type':\r\n this._buttonType = newVal ?? 'button';\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const btn = this._root.querySelector('button')!;\r\n btn.className = `btn btn-${this._variant} btn-${this._size} ${this.className}`.trim();\r\n btn.disabled = this._disabled;\r\n btn.type = this._buttonType as any;\r\n }\r\n\r\n _mount(): void {\r\n const btn = this._root.querySelector('button')!;\r\n btn.addEventListener('click', (e: MouseEvent) => {\r\n if (this._disabled) {\r\n e.stopPropagation();\r\n return;\r\n }\r\n this.dispatchEvent(new CustomEvent('u-click', { bubbles: true, composed: true }));\r\n });\r\n }\r\n}\r\n\r\nexport function Button(props: ButtonProps = {}): UButton {\r\n const el = new UButton();\r\n if (props.variant) el.variant = props.variant;\r\n if (props.size) el.size = props.size;\r\n if (props.disabled != null) el.disabled = props.disabled;\r\n if (props.type) el.buttonType = props.type;\r\n if (props.onClick) el.addEventListener('click', props.onClick);\r\n return el;\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { signal, effect } from '../core/signal.js';\r\nimport { inputStyles } from './styles.js';\r\n\r\nexport interface InputProps {\r\n value?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n readonly?: boolean;\r\n type?: 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url';\r\n name?: string;\r\n class?: string;\r\n onInput?: (value: string) => void;\r\n onChange?: (value: string) => void;\r\n onFocus?: () => void;\r\n onBlur?: () => void;\r\n}\r\n\r\nexport class UInput extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['placeholder', 'disabled', 'readonly', 'type', 'name', 'class'];\r\n }\r\n\r\n private _placeholder: string = '';\r\n private _disabled: boolean = false;\r\n private _readonly: boolean = false;\r\n private _inputType: string = 'text';\r\n private _inputName: string = '';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${inputStyles}</style><div part=\"wrapper\" class=\"input-wrapper\"><input part=\"input\" /></div>`;\r\n }\r\n\r\n get value(): string {\r\n return this._root.querySelector('input')?.value ?? '';\r\n }\r\n set value(val: string) {\r\n const input = this._root.querySelector('input');\r\n if (input) input.value = val;\r\n }\r\n\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n set placeholder(val: string) {\r\n this._placeholder = val;\r\n this.setAttribute('placeholder', val);\r\n }\r\n\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(val: boolean) {\r\n this._disabled = val;\r\n if (val) this.setAttribute('disabled', '');\r\n else this.removeAttribute('disabled');\r\n }\r\n\r\n get readonly(): boolean {\r\n return this._readonly;\r\n }\r\n set readonly(val: boolean) {\r\n this._readonly = val;\r\n if (val) this.setAttribute('readonly', '');\r\n else this.removeAttribute('readonly');\r\n }\r\n\r\n get inputType(): string {\r\n return this._inputType;\r\n }\r\n set inputType(val: string) {\r\n this._inputType = val;\r\n this.setAttribute('type', val);\r\n }\r\n\r\n get inputName(): string {\r\n return this._inputName;\r\n }\r\n set inputName(val: string) {\r\n this._inputName = val;\r\n this.setAttribute('name', val);\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'placeholder':\r\n this._placeholder = newVal ?? '';\r\n break;\r\n case 'disabled':\r\n this._disabled = newVal !== null;\r\n break;\r\n case 'readonly':\r\n this._readonly = newVal !== null;\r\n break;\r\n case 'type':\r\n this._inputType = newVal ?? 'text';\r\n break;\r\n case 'name':\r\n this._inputName = newVal ?? '';\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const input = this._root.querySelector('input');\r\n if (!input) return;\r\n input.className = this.className;\r\n input.placeholder = this._placeholder;\r\n input.disabled = this._disabled;\r\n input.readOnly = this._readonly;\r\n input.type = this._inputType as any;\r\n input.name = this._inputName;\r\n }\r\n\r\n _mount(): void {\r\n const input = this._root.querySelector('input')!;\r\n input.addEventListener('input', () => {\r\n this.dispatchEvent(\r\n new CustomEvent('u-input', {\r\n detail: { value: input.value },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n input.addEventListener('change', () => {\r\n this.dispatchEvent(\r\n new CustomEvent('u-change', {\r\n detail: { value: input.value },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n input.addEventListener('focus', () => {\r\n this.dispatchEvent(new CustomEvent('u-focus', { bubbles: true, composed: true }));\r\n });\r\n input.addEventListener('blur', () => {\r\n this.dispatchEvent(new CustomEvent('u-blur', { bubbles: true, composed: true }));\r\n });\r\n }\r\n}\r\n\r\nexport function createControlledInput(initialValue = '') {\r\n const state = signal(initialValue);\r\n\r\n const component = (props: Omit<InputProps, 'value' | 'onInput'> = {}) => {\r\n const el = new UInput();\r\n if (props.placeholder) el.placeholder = props.placeholder;\r\n if (props.disabled != null) el.disabled = props.disabled;\r\n if (props.type) el.inputType = props.type;\r\n if (props.name) el.inputName = props.name;\r\n el.value = state.get();\r\n effect(() => {\r\n el.value = state.get();\r\n });\r\n el.addEventListener('u-input', ((e: CustomEvent) => {\r\n state.set(e.detail.value);\r\n }) as EventListener);\r\n return el;\r\n };\r\n\r\n return { component, value: state, reset: () => state.set(initialValue) };\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { boxStyles } from './styles.js';\r\n\r\nexport type BoxAs =\r\n | 'div'\r\n | 'span'\r\n | 'section'\r\n | 'article'\r\n | 'aside'\r\n | 'main'\r\n | 'header'\r\n | 'footer'\r\n | 'nav'\r\n | 'ul'\r\n | 'ol'\r\n | 'li'\r\n | 'p'\r\n | 'a'\r\n | 'form'\r\n | 'fieldset';\r\n\r\nexport interface BoxProps {\r\n as?: BoxAs | string;\r\n class?: string;\r\n id?: string;\r\n hidden?: boolean;\r\n title?: string;\r\n role?: string;\r\n tabIndex?: number;\r\n}\r\n\r\nexport class UBox extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['as', 'class'];\r\n }\r\n\r\n private _as: string = 'div';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${boxStyles}</style><div part=\"box\"><slot></slot></div>`;\r\n }\r\n\r\n get as(): string {\r\n return this._as;\r\n }\r\n set as(val: string) {\r\n this.setAttribute('as', val);\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'as') {\r\n this._as = newVal ?? 'div';\r\n this._rebuild();\r\n }\r\n }\r\n\r\n private _rebuild(): void {\r\n const children: Node[] = [];\r\n const existing = this._root.querySelector('[part=\"box\"]');\r\n if (existing) {\r\n const slot = existing.querySelector('slot');\r\n if (slot) {\r\n const assigned = slot.assignedNodes({ flatten: true });\r\n for (const n of assigned) children.push(n.cloneNode(true));\r\n }\r\n }\r\n\r\n const wrapper = document.createElement(this._as);\r\n wrapper.setAttribute('part', 'box');\r\n wrapper.className = `box ${this.className}`.trim();\r\n const newSlot = document.createElement('slot');\r\n wrapper.appendChild(newSlot);\r\n\r\n this._root.innerHTML = `<style>${boxStyles}</style>`;\r\n this._root.appendChild(wrapper);\r\n }\r\n\r\n private _sync(): void {\r\n const inner = this._root.querySelector('[part=\"box\"]');\r\n if (!inner || inner.tagName.toLowerCase() !== this._as) {\r\n this._rebuild();\r\n } else {\r\n inner.className = `box ${this.className}`.trim();\r\n }\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { listStyles } from './styles.js';\r\n\r\nexport interface ListProps {\r\n items?: any[];\r\n renderItem?: (item: any, index: number) => HTMLElement | string;\r\n emptyState?: string;\r\n}\r\n\r\nexport class UList extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['class'];\r\n }\r\n\r\n private _items: any[] = [];\r\n private _renderItem: ((item: any, index: number) => HTMLElement | string) | null = null;\r\n private _emptyText: string = '';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${listStyles}</style><ul part=\"list\"><slot></slot></ul>`;\r\n }\r\n\r\n get items(): any[] {\r\n return this._items;\r\n }\r\n set items(val: any[]) {\r\n this._items = val;\r\n this._renderList();\r\n }\r\n\r\n get renderItem(): ((item: any, index: number) => HTMLElement | string) | null {\r\n return this._renderItem;\r\n }\r\n set renderItem(fn: ((item: any, index: number) => HTMLElement | string) | null) {\r\n this._renderItem = fn;\r\n this._renderList();\r\n }\r\n\r\n get emptyState(): string {\r\n return this._emptyText;\r\n }\r\n set emptyState(val: string) {\r\n this._emptyText = val;\r\n this._renderList();\r\n }\r\n\r\n private _renderList(): void {\r\n if (!this._renderItem) return;\r\n const ul = this._root.querySelector('ul')!;\r\n\r\n if (this._items.length === 0 && this._emptyText) {\r\n ul.innerHTML = `<li class=\"list-empty\">${this._emptyText}</li>`;\r\n return;\r\n }\r\n\r\n ul.innerHTML = '';\r\n for (let i = 0; i < this._items.length; i++) {\r\n const li = document.createElement('li');\r\n li.setAttribute('part', 'item');\r\n const content = this._renderItem(this._items[i], i);\r\n if (typeof content === 'string') {\r\n li.textContent = content;\r\n } else {\r\n li.appendChild(content);\r\n }\r\n ul.appendChild(li);\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'class') this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const ul = this._root.querySelector('ul')!;\r\n ul.className = this.className;\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n\r\nexport interface VirtualListProps {\r\n items: any[];\r\n renderItem: (item: any, index: number) => HTMLElement;\r\n itemHeight: number;\r\n containerHeight: number;\r\n overscan?: number;\r\n}\r\n\r\nexport class UVirtualList extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['item-height', 'container-height', 'overscan', 'class'];\r\n }\r\n\r\n private _items: any[] = [];\r\n private _renderItem: ((item: any, index: number) => HTMLElement) | null = null;\r\n private _itemHeight: number = 40;\r\n private _containerHeight: number = 400;\r\n private _overscan: number = 3;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${listStyles}\r\n:host { overflow-y: auto; position: relative; }\r\n.viewport { position: relative; width: 100%; }\r\n.item { position: absolute; left: 0; right: 0; }\r\n</style><div class=\"viewport\" part=\"viewport\"></div>`;\r\n }\r\n\r\n get items(): any[] {\r\n return this._items;\r\n }\r\n set items(val: any[]) {\r\n this._items = val;\r\n this._render();\r\n }\r\n get renderItem(): ((item: any, index: number) => HTMLElement) | null {\r\n return this._renderItem;\r\n }\r\n set renderItem(fn) {\r\n this._renderItem = fn;\r\n this._render();\r\n }\r\n get itemHeight(): number {\r\n return this._itemHeight;\r\n }\r\n set itemHeight(val: number) {\r\n this._itemHeight = val;\r\n this.setAttribute('item-height', String(val));\r\n }\r\n get containerHeight(): number {\r\n return this._containerHeight;\r\n }\r\n set containerHeight(val: number) {\r\n this._containerHeight = val;\r\n this.setAttribute('container-height', String(val));\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this.style.height = `${this._containerHeight}px`;\r\n this.addEventListener('scroll', () => this._render());\r\n this._render();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'item-height':\r\n this._itemHeight = Number(newVal) || 40;\r\n break;\r\n case 'container-height':\r\n this._containerHeight = Number(newVal) || 400;\r\n this.style.height = `${this._containerHeight}px`;\r\n break;\r\n case 'overscan':\r\n this._overscan = Number(newVal) || 3;\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._render();\r\n }\r\n\r\n private _render(): void {\r\n if (!this._renderItem) return;\r\n const viewport = this._root.querySelector('.viewport')! as HTMLElement;\r\n const scrollTop = this.scrollTop;\r\n const totalHeight = this._items.length * this._itemHeight;\r\n const visibleCount = Math.ceil(this._containerHeight / this._itemHeight) + this._overscan * 2;\r\n const startIndex = Math.max(0, Math.floor(scrollTop / this._itemHeight) - this._overscan);\r\n const endIndex = Math.min(this._items.length, startIndex + visibleCount);\r\n\r\n viewport.className = `viewport ${this.className}`.trim();\r\n viewport.style.height = `${totalHeight}px`;\r\n viewport.innerHTML = '';\r\n for (let i = startIndex; i < endIndex; i++) {\r\n const div = document.createElement('div');\r\n div.className = 'item';\r\n div.setAttribute('part', 'item');\r\n div.style.top = `${i * this._itemHeight}px`;\r\n div.style.height = `${this._itemHeight}px`;\r\n const content = this._renderItem(this._items[i], i);\r\n div.appendChild(content);\r\n viewport.appendChild(div);\r\n }\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","export interface PortalProps {\r\n target?: string | Element;\r\n}\r\n\r\nlet defaultPortalRoot: Element | null = null;\r\n\r\nexport function setPortalRoot(el: Element | null): void {\r\n defaultPortalRoot = el;\r\n}\r\n\r\nfunction resolveTarget(target?: string | Element): Element | null {\r\n if (!target) return defaultPortalRoot ?? document.body;\r\n if (typeof target === 'string') {\r\n const el = document.querySelector(target);\r\n return el || document.body;\r\n }\r\n return target;\r\n}\r\n\r\nexport class UPortal extends HTMLElement {\r\n private _container: HTMLElement | null = null;\r\n private _observer: MutationObserver | null = null;\r\n\r\n constructor() {\r\n super();\r\n this.style.display = 'none';\r\n }\r\n\r\n static get observedAttributes(): string[] {\r\n return ['target'];\r\n }\r\n\r\n get target(): string | null {\r\n return this.getAttribute('target');\r\n }\r\n set target(val: string | null) {\r\n if (val) this.setAttribute('target', val);\r\n else this.removeAttribute('target');\r\n }\r\n\r\n connectedCallback(): void {\r\n this._open();\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this._close();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'target') {\r\n this._close();\r\n this._open();\r\n }\r\n }\r\n\r\n private _open(): void {\r\n const target = resolveTarget(this.getAttribute('target') || undefined);\r\n if (!target) return;\r\n\r\n this._container = document.createElement('u-portal-content');\r\n this._container.style.display = 'contents';\r\n target.appendChild(this._container);\r\n\r\n while (this.childNodes.length > 0) {\r\n this._container.appendChild(this.childNodes[0]);\r\n }\r\n\r\n this._observer = new MutationObserver(() => {\r\n if (!this._container) return;\r\n while (this.childNodes.length > 0) {\r\n this._container.appendChild(this.childNodes[0]);\r\n }\r\n });\r\n this._observer.observe(this, { childList: true });\r\n }\r\n\r\n private _close(): void {\r\n if (this._observer) {\r\n this._observer.disconnect();\r\n this._observer = null;\r\n }\r\n if (this._container && this._container.parentNode) {\r\n while (this._container.childNodes.length > 0) {\r\n this.appendChild(this._container.childNodes[0]);\r\n }\r\n this._container.parentNode.removeChild(this._container);\r\n }\r\n this._container = null;\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { textStyles } from './styles.js';\r\n\r\nexport type TextSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';\r\nexport type TextWeight = 'normal' | 'medium' | 'semibold' | 'bold';\r\nexport type TextColor = 'default' | 'muted' | 'accent' | 'danger' | 'success';\r\n\r\nexport interface TextProps {\r\n size?: TextSize;\r\n weight?: TextWeight;\r\n color?: TextColor;\r\n as?: 'span' | 'p' | 'div' | 'label' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\r\n align?: 'left' | 'center' | 'right';\r\n truncate?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class UText extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['size', 'weight', 'color', 'as', 'align', 'truncate', 'class'];\r\n }\r\n\r\n private _size: TextSize = 'md';\r\n private _weight: TextWeight = 'normal';\r\n private _color: TextColor = 'default';\r\n private _as: string = 'span';\r\n private _align: string = 'left';\r\n private _truncate: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${textStyles}</style><span part=\"text\"><slot></slot></span>`;\r\n }\r\n\r\n get size(): TextSize {\r\n return this._size;\r\n }\r\n set size(val: TextSize) {\r\n this.setAttribute('size', val);\r\n }\r\n get weight(): TextWeight {\r\n return this._weight;\r\n }\r\n set weight(val: TextWeight) {\r\n this.setAttribute('weight', val);\r\n }\r\n get color(): TextColor {\r\n return this._color;\r\n }\r\n set color(val: TextColor) {\r\n this.setAttribute('color', val);\r\n }\r\n get textAs(): string {\r\n return this._as;\r\n }\r\n set textAs(val: string) {\r\n this.setAttribute('as', val);\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'size':\r\n this._size = (newVal as TextSize) ?? 'md';\r\n break;\r\n case 'weight':\r\n this._weight = (newVal as TextWeight) ?? 'normal';\r\n break;\r\n case 'color':\r\n this._color = (newVal as TextColor) ?? 'default';\r\n break;\r\n case 'as':\r\n this._as = newVal ?? 'span';\r\n this._rebuild();\r\n return;\r\n case 'align':\r\n this._align = newVal ?? 'left';\r\n break;\r\n case 'truncate':\r\n this._truncate = newVal !== null;\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _rebuild(): void {\r\n const children: Node[] = [];\r\n const existing = this._root.querySelector('[part=\"text\"]');\r\n if (existing) {\r\n const slot = existing.querySelector('slot');\r\n if (slot) {\r\n const assigned = slot.assignedNodes({ flatten: true });\r\n for (const n of assigned) children.push(n.cloneNode(true));\r\n }\r\n }\r\n\r\n const wrapper = document.createElement(this._as);\r\n wrapper.setAttribute('part', 'text');\r\n const newSlot = document.createElement('slot');\r\n wrapper.appendChild(newSlot);\r\n\r\n this._root.innerHTML = `<style>${textStyles}</style>`;\r\n this._root.appendChild(wrapper);\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"text\"]');\r\n if (!el) return;\r\n el.className = `text text-${this._size} text-${this._weight} text-${this._color} text-${this._align} ${this.className}`.trim();\r\n if (this._truncate) el.classList.add('text-truncate');\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { stackStyles } from './styles.js';\r\n\r\nexport interface StackProps {\r\n gap?: number;\r\n align?: 'start' | 'center' | 'end' | 'stretch';\r\n justify?: 'start' | 'center' | 'end' | 'between' | 'around';\r\n wrap?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class UStack extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['gap', 'align', 'justify', 'wrap', 'class'];\r\n }\r\n\r\n private _gap: number = 0;\r\n private _align: string = 'stretch';\r\n private _justify: string = 'start';\r\n private _wrap: boolean = false;\r\n protected _direction: string = 'v';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${stackStyles}</style><div part=\"stack\" class=\"stack stack-v\"><slot></slot></div>`;\r\n }\r\n\r\n get gap(): number {\r\n return this._gap;\r\n }\r\n set gap(val: number) {\r\n this.setAttribute('gap', String(val));\r\n }\r\n get align(): string {\r\n return this._align;\r\n }\r\n set align(val: string) {\r\n this.setAttribute('align', val);\r\n }\r\n get justify(): string {\r\n return this._justify;\r\n }\r\n set justify(val: string) {\r\n this.setAttribute('justify', val);\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'gap':\r\n this._gap = Number(newVal) || 0;\r\n break;\r\n case 'align':\r\n this._align = newVal ?? 'stretch';\r\n break;\r\n case 'justify':\r\n this._justify = newVal ?? 'start';\r\n break;\r\n case 'wrap':\r\n this._wrap = newVal !== null;\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"stack\"]')! as HTMLElement;\r\n el.className = `stack stack-${this._direction} ${this.className}`.trim();\r\n el.style.gap = `${this._gap}px`;\r\n el.style.alignItems =\r\n this._align === 'stretch'\r\n ? 'stretch'\r\n : `flex-${this._align === 'start' ? 'start' : this._align === 'end' ? 'end' : this._align}`;\r\n el.style.justifyContent =\r\n this._justify === 'start'\r\n ? 'flex-start'\r\n : this._justify === 'end'\r\n ? 'flex-end'\r\n : this._justify === 'between'\r\n ? 'space-between'\r\n : this._justify === 'around'\r\n ? 'space-around'\r\n : 'flex-start';\r\n if (this._wrap) el.style.flexWrap = 'wrap';\r\n else el.style.flexWrap = 'nowrap';\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n\r\nexport class UHStack extends UStack {\r\n constructor() {\r\n super();\r\n this._direction = 'h';\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { gridStyles } from './styles.js';\r\n\r\nexport interface GridProps {\r\n columns?: number;\r\n gap?: number;\r\n align?: 'start' | 'center' | 'end' | 'stretch';\r\n class?: string;\r\n}\r\n\r\nexport class UGrid extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['columns', 'gap', 'align', 'class'];\r\n }\r\n\r\n private _columns: number = 1;\r\n private _gap: number = 0;\r\n private _align: string = 'stretch';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${gridStyles}</style><div part=\"grid\" class=\"grid\"><slot></slot></div>`;\r\n }\r\n\r\n get columns(): number {\r\n return this._columns;\r\n }\r\n set columns(val: number) {\r\n this.setAttribute('columns', String(val));\r\n }\r\n get gap(): number {\r\n return this._gap;\r\n }\r\n set gap(val: number) {\r\n this.setAttribute('gap', String(val));\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'columns':\r\n this._columns = Number(newVal) || 1;\r\n break;\r\n case 'gap':\r\n this._gap = Number(newVal) || 0;\r\n break;\r\n case 'align':\r\n this._align = newVal ?? 'stretch';\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"grid\"]')! as HTMLElement;\r\n el.className = `grid ${this.className}`.trim();\r\n el.style.gridTemplateColumns = `repeat(${this._columns}, 1fr)`;\r\n el.style.gap = `${this._gap}px`;\r\n el.style.alignItems = this._align === 'stretch' ? 'stretch' : `flex-${this._align}`;\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport interface SlotProps {\r\n class?: string;\r\n}\r\n\r\nexport class USlot extends UElement {\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<slot></slot>`;\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport interface PressableProps {\r\n disabled?: boolean;\r\n class?: string;\r\n onPress?: (e: CustomEvent) => void;\r\n onPressStart?: (e: CustomEvent) => void;\r\n onPressEnd?: (e: CustomEvent) => void;\r\n}\r\n\r\nexport class UPressable extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['disabled', 'class'];\r\n }\r\n\r\n private _disabled: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"pressable\" class=\"pressable\"><slot></slot></div>`;\r\n this._root.addEventListener('pointerdown', (e: Event) =>\r\n this._onPointerDown(e as PointerEvent),\r\n );\r\n this._root.addEventListener('pointerup', (e: Event) => this._onPointerUp(e as PointerEvent));\r\n this._root.addEventListener('pointercancel', () => this._onPointerCancel());\r\n this._root.addEventListener('keydown', (e: Event) => this._onKeyDown(e as KeyboardEvent));\r\n this._root.addEventListener('keyup', (e: Event) => this._onKeyUp(e as KeyboardEvent));\r\n }\r\n\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(val: boolean) {\r\n this._disabled = val;\r\n if (val) this.setAttribute('disabled', '');\r\n else this.removeAttribute('disabled');\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n if (!this.hasAttribute('tabindex')) {\r\n this.setAttribute('tabindex', '0');\r\n }\r\n this.setAttribute('role', 'button');\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'disabled') {\r\n this._disabled = newVal !== null;\r\n this._sync();\r\n } else if (name === 'class') {\r\n this._sync();\r\n }\r\n }\r\n\r\n private _sync(): void {\r\n const pressableEl = this._root.querySelector('[part=\"pressable\"]')!;\r\n pressableEl.className = `pressable ${this.className}`.trim();\r\n if (this._disabled) {\r\n this.setAttribute('aria-disabled', 'true');\r\n } else {\r\n this.removeAttribute('aria-disabled');\r\n }\r\n }\r\n\r\n private _onPointerDown(e: PointerEvent): void {\r\n if (this._disabled) return;\r\n this.setAttribute('data-pressed', '');\r\n this.dispatchEvent(new CustomEvent('u-press-start', { bubbles: true, composed: true }));\r\n }\r\n\r\n private _onPointerUp(e: PointerEvent): void {\r\n if (this._disabled) return;\r\n this.removeAttribute('data-pressed');\r\n this.dispatchEvent(new CustomEvent('u-press-end', { bubbles: true, composed: true }));\r\n this.dispatchEvent(new CustomEvent('u-press', { bubbles: true, composed: true }));\r\n }\r\n\r\n private _onPointerCancel(): void {\r\n this.removeAttribute('data-pressed');\r\n this.dispatchEvent(new CustomEvent('u-press-end', { bubbles: true, composed: true }));\r\n }\r\n\r\n private _onKeyDown(e: KeyboardEvent): void {\r\n if (this._disabled) return;\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n this.setAttribute('data-pressed', '');\r\n this.dispatchEvent(new CustomEvent('u-press-start', { bubbles: true, composed: true }));\r\n }\r\n }\r\n\r\n private _onKeyUp(e: KeyboardEvent): void {\r\n if (this._disabled) return;\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n this.removeAttribute('data-pressed');\r\n this.dispatchEvent(new CustomEvent('u-press-end', { bubbles: true, composed: true }));\r\n this.dispatchEvent(new CustomEvent('u-press', { bubbles: true, composed: true }));\r\n }\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport interface FocusScopeProps {\r\n class?: string;\r\n}\r\n\r\nconst FOCUSABLE_SELECTOR =\r\n 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\r\n\r\nexport class UFocusScope extends UElement {\r\n private _previousFocused: Element | null = null;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"scope\"><slot></slot></div>`;\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._root.addEventListener('keydown', (e: Event) => this._onKeyDown(e as KeyboardEvent));\r\n }\r\n\r\n disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this._restoreFocus();\r\n }\r\n\r\n focusFirst(): void {\r\n const focusable = this._getFocusable();\r\n if (focusable.length > 0) {\r\n (focusable[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n focusLast(): void {\r\n const focusable = this._getFocusable();\r\n if (focusable.length > 0) {\r\n (focusable[focusable.length - 1] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n private _getFocusable(): HTMLElement[] {\r\n const slot = this._root.querySelector('slot')!;\r\n const assigned = slot.assignedElements({ flatten: true });\r\n const result: HTMLElement[] = [];\r\n for (const el of assigned) {\r\n if ((el as HTMLElement).matches(FOCUSABLE_SELECTOR)) {\r\n result.push(el as HTMLElement);\r\n }\r\n result.push(\r\n ...(Array.from((el as HTMLElement).querySelectorAll(FOCUSABLE_SELECTOR)) as HTMLElement[]),\r\n );\r\n }\r\n return result;\r\n }\r\n\r\n private _onKeyDown(e: KeyboardEvent): void {\r\n if (e.key !== 'Tab') return;\r\n const focusable = this._getFocusable();\r\n if (focusable.length === 0) {\r\n e.preventDefault();\r\n return;\r\n }\r\n const current = this._root.querySelector(':focus') ?? document.activeElement;\r\n const currentIndex = focusable.indexOf(current as HTMLElement);\r\n\r\n if (e.shiftKey) {\r\n if (currentIndex <= 0) {\r\n e.preventDefault();\r\n (focusable[focusable.length - 1] as HTMLElement).focus();\r\n }\r\n } else {\r\n if (currentIndex === -1 || currentIndex === focusable.length - 1) {\r\n e.preventDefault();\r\n (focusable[0] as HTMLElement).focus();\r\n }\r\n }\r\n }\r\n\r\n private _restoreFocus(): void {\r\n if (this._previousFocused && (this._previousFocused as HTMLElement).focus) {\r\n (this._previousFocused as HTMLElement).focus();\r\n }\r\n }\r\n\r\n _mount(): void {\r\n this._previousFocused = document.activeElement;\r\n this.focusFirst();\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport interface DismissableLayerProps {\r\n enabled?: boolean;\r\n class?: string;\r\n onDismiss?: () => void;\r\n}\r\n\r\nexport class UDismissableLayer extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['enabled'];\r\n }\r\n\r\n private _enabled: boolean = true;\r\n private _handleOutsideClick: ((e: MouseEvent) => void) | null = null;\r\n private _handleEscape: ((e: KeyboardEvent) => void) | null = null;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"layer\"><slot></slot></div>`;\r\n }\r\n\r\n get enabled(): boolean {\r\n return this._enabled;\r\n }\r\n set enabled(val: boolean) {\r\n this._enabled = val;\r\n if (val) this._enable();\r\n else this._disable();\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n if (this._enabled) this._enable();\r\n }\r\n\r\n disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this._disable();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'enabled') {\r\n this._enabled = newVal !== null;\r\n if (this._enabled) this._enable();\r\n else this._disable();\r\n }\r\n }\r\n\r\n private _enable(): void {\r\n this._disable();\r\n this._handleOutsideClick = (e: MouseEvent) => {\r\n const composed = e.composedPath();\r\n if (!composed.includes(this)) {\r\n this.dispatchEvent(new CustomEvent('u-dismiss', { bubbles: false, composed: true }));\r\n }\r\n };\r\n this._handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n this.dispatchEvent(new CustomEvent('u-dismiss', { bubbles: false, composed: true }));\r\n }\r\n };\r\n document.addEventListener('pointerdown', this._handleOutsideClick);\r\n document.addEventListener('keydown', this._handleEscape);\r\n }\r\n\r\n private _disable(): void {\r\n if (this._handleOutsideClick) {\r\n document.removeEventListener('pointerdown', this._handleOutsideClick);\r\n this._handleOutsideClick = null;\r\n }\r\n if (this._handleEscape) {\r\n document.removeEventListener('keydown', this._handleEscape);\r\n this._handleEscape = null;\r\n }\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { overlayStyles } from './styles.js';\r\n\r\nexport interface OverlayProps {\r\n visible?: boolean;\r\n opacity?: number;\r\n blur?: boolean;\r\n class?: string;\r\n onClick?: (e: MouseEvent) => void;\r\n}\r\n\r\nexport class UOverlay extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['visible', 'opacity', 'blur', 'class'];\r\n }\r\n\r\n private _visible: boolean = false;\r\n private _opacity: number = 0.5;\r\n private _blur: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${overlayStyles}</style><div part=\"overlay\" class=\"overlay\" hidden><slot></slot></div>`;\r\n }\r\n\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n set visible(val: boolean) {\r\n this._visible = val;\r\n if (val) this.setAttribute('visible', '');\r\n else this.removeAttribute('visible');\r\n }\r\n\r\n get opacity(): number {\r\n return this._opacity;\r\n }\r\n set opacity(val: number) {\r\n this.setAttribute('opacity', String(val));\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'visible':\r\n this._visible = newVal !== null;\r\n break;\r\n case 'opacity':\r\n this._opacity = Number(newVal) || 0.5;\r\n break;\r\n case 'blur':\r\n this._blur = newVal !== null;\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"overlay\"]')! as HTMLElement;\r\n el.className = `overlay ${this.className}`.trim();\r\n if (this._visible) {\r\n el.removeAttribute('hidden');\r\n el.style.opacity = String(this._opacity);\r\n if (this._blur) el.classList.add('overlay-blur');\r\n else el.classList.remove('overlay-blur');\r\n } else {\r\n el.setAttribute('hidden', '');\r\n }\r\n }\r\n\r\n show(): void {\r\n this.visible = true;\r\n }\r\n hide(): void {\r\n this.visible = false;\r\n }\r\n toggle(): void {\r\n this.visible = !this._visible;\r\n }\r\n\r\n _mount(): void {\r\n this._root.addEventListener('click', (e: Event) => {\r\n const me = e as MouseEvent;\r\n if (me.target === this._root.querySelector('[part=\"overlay\"]')) {\r\n this.dispatchEvent(new CustomEvent('u-overlay-click', { bubbles: true, composed: true }));\r\n }\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { fieldStyles } from './styles.js';\r\n\r\nexport interface FieldProps {\r\n label?: string;\r\n error?: string;\r\n hint?: string;\r\n required?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class UField extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['label', 'error', 'hint', 'required', 'class'];\r\n }\r\n\r\n private _label: string = '';\r\n private _error: string = '';\r\n private _hint: string = '';\r\n private _required: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${fieldStyles}</style><div part=\"field\" class=\"field\"><label part=\"label\" class=\"field-label\"></label><div part=\"content\" class=\"field-content\"><slot></slot></div><div part=\"hint\" class=\"field-hint\"></div><div part=\"error\" class=\"field-error\" role=\"alert\"></div></div>`;\r\n }\r\n\r\n get label(): string {\r\n return this._label;\r\n }\r\n set label(val: string) {\r\n this.setAttribute('label', val);\r\n }\r\n get error(): string {\r\n return this._error;\r\n }\r\n set error(val: string) {\r\n this.setAttribute('error', val);\r\n }\r\n get hint(): string {\r\n return this._hint;\r\n }\r\n set hint(val: string) {\r\n this.setAttribute('hint', val);\r\n }\r\n get required(): boolean {\r\n return this._required;\r\n }\r\n set required(val: boolean) {\r\n this._required = val;\r\n if (val) this.setAttribute('required', '');\r\n else this.removeAttribute('required');\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'label':\r\n this._label = newVal ?? '';\r\n break;\r\n case 'error':\r\n this._error = newVal ?? '';\r\n break;\r\n case 'hint':\r\n this._hint = newVal ?? '';\r\n break;\r\n case 'required':\r\n this._required = newVal !== null;\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const fieldEl = this._root.querySelector('[part=\"field\"]')!;\r\n fieldEl.className = `field ${this.className}`.trim();\r\n const labelEl = this._root.querySelector('[part=\"label\"]')!;\r\n labelEl.textContent = this._label;\r\n if (this._required) labelEl.classList.add('field-label-required');\r\n else labelEl.classList.remove('field-label-required');\r\n\r\n const hintEl = this._root.querySelector('[part=\"hint\"]')!;\r\n hintEl.textContent = this._hint;\r\n hintEl.classList.toggle('hidden', !this._hint);\r\n\r\n const errorEl = this._root.querySelector('[part=\"error\"]')!;\r\n errorEl.textContent = this._error;\r\n errorEl.classList.toggle('hidden', !this._error);\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { checkboxStyles } from './styles.js';\r\n\r\nexport interface CheckboxProps {\r\n checked?: boolean;\r\n disabled?: boolean;\r\n value?: string;\r\n class?: string;\r\n onChange?: (checked: boolean) => void;\r\n}\r\n\r\nexport class UCheckbox extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['checked', 'disabled', 'value', 'class'];\r\n }\r\n\r\n private _checked: boolean = false;\r\n private _disabled: boolean = false;\r\n private _value: string = '';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${checkboxStyles}</style><label part=\"checkbox\" class=\"checkbox\"><input type=\"checkbox\" part=\"input\" /><span part=\"indicator\" class=\"checkbox-indicator\"><svg viewBox=\"0 0 12 12\" width=\"12\" height=\"12\"><path d=\"M2.5 6L5 8.5L9.5 3.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></span><!-- @deprecated label-text → use part=\"label\" --><span part=\"label-text label\" class=\"checkbox-label\"><slot></slot></span></label>`;\r\n }\r\n\r\n get checked(): boolean {\r\n return this._checked;\r\n }\r\n set checked(val: boolean) {\r\n this._checked = val;\r\n if (val) this.setAttribute('checked', '');\r\n else this.removeAttribute('checked');\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(val: boolean) {\r\n this._disabled = val;\r\n if (val) this.setAttribute('disabled', '');\r\n else this.removeAttribute('disabled');\r\n }\r\n get value(): string {\r\n return this._value;\r\n }\r\n set value(val: string) {\r\n this.setAttribute('value', val);\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'checked':\r\n this._checked = newVal !== null;\r\n break;\r\n case 'disabled':\r\n this._disabled = newVal !== null;\r\n break;\r\n case 'value':\r\n this._value = newVal ?? '';\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const input = this._root.querySelector('input')!;\r\n input.checked = this._checked;\r\n input.disabled = this._disabled;\r\n if (this._value) input.value = this._value;\r\n const indicator = this._root.querySelector('[part=\"indicator\"]')!;\r\n if (this._checked) indicator.classList.add('checked');\r\n else indicator.classList.remove('checked');\r\n const checkbox = this._root.querySelector('[part=\"checkbox\"]')!;\r\n checkbox.className = `checkbox ${this.className}`.trim();\r\n }\r\n\r\n _mount(): void {\r\n const input = this._root.querySelector('input')!;\r\n input.addEventListener('change', () => {\r\n this._checked = input.checked;\r\n this.dispatchEvent(\r\n new CustomEvent('u-change', {\r\n detail: { checked: this._checked, value: this._value },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n if (this._checked) this.setAttribute('checked', '');\r\n else this.removeAttribute('checked');\r\n this._sync();\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { selectStyles } from './styles.js';\r\n\r\nexport interface SelectOption {\r\n label: string;\r\n value: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface SelectProps {\r\n value?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n options?: SelectOption[];\r\n class?: string;\r\n onChange?: (value: string) => void;\r\n}\r\n\r\nexport class USelect extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['placeholder', 'disabled', 'value', 'class'];\r\n }\r\n\r\n private _options: SelectOption[] = [];\r\n private _placeholder: string = '';\r\n private _disabled: boolean = false;\r\n private _value: string = '';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${selectStyles}</style><div part=\"select\" class=\"select-wrapper\"><select part=\"native-select\" class=\"select\"></select><span part=\"arrow\" class=\"select-arrow\"><svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path d=\"M4 6L8 10L12 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></span></div>`;\r\n }\r\n\r\n get value(): string {\r\n return this._value;\r\n }\r\n set value(val: string) {\r\n this.setAttribute('value', val);\r\n }\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n set placeholder(val: string) {\r\n this.setAttribute('placeholder', val);\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(val: boolean) {\r\n this._disabled = val;\r\n if (val) this.setAttribute('disabled', '');\r\n else this.removeAttribute('disabled');\r\n }\r\n get options(): SelectOption[] {\r\n return this._options;\r\n }\r\n set options(val: SelectOption[]) {\r\n this._options = val;\r\n this._renderOptions();\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._renderOptions();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'placeholder':\r\n this._placeholder = newVal ?? '';\r\n break;\r\n case 'disabled':\r\n this._disabled = newVal !== null;\r\n break;\r\n case 'value':\r\n this._value = newVal ?? '';\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _renderOptions(): void {\r\n const select = this._root.querySelector('select')!;\r\n select.innerHTML = '';\r\n if (this._placeholder) {\r\n const place = document.createElement('option');\r\n place.value = '';\r\n place.textContent = this._placeholder;\r\n place.disabled = true;\r\n place.selected = !this._value;\r\n select.appendChild(place);\r\n }\r\n for (const opt of this._options) {\r\n const option = document.createElement('option');\r\n option.value = opt.value;\r\n option.textContent = opt.label;\r\n option.disabled = opt.disabled ?? false;\r\n if (opt.value === this._value) option.selected = true;\r\n select.appendChild(option);\r\n }\r\n }\r\n\r\n private _sync(): void {\r\n const select = this._root.querySelector('select')!;\r\n select.disabled = this._disabled;\r\n if (this._value) select.value = this._value;\r\n const selectEl = this._root.querySelector('[part=\"select\"]')!;\r\n selectEl.className = `select-wrapper ${this.className}`.trim();\r\n }\r\n\r\n _mount(): void {\r\n const select = this._root.querySelector('select')!;\r\n select.addEventListener('change', () => {\r\n this._value = select.value;\r\n this.setAttribute('value', this._value);\r\n this.dispatchEvent(\r\n new CustomEvent('u-change', {\r\n detail: { value: this._value },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { linkStyles } from './styles.js';\r\n\r\nexport interface LinkProps {\r\n href?: string;\r\n target?: string;\r\n rel?: string;\r\n disabled?: boolean;\r\n variant?: 'default' | 'accent' | 'muted' | 'danger';\r\n underline?: 'hover' | 'always' | 'none';\r\n external?: boolean;\r\n download?: string;\r\n class?: string;\r\n onClick?: (e: MouseEvent) => void;\r\n}\r\n\r\nexport class ULink extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['href', 'target', 'rel', 'disabled', 'variant', 'underline', 'external', 'download', 'class'];\r\n }\r\n\r\n private _href: string = '';\r\n private _target: string = '';\r\n private _rel: string = '';\r\n private _disabled: boolean = false;\r\n private _variant: string = 'default';\r\n private _underline: string = 'hover';\r\n private _external: boolean = false;\r\n private _download: string = '';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${linkStyles}</style><a part=\"link\" class=\"link\"><slot></slot></a>`;\r\n }\r\n\r\n get href(): string {\r\n return this._href;\r\n }\r\n set href(val: string) {\r\n this.setAttribute('href', val);\r\n }\r\n get target(): string {\r\n return this._target;\r\n }\r\n set target(val: string) {\r\n this.setAttribute('target', val);\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(val: boolean) {\r\n this._updateAttr('disabled', val ? '' : null);\r\n }\r\n get variant(): string {\r\n return this._variant;\r\n }\r\n set variant(val: string) {\r\n this.setAttribute('variant', val);\r\n }\r\n get underline(): string {\r\n return this._underline;\r\n }\r\n set underline(val: string) {\r\n this.setAttribute('underline', val);\r\n }\r\n get external(): boolean {\r\n return this._external;\r\n }\r\n set external(val: boolean) {\r\n this._updateAttr('external', val ? '' : null);\r\n }\r\n get download(): string {\r\n return this._download;\r\n }\r\n set download(val: string) {\r\n this._updateAttr('download', val || null);\r\n }\r\n\r\n private _updateAttr(name: string, val: string | null): void {\r\n if (val === null) this.removeAttribute(name);\r\n else this.setAttribute(name, val);\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'href':\r\n this._href = newVal ?? '';\r\n break;\r\n case 'target':\r\n this._target = newVal ?? '';\r\n break;\r\n case 'rel':\r\n this._rel = newVal ?? '';\r\n break;\r\n case 'disabled':\r\n this._disabled = newVal !== null;\r\n break;\r\n case 'variant':\r\n this._variant = newVal ?? 'default';\r\n break;\r\n case 'underline':\r\n this._underline = newVal ?? 'hover';\r\n break;\r\n case 'external':\r\n this._external = newVal !== null;\r\n break;\r\n case 'download':\r\n this._download = newVal ?? '';\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const anchor = this._root.querySelector('a')!;\r\n anchor.href = this._disabled ? '' : this._href || '#';\r\n anchor.target = this._external ? '_blank' : this._target;\r\n anchor.rel = this._rel || (anchor.target === '_blank' ? 'noopener noreferrer' : '');\r\n if (this._download) anchor.setAttribute('download', this._download);\r\n else anchor.removeAttribute('download');\r\n\r\n anchor.className = `link link-${this._variant} link-underline-${this._underline} ${this.className}`.trim();\r\n\r\n if (this._disabled) {\r\n anchor.classList.add('link-disabled');\r\n anchor.setAttribute('aria-disabled', 'true');\r\n anchor.removeAttribute('href');\r\n } else {\r\n anchor.classList.remove('link-disabled');\r\n anchor.removeAttribute('aria-disabled');\r\n }\r\n }\r\n\r\n _mount(): void {\r\n const anchor = this._root.querySelector('a')!;\r\n anchor.addEventListener('click', (e: MouseEvent) => {\r\n if (this._disabled) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport interface SpacerProps {\r\n size?: number;\r\n}\r\n\r\nexport class USpacer extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['size', 'class'];\r\n }\r\n\r\n private _size: number = 0;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"spacer\" style=\"flex:1\"></div>`;\r\n }\r\n\r\n get size(): number {\r\n return this._size;\r\n }\r\n set size(val: number) {\r\n this.setAttribute('size', String(val));\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'size') {\r\n this._size = Number(newVal) || 0;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"spacer\"]')! as HTMLElement;\r\n el.className = `spacer ${this.className}`.trim();\r\n if (this._size > 0) {\r\n el.style.flex = 'none';\r\n el.style.width = `${this._size}px`;\r\n el.style.height = `${this._size}px`;\r\n } else {\r\n el.style.flex = '1';\r\n el.style.width = '';\r\n el.style.height = '';\r\n }\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { containerStyles } from './styles.js';\r\n\r\nexport interface ContainerProps {\r\n maxWidth?: string;\r\n padding?: string;\r\n centered?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class UContainer extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['max-width', 'padding', 'class'];\r\n }\r\n\r\n private _maxWidth: string = '1200px';\r\n private _padding: string = '16px';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${containerStyles}</style><div part=\"container\" class=\"container\"><slot></slot></div>`;\r\n }\r\n\r\n get maxWidth(): string {\r\n return this._maxWidth;\r\n }\r\n set maxWidth(val: string) {\r\n this.setAttribute('max-width', val);\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'max-width') this._maxWidth = newVal ?? '1200px';\r\n else if (name === 'padding') this._padding = newVal ?? '16px';\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"container\"]')! as HTMLElement;\r\n el.className = `container ${this.className}`.trim();\r\n el.style.maxWidth = this._maxWidth;\r\n el.style.padding = this._padding;\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport interface HoverableProps {\r\n disabled?: boolean;\r\n class?: string;\r\n onHoverStart?: () => void;\r\n onHoverEnd?: () => void;\r\n}\r\n\r\nexport class UHoverable extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['disabled'];\r\n }\r\n\r\n private _disabled: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"hoverable\"><slot></slot></div>`;\r\n }\r\n\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(val: boolean) {\r\n this._disabled = val;\r\n if (val) this.setAttribute('disabled', '');\r\n else this.removeAttribute('disabled');\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'disabled') this._disabled = newVal !== null;\r\n }\r\n\r\n _mount(): void {\r\n const el = this._root.querySelector('[part=\"hoverable\"]')!;\r\n el.addEventListener('pointerenter', () => {\r\n if (this._disabled) return;\r\n this.setAttribute('data-hovering', '');\r\n this.dispatchEvent(new CustomEvent('u-hover-start', { bubbles: true, composed: true }));\r\n });\r\n el.addEventListener('pointerleave', () => {\r\n this.removeAttribute('data-hovering');\r\n this.dispatchEvent(new CustomEvent('u-hover-end', { bubbles: true, composed: true }));\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport interface FocusTrapProps {\r\n active?: boolean;\r\n class?: string;\r\n}\r\n\r\nconst FOCUSABLE =\r\n 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\r\n\r\nexport class UFocusTrap extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['active'];\r\n }\r\n\r\n private _active: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"trap\"><slot></slot></div>`;\r\n }\r\n\r\n get active(): boolean {\r\n return this._active;\r\n }\r\n set active(val: boolean) {\r\n this._active = val;\r\n if (val) this.setAttribute('active', '');\r\n else this.removeAttribute('active');\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n if (this._active) {\r\n this._focusFirst();\r\n document.addEventListener('focusin', this._trap);\r\n }\r\n }\r\n\r\n disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n document.removeEventListener('focusin', this._trap);\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'active') {\r\n this._active = newVal !== null;\r\n if (this._active) {\r\n this._focusFirst();\r\n document.addEventListener('focusin', this._trap);\r\n } else {\r\n document.removeEventListener('focusin', this._trap);\r\n }\r\n }\r\n }\r\n\r\n private _trap = (e: FocusEvent): void => {\r\n if (!this._active) return;\r\n const target = e.target as Node;\r\n if (!this.contains(target)) {\r\n this._focusFirst();\r\n }\r\n };\r\n\r\n private _getFocusable(): HTMLElement[] {\r\n return Array.from(this.querySelectorAll(FOCUSABLE)) as HTMLElement[];\r\n }\r\n\r\n private _focusFirst(): void {\r\n const focusable = this._getFocusable();\r\n if (focusable.length > 0) {\r\n focusable[0].focus();\r\n }\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","export type Placement =\r\n 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right';\r\n\r\nexport interface PositionOptions {\r\n placement?: Placement;\r\n offset?: number;\r\n margin?: number;\r\n flip?: boolean;\r\n strategy?: 'fixed' | 'absolute';\r\n}\r\n\r\nexport interface PositionResult {\r\n top: number;\r\n left: number;\r\n placement: Placement;\r\n maxHeight?: number;\r\n overflowX: number;\r\n overflowY: number;\r\n}\r\n\r\nconst SAFE_MARGIN = 8;\r\n\r\nfunction isMobileViewport(): boolean {\r\n return window.innerWidth < 640;\r\n}\r\n\r\nexport function computePosition(\r\n trigger: DOMRect,\r\n popup: { width: number; height: number },\r\n options: PositionOptions = {},\r\n): PositionResult {\r\n const { placement = 'bottom', offset = 8, margin = SAFE_MARGIN, flip = true } = options;\r\n\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n const isMobile = isMobileViewport();\r\n\r\n let currentPlacement = placement;\r\n let top = 0;\r\n let left = 0;\r\n let maxHeight: number | undefined;\r\n\r\n const base = currentPlacement.split('-')[0] as string;\r\n\r\n // Try the requested placement first; flip if needed\r\n for (let attempt = 0; attempt < 2; attempt++) {\r\n const b = currentPlacement.split('-')[0] as string;\r\n const align = currentPlacement.split('-')[1] as 'start' | 'end' | undefined;\r\n\r\n switch (b) {\r\n case 'top': {\r\n top = trigger.top - popup.height - offset;\r\n if (align === 'start') left = trigger.left;\r\n else if (align === 'end') left = trigger.right - popup.width;\r\n else left = trigger.left + (trigger.width - popup.width) / 2;\r\n break;\r\n }\r\n case 'bottom': {\r\n top = trigger.bottom + offset;\r\n if (align === 'start') left = trigger.left;\r\n else if (align === 'end') left = trigger.right - popup.width;\r\n else left = trigger.left + (trigger.width - popup.width) / 2;\r\n break;\r\n }\r\n case 'left': {\r\n left = trigger.left - popup.width - offset;\r\n if (align === 'start') top = trigger.top;\r\n else if (align === 'end') top = trigger.bottom - popup.height;\r\n else top = trigger.top + (trigger.height - popup.height) / 2;\r\n break;\r\n }\r\n case 'right': {\r\n left = trigger.right + offset;\r\n if (align === 'start') top = trigger.top;\r\n else if (align === 'end') top = trigger.bottom - popup.height;\r\n else top = trigger.top + (trigger.height - popup.height) / 2;\r\n break;\r\n }\r\n }\r\n\r\n if (!flip || attempt === 1) break;\r\n\r\n // Check if popup fits in viewport; try flipping\r\n const overflowX = left + popup.width + margin - vw;\r\n const underflowX = left - margin;\r\n const overflowY = top + popup.height + margin - vh;\r\n const underflowY = top - margin;\r\n\r\n const flipped = flipPlacement(currentPlacement);\r\n const hFlipped = flipHorizontal(currentPlacement);\r\n const vFlipped = flipVertical(currentPlacement);\r\n\r\n // Decide what to flip\r\n if (overflowY > 0 || underflowY < 0) {\r\n if (b === 'top' || b === 'bottom') {\r\n currentPlacement = vFlipped;\r\n continue;\r\n }\r\n }\r\n if (overflowX > 0 || underflowX < 0) {\r\n if (b === 'left' || b === 'right') {\r\n currentPlacement = hFlipped;\r\n continue;\r\n }\r\n // For top/bottom, try start/end alignment adjustment\r\n if ((b === 'top' || b === 'bottom') && !align) {\r\n if (overflowX > 0) {\r\n const adjusted = `${b}-end` as Placement;\r\n currentPlacement = adjusted;\r\n continue;\r\n }\r\n if (underflowX < 0) {\r\n const adjusted = `${b}-start` as Placement;\r\n currentPlacement = adjusted;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Clamp to viewport with safe margin\r\n const finalBase = currentPlacement.split('-')[0];\r\n const isVertical = finalBase === 'top' || finalBase === 'bottom';\r\n\r\n if (isMobile && isVertical) {\r\n // On mobile, prefer full-width popups with horizontal padding\r\n left = margin;\r\n const maxWidth = vw - margin * 2;\r\n if (popup.width > maxWidth) {\r\n // We can't change the popup width from here, but note it\r\n }\r\n }\r\n\r\n // Clamp horizontal\r\n left = Math.max(margin, Math.min(left, vw - popup.width - margin));\r\n // Clamp vertical\r\n top = Math.max(margin, Math.min(top, vh - popup.height - margin));\r\n\r\n // Compute available height for scrollable content\r\n if (finalBase === 'top') {\r\n maxHeight = top - margin;\r\n } else if (finalBase === 'bottom') {\r\n maxHeight = vh - top - margin;\r\n }\r\n\r\n return {\r\n top: Math.round(top),\r\n left: Math.round(left),\r\n placement: currentPlacement,\r\n maxHeight: maxHeight && maxHeight > 0 ? maxHeight : undefined,\r\n overflowX: Math.max(0, left + popup.width + margin - vw),\r\n overflowY: Math.max(0, top + popup.height + margin - vh),\r\n };\r\n}\r\n\r\nfunction flipPlacement(p: Placement): Placement {\r\n const base = p.split('-')[0];\r\n const align = p.split('-')[1] ? `-${p.split('-')[1]}` : '';\r\n const map: Record<string, string> = {\r\n top: 'bottom',\r\n bottom: 'top',\r\n left: 'right',\r\n right: 'left',\r\n };\r\n return `${map[base] || base}${align}` as Placement;\r\n}\r\n\r\nconst flipVertical = flipPlacement;\r\nconst flipHorizontal = flipPlacement;\r\n","import { UElement } from '../core/element.js';\r\nimport { computePosition } from '../core/position.js';\r\nimport type { Placement } from '../core/position.js';\r\n\r\nexport type PopperPlacement = Placement;\r\n\r\nexport interface PopperProps {\r\n target?: string | HTMLElement;\r\n placement?: PopperPlacement;\r\n offset?: number;\r\n flip?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class UPopper extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['placement', 'offset', 'flip'];\r\n }\r\n\r\n private _target: HTMLElement | null = null;\r\n private _targetSelector: string = '';\r\n private _placement: PopperPlacement = 'bottom';\r\n private _offset: number = 8;\r\n private _flip: boolean = true;\r\n private _resizeObserver: ResizeObserver | null = null;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"popper\" class=\"popper\"><slot></slot></div>`;\r\n }\r\n\r\n get placement(): PopperPlacement {\r\n return this._placement;\r\n }\r\n set placement(val: PopperPlacement) {\r\n this.setAttribute('placement', val);\r\n }\r\n get offset(): number {\r\n return this._offset;\r\n }\r\n set offset(val: number) {\r\n this.setAttribute('offset', String(val));\r\n }\r\n\r\n set target(val: string | HTMLElement | null) {\r\n if (typeof val === 'string') {\r\n this._targetSelector = val;\r\n this._target = document.querySelector(val);\r\n } else {\r\n this._target = val;\r\n this._targetSelector = '';\r\n }\r\n this._position();\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n if (this._targetSelector) {\r\n this._target = document.querySelector(this._targetSelector);\r\n }\r\n this._resizeObserver = new ResizeObserver(() => this._position());\r\n this._resizeObserver.observe(this);\r\n this._position();\r\n window.addEventListener('scroll', this._onScroll, { passive: true });\r\n window.addEventListener('resize', this._onResize, { passive: true });\r\n }\r\n\r\n disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n this._resizeObserver = null;\r\n }\r\n window.removeEventListener('scroll', this._onScroll);\r\n window.removeEventListener('resize', this._onResize);\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'placement':\r\n this._placement = (newVal as PopperPlacement) ?? 'bottom';\r\n break;\r\n case 'offset':\r\n this._offset = Number(newVal) || 8;\r\n break;\r\n case 'flip':\r\n this._flip = newVal !== null;\r\n break;\r\n }\r\n this._position();\r\n }\r\n\r\n update(): void {\r\n this._position();\r\n }\r\n\r\n private _onScroll = (): void => {\r\n this._position();\r\n };\r\n private _onResize = (): void => {\r\n this._position();\r\n };\r\n\r\n private _position(): void {\r\n const el = this._root.querySelector('[part=\"popper\"]')! as HTMLElement;\r\n if (!this._target) return;\r\n\r\n const result = computePosition(\r\n this._target.getBoundingClientRect(),\r\n { width: el.offsetWidth || 0, height: el.offsetHeight || 0 },\r\n { placement: this._placement, offset: this._offset, flip: this._flip },\r\n );\r\n\r\n el.style.position = 'fixed';\r\n el.style.top = `${result.top}px`;\r\n el.style.left = `${result.left}px`;\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","export type ClassValue = string | number | null | undefined | false | ClassDictionary | ClassArray;\r\ninterface ClassDictionary {\r\n [key: string]: any;\r\n}\r\ninterface ClassArray extends Array<ClassValue> {}\r\n\r\nexport function cx(...args: ClassValue[]): string {\r\n const classes: string[] = [];\r\n for (const arg of args) {\r\n if (!arg) continue;\r\n if (typeof arg === 'string' || typeof arg === 'number') {\r\n classes.push(String(arg));\r\n } else if (Array.isArray(arg)) {\r\n const inner = cx(...arg);\r\n if (inner) classes.push(inner);\r\n } else if (typeof arg === 'object') {\r\n for (const key in arg) {\r\n if (arg[key]) classes.push(key);\r\n }\r\n }\r\n }\r\n return classes.join(' ');\r\n}\r\n\r\nexport function clamp(value: number, min: number, max: number): number {\r\n return Math.max(min, Math.min(max, value));\r\n}\r\n\r\nexport function isElement(el: any): el is Element {\r\n return el instanceof Element || (el && el.nodeType === 1);\r\n}\r\n\r\nexport function isHTMLElement(el: any): el is HTMLElement {\r\n return el instanceof HTMLElement || (el && el.tagName);\r\n}\r\n\r\nexport function defer(fn: () => void): void {\r\n requestAnimationFrame(() => {\r\n setTimeout(fn, 0);\r\n });\r\n}\r\n\r\nexport function uniqueId(prefix: string = ''): string {\r\n return `${prefix}${Math.random().toString(36).slice(2, 9)}`;\r\n}\r\n\r\nexport function parseBooleanAttribute(value: string | null | undefined, fallback: boolean = false): boolean {\r\n if (value == null) return fallback;\r\n const normalized = value.trim().toLowerCase();\r\n return normalized === '' || normalized === 'true' || normalized === '1' || normalized === 'yes' || normalized === 'on';\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { dialogStyles } from './styles.js';\r\nimport { UFocusTrap } from './focus-trap.wc.js';\r\nimport { UDismissableLayer } from './dismissable-layer.wc.js';\r\nimport { UOverlay } from './overlay.wc.js';\r\nimport { parseBooleanAttribute } from '../core/utils.js';\r\n\r\nexport interface DialogRootProps {\r\n open?: boolean;\r\n modal?: boolean;\r\n class?: string;\r\n onClose?: () => void;\r\n}\r\n\r\nexport class UDialogRoot extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['open', 'modal'];\r\n }\r\n\r\n private _open: boolean = false;\r\n private _modal: boolean = true;\r\n private _overlay: UOverlay | null = null;\r\n private _dismissable: UDismissableLayer | null = null;\r\n private _focusTrap: UFocusTrap | null = null;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${dialogStyles}</style><div part=\"dialog-root\"><slot></slot></div>`;\r\n }\r\n\r\n get open(): boolean {\r\n return this._open;\r\n }\r\n set open(val: boolean) {\r\n this._open = val;\r\n if (val) this.setAttribute('open', '');\r\n else this.removeAttribute('open');\r\n }\r\n\r\n get modal(): boolean {\r\n return this._modal;\r\n }\r\n set modal(val: boolean) {\r\n this._modal = val;\r\n if (val) this.setAttribute('modal', '');\r\n else this.removeAttribute('modal');\r\n }\r\n\r\n openDialog(): void {\r\n this.open = true;\r\n }\r\n closeDialog(): void {\r\n this.open = false;\r\n }\r\n toggleDialog(): void {\r\n this.open = !this._open;\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'open') {\r\n this._open = parseBooleanAttribute(newVal, false);\r\n this._updateOpenState();\r\n }\r\n if (name === 'modal') this._modal = parseBooleanAttribute(newVal, true);\r\n }\r\n\r\n private _sync(): void {\r\n this.setAttribute('role', 'dialog');\r\n this.setAttribute('aria-modal', String(this._modal));\r\n // Only run the open/close side-effects once at connect time.\r\n // If `open` was already present as an attribute, attributeChangedCallback\r\n // already ran _updateOpenState() before connectedCallback fires — running\r\n // it again here would double-inject the overlay/focus-trap/dismissable\r\n // layer and fire u-dialog-open twice.\r\n if (!this._synced) {\r\n this._synced = true;\r\n this._updateOpenState();\r\n }\r\n }\r\n private _synced = false;\r\n\r\n private _updateOpenState(): void {\r\n if (this._open) {\r\n this.removeAttribute('hidden');\r\n this._injectOverlay();\r\n this._injectDismissable();\r\n this._injectFocusTrap();\r\n this.dispatchEvent(new CustomEvent('u-dialog-open', { bubbles: true, composed: true }));\r\n } else {\r\n this.setAttribute('hidden', '');\r\n this._removeOverlay();\r\n this._removeDismissable();\r\n this._removeFocusTrap();\r\n this.dispatchEvent(new CustomEvent('u-dialog-close', { bubbles: true, composed: true }));\r\n }\r\n }\r\n\r\n private _injectOverlay(): void {\r\n if (!this._modal) return;\r\n if (!this._overlay) {\r\n this._overlay = new UOverlay();\r\n this._overlay.style.position = 'fixed';\r\n document.body.appendChild(this._overlay);\r\n }\r\n this._overlay.show();\r\n }\r\n\r\n private _removeOverlay(): void {\r\n if (this._overlay) {\r\n this._overlay.hide();\r\n // Actually detach it instead of leaving a hidden node parked in\r\n // document.body forever. A fresh one is created next time it's needed.\r\n this._overlay.remove();\r\n this._overlay = null;\r\n }\r\n }\r\n\r\n private _injectDismissable(): void {\r\n if (!this._dismissable) {\r\n this._dismissable = new UDismissableLayer();\r\n this._dismissable.style.display = 'contents';\r\n this._root.appendChild(this._dismissable);\r\n this._dismissable.addEventListener('u-dismiss', (e: Event) => {\r\n // NOTE: assumes UDismissableLayer dispatches u-dismiss with a\r\n // `detail.reason` of 'escape' | 'pointer-down-outside' (or similar).\r\n // Adjust this check if the actual shape differs.\r\n const reason = (e as CustomEvent).detail?.reason;\r\n const isOutsideClick = reason === 'pointer-down-outside' || reason === 'outside-click';\r\n\r\n // Modal dialogs should still close on Escape; only outside-click\r\n // is suppressed for modal dialogs. Non-modal dialogs close on both.\r\n if (this._modal && isOutsideClick) return;\r\n this.closeDialog();\r\n });\r\n }\r\n }\r\n\r\n private _removeDismissable(): void {\r\n if (this._dismissable && this._dismissable.parentNode) {\r\n this._dismissable.remove();\r\n this._dismissable = null;\r\n }\r\n }\r\n\r\n private _injectFocusTrap(): void {\r\n if (!this._focusTrap) {\r\n this._focusTrap = new UFocusTrap();\r\n this._focusTrap.style.display = 'contents';\r\n this._root.appendChild(this._focusTrap);\r\n }\r\n this._focusTrap.active = true;\r\n }\r\n\r\n private _removeFocusTrap(): void {\r\n if (this._focusTrap) {\r\n this._focusTrap.active = false;\r\n if (this._focusTrap.parentNode) {\r\n this._focusTrap.remove();\r\n }\r\n this._focusTrap = null;\r\n }\r\n }\r\n\r\n _mount(): void {}\r\n}","import { UElement } from '../core/element.js';\r\nimport { tooltipStyles } from './styles.js';\r\nimport { computePosition } from '../core/position.js';\r\nimport type { Placement } from '../core/position.js';\r\n\r\nexport type TooltipPlacement = Placement;\r\n\r\nexport interface TooltipRootProps {\r\n content?: string;\r\n placement?: TooltipPlacement;\r\n delay?: number;\r\n disabled?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class UTooltipRoot extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['content', 'placement', 'delay', 'disabled', 'class'];\r\n }\r\n\r\n private _content: string = '';\r\n private _placement: TooltipPlacement = 'top';\r\n private _delay: number = 300;\r\n private _disabled: boolean = false;\r\n private _showTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private _hideTimeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${tooltipStyles}</style><div part=\"trigger\" class=\"tooltip-trigger\" style=\"display:inline-flex\"><slot></slot></div><div part=\"tooltip\" class=\"tooltip\" role=\"tooltip\" hidden><!-- @deprecated tooltip-content → use part=\"content\" --><div part=\"tooltip-content content\" class=\"tooltip-content\"></div><div part=\"arrow\" class=\"tooltip-arrow\"></div></div>`;\r\n }\r\n\r\n get content(): string {\r\n return this._content;\r\n }\r\n set content(val: string) {\r\n this.setAttribute('content', val);\r\n }\r\n get placement(): TooltipPlacement {\r\n return this._placement;\r\n }\r\n set placement(val: TooltipPlacement) {\r\n this.setAttribute('placement', val);\r\n }\r\n get delay(): number {\r\n return this._delay;\r\n }\r\n set delay(val: number) {\r\n this.setAttribute('delay', String(val));\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'content':\r\n this._content = newVal ?? '';\r\n break;\r\n case 'placement':\r\n this._placement = (newVal as TooltipPlacement) ?? 'top';\r\n break;\r\n case 'delay':\r\n this._delay = Number(newVal) || 300;\r\n break;\r\n case 'disabled':\r\n this._disabled = newVal !== null;\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const triggerEl = this._root.querySelector('[part=\"trigger\"]')!;\r\n triggerEl.className = `tooltip-trigger ${this.className}`.trim();\r\n const contentEl = this._root.querySelector('[part~=\"tooltip-content\"]')!;\r\n contentEl.textContent = this._content;\r\n }\r\n\r\n show(): void {\r\n if (this._disabled || !this._content) return;\r\n if (this._hideTimeout) clearTimeout(this._hideTimeout);\r\n this._showTimeout = setTimeout(() => {\r\n const tip = this._root.querySelector('[part=\"tooltip\"]')! as HTMLElement;\r\n tip.removeAttribute('hidden');\r\n requestAnimationFrame(() => this._position());\r\n this.dispatchEvent(new CustomEvent('u-tooltip-show', { bubbles: true, composed: true }));\r\n }, this._delay);\r\n }\r\n\r\n hide(): void {\r\n if (this._showTimeout) clearTimeout(this._showTimeout);\r\n this._hideTimeout = setTimeout(() => {\r\n const tip = this._root.querySelector('[part=\"tooltip\"]')! as HTMLElement;\r\n tip.setAttribute('hidden', '');\r\n this.dispatchEvent(new CustomEvent('u-tooltip-hide', { bubbles: true, composed: true }));\r\n }, 50);\r\n }\r\n\r\n private _position(): void {\r\n const tip = this._root.querySelector('[part=\"tooltip\"]')! as HTMLElement;\r\n const trigger = this._root.querySelector('[part=\"trigger\"]')! as HTMLElement;\r\n if (tip.hidden) return;\r\n\r\n const result = computePosition(\r\n trigger.getBoundingClientRect(),\r\n { width: tip.offsetWidth || 0, height: tip.offsetHeight || 0 },\r\n { placement: this._placement, offset: 6, flip: true },\r\n );\r\n\r\n tip.style.position = 'fixed';\r\n tip.style.top = `${result.top}px`;\r\n tip.style.left = `${result.left}px`;\r\n\r\n const arrow = this._root.querySelector('[part=\"arrow\"]')! as HTMLElement;\r\n const base = result.placement.split('-')[0];\r\n arrow.className = `tooltip-arrow arrow-${base}`;\r\n }\r\n\r\n _mount(): void {\r\n const trigger = this._root.querySelector('[part=\"trigger\"]')!;\r\n trigger.addEventListener('pointerenter', () => this.show());\r\n trigger.addEventListener('pointerleave', () => this.hide());\r\n trigger.addEventListener('focusin', () => this.show());\r\n trigger.addEventListener('focusout', () => this.hide());\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { textareaStyles } from './styles.js';\r\n\r\nexport interface TextareaProps {\r\n value?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n readonly?: boolean;\r\n rows?: number;\r\n maxLength?: number;\r\n name?: string;\r\n class?: string;\r\n onInput?: (value: string) => void;\r\n}\r\n\r\nexport class UTextarea extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['placeholder', 'disabled', 'readonly', 'rows', 'max-length', 'name', 'class'];\r\n }\r\n\r\n private _placeholder: string = '';\r\n private _disabled: boolean = false;\r\n private _readonly: boolean = false;\r\n private _rows: number = 3;\r\n private _maxLength: number = -1;\r\n private _name: string = '';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${textareaStyles}</style><div part=\"wrapper\" class=\"textarea-wrapper\"><textarea part=\"textarea\"></textarea></div>`;\r\n }\r\n\r\n get value(): string {\r\n return this._root.querySelector('textarea')?.value ?? '';\r\n }\r\n set value(val: string) {\r\n const ta = this._root.querySelector('textarea');\r\n if (ta) ta.value = val;\r\n }\r\n\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n set placeholder(val: string) {\r\n this.setAttribute('placeholder', val);\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(val: boolean) {\r\n this._disabled = val;\r\n if (val) this.setAttribute('disabled', '');\r\n else this.removeAttribute('disabled');\r\n }\r\n get rows(): number {\r\n return this._rows;\r\n }\r\n set rows(val: number) {\r\n this.setAttribute('rows', String(val));\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'placeholder':\r\n this._placeholder = newVal ?? '';\r\n break;\r\n case 'disabled':\r\n this._disabled = newVal !== null;\r\n break;\r\n case 'readonly':\r\n this._readonly = newVal !== null;\r\n break;\r\n case 'rows':\r\n this._rows = Number(newVal) || 3;\r\n break;\r\n case 'max-length':\r\n this._maxLength = Number(newVal) || -1;\r\n break;\r\n case 'name':\r\n this._name = newVal ?? '';\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const ta = this._root.querySelector('textarea');\r\n if (!ta) return;\r\n ta.placeholder = this._placeholder;\r\n ta.disabled = this._disabled;\r\n ta.readOnly = this._readonly;\r\n ta.rows = this._rows;\r\n if (this._maxLength > 0) ta.maxLength = this._maxLength;\r\n ta.name = this._name;\r\n const wrapper = this._root.querySelector('.textarea-wrapper')!;\r\n wrapper.className = `textarea-wrapper ${this.className}`.trim();\r\n }\r\n\r\n _mount(): void {\r\n const ta = this._root.querySelector('textarea')!;\r\n ta.addEventListener('input', () => {\r\n this.dispatchEvent(\r\n new CustomEvent('u-input', {\r\n detail: { value: ta.value },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n ta.addEventListener('change', () => {\r\n this.dispatchEvent(\r\n new CustomEvent('u-change', {\r\n detail: { value: ta.value },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { radioStyles } from './styles.js';\r\n\r\nexport interface RadioGroupProps {\r\n value?: string;\r\n name?: string;\r\n disabled?: boolean;\r\n orientation?: 'horizontal' | 'vertical';\r\n class?: string;\r\n onChange?: (value: string) => void;\r\n}\r\n\r\nexport class URadioGroup extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['value', 'name', 'disabled', 'orientation', 'class'];\r\n }\r\n\r\n private _value: string = '';\r\n private _name: string = '';\r\n private _disabled: boolean = false;\r\n private _orientation: string = 'vertical';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${radioStyles}</style><div part=\"group\" class=\"radio-group\" role=\"radiogroup\"><slot></slot></div>`;\r\n }\r\n\r\n get value(): string {\r\n return this._value;\r\n }\r\n set value(val: string) {\r\n this.setAttribute('value', val);\r\n }\r\n get name(): string {\r\n return this._name;\r\n }\r\n set name(val: string) {\r\n this.setAttribute('name', val);\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(val: boolean) {\r\n this._disabled = val;\r\n if (val) this.setAttribute('disabled', '');\r\n else this.removeAttribute('disabled');\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'value':\r\n this._value = newVal ?? '';\r\n break;\r\n case 'name':\r\n this._name = newVal ?? '';\r\n break;\r\n case 'disabled':\r\n this._disabled = newVal !== null;\r\n break;\r\n case 'orientation':\r\n this._orientation = newVal ?? 'vertical';\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const group = this._root.querySelector('[part=\"group\"]')! as HTMLElement;\r\n group.className = `radio-group ${this.className}`.trim();\r\n group.style.flexDirection = this._orientation === 'horizontal' ? 'row' : 'column';\r\n group.style.gap = this._orientation === 'horizontal' ? '16px' : '8px';\r\n if (this._name) group.setAttribute('aria-labelledby', this._name);\r\n }\r\n\r\n _mount(): void {\r\n this.addEventListener('u-radio-select', ((e: CustomEvent) => {\r\n const val = e.detail.value as string;\r\n this._value = val;\r\n this.setAttribute('value', val);\r\n this._updateRadios();\r\n this.dispatchEvent(\r\n new CustomEvent('u-change', {\r\n detail: { value: val },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }) as EventListener);\r\n }\r\n\r\n private _updateRadios(): void {\r\n const radios = this.querySelectorAll('u-radio');\r\n for (const radio of radios) {\r\n if ((radio as any).value === this._value) {\r\n (radio as any).checked = true;\r\n } else {\r\n (radio as any).checked = false;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport interface RadioProps {\r\n value?: string;\r\n disabled?: boolean;\r\n checked?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class URadio extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['value', 'disabled', 'checked', 'class'];\r\n }\r\n\r\n private _value: string = '';\r\n private _disabled: boolean = false;\r\n private _checked: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${radioStyles}</style><label part=\"radio\" class=\"radio\"><input type=\"radio\" part=\"input\" /><span part=\"circle\" class=\"radio-circle\"></span><span part=\"label\" class=\"radio-label\"><slot></slot></span></label>`;\r\n }\r\n\r\n get value(): string {\r\n return this._value;\r\n }\r\n set value(val: string) {\r\n this.setAttribute('value', val);\r\n }\r\n get checked(): boolean {\r\n return this._checked;\r\n }\r\n set checked(val: boolean) {\r\n this._checked = val;\r\n if (val) this.setAttribute('checked', '');\r\n else this.removeAttribute('checked');\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(val: boolean) {\r\n this._disabled = val;\r\n if (val) this.setAttribute('disabled', '');\r\n else this.removeAttribute('disabled');\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'value':\r\n this._value = newVal ?? '';\r\n break;\r\n case 'disabled':\r\n this._disabled = newVal !== null;\r\n break;\r\n case 'checked':\r\n this._checked = newVal !== null;\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const input = this._root.querySelector('input')!;\r\n input.checked = this._checked;\r\n input.disabled = this._disabled;\r\n input.value = this._value;\r\n const circle = this._root.querySelector('[part=\"circle\"]')!;\r\n if (this._checked) circle.classList.add('checked');\r\n else circle.classList.remove('checked');\r\n const radio = this._root.querySelector('[part=\"radio\"]')!;\r\n radio.className = `radio ${this.className}`.trim();\r\n }\r\n\r\n _mount(): void {\r\n const input = this._root.querySelector('input')!;\r\n input.addEventListener('change', () => {\r\n if (this._disabled || !input.checked) return;\r\n this._checked = true;\r\n this.setAttribute('checked', '');\r\n this._sync();\r\n this.dispatchEvent(\r\n new CustomEvent('u-radio-select', {\r\n detail: { value: this._value },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { switchStyles } from './styles.js';\r\n\r\nexport interface SwitchProps {\r\n checked?: boolean;\r\n disabled?: boolean;\r\n value?: string;\r\n class?: string;\r\n onChange?: (checked: boolean) => void;\r\n}\r\n\r\nexport class USwitch extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['checked', 'disabled', 'class'];\r\n }\r\n\r\n private _checked: boolean = false;\r\n private _disabled: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${switchStyles}</style><label part=\"switch\" class=\"switch\"><input type=\"checkbox\" part=\"input\" role=\"switch\" /><span part=\"track\" class=\"switch-track\"><span part=\"thumb\" class=\"switch-thumb\"></span></span></label>`;\r\n }\r\n\r\n get checked(): boolean {\r\n return this._checked;\r\n }\r\n set checked(val: boolean) {\r\n this._checked = val;\r\n if (val) this.setAttribute('checked', '');\r\n else this.removeAttribute('checked');\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n set disabled(val: boolean) {\r\n this._disabled = val;\r\n if (val) this.setAttribute('disabled', '');\r\n else this.removeAttribute('disabled');\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'checked':\r\n this._checked = newVal !== null;\r\n break;\r\n case 'disabled':\r\n this._disabled = newVal !== null;\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const input = this._root.querySelector('input')!;\r\n input.checked = this._checked;\r\n input.disabled = this._disabled;\r\n const track = this._root.querySelector('[part=\"track\"]')!;\r\n if (this._checked) track.classList.add('checked');\r\n else track.classList.remove('checked');\r\n const switchEl = this._root.querySelector('[part=\"switch\"]')!;\r\n switchEl.className = `switch ${this.className}`.trim();\r\n }\r\n\r\n _mount(): void {\r\n const input = this._root.querySelector('input')!;\r\n input.addEventListener('change', () => {\r\n this._checked = input.checked;\r\n this._sync();\r\n this.dispatchEvent(\r\n new CustomEvent('u-change', {\r\n detail: { checked: this._checked },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { labelStyles } from './styles.js';\r\n\r\nexport interface LabelProps {\r\n for?: string;\r\n required?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class ULabel extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['for', 'required', 'class'];\r\n }\r\n\r\n private _for: string = '';\r\n private _required: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${labelStyles}</style><label part=\"label\" class=\"label\"><slot></slot></label>`;\r\n }\r\n\r\n get htmlFor(): string {\r\n return this._for;\r\n }\r\n set htmlFor(val: string) {\r\n this.setAttribute('for', val);\r\n }\r\n get required(): boolean {\r\n return this._required;\r\n }\r\n set required(val: boolean) {\r\n this._required = val;\r\n if (val) this.setAttribute('required', '');\r\n else this.removeAttribute('required');\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'for') this._for = newVal ?? '';\r\n else if (name === 'required') this._required = newVal !== null;\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const label = this._root.querySelector('label')!;\r\n label.className = `label ${this._required ? 'label-required' : ''} ${this.className}`.trim();\r\n if (this._for) label.setAttribute('for', this._for);\r\n else label.removeAttribute('for');\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport type CollectionSelection = 'none' | 'single' | 'multiple';\r\n\r\nexport interface CollectionProps {\r\n items?: any[];\r\n selection?: CollectionSelection;\r\n selected?: string[];\r\n class?: string;\r\n onChange?: (selected: string[]) => void;\r\n}\r\n\r\nexport class UCollection extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['selection', 'class'];\r\n }\r\n\r\n private _items: any[] = [];\r\n private _selection: CollectionSelection = 'none';\r\n private _selected: Set<string> = new Set();\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"collection\" class=\"collection\" role=\"listbox\"><slot></slot></div>`;\r\n }\r\n\r\n get items(): any[] {\r\n return this._items;\r\n }\r\n set items(val: any[]) {\r\n this._items = val;\r\n }\r\n get selection(): CollectionSelection {\r\n return this._selection;\r\n }\r\n set selection(val: CollectionSelection) {\r\n this.setAttribute('selection', val);\r\n }\r\n get selected(): string[] {\r\n return Array.from(this._selected);\r\n }\r\n set selected(val: string[]) {\r\n this._selected = new Set(val);\r\n this._updateItems();\r\n }\r\n\r\n select(key: string): void {\r\n if (this._selection === 'none') return;\r\n if (this._selection === 'single') {\r\n this._selected.clear();\r\n }\r\n this._selected.add(key);\r\n this._updateItems();\r\n this._dispatchChange();\r\n }\r\n\r\n deselect(key: string): void {\r\n this._selected.delete(key);\r\n this._updateItems();\r\n this._dispatchChange();\r\n }\r\n\r\n toggle(key: string): void {\r\n if (this._selected.has(key)) this.deselect(key);\r\n else this.select(key);\r\n }\r\n\r\n clearSelection(): void {\r\n this._selected.clear();\r\n this._updateItems();\r\n this._dispatchChange();\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'selection') {\r\n this._selection = (newVal as CollectionSelection) ?? 'none';\r\n } else if (name === 'class') {}\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"collection\"]')! as HTMLElement;\r\n el.className = `collection ${this.className}`.trim();\r\n }\r\n\r\n private _updateItems(): void {\r\n const slot = this._root.querySelector('slot')!;\r\n const assigned = slot.assignedElements();\r\n for (const el of assigned) {\r\n const key = el.getAttribute('data-key') || '';\r\n if (this._selected.has(key)) {\r\n el.setAttribute('aria-selected', 'true');\r\n el.setAttribute('data-selected', '');\r\n } else {\r\n el.removeAttribute('aria-selected');\r\n el.removeAttribute('data-selected');\r\n }\r\n }\r\n }\r\n\r\n private _dispatchChange(): void {\r\n this.dispatchEvent(\r\n new CustomEvent('u-collection-change', {\r\n detail: { selected: this.selected },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n _mount(): void {\r\n this.addEventListener('click', (e: Event) => {\r\n const target = e.target as HTMLElement;\r\n const item = target.closest('[data-key]');\r\n if (!item) return;\r\n const key = item.getAttribute('data-key') || '';\r\n this.toggle(key);\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { treeStyles } from './styles.js';\r\n\r\nexport interface TreeNodeData {\r\n id: string;\r\n label: string;\r\n children?: TreeNodeData[];\r\n expanded?: boolean;\r\n icon?: string;\r\n}\r\n\r\nexport interface TreeProps {\r\n items?: TreeNodeData[];\r\n class?: string;\r\n}\r\n\r\nexport class UTree extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['class'];\r\n }\r\n\r\n private _items: TreeNodeData[] = [];\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${treeStyles}</style><div part=\"tree\" class=\"tree\" role=\"tree\"><slot></slot></div>`;\r\n this._root.addEventListener('click', (e: Event) => this._onClick(e as MouseEvent));\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'class') this._sync();\r\n }\r\n\r\n get items(): TreeNodeData[] {\r\n return this._items;\r\n }\r\n set items(val: TreeNodeData[]) {\r\n this._items = val;\r\n this._render();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"tree\"]')!;\r\n el.className = `tree ${this.className}`.trim();\r\n }\r\n\r\n private _render(): void {\r\n const container = this._root.querySelector('[part=\"tree\"]')!;\r\n container.innerHTML = '';\r\n for (const node of this._items) {\r\n container.appendChild(this._renderNode(node, 0));\r\n }\r\n }\r\n\r\n private _renderNode(node: TreeNodeData, depth: number): HTMLElement {\r\n const li = document.createElement('li');\r\n li.className = 'tree-node';\r\n li.setAttribute('part', 'node');\r\n li.setAttribute('role', 'treeitem');\r\n li.setAttribute('data-id', node.id);\r\n li.setAttribute('aria-expanded', String(node.expanded ?? false));\r\n li.setAttribute('aria-level', String(depth + 1));\r\n\r\n const row = document.createElement('div');\r\n row.className = 'tree-row';\r\n row.setAttribute('part', 'row');\r\n row.style.paddingLeft = `${depth * 20 + 8}px`;\r\n\r\n const hasChildren = node.children && node.children.length > 0;\r\n\r\n if (hasChildren) {\r\n const toggle = document.createElement('span');\r\n toggle.className = 'tree-toggle';\r\n toggle.setAttribute('part', 'toggle');\r\n toggle.textContent = node.expanded ? '▾' : '▸';\r\n toggle.setAttribute('aria-hidden', 'true');\r\n row.appendChild(toggle);\r\n } else {\r\n const spacer = document.createElement('span');\r\n spacer.className = 'tree-toggle-spacer';\r\n spacer.setAttribute('part', 'toggle-spacer');\r\n row.appendChild(spacer);\r\n }\r\n\r\n const label = document.createElement('span');\r\n label.className = 'tree-label';\r\n label.setAttribute('part', 'label');\r\n label.textContent = node.label;\r\n row.appendChild(label);\r\n li.appendChild(row);\r\n\r\n if (hasChildren && node.expanded) {\r\n const ul = document.createElement('ul');\r\n ul.className = 'tree-children';\r\n ul.setAttribute('part', 'children');\r\n ul.setAttribute('role', 'group');\r\n for (const child of node.children!) {\r\n ul.appendChild(this._renderNode(child, depth + 1));\r\n }\r\n li.appendChild(ul);\r\n }\r\n\r\n return li;\r\n }\r\n\r\n private _onClick(e: MouseEvent): void {\r\n const toggle = (e.target as HTMLElement).closest('.tree-toggle');\r\n if (!toggle) return;\r\n const li = toggle.closest('.tree-node') as HTMLElement;\r\n if (!li) return;\r\n const id = li.getAttribute('data-id') || '';\r\n const expanded = li.getAttribute('aria-expanded') === 'true';\r\n li.setAttribute('aria-expanded', String(!expanded));\r\n // Re-render would be needed for dynamic expansion, but for simplicity\r\n // we let the consumer manage the items array\r\n this.dispatchEvent(\r\n new CustomEvent('u-tree-toggle', {\r\n detail: { id, expanded: !expanded },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { tableStyles } from './styles.js';\r\n\r\nexport interface TableColumn {\r\n key: string;\r\n label: string;\r\n sortable?: boolean;\r\n width?: string;\r\n}\r\n\r\nexport interface TableProps {\r\n columns?: TableColumn[];\r\n rows?: Record<string, any>[];\r\n sortable?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class UTable extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['sortable', 'class'];\r\n }\r\n\r\n private _columns: TableColumn[] = [];\r\n private _rows: Record<string, any>[] = [];\r\n private _sortable: boolean = false;\r\n private _sortKey: string = '';\r\n private _sortDir: 'asc' | 'desc' = 'asc';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${tableStyles}</style><div part=\"table-wrapper\" class=\"table-wrapper\"><table part=\"table\" class=\"table\"><thead part=\"thead\"><tr part=\"header-row\"></tr></thead><tbody part=\"tbody\"></tbody></table></div>`;\r\n }\r\n\r\n get columns(): TableColumn[] {\r\n return this._columns;\r\n }\r\n set columns(val: TableColumn[]) {\r\n this._columns = val;\r\n this._render();\r\n }\r\n get rows(): Record<string, any>[] {\r\n return this._rows;\r\n }\r\n set rows(val: Record<string, any>[]) {\r\n this._rows = val;\r\n this._render();\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'sortable') this._sortable = newVal !== null;\r\n else if (name === 'class') this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"table-wrapper\"]')!;\r\n el.className = `table-wrapper ${this.className}`.trim();\r\n }\r\n\r\n private _render(): void {\r\n this._renderHeader();\r\n this._renderBody();\r\n }\r\n\r\n private _renderHeader(): void {\r\n const headerRow = this._root.querySelector('[part=\"header-row\"]')!;\r\n headerRow.innerHTML = '';\r\n for (const col of this._columns) {\r\n const th = document.createElement('th');\r\n th.setAttribute('part', 'header-cell');\r\n th.textContent = col.label;\r\n if (col.width) th.style.width = col.width;\r\n if (this._sortable && col.sortable) {\r\n th.classList.add('sortable');\r\n th.setAttribute('data-key', col.key);\r\n if (col.key === this._sortKey) {\r\n th.classList.add('sorted');\r\n th.setAttribute('data-dir', this._sortDir);\r\n th.textContent = `${col.label} ${this._sortDir === 'asc' ? '▲' : '▼'}`;\r\n }\r\n }\r\n headerRow.appendChild(th);\r\n }\r\n }\r\n\r\n private _renderBody(): void {\r\n const tbody = this._root.querySelector('[part=\"tbody\"]')!;\r\n tbody.innerHTML = '';\r\n const data = this._sortKey ? this._sortedData() : this._rows;\r\n for (const row of data) {\r\n const tr = document.createElement('tr');\r\n tr.setAttribute('part', 'row');\r\n for (const col of this._columns) {\r\n const td = document.createElement('td');\r\n td.setAttribute('part', 'cell');\r\n td.textContent = String(row[col.key] ?? '');\r\n tr.appendChild(td);\r\n }\r\n tbody.appendChild(tr);\r\n }\r\n }\r\n\r\n private _sortedData(): Record<string, any>[] {\r\n return [...this._rows].sort((a, b) => {\r\n const va = a[this._sortKey];\r\n const vb = b[this._sortKey];\r\n if (va < vb) return this._sortDir === 'asc' ? -1 : 1;\r\n if (va > vb) return this._sortDir === 'asc' ? 1 : -1;\r\n return 0;\r\n });\r\n }\r\n\r\n _mount(): void {\r\n const headerRow = this._root.querySelector('[part=\"header-row\"]')!;\r\n headerRow.addEventListener('click', (e: Event) => {\r\n const th = (e.target as HTMLElement).closest('th');\r\n if (!th || !th.classList.contains('sortable')) return;\r\n const key = th.getAttribute('data-key') || '';\r\n if (this._sortKey === key) {\r\n this._sortDir = this._sortDir === 'asc' ? 'desc' : 'asc';\r\n } else {\r\n this._sortKey = key;\r\n this._sortDir = 'asc';\r\n }\r\n this._render();\r\n this.dispatchEvent(\r\n new CustomEvent('u-table-sort', {\r\n detail: { key: this._sortKey, dir: this._sortDir },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport interface RouterViewProps {\r\n class?: string;\r\n}\r\n\r\nexport class URouterView extends UElement {\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"router-view\"><slot></slot></div>`;\r\n }\r\n\r\n navigate(path: string): void {\r\n this.dispatchEvent(\r\n new CustomEvent('u-router-navigate', {\r\n detail: { path },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { breadcrumbStyles } from './styles.js';\r\n\r\nexport interface BreadcrumbItem {\r\n label: string;\r\n href?: string;\r\n}\r\n\r\nexport interface BreadcrumbProps {\r\n items?: BreadcrumbItem[];\r\n separator?: string;\r\n class?: string;\r\n}\r\n\r\nexport class UBreadcrumb extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['separator', 'class'];\r\n }\r\n\r\n private _items: BreadcrumbItem[] = [];\r\n private _separator: string = '/';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${breadcrumbStyles}</style><nav part=\"breadcrumb\" class=\"breadcrumb\" aria-label=\"Breadcrumb\"><ol part=\"list\"></ol></nav>`;\r\n }\r\n\r\n get items(): BreadcrumbItem[] {\r\n return this._items;\r\n }\r\n set items(val: BreadcrumbItem[]) {\r\n this._items = val;\r\n this._render();\r\n }\r\n get separator(): string {\r\n return this._separator;\r\n }\r\n set separator(val: string) {\r\n this.setAttribute('separator', val);\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'separator') {\r\n this._separator = newVal ?? '/';\r\n this._render();\r\n } else if (name === 'class') {\r\n this._sync();\r\n }\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"breadcrumb\"]')!;\r\n el.className = `breadcrumb ${this.className}`.trim();\r\n }\r\n\r\n private _render(): void {\r\n const list = this._root.querySelector('ol')!;\r\n list.innerHTML = '';\r\n for (let i = 0; i < this._items.length; i++) {\r\n const item = this._items[i];\r\n const li = document.createElement('li');\r\n li.className = 'breadcrumb-item';\r\n li.setAttribute('part', 'item');\r\n\r\n if (i < this._items.length - 1) {\r\n if (item.href) {\r\n const a = document.createElement('a');\r\n a.href = item.href;\r\n a.textContent = item.label;\r\n a.setAttribute('part', 'link');\r\n li.appendChild(a);\r\n } else {\r\n li.textContent = item.label;\r\n }\r\n const sep = document.createElement('span');\r\n sep.className = 'breadcrumb-separator';\r\n sep.setAttribute('part', 'separator');\r\n sep.setAttribute('aria-hidden', 'true');\r\n sep.textContent = this._separator;\r\n li.appendChild(sep);\r\n } else {\r\n li.textContent = item.label;\r\n li.setAttribute('aria-current', 'page');\r\n }\r\n\r\n list.appendChild(li);\r\n }\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\nimport { tabsStyles } from './styles.js';\n\nexport interface TabsProps {\n value?: string;\n orientation?: 'horizontal' | 'vertical';\n variant?: 'underline' | 'pills' | 'buttons';\n fullWidth?: boolean;\n class?: string;\n onChange?: (value: string) => void;\n}\n\nexport class UTabs extends UElement {\n static get observedAttributes(): string[] {\n return ['value', 'orientation', 'variant', 'full-width', 'class'];\n }\n\n private _value: string = '';\n private _orientation: string = 'horizontal';\n private _variant: string = 'underline';\n private _fullWidth: boolean = false;\n private _tablistEl!: HTMLElement;\n private _panelsContainer!: HTMLElement;\n private _indicatorEl!: HTMLElement | null;\n private _triggers: HTMLElement[] = [];\n\n constructor() {\n super();\n this._root.innerHTML = `<style>${tabsStyles}</style><div part=\"tabs\" class=\"tabs\"><div part=\"tablist\" class=\"tablist tablist-underline\" role=\"tablist\"><div part=\"indicator\" class=\"tab-indicator\"></div></div><div part=\"tabpanels\" class=\"tabpanels\"></div></div>`;\n this._tablistEl = this._root.querySelector('[part=\"tablist\"]')!;\n this._panelsContainer = this._root.querySelector('[part=\"tabpanels\"]')!;\n this._indicatorEl = this._tablistEl.querySelector('.tab-indicator');\n }\n\n get value(): string {\n return this._value;\n }\n set value(val: string) {\n this.setAttribute('value', val);\n }\n\n get variant(): string {\n return this._variant;\n }\n set variant(val: string) {\n this.setAttribute('variant', val);\n }\n\n get fullWidth(): boolean {\n return this._fullWidth;\n }\n set fullWidth(val: boolean) {\n if (val) this.setAttribute('full-width', '');\n else this.removeAttribute('full-width');\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this._sync();\n }\n\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\n if (oldVal === newVal) return;\n switch (name) {\n case 'value':\n this._value = newVal ?? '';\n break;\n case 'orientation':\n this._orientation = newVal ?? 'horizontal';\n break;\n case 'variant':\n this._variant = newVal ?? 'underline';\n break;\n case 'full-width':\n this._fullWidth = newVal !== null;\n break;\n case 'class':\n break;\n }\n this._sync();\n }\n\n private _sync(): void {\n this._tablistEl.setAttribute('aria-orientation', this._orientation);\n\n this._tablistEl.className = `tablist tablist-${this._variant}`;\n if (this._fullWidth) this._tablistEl.classList.add('tablist-full');\n\n const tabs = this.querySelectorAll('[slot=\"tab\"]');\n const panels = this.querySelectorAll('[slot=\"panel\"]');\n\n if (!this._value && tabs.length > 0) {\n this._value = tabs[0].getAttribute('data-value') || '0';\n }\n\n this._triggers = [];\n let triggerHtml = '';\n if (this._indicatorEl) {\n triggerHtml = '<div class=\"tab-indicator\"></div>';\n }\n this._tablistEl.innerHTML = triggerHtml;\n this._indicatorEl = this._tablistEl.querySelector('.tab-indicator');\n\n tabs.forEach((tab, i) => {\n const key = tab.getAttribute('data-value') || String(i);\n const disabled = tab.hasAttribute('disabled');\n const btn = document.createElement('button');\n btn.className = 'tab-trigger';\n btn.setAttribute('part', 'tab');\n btn.setAttribute('role', 'tab');\n btn.setAttribute('aria-selected', String(key === this._value));\n btn.setAttribute('data-value', key);\n btn.disabled = disabled;\n if (key === this._value) btn.classList.add('active');\n\n const iconSlot = tab.querySelector('[slot=\"icon\"]');\n if (iconSlot) {\n const iconSpan = document.createElement('span');\n iconSpan.className = 'tab-trigger-icon';\n iconSpan.setAttribute('part', 'tab-icon');\n iconSpan.appendChild(iconSlot.cloneNode(true));\n btn.appendChild(iconSpan);\n } else {\n const svgs = tab.querySelectorAll('svg');\n if (svgs.length > 0) {\n const iconSpan = document.createElement('span');\n iconSpan.className = 'tab-trigger-icon';\n iconSpan.setAttribute('part', 'tab-icon');\n iconSpan.appendChild(svgs[0].cloneNode(true));\n btn.appendChild(iconSpan);\n }\n }\n\n const labelSpan = document.createElement('span');\n labelSpan.textContent = tab.textContent;\n btn.appendChild(labelSpan);\n\n this._tablistEl.appendChild(btn);\n this._triggers.push(btn);\n });\n\n this._panelsContainer.innerHTML = '';\n panels.forEach((panel, i) => {\n const key = panel.getAttribute('data-value') || String(i);\n const div = document.createElement('div');\n div.className = 'tab-panel';\n div.setAttribute('part', 'panel');\n div.setAttribute('role', 'tabpanel');\n if (key === this._value) {\n div.removeAttribute('hidden');\n } else {\n div.setAttribute('hidden', '');\n }\n div.appendChild(panel.cloneNode(true));\n this._panelsContainer.appendChild(div);\n });\n\n this._updateIndicator();\n const tabsEl = this._root.querySelector('[part=\"tabs\"]')!;\n tabsEl.className = `tabs ${this.className}`.trim();\n }\n\n private _updateIndicator(): void {\n if (this._variant !== 'underline' || !this._indicatorEl) return;\n const active = this._tablistEl.querySelector('.tab-trigger.active') as HTMLElement | null;\n if (active) {\n this._indicatorEl.style.left = `${active.offsetLeft}px`;\n this._indicatorEl.style.width = `${active.offsetWidth}px`;\n } else {\n this._indicatorEl.style.left = '0';\n this._indicatorEl.style.width = '0';\n }\n }\n\n _mount(): void {\n this._tablistEl.addEventListener('click', (e: Event) => {\n const btn = (e.target as HTMLElement).closest('.tab-trigger') as HTMLButtonElement;\n if (!btn || btn.disabled) return;\n const val = btn.getAttribute('data-value') || '';\n this._value = val;\n this.setAttribute('value', val);\n this._sync();\n this.dispatchEvent(\n new CustomEvent('u-tabs-change', {\n detail: { value: val },\n bubbles: true,\n composed: true,\n }),\n );\n });\n\n this._tablistEl.addEventListener('keydown', (e: Event) => {\n const ke = e as KeyboardEvent;\n const enabled = this._triggers.filter(t => !(t as HTMLButtonElement).disabled);\n if (enabled.length === 0) return;\n const current = this._tablistEl.querySelector('.tab-trigger.active') as HTMLElement;\n const idx = enabled.indexOf(current as HTMLElement);\n let nextIdx = -1;\n\n switch (ke.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n ke.preventDefault();\n nextIdx = (idx + 1) % enabled.length;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n ke.preventDefault();\n nextIdx = (idx - 1 + enabled.length) % enabled.length;\n break;\n case 'Home':\n ke.preventDefault();\n nextIdx = 0;\n break;\n case 'End':\n ke.preventDefault();\n nextIdx = enabled.length - 1;\n break;\n }\n\n if (nextIdx >= 0) {\n (enabled[nextIdx] as HTMLElement).click();\n (enabled[nextIdx] as HTMLElement).focus();\n }\n });\n }\n}\n\nexport function Tabs(props: TabsProps = {}): UTabs {\n const el = new UTabs();\n if (props.value) el.value = props.value;\n if (props.orientation) el.setAttribute('orientation', props.orientation);\n if (props.variant) el.setAttribute('variant', props.variant);\n if (props.fullWidth != null) el.fullWidth = props.fullWidth;\n if (props.onChange) el.addEventListener('u-tabs-change', ((e: CustomEvent) => props.onChange!(e.detail.value)) as EventListener);\n return el;\n}\n","import { UElement } from '../core/element.js';\r\nimport { visuallyHiddenStyles } from './styles.js';\r\n\r\nexport interface VisuallyHiddenProps {\r\n class?: string;\r\n}\r\n\r\nexport class UVisuallyHidden extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['class'];\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${visuallyHiddenStyles}</style><span part=\"hidden\" class=\"visually-hidden\"><slot></slot></span>`;\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'class') this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"hidden\"]')! as HTMLElement;\r\n el.className = `visually-hidden ${this.className}`.trim();\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport type LiveRegionPoliteness = 'off' | 'polite' | 'assertive';\r\n\r\nexport interface LiveRegionProps {\r\n politeness?: LiveRegionPoliteness;\r\n atomic?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class ULiveRegion extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['politeness', 'atomic', 'class'];\r\n }\r\n\r\n private _politeness: LiveRegionPoliteness = 'polite';\r\n private _atomic: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"region\" aria-live=\"polite\" aria-atomic=\"false\"><slot></slot></div>`;\r\n }\r\n\r\n get politeness(): LiveRegionPoliteness {\r\n return this._politeness;\r\n }\r\n set politeness(val: LiveRegionPoliteness) {\r\n this.setAttribute('politeness', val);\r\n }\r\n\r\n announce(message: string): void {\r\n const el = this._root.querySelector('[part=\"region\"]')!;\r\n el.textContent = '';\r\n requestAnimationFrame(() => {\r\n el.textContent = message;\r\n });\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'politeness') this._politeness = (newVal as LiveRegionPoliteness) ?? 'polite';\r\n else if (name === 'atomic') this._atomic = newVal !== null;\r\n else if (name === 'class') {}\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"region\"]')!;\r\n el.className = this.className;\r\n el.setAttribute('aria-live', this._politeness);\r\n el.setAttribute('aria-atomic', String(this._atomic));\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport interface FocusManagerProps {\r\n class?: string;\r\n}\r\n\r\nconst FOCUSABLE =\r\n 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\r\n\r\nexport class UFocusManager extends UElement {\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"manager\"><slot></slot></div>`;\r\n }\r\n\r\n getFocusable(): HTMLElement[] {\r\n const slot = this._root.querySelector('slot')!;\r\n const assigned = slot.assignedElements({ flatten: true });\r\n const result: HTMLElement[] = [];\r\n for (const el of assigned) {\r\n if ((el as HTMLElement).matches(FOCUSABLE)) {\r\n result.push(el as HTMLElement);\r\n }\r\n result.push(\r\n ...(Array.from((el as HTMLElement).querySelectorAll(FOCUSABLE)) as HTMLElement[]),\r\n );\r\n }\r\n return result;\r\n }\r\n\r\n focusFirst(): void {\r\n const list = this.getFocusable();\r\n if (list.length > 0) list[0].focus();\r\n }\r\n\r\n focusLast(): void {\r\n const list = this.getFocusable();\r\n if (list.length > 0) list[list.length - 1].focus();\r\n }\r\n\r\n focusNext(current?: HTMLElement): void {\r\n const list = this.getFocusable();\r\n const active = current ?? (document.activeElement as HTMLElement);\r\n const idx = list.indexOf(active);\r\n if (idx < list.length - 1) list[idx + 1].focus();\r\n }\r\n\r\n focusPrevious(current?: HTMLElement): void {\r\n const list = this.getFocusable();\r\n const active = current ?? (document.activeElement as HTMLElement);\r\n const idx = list.indexOf(active);\r\n if (idx > 0) list[idx - 1].focus();\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport interface KeyboardNavigationProps {\r\n selector?: string;\r\n orientation?: 'horizontal' | 'vertical' | 'both';\r\n loop?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class UKeyboardNavigation extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['selector', 'orientation', 'loop'];\r\n }\r\n\r\n private _selector: string = '[data-nav]';\r\n private _orientation: string = 'vertical';\r\n private _loop: boolean = true;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"nav\"><slot></slot></div>`;\r\n }\r\n\r\n get orientation(): string {\r\n return this._orientation;\r\n }\r\n set orientation(val: string) {\r\n this.setAttribute('orientation', val);\r\n }\r\n get loop(): boolean {\r\n return this._loop;\r\n }\r\n set loop(val: boolean) {\r\n this._loop = val;\r\n if (val) this.setAttribute('loop', '');\r\n else this.removeAttribute('loop');\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'selector') this._selector = newVal ?? '[data-nav]';\r\n else if (name === 'orientation') this._orientation = newVal ?? 'vertical';\r\n else if (name === 'loop') this._loop = newVal !== null;\r\n }\r\n\r\n private _getItems(): HTMLElement[] {\r\n const slot = this._root.querySelector('slot')!;\r\n const assigned = slot.assignedElements({ flatten: true });\r\n const result: HTMLElement[] = [];\r\n for (const el of assigned) {\r\n if ((el as HTMLElement).matches(this._selector)) {\r\n result.push(el as HTMLElement);\r\n }\r\n result.push(\r\n ...(Array.from((el as HTMLElement).querySelectorAll(this._selector)) as HTMLElement[]),\r\n );\r\n }\r\n return result;\r\n }\r\n\r\n private _onKeyDown = (e: KeyboardEvent): void => {\r\n const items = this._getItems();\r\n if (items.length === 0) return;\r\n\r\n const current = this._root.querySelector(':focus') ?? document.activeElement;\r\n const idx = items.indexOf(current as HTMLElement);\r\n\r\n let nextIdx = -1;\r\n const isHorizontal = this._orientation === 'horizontal' || this._orientation === 'both';\r\n const isVertical = this._orientation === 'vertical' || this._orientation === 'both';\r\n\r\n if (isVertical && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\r\n e.preventDefault();\r\n nextIdx = e.key === 'ArrowDown' ? idx + 1 : idx - 1;\r\n } else if (isHorizontal && (e.key === 'ArrowRight' || e.key === 'ArrowLeft')) {\r\n e.preventDefault();\r\n nextIdx = e.key === 'ArrowRight' ? idx + 1 : idx - 1;\r\n } else if (e.key === 'Home') {\r\n e.preventDefault();\r\n nextIdx = 0;\r\n } else if (e.key === 'End') {\r\n e.preventDefault();\r\n nextIdx = items.length - 1;\r\n }\r\n\r\n if (nextIdx >= 0 && nextIdx < items.length) {\r\n items[nextIdx].focus();\r\n } else if (this._loop && nextIdx < 0) {\r\n items[items.length - 1].focus();\r\n } else if (this._loop && nextIdx >= items.length) {\r\n items[0].focus();\r\n }\r\n };\r\n\r\n _mount(): void {\r\n this._root.addEventListener('keydown', this._onKeyDown as EventListener);\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { presenceStyles } from './styles.js';\r\n\r\nexport type PresenceAnimation =\r\n 'fade' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right' | 'scale' | 'none';\r\n\r\nexport interface PresenceProps {\r\n present?: boolean;\r\n animation?: PresenceAnimation;\r\n duration?: number;\r\n class?: string;\r\n}\r\n\r\nexport class UPresence extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['present', 'animation', 'duration', 'class'];\r\n }\r\n\r\n private _present: boolean = true;\r\n private _animation: PresenceAnimation = 'fade';\r\n private _duration: number = 200;\r\n private _mounted: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${presenceStyles}</style><div part=\"presence\" class=\"presence\"><slot></slot></div>`;\r\n }\r\n\r\n get present(): boolean {\r\n return this._present;\r\n }\r\n set present(val: boolean) {\r\n this._present = val;\r\n if (val) this.setAttribute('present', '');\r\n else this.removeAttribute('present');\r\n }\r\n get animation(): PresenceAnimation {\r\n return this._animation;\r\n }\r\n set animation(val: PresenceAnimation) {\r\n this.setAttribute('animation', val);\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n this._present = this.hasAttribute('present');\r\n this._mounted = true;\r\n if (this._present) {\r\n this._enter();\r\n } else {\r\n this.style.display = 'none';\r\n }\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'present':\r\n this._present = newVal !== null;\r\n if (this._mounted) {\r\n if (this._present) this._enter();\r\n else this._leave();\r\n }\r\n break;\r\n case 'animation':\r\n this._animation = (newVal as PresenceAnimation) ?? 'fade';\r\n break;\r\n case 'duration':\r\n this._duration = Number(newVal) || 200;\r\n break;\r\n case 'class':\r\n this._sync();\r\n break;\r\n }\r\n }\r\n\r\n private _sync(): void {\r\n const presenceEl = this._root.querySelector('[part=\"presence\"]')!;\r\n presenceEl.className = `presence ${this.className}`.trim();\r\n }\r\n\r\n private _enter(): void {\r\n const el = this._root.querySelector('[part=\"presence\"]')! as HTMLElement;\r\n this.style.display = '';\r\n el.classList.add('presence-enter');\r\n el.style.animationDuration = `${this._duration}ms`;\r\n requestAnimationFrame(() => {\r\n el.classList.add('presence-enter-active');\r\n });\r\n const cleanup = () => {\r\n el.classList.remove('presence-enter', 'presence-enter-active');\r\n el.removeEventListener('animationend', cleanup);\r\n };\r\n el.addEventListener('animationend', cleanup);\r\n }\r\n\r\n private _leave(): void {\r\n const el = this._root.querySelector('[part=\"presence\"]')! as HTMLElement;\r\n el.classList.add('presence-leave');\r\n el.style.animationDuration = `${this._duration}ms`;\r\n requestAnimationFrame(() => {\r\n el.classList.add('presence-leave-active');\r\n });\r\n const cleanup = () => {\r\n el.classList.remove('presence-leave', 'presence-leave-active');\r\n this.style.display = 'none';\r\n el.removeEventListener('animationend', cleanup);\r\n };\r\n el.addEventListener('animationend', cleanup);\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\n\r\nexport type TransitionType =\r\n 'fade' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right' | 'scale' | 'none';\r\n\r\nexport interface TransitionProps {\r\n in?: boolean;\r\n type?: TransitionType;\r\n duration?: number;\r\n delay?: number;\r\n class?: string;\r\n}\r\n\r\nexport class UTransition extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['in', 'type', 'duration', 'delay'];\r\n }\r\n\r\n private _in: boolean = false;\r\n private _type: TransitionType = 'fade';\r\n private _duration: number = 200;\r\n private _delay: number = 0;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<div part=\"transition\" class=\"transition\"><slot></slot></div>`;\r\n }\r\n\r\n get in(): boolean {\r\n return this._in;\r\n }\r\n set in(val: boolean) {\r\n this._in = val;\r\n if (val) this.setAttribute('in', '');\r\n else this.removeAttribute('in');\r\n }\r\n get transitionType(): TransitionType {\r\n return this._type;\r\n }\r\n set transitionType(val: TransitionType) {\r\n this.setAttribute('type', val);\r\n }\r\n get duration(): number {\r\n return this._duration;\r\n }\r\n set duration(val: number) {\r\n this.setAttribute('duration', String(val));\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'in':\r\n this._in = newVal !== null;\r\n break;\r\n case 'type':\r\n this._type = (newVal as TransitionType) ?? 'fade';\r\n break;\r\n case 'duration':\r\n this._duration = Number(newVal) || 200;\r\n break;\r\n case 'delay':\r\n this._delay = Number(newVal) || 0;\r\n break;\r\n }\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"transition\"]')! as HTMLElement;\r\n el.style.transitionDuration = `${this._duration}ms`;\r\n el.style.transitionDelay = `${this._delay}ms`;\r\n el.style.transitionProperty = this._cssProperty();\r\n if (this._in) {\r\n el.classList.add('transition-enter');\r\n requestAnimationFrame(() => {\r\n el.classList.add('transition-enter-active');\r\n });\r\n } else {\r\n el.classList.remove('transition-enter', 'transition-enter-active');\r\n }\r\n }\r\n\r\n private _cssProperty(): string {\r\n switch (this._type) {\r\n case 'fade':\r\n return 'opacity';\r\n case 'slide-up':\r\n case 'slide-down':\r\n case 'slide-left':\r\n case 'slide-right':\r\n return 'opacity, transform';\r\n case 'scale':\r\n return 'opacity, transform';\r\n default:\r\n return 'opacity';\r\n }\r\n }\r\n\r\n enter(): void {\r\n this.in = true;\r\n }\r\n exit(): void {\r\n this.in = false;\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { animateKeyframes } from './styles.js';\r\n\r\nexport type AnimatePreset =\r\n | 'fade-in'\r\n | 'fade-out'\r\n | 'slide-in-up'\r\n | 'slide-in-down'\r\n | 'slide-in-left'\r\n | 'slide-in-right'\r\n | 'slide-out-up'\r\n | 'slide-out-down'\r\n | 'scale-in'\r\n | 'scale-out'\r\n | 'bounce-in'\r\n | 'none';\r\n\r\nexport interface AnimateProps {\r\n preset?: AnimatePreset;\r\n duration?: number;\r\n delay?: number;\r\n play?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class UAnimate extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['preset', 'duration', 'delay', 'play'];\r\n }\r\n\r\n private _preset: AnimatePreset = 'fade-in';\r\n private _duration: number = 300;\r\n private _delay: number = 0;\r\n private _played: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${animateKeyframes}</style><div part=\"animate\" class=\"animate\"><slot></slot></div>`;\r\n }\r\n\r\n get preset(): AnimatePreset {\r\n return this._preset;\r\n }\r\n set preset(val: AnimatePreset) {\r\n this.setAttribute('preset', val);\r\n }\r\n get duration(): number {\r\n return this._duration;\r\n }\r\n set duration(val: number) {\r\n this.setAttribute('duration', String(val));\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n if (!this._played && this.hasAttribute('play')) {\r\n this._play();\r\n }\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'preset':\r\n this._preset = (newVal as AnimatePreset) ?? 'fade-in';\r\n break;\r\n case 'duration':\r\n this._duration = Number(newVal) || 300;\r\n break;\r\n case 'delay':\r\n this._delay = Number(newVal) || 0;\r\n break;\r\n case 'play':\r\n if (newVal !== null) this._play();\r\n break;\r\n }\r\n }\r\n\r\n play(): void {\r\n this.setAttribute('play', '');\r\n }\r\n\r\n stop(): void {\r\n this.removeAttribute('play');\r\n const el = this._root.querySelector('[part=\"animate\"]')! as HTMLElement;\r\n el.style.animation = 'none';\r\n void el.offsetHeight;\r\n el.classList.remove('animate-play');\r\n }\r\n\r\n private _play(): void {\r\n if (this._played) {\r\n this.stop();\r\n }\r\n const el = this._root.querySelector('[part=\"animate\"]')! as HTMLElement;\r\n el.style.animationDuration = `${this._duration}ms`;\r\n el.style.animationDelay = `${this._delay}ms`;\r\n el.style.animationName = this._animationName();\r\n el.classList.add('animate-play');\r\n this._played = true;\r\n el.addEventListener(\r\n 'animationend',\r\n () => {\r\n this._played = false;\r\n },\r\n { once: true },\r\n );\r\n }\r\n\r\n private _animationName(): string {\r\n const map: Record<string, string> = {\r\n 'fade-in': 'u-fade-in',\r\n 'fade-out': 'u-fade-out',\r\n 'slide-in-up': 'u-slide-in-up',\r\n 'slide-in-down': 'u-slide-in-down',\r\n 'slide-in-left': 'u-slide-in-left',\r\n 'slide-in-right': 'u-slide-in-right',\r\n 'slide-out-up': 'u-slide-out-up',\r\n 'slide-out-down': 'u-slide-out-down',\r\n 'scale-in': 'u-scale-in',\r\n 'scale-out': 'u-scale-out',\r\n 'bounce-in': 'u-bounce-in',\r\n none: 'none',\r\n };\r\n return map[this._preset] || 'u-fade-in';\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","let lockCount = 0;\r\nlet originalOverflow = '';\r\nlet originalPaddingRight = '';\r\nlet scrollbarWidth = 0;\r\n\r\nfunction getScrollbarWidth(): number {\r\n return window.innerWidth - document.documentElement.clientWidth;\r\n}\r\n\r\nexport function lockScroll(): () => void {\r\n if (lockCount === 0) {\r\n scrollbarWidth = getScrollbarWidth();\r\n originalOverflow = document.body.style.overflow;\r\n originalPaddingRight = document.body.style.paddingRight;\r\n if (scrollbarWidth > 0) {\r\n document.body.style.paddingRight = `${scrollbarWidth}px`;\r\n }\r\n document.body.style.overflow = 'hidden';\r\n }\r\n lockCount++;\r\n return () => {\r\n unlockScroll();\r\n };\r\n}\r\n\r\nfunction unlockScroll(): void {\r\n lockCount = Math.max(0, lockCount - 1);\r\n if (lockCount === 0) {\r\n document.body.style.overflow = originalOverflow;\r\n document.body.style.paddingRight = originalPaddingRight;\r\n }\r\n}\r\n\r\nexport function isScrollLocked(): boolean {\r\n return lockCount > 0;\r\n}\r\n","import { UElement } from '../core/element.js';\nimport { modalStyles } from './styles.js';\nimport { lockScroll } from '../core/scroll-lock.js';\nimport { parseBooleanAttribute } from '../core/utils.js';\n\nexport interface ModalProps {\n open?: boolean;\n title?: string;\n closeOnEscape?: boolean;\n closeOnOverlay?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n class?: string;\n onClose?: () => void;\n}\n\nconst CLOSE_SVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg>';\n\nexport class UModal extends UElement {\n static get observedAttributes(): string[] {\n return ['open', 'size', 'title', 'close-on-escape', 'close-on-overlay', 'class'];\n }\n\n private _open: boolean = false;\n private _title: string = '';\n private _size: string = 'md';\n private _closeOnEscape: boolean = true;\n private _closeOnOverlay: boolean = true;\n private _previousActive: Element | null = null;\n private _unlockScroll: (() => void) | null = null;\n\n constructor() {\n super();\n this._root.innerHTML = `<style>${modalStyles}</style>\n<div part=\"backdrop\" class=\"modal-backdrop\" hidden></div>\n<div part=\"modal\" class=\"modal\" role=\"dialog\" aria-modal=\"true\" hidden>\n <div part=\"modal-wrapper\" class=\"modal-wrapper modal-md\">\n <div part=\"header\" class=\"modal-header\">\n <div part=\"title\" class=\"modal-title\"><slot name=\"header\">${this._title}</slot></div>\n <button part=\"close-btn\" class=\"modal-close\" aria-label=\"Close\">${CLOSE_SVG}</button>\n </div>\n <div part=\"content\" class=\"modal-content\">\n <slot></slot>\n </div>\n <div part=\"footer\" class=\"modal-footer\">\n <slot name=\"footer\"></slot>\n </div>\n </div>\n</div>`;\n }\n\n get open(): boolean {\n return this._open;\n }\n set open(val: boolean) {\n this._open = val;\n if (val) this.setAttribute('open', '');\n else this.removeAttribute('open');\n }\n\n get title(): string {\n return this._title;\n }\n set title(val: string) {\n this.setAttribute('title', val);\n }\n\n openModal(): void {\n this.open = true;\n }\n closeModal(): void {\n this.open = false;\n this.dispatchEvent(new CustomEvent('close'));\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this._sync();\n }\n\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\n if (oldVal === newVal) return;\n switch (name) {\n case 'open':\n this._open = parseBooleanAttribute(newVal, false);\n this._updateOpenState();\n break;\n case 'size':\n this._size = newVal ?? 'md';\n this._updateSize();\n break;\n case 'title':\n this._title = newVal ?? '';\n this._updateTitle();\n break;\n case 'close-on-escape':\n this._closeOnEscape = parseBooleanAttribute(newVal, true);\n break;\n case 'close-on-overlay':\n this._closeOnOverlay = parseBooleanAttribute(newVal, true);\n break;\n case 'class':\n this._sync();\n break;\n }\n }\n\n private _sync(): void {\n const modalEl = this._root.querySelector('[part=\"modal\"]')!;\n modalEl.className = `modal ${this.className}`.trim();\n this._updateOpenState();\n this._updateSize();\n this._updateTitle();\n }\n\n private _updateTitle(): void {\n const headerSlot = this._root.querySelector('slot[name=\"header\"]') as HTMLSlotElement;\n if (!headerSlot) return;\n const assigned = headerSlot.assignedNodes({ flatten: true });\n if (assigned.length === 0 && this._title) {\n headerSlot.textContent = this._title;\n } else {\n headerSlot.textContent = '';\n }\n }\n\n private _updateSize(): void {\n const wrapper = this._root.querySelector('[part=\"modal-wrapper\"]')! as HTMLElement;\n const isMobile = window.innerWidth < 640;\n if (isMobile) {\n wrapper.className = 'modal-wrapper modal-mobile';\n wrapper.style.maxWidth = `${Math.min(window.innerWidth - 32, 800)}px`;\n } else {\n wrapper.className = `modal-wrapper modal-${this._size}`;\n wrapper.style.maxWidth = '';\n }\n }\n\n private _updateOpenState(): void {\n const backdrop = this._root.querySelector('[part=\"backdrop\"]')! as HTMLElement;\n const modal = this._root.querySelector('[part=\"modal\"]')! as HTMLElement;\n\n if (this._open) {\n this._previousActive = document.activeElement;\n backdrop.removeAttribute('hidden');\n modal.removeAttribute('hidden');\n this._unlockScroll = lockScroll();\n this._updateSize();\n this._focusFirst();\n } else {\n backdrop.setAttribute('hidden', '');\n modal.setAttribute('hidden', '');\n if (this._unlockScroll) { this._unlockScroll(); this._unlockScroll = null; }\n if (this._previousActive && (this._previousActive as HTMLElement).focus) {\n (this._previousActive as HTMLElement).focus();\n this._previousActive = null;\n }\n }\n }\n\n private _focusFirst(): void {\n const focusable = this._root.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n for (const el of focusable) {\n if ((el as HTMLElement).offsetParent !== null) {\n (el as HTMLElement).focus();\n return;\n }\n }\n if (focusable.length > 0) {\n (focusable[0] as HTMLElement).focus();\n }\n }\n\n _mount(): void {\n const modal = this._root.querySelector('[part=\"modal\"]')!;\n const backdrop = this._root.querySelector('[part=\"backdrop\"]')!;\n const closeBtn = this._root.querySelector('[part=\"close-btn\"]')!;\n\n closeBtn.addEventListener('click', () => this.closeModal());\n\n modal.addEventListener('keydown', (e: Event) => {\n const ke = e as KeyboardEvent;\n if (ke.key === 'Escape' && this._closeOnEscape) {\n this.closeModal();\n }\n if (ke.key === 'Tab') {\n this._trapTab(ke);\n }\n });\n\n backdrop.addEventListener('click', () => {\n if (this._closeOnOverlay) this.closeModal();\n });\n\n window.addEventListener('resize', () => {\n if (this._open) this._updateSize();\n });\n }\n\n private _trapTab(e: KeyboardEvent): void {\n const focusable = Array.from(\n this._root.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ) as HTMLElement[];\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n const visible = focusable.filter(el => el.offsetParent !== null);\n const list = visible.length > 0 ? visible : focusable;\n const first = list[0];\n const last = list[list.length - 1];\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n}\n\nexport function Modal(props: ModalProps = {}): UModal {\n const el = new UModal();\n if (props.open != null) el.open = props.open;\n if (props.title) el.title = props.title;\n if (props.size) el.setAttribute('size', props.size);\n if (props.closeOnEscape != null) el.setAttribute('close-on-escape', props.closeOnEscape ? '' : null as any);\n if (props.closeOnOverlay != null) el.setAttribute('close-on-overlay', props.closeOnOverlay ? '' : null as any);\n if (props.onClose) el.addEventListener('close', props.onClose);\n return el;\n}\n","import { UElement } from '../core/element.js';\r\nimport { drawerStyles } from './styles.js';\r\nimport { lockScroll } from '../core/scroll-lock.js';\r\nimport { parseBooleanAttribute } from '../core/utils.js';\r\n\r\nexport type DrawerSide = 'left' | 'right' | 'top' | 'bottom';\r\n\r\nexport interface DrawerProps {\r\n open?: boolean;\r\n side?: DrawerSide;\r\n size?: string;\r\n closeOnEscape?: boolean;\r\n closeOnOverlay?: boolean;\r\n class?: string;\r\n onClose?: () => void;\r\n}\r\n\r\nexport class UDrawer extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['open', 'side', 'size', 'close-on-escape', 'close-on-overlay', 'class'];\r\n }\r\n\r\n private _open: boolean = false;\r\n private _side: DrawerSide = 'right';\r\n private _size: string = '300px';\r\n private _closeOnEscape: boolean = true;\r\n private _closeOnOverlay: boolean = true;\r\n private _previousActive: Element | null = null;\r\n private _unlockScroll: (() => void) | null = null;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${drawerStyles}</style>\r\n<div part=\"backdrop\" class=\"drawer-backdrop\" hidden></div>\r\n<div part=\"drawer\" class=\"drawer drawer-right\" role=\"dialog\" aria-modal=\"true\" hidden>\r\n <div part=\"drawer-content\" class=\"drawer-content\">\r\n <!-- @deprecated drawer-header → use part=\"header\" -->\r\n <div part=\"drawer-header header\" class=\"drawer-header\">\r\n <slot name=\"header\"></slot>\r\n <button part=\"close-btn\" class=\"drawer-close\" aria-label=\"Close\">&times;</button>\r\n </div>\r\n <!-- @deprecated drawer-body → use part=\"body\" -->\r\n <div part=\"drawer-body body\" class=\"drawer-body\">\r\n <slot></slot>\r\n </div>\r\n <!-- @deprecated drawer-footer → use part=\"footer\" -->\r\n <div part=\"drawer-footer footer\" class=\"drawer-footer\">\r\n <slot name=\"footer\"></slot>\r\n </div>\r\n </div>\r\n</div>`;\r\n }\r\n\r\n get open(): boolean {\r\n return this._open;\r\n }\r\n set open(val: boolean) {\r\n this._open = val;\r\n if (val) this.setAttribute('open', '');\r\n else this.removeAttribute('open');\r\n }\r\n get side(): DrawerSide {\r\n return this._side;\r\n }\r\n set side(val: DrawerSide) {\r\n this.setAttribute('side', val);\r\n }\r\n\r\n openDrawer(): void {\r\n this.open = true;\r\n }\r\n closeDrawer(): void {\r\n this.open = false;\r\n this.dispatchEvent(new CustomEvent('close'));\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'open':\r\n this._open = parseBooleanAttribute(newVal, false);\r\n this._updateOpenState();\r\n break;\r\n case 'side':\r\n this._side = (newVal as DrawerSide) ?? 'right';\r\n this._sync();\r\n break;\r\n case 'size':\r\n this._size = newVal ?? '300px';\r\n break;\r\n case 'close-on-escape':\r\n this._closeOnEscape = parseBooleanAttribute(newVal, true);\r\n break;\r\n case 'close-on-overlay':\r\n this._closeOnOverlay = parseBooleanAttribute(newVal, true);\r\n break;\r\n case 'class':\r\n break;\r\n }\r\n }\r\n\r\n private _sync(): void {\r\n const drawer = this._root.querySelector('[part=\"drawer\"]')! as HTMLElement;\r\n drawer.className = `drawer drawer-${this._side} ${this.className}`.trim();\r\n const content = this._root.querySelector('[part=\"drawer-content\"]')! as HTMLElement;\r\n this._applyDrawerSize(content);\r\n this._updateOpenState();\r\n }\r\n\r\n private _applyDrawerSize(content: HTMLElement): void {\r\n const isMobile = window.innerWidth < 640;\r\n const isVertical = this._side === 'top' || this._side === 'bottom';\r\n\r\n if (isMobile) {\r\n // On mobile, side drawers take almost full width/height\r\n if (isVertical) {\r\n content.style.height = this._size;\r\n content.style.maxHeight = `${window.innerHeight - 16}px`;\r\n content.style.width = '100%';\r\n } else {\r\n content.style.width = `${Math.min(parseInt(this._size) || 300, window.innerWidth - 16)}px`;\r\n content.style.height = '100%';\r\n }\r\n } else {\r\n if (isVertical) {\r\n content.style.height = this._size;\r\n content.style.width = '100%';\r\n } else {\r\n content.style.width = this._size;\r\n content.style.height = '100%';\r\n }\r\n }\r\n }\r\n\r\n private _updateOpenState(): void {\r\n const backdrop = this._root.querySelector('[part=\"backdrop\"]')! as HTMLElement;\r\n const drawer = this._root.querySelector('[part=\"drawer\"]')! as HTMLElement;\r\n const content = this._root.querySelector('[part=\"drawer-content\"]')! as HTMLElement;\r\n\r\n if (this._open) {\r\n this._previousActive = document.activeElement;\r\n backdrop.removeAttribute('hidden');\r\n drawer.removeAttribute('hidden');\r\n this._applyDrawerSize(content);\r\n this._unlockScroll = lockScroll();\r\n // Force a synchronous layout so the browser captures the initial\r\n // off-screen transform (translateX/Y(±100%)) before drawer-open\r\n // overrides it. Without this, the CSS transition has no start\r\n // point and the drawer appears to enter from center.\r\n void drawer.offsetHeight;\r\n drawer.classList.add('drawer-open');\r\n this._focusFirst();\r\n } else {\r\n drawer.classList.remove('drawer-open');\r\n backdrop.setAttribute('hidden', '');\r\n drawer.setAttribute('hidden', '');\r\n if (this._unlockScroll) { this._unlockScroll(); this._unlockScroll = null; }\r\n if (this._previousActive && (this._previousActive as HTMLElement).focus) {\r\n (this._previousActive as HTMLElement).focus();\r\n this._previousActive = null;\r\n }\r\n }\r\n }\r\n\r\n private _focusFirst(): void {\r\n const focusable = this._root.querySelectorAll(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\r\n );\r\n if (focusable.length > 0) {\r\n (focusable[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n _mount(): void {\r\n const drawer = this._root.querySelector('[part=\"drawer\"]')!;\r\n const backdrop = this._root.querySelector('[part=\"backdrop\"]')!;\r\n const closeBtn = this._root.querySelector('[part=\"close-btn\"]')!;\r\n\r\n closeBtn.addEventListener('click', () => this.closeDrawer());\r\n\r\n drawer.addEventListener('keydown', (e: Event) => {\r\n const ke = e as KeyboardEvent;\r\n if (ke.key === 'Escape' && this._closeOnEscape) this.closeDrawer();\r\n if (ke.key === 'Tab') {\r\n const focusable = Array.from(\r\n this._root.querySelectorAll(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\r\n ),\r\n ) as HTMLElement[];\r\n if (focusable.length === 0) {\r\n e.preventDefault();\r\n return;\r\n }\r\n const first = focusable[0];\r\n const last = focusable[focusable.length - 1];\r\n if (ke.shiftKey && document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!ke.shiftKey && document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n });\r\n\r\n backdrop.addEventListener('click', () => {\r\n if (this._closeOnOverlay) this.closeDrawer();\r\n });\r\n\r\n window.addEventListener('resize', () => {\r\n if (this._open) {\r\n const content = this._root.querySelector('[part=\"drawer-content\"]')! as HTMLElement;\r\n this._applyDrawerSize(content);\r\n }\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { popoverStyles } from './styles.js';\r\nimport { computePosition } from '../core/position.js';\r\nimport type { Placement } from '../core/position.js';\r\n\r\nexport type PopoverPlacement = Placement;\r\n\r\nexport interface PopoverProps {\r\n open?: boolean;\r\n placement?: PopoverPlacement;\r\n offset?: number;\r\n closeOnEscape?: boolean;\r\n closeOnOutsideClick?: boolean;\r\n class?: string;\r\n onClose?: () => void;\r\n}\r\n\r\nexport class UPopover extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['open', 'placement', 'offset', 'close-on-escape', 'close-on-outside-click', 'class'];\r\n }\r\n\r\n private _open: boolean = false;\r\n private _placement: PopoverPlacement = 'bottom';\r\n private _offset: number = 8;\r\n private _closeOnEscape: boolean = true;\r\n private _closeOnOutsideClick: boolean = true;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${popoverStyles}</style>\r\n<div part=\"trigger\" class=\"popover-trigger\">\r\n <slot name=\"trigger\"></slot>\r\n</div>\r\n<div part=\"popover\" class=\"popover\" role=\"dialog\" hidden>\r\n <div part=\"arrow\" class=\"popover-arrow\"></div>\r\n <div part=\"content\" class=\"popover-content\">\r\n <slot></slot>\r\n </div>\r\n</div>`;\r\n }\r\n\r\n get open(): boolean {\r\n return this._open;\r\n }\r\n set open(val: boolean) {\r\n this._open = val;\r\n if (val) this.setAttribute('open', '');\r\n else this.removeAttribute('open');\r\n }\r\n get placement(): PopoverPlacement {\r\n return this._placement;\r\n }\r\n set placement(val: PopoverPlacement) {\r\n this.setAttribute('placement', val);\r\n }\r\n\r\n openPopover(): void {\r\n this._open = true;\r\n this.setAttribute('open', '');\r\n }\r\n\r\n closePopover(): void {\r\n this._open = false;\r\n this.removeAttribute('open');\r\n }\r\n\r\n toggle(): void {\r\n if (this._open) this.closePopover();\r\n else this.openPopover();\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'open':\r\n this._open = newVal !== null;\r\n this._updateOpenState();\r\n break;\r\n case 'placement':\r\n this._placement = (newVal as PopoverPlacement) ?? 'bottom';\r\n break;\r\n case 'offset':\r\n this._offset = Number(newVal) || 8;\r\n break;\r\n case 'close-on-escape':\r\n this._closeOnEscape = newVal !== null;\r\n break;\r\n case 'close-on-outside-click':\r\n this._closeOnOutsideClick = newVal !== null;\r\n break;\r\n case 'class':\r\n this._sync();\r\n break;\r\n }\r\n }\r\n\r\n private _sync(): void {\r\n const popoverEl = this._root.querySelector('[part=\"popover\"]')!;\r\n popoverEl.className = `popover ${this.className}`.trim();\r\n }\r\n\r\n private _updateOpenState(): void {\r\n const popover = this._root.querySelector('[part=\"popover\"]')! as HTMLElement;\r\n if (this._open) {\r\n popover.removeAttribute('hidden');\r\n requestAnimationFrame(() => this._position());\r\n this.dispatchEvent(new CustomEvent('u-popover-open', { bubbles: true, composed: true }));\r\n } else {\r\n popover.setAttribute('hidden', '');\r\n this.dispatchEvent(new CustomEvent('u-popover-close', { bubbles: true, composed: true }));\r\n }\r\n }\r\n\r\n private _position(): void {\r\n const popover = this._root.querySelector('[part=\"popover\"]')! as HTMLElement;\r\n const trigger = this._root.querySelector('[part=\"trigger\"]')! as HTMLElement;\r\n\r\n const result = computePosition(\r\n trigger.getBoundingClientRect(),\r\n { width: popover.offsetWidth || 0, height: popover.offsetHeight || 0 },\r\n { placement: this._placement, offset: this._offset, flip: true },\r\n );\r\n\r\n const arrow = this._root.querySelector('[part=\"arrow\"]')! as HTMLElement;\r\n const resultBase = result.placement.split('-')[0];\r\n arrow.className = `popover-arrow arrow-${resultBase}`;\r\n\r\n popover.style.position = 'fixed';\r\n popover.style.top = `${result.top}px`;\r\n popover.style.left = `${result.left}px`;\r\n }\r\n\r\n private _handleOutsideClick = (e: MouseEvent): void => {\r\n if (!this._open || !this._closeOnOutsideClick) return;\r\n const path = e.composedPath();\r\n if (!path.includes(this)) {\r\n this.closePopover();\r\n }\r\n };\r\n\r\n private _handleEscape = (e: KeyboardEvent): void => {\r\n if (this._open && this._closeOnEscape && e.key === 'Escape') {\r\n this.closePopover();\r\n }\r\n };\r\n\r\n _mount(): void {\r\n const triggerSlot = this._root.querySelector('[part=\"trigger\"]')!;\r\n triggerSlot.addEventListener('click', () => this.toggle());\r\n\r\n document.addEventListener('pointerdown', this._handleOutsideClick);\r\n document.addEventListener('keydown', this._handleEscape);\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { dropdownStyles } from './styles.js';\r\nimport { computePosition } from '../core/position.js';\r\nimport type { Placement } from '../core/position.js';\r\n\r\nexport type DropdownPlacement = Placement;\r\n\r\nexport interface DropdownItem {\r\n label: string;\r\n value: string;\r\n disabled?: boolean;\r\n divider?: boolean;\r\n icon?: string;\r\n description?: string;\r\n shortcut?: string;\r\n group?: string;\r\n}\r\n\r\nexport interface DropdownGroup {\r\n label: string;\r\n items: DropdownItem[];\r\n}\r\n\r\nexport interface DropdownProps {\r\n open?: boolean;\r\n placement?: DropdownPlacement;\r\n items?: DropdownItem[];\r\n value?: string;\r\n class?: string;\r\n onChange?: (value: string) => void;\r\n}\r\n\r\nconst GROUP_HEADING_CLASS = 'dropdown-group-label';\r\nconst ITEM_CLASS = 'dropdown-item';\r\nconst SELECTED_CLASS = 'selected';\r\n\r\nexport class UDropdown extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['open', 'placement', 'value', 'class'];\r\n }\r\n\r\n private _open: boolean = false;\r\n private _placement: DropdownPlacement = 'bottom-start';\r\n private _items: DropdownItem[] = [];\r\n private _value: string = '';\r\n private _activeIndex: number = -1;\r\n private _menuEl!: HTMLElement;\r\n private _itemsContainer!: HTMLElement;\r\n private _triggerEl!: HTMLElement;\r\n private _itemElements: HTMLElement[] = [];\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${dropdownStyles}</style>\r\n<div part=\"trigger\" class=\"dropdown-trigger\">\r\n <slot name=\"trigger\"></slot>\r\n</div>\r\n<div part=\"menu\" class=\"dropdown-menu\" role=\"listbox\" hidden tabindex=\"-1\">\r\n <div part=\"items\" class=\"dropdown-items\"></div>\r\n</div>`;\r\n this._menuEl = this._root.querySelector('[part=\"menu\"]')! as HTMLElement;\r\n this._itemsContainer = this._root.querySelector('[part=\"items\"]')! as HTMLElement;\r\n this._triggerEl = this._root.querySelector('[part=\"trigger\"]')! as HTMLElement;\r\n }\r\n\r\n get open(): boolean { return this._open; }\r\n set open(val: boolean) {\r\n this._open = val;\r\n if (val) this.setAttribute('open', '');\r\n else this.removeAttribute('open');\r\n }\r\n get items(): DropdownItem[] { return this._items; }\r\n set items(val: DropdownItem[]) {\r\n this._items = val;\r\n this._renderItems();\r\n }\r\n get value(): string { return this._value; }\r\n set value(val: string) { this.setAttribute('value', val); }\r\n\r\n openDropdown(): void {\r\n this._open = true;\r\n this.setAttribute('open', '');\r\n }\r\n\r\n closeDropdown(): void {\r\n this._open = false;\r\n this.removeAttribute('open');\r\n }\r\n\r\n toggle(): void {\r\n if (this._open) this.closeDropdown();\r\n else this.openDropdown();\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n this._renderItems();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'open':\r\n this._open = newVal !== null;\r\n this._updateOpenState();\r\n break;\r\n case 'placement':\r\n this._placement = (newVal as DropdownPlacement) ?? 'bottom-start';\r\n break;\r\n case 'value':\r\n this._value = newVal ?? '';\r\n this._updateSelected();\r\n break;\r\n case 'class':\r\n this._sync();\r\n break;\r\n }\r\n }\r\n\r\n private _sync(): void {\r\n const triggerEl = this._root.querySelector('[part=\"trigger\"]')!;\r\n triggerEl.className = `dropdown-trigger ${this.className}`.trim();\r\n }\r\n\r\n private _renderItems(): void {\r\n this._itemsContainer.innerHTML = '';\r\n this._itemElements = [];\r\n\r\n let lastGroup = '';\r\n for (const item of this._items) {\r\n if (item.group && item.group !== lastGroup) {\r\n lastGroup = item.group;\r\n const label = document.createElement('div');\r\n label.className = GROUP_HEADING_CLASS;\r\n label.setAttribute('part', 'group-label');\r\n label.textContent = item.group;\r\n this._itemsContainer.appendChild(label);\r\n }\r\n\r\n if (item.divider) {\r\n const div = document.createElement('div');\r\n div.className = 'dropdown-divider';\r\n div.setAttribute('part', 'divider');\r\n this._itemsContainer.appendChild(div);\r\n continue;\r\n }\r\n\r\n const btn = document.createElement('button');\r\n btn.className = ITEM_CLASS;\r\n btn.setAttribute('part', 'item');\r\n btn.setAttribute('role', 'option');\r\n btn.setAttribute('data-value', item.value);\r\n btn.disabled = item.disabled ?? false;\r\n if (item.value === this._value) btn.classList.add(SELECTED_CLASS);\r\n\r\n if (item.icon) {\r\n const iconSpan = document.createElement('span');\r\n iconSpan.className = 'dropdown-item-icon';\r\n iconSpan.setAttribute('part', 'item-icon');\r\n iconSpan.innerHTML = item.icon;\r\n btn.appendChild(iconSpan);\r\n }\r\n\r\n const textSpan = document.createElement('span');\r\n textSpan.className = 'dropdown-item-text';\r\n textSpan.setAttribute('part', 'item-text');\r\n\r\n const labelSpan = document.createElement('span');\r\n labelSpan.className = 'dropdown-item-label';\r\n labelSpan.setAttribute('part', 'item-label');\r\n labelSpan.textContent = item.label;\r\n textSpan.appendChild(labelSpan);\r\n\r\n if (item.description) {\r\n const descSpan = document.createElement('span');\r\n descSpan.className = 'dropdown-item-desc';\r\n descSpan.setAttribute('part', 'item-desc');\r\n descSpan.textContent = item.description;\r\n textSpan.appendChild(descSpan);\r\n }\r\n\r\n btn.appendChild(textSpan);\r\n\r\n if (item.shortcut) {\r\n const shortcutSpan = document.createElement('span');\r\n shortcutSpan.className = 'dropdown-item-shortcut';\r\n shortcutSpan.setAttribute('part', 'item-shortcut');\r\n shortcutSpan.textContent = item.shortcut;\r\n btn.appendChild(shortcutSpan);\r\n }\r\n\r\n this._itemsContainer.appendChild(btn);\r\n this._itemElements.push(btn);\r\n }\r\n }\r\n\r\n private _updateSelected(): void {\r\n for (const el of this._itemElements) {\r\n const val = el.getAttribute('data-value') || '';\r\n el.classList.toggle(SELECTED_CLASS, val === this._value);\r\n }\r\n }\r\n\r\n private _updateOpenState(): void {\r\n if (this._open) {\r\n this._menuEl.removeAttribute('hidden');\r\n this._menuEl.focus({ preventScroll: true });\r\n this._activeIndex = -1;\r\n requestAnimationFrame(() => this._position());\r\n } else {\r\n this._menuEl.setAttribute('hidden', '');\r\n this._activeIndex = -1;\r\n }\r\n }\r\n\r\n private _position(): void {\r\n const trigRect = this._triggerEl.getBoundingClientRect();\r\n this._menuEl.style.minWidth = `${Math.min(trigRect.width, window.innerWidth - 16)}px`;\r\n\r\n const isMobile = window.innerWidth < 640;\r\n if (isMobile) {\r\n const margin = 8;\r\n this._menuEl.style.position = 'fixed';\r\n this._menuEl.style.left = `${margin}px`;\r\n this._menuEl.style.width = `${window.innerWidth - margin * 2}px`;\r\n const spaceBelow = window.innerHeight - trigRect.bottom;\r\n const spaceAbove = trigRect.top;\r\n if (spaceBelow > 200 || spaceBelow >= spaceAbove) {\r\n this._menuEl.style.top = `${trigRect.bottom + 4}px`;\r\n this._menuEl.style.maxHeight = `${Math.min(spaceBelow - 8, 320)}px`;\r\n } else {\r\n this._menuEl.style.top = `${Math.max(8, trigRect.top - 8 - 320)}px`;\r\n this._menuEl.style.maxHeight = `${Math.min(spaceAbove - 8, 320)}px`;\r\n }\r\n return;\r\n }\r\n\r\n const result = computePosition(\r\n trigRect,\r\n { width: this._menuEl.offsetWidth || trigRect.width, height: this._menuEl.offsetHeight || 0 },\r\n { placement: this._placement, offset: 4, flip: true },\r\n );\r\n\r\n this._menuEl.style.position = 'fixed';\r\n this._menuEl.style.top = `${result.top}px`;\r\n this._menuEl.style.left = `${result.left}px`;\r\n this._menuEl.style.width = '';\r\n if (result.maxHeight) this._menuEl.style.maxHeight = `${result.maxHeight}px`;\r\n }\r\n\r\n private _getSelectableItems(): HTMLElement[] {\r\n return this._itemElements.filter((el) => !(el as HTMLButtonElement).disabled);\r\n }\r\n\r\n private _highlightItem(index: number): void {\r\n const items = this._getSelectableItems();\r\n if (items.length === 0) return;\r\n if (index < 0) index = 0;\r\n if (index >= items.length) index = items.length - 1;\r\n\r\n for (const el of this._itemElements) {\r\n el.classList.remove('dropdown-item-active');\r\n }\r\n items[index]?.classList.add('dropdown-item-active');\r\n items[index]?.focus();\r\n this._activeIndex = this._itemElements.indexOf(items[index]);\r\n }\r\n\r\n private _handleKeyDown = (e: KeyboardEvent): void => {\r\n if (!this._open) return;\r\n const selectable = this._getSelectableItems();\r\n if (selectable.length === 0) return;\r\n\r\n let handled = true;\r\n switch (e.key) {\r\n case 'ArrowDown': {\r\n e.preventDefault();\r\n const curIdx = selectable.indexOf(document.activeElement as HTMLElement);\r\n const next = (curIdx + 1) % selectable.length;\r\n this._highlightItem(this._itemElements.indexOf(selectable[next]));\r\n break;\r\n }\r\n case 'ArrowUp': {\r\n e.preventDefault();\r\n const curIdx = selectable.indexOf(document.activeElement as HTMLElement);\r\n const prev = (curIdx - 1 + selectable.length) % selectable.length;\r\n this._highlightItem(this._itemElements.indexOf(selectable[prev]));\r\n break;\r\n }\r\n case 'Home': {\r\n e.preventDefault();\r\n this._highlightItem(this._itemElements.indexOf(selectable[0]));\r\n break;\r\n }\r\n case 'End': {\r\n e.preventDefault();\r\n this._highlightItem(this._itemElements.indexOf(selectable[selectable.length - 1]));\r\n break;\r\n }\r\n case 'Enter':\r\n case ' ': {\r\n e.preventDefault();\r\n const active = this._itemElements.find((el) => el.classList.contains('dropdown-item-active'));\r\n if (active) active.click();\r\n break;\r\n }\r\n case 'Escape': {\r\n this.closeDropdown();\r\n break;\r\n }\r\n default:\r\n handled = false;\r\n }\r\n };\r\n\r\n private _handleOutsideClick = (e: PointerEvent | MouseEvent): void => {\r\n if (!this._open) return;\r\n const path = e.composedPath();\r\n if (!path.includes(this)) {\r\n this.closeDropdown();\r\n }\r\n };\r\n\r\n private _handleEscape = (e: KeyboardEvent): void => {\r\n if (this._open && e.key === 'Escape') this.closeDropdown();\r\n };\r\n\r\n _mount(): void {\r\n this._triggerEl.addEventListener('click', () => this.toggle());\r\n this._triggerEl.addEventListener('keydown', (e: Event) => {\r\n const ke = e as KeyboardEvent;\r\n if (ke.key === 'Enter' || ke.key === ' ' || ke.key === 'ArrowDown') {\r\n ke.preventDefault();\r\n this.openDropdown();\r\n }\r\n });\r\n\r\n this._menuEl.addEventListener('keydown', this._handleKeyDown);\r\n\r\n this._itemsContainer.addEventListener('click', (e: Event) => {\r\n const item = (e.target as HTMLElement).closest(`.${ITEM_CLASS}`) as HTMLElement;\r\n if (!item || (item as HTMLButtonElement).disabled) return;\r\n const val = item.getAttribute('data-value') || '';\r\n this._value = val;\r\n this.setAttribute('value', val);\r\n this.closeDropdown();\r\n this.dispatchEvent(\r\n new CustomEvent('u-dropdown-select', {\r\n detail: { value: val, label: item.textContent },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n\r\n document.addEventListener('pointerdown', this._handleOutsideClick);\r\n document.addEventListener('keydown', this._handleEscape);\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { accordionStyles } from './styles.js';\r\n\r\nexport interface AccordionProps {\r\n value?: string[];\r\n collapsible?: boolean;\r\n multiple?: boolean;\r\n class?: string;\r\n onChange?: (value: string[]) => void;\r\n}\r\n\r\nexport class UAccordion extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['collapsible', 'multiple', 'class'];\r\n }\r\n\r\n private _collapsible: boolean = true;\r\n private _multiple: boolean = false;\r\n private _value: Set<string> = new Set();\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${accordionStyles}</style><div part=\"accordion\" class=\"accordion\"><slot></slot></div>`;\r\n }\r\n\r\n get value(): string[] {\r\n return Array.from(this._value);\r\n }\r\n get collapsible(): boolean {\r\n return this._collapsible;\r\n }\r\n set collapsible(val: boolean) {\r\n this._collapsible = val;\r\n if (val) this.setAttribute('collapsible', '');\r\n else this.removeAttribute('collapsible');\r\n }\r\n get multiple(): boolean {\r\n return this._multiple;\r\n }\r\n set multiple(val: boolean) {\r\n this._multiple = val;\r\n if (val) this.setAttribute('multiple', '');\r\n else this.removeAttribute('multiple');\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n this._initItems();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'collapsible') this._collapsible = newVal !== null;\r\n else if (name === 'multiple') this._multiple = newVal !== null;\r\n else if (name === 'class') this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const accordionEl = this._root.querySelector('[part=\"accordion\"]')!;\r\n accordionEl.className = `accordion ${this.className}`.trim();\r\n }\r\n\r\n private _initItems(): void {\r\n const items = this.querySelectorAll(':scope > u-accordion-item');\r\n items.forEach((item) => {\r\n const key = item.getAttribute('data-value') || '';\r\n if (item.hasAttribute('open')) {\r\n this._value.add(key);\r\n }\r\n });\r\n }\r\n\r\n toggle(key: string): void {\r\n if (this._value.has(key)) {\r\n if (this._collapsible) {\r\n this._value.delete(key);\r\n }\r\n } else {\r\n if (!this._multiple) {\r\n this._value.clear();\r\n }\r\n this._value.add(key);\r\n }\r\n this._syncItems();\r\n this.dispatchEvent(\r\n new CustomEvent('u-accordion-change', {\r\n detail: { value: this.value },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n private _syncItems(): void {\r\n const items = this.querySelectorAll(':scope > u-accordion-item');\r\n items.forEach((item) => {\r\n const key = item.getAttribute('data-value') || '';\r\n const content = item.querySelector('[part=\"accordion-content\"]') as HTMLElement | null;\r\n if (this._value.has(key)) {\r\n item.setAttribute('open', '');\r\n if (content) content.style.height = `${content.scrollHeight}px`;\r\n } else {\r\n item.removeAttribute('open');\r\n if (content) content.style.height = '0';\r\n }\r\n });\r\n }\r\n\r\n _mount(): void {\r\n this.addEventListener('click', (e: Event) => {\r\n const header = (e.target as HTMLElement).closest('[part=\"accordion-header\"]');\r\n if (!header) return;\r\n const item = header.closest('u-accordion-item') as HTMLElement | null;\r\n if (!item) return;\r\n const key = item.getAttribute('data-value') || '';\r\n this.toggle(key);\r\n });\r\n }\r\n}\r\n\r\nexport interface AccordionItemProps {\r\n value?: string;\r\n open?: boolean;\r\n class?: string;\r\n}\r\n\r\nexport class UAccordionItem extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['value', 'open', 'class'];\r\n }\r\n\r\n private _value: string = '';\r\n private _open: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${accordionStyles}</style>\r\n<div part=\"accordion-item\" class=\"accordion-item\">\r\n <div part=\"accordion-header\" class=\"accordion-header\">\r\n <slot name=\"trigger\"><span part=\"accordion-label\"><slot></slot></span></slot>\r\n <span part=\"accordion-icon\" class=\"accordion-icon\">▾</span>\r\n </div>\r\n <div part=\"accordion-content\" class=\"accordion-content\" style=\"height:0\">\r\n <div part=\"accordion-body\" class=\"accordion-body\">\r\n <slot name=\"content\"></slot>\r\n </div>\r\n </div>\r\n</div>`;\r\n }\r\n\r\n get value(): string {\r\n return this._value;\r\n }\r\n set value(val: string) {\r\n this.setAttribute('value', val);\r\n }\r\n get open(): boolean {\r\n return this._open;\r\n }\r\n set open(val: boolean) {\r\n this._open = val;\r\n if (val) this.setAttribute('open', '');\r\n else this.removeAttribute('open');\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n if (this.hasAttribute('open')) this._open = true;\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'value') this._value = newVal ?? '';\r\n else if (name === 'open') this._open = newVal !== null;\r\n else if (name === 'class') this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const itemEl = this._root.querySelector('[part=\"accordion-item\"]')!;\r\n itemEl.className = `accordion-item ${this.className}`.trim();\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { comboboxStyles } from './styles.js';\r\nimport { computePosition } from '../core/position.js';\r\n\r\nexport interface ComboboxOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface ComboboxProps {\r\n value?: string;\r\n options?: ComboboxOption[];\r\n placeholder?: string;\r\n disabled?: boolean;\r\n filterable?: boolean;\r\n class?: string;\r\n onChange?: (value: string) => void;\r\n}\r\n\r\nconst MOBILE_BREAKPOINT = 640;\r\n\r\nexport class UCombobox extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['value', 'placeholder', 'disabled', 'filterable', 'class'];\r\n }\r\n\r\n private _value: string = '';\r\n private _options: ComboboxOption[] = [];\r\n private _placeholder: string = 'Select...';\r\n private _disabled: boolean = false;\r\n private _filterable: boolean = true;\r\n private _open: boolean = false;\r\n private _filtered: ComboboxOption[] = [];\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${comboboxStyles}</style>\r\n<div part=\"combobox\" class=\"combobox\">\r\n <div part=\"input-wrapper\" class=\"combobox-input-wrapper\">\r\n <input part=\"input\" class=\"combobox-input\" type=\"text\" autocomplete=\"off\" role=\"combobox\" aria-haspopup=\"listbox\" />\r\n <button part=\"toggle-btn\" class=\"combobox-toggle\" tabindex=\"-1\" aria-label=\"Toggle\">▾</button>\r\n </div>\r\n <div part=\"listbox\" class=\"combobox-listbox\" role=\"listbox\" hidden></div>\r\n</div>`;\r\n }\r\n\r\n get value(): string {\r\n return this._value;\r\n }\r\n set value(val: string) {\r\n this.setAttribute('value', val);\r\n }\r\n get options(): ComboboxOption[] {\r\n return this._options;\r\n }\r\n set options(val: ComboboxOption[]) {\r\n this._options = val;\r\n this._filtered = val;\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._filtered = [...this._options];\r\n this._syncInput();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n switch (name) {\r\n case 'value':\r\n this._value = newVal ?? '';\r\n this._syncInput();\r\n break;\r\n case 'placeholder':\r\n this._placeholder = newVal ?? '';\r\n break;\r\n case 'disabled':\r\n this._disabled = newVal !== null;\r\n break;\r\n case 'filterable':\r\n this._filterable = newVal !== null;\r\n break;\r\n case 'class':\r\n this._syncInput();\r\n break;\r\n }\r\n }\r\n\r\n private _syncInput(): void {\r\n const combobox = this._root.querySelector('[part=\"combobox\"]')!;\r\n combobox.className = `combobox ${this.className}`.trim();\r\n const input = this._root.querySelector('input')!;\r\n input.placeholder = this._placeholder;\r\n input.disabled = this._disabled;\r\n const match = this._options.find((o) => o.value === this._value);\r\n input.value = match ? match.label : '';\r\n }\r\n\r\n openList(): void {\r\n if (this._disabled) return;\r\n this._open = true;\r\n this._renderListbox();\r\n const listbox = this._root.querySelector('[part=\"listbox\"]')! as HTMLElement;\r\n listbox.removeAttribute('hidden');\r\n requestAnimationFrame(() => this._position());\r\n this.dispatchEvent(new CustomEvent('u-combobox-open', { bubbles: true, composed: true }));\r\n }\r\n\r\n closeList(): void {\r\n this._open = false;\r\n const listbox = this._root.querySelector('[part=\"listbox\"]')! as HTMLElement;\r\n listbox.setAttribute('hidden', '');\r\n this._syncInput();\r\n }\r\n\r\n private _renderListbox(): void {\r\n const listbox = this._root.querySelector('[part=\"listbox\"]')!;\r\n listbox.innerHTML = '';\r\n const items = this._filterable ? this._filtered : this._options;\r\n if (items.length === 0) {\r\n const empty = document.createElement('div');\r\n empty.className = 'combobox-empty';\r\n empty.setAttribute('part', 'empty');\r\n empty.textContent = 'No results';\r\n listbox.appendChild(empty);\r\n return;\r\n }\r\n for (const opt of items) {\r\n const btn = document.createElement('button');\r\n btn.className = 'combobox-option';\r\n btn.setAttribute('part', 'option');\r\n btn.setAttribute('role', 'option');\r\n btn.setAttribute('data-value', opt.value);\r\n btn.textContent = opt.label;\r\n if (opt.value === this._value) btn.classList.add('active');\r\n listbox.appendChild(btn);\r\n }\r\n }\r\n\r\n private _position(): void {\r\n const listbox = this._root.querySelector('[part=\"listbox\"]')! as HTMLElement;\r\n const wrapper = this._root.querySelector('[part=\"input-wrapper\"]')! as HTMLElement;\r\n const rect = wrapper.getBoundingClientRect();\r\n\r\n const isMobile = window.innerWidth < MOBILE_BREAKPOINT;\r\n\r\n if (isMobile) {\r\n const margin = 8;\r\n listbox.style.position = 'fixed';\r\n listbox.style.left = `${margin}px`;\r\n listbox.style.width = `${window.innerWidth - margin * 2}px`;\r\n const spaceBelow = window.innerHeight - rect.bottom;\r\n const spaceAbove = rect.top;\r\n if (spaceBelow > 200 || spaceBelow >= spaceAbove) {\r\n listbox.style.top = `${rect.bottom + 2}px`;\r\n listbox.style.maxHeight = `${Math.min(spaceBelow - 8, 240)}px`;\r\n } else {\r\n listbox.style.top = `${Math.max(8, rect.top - 242)}px`;\r\n listbox.style.maxHeight = `${Math.min(spaceAbove - 8, 240)}px`;\r\n }\r\n return;\r\n }\r\n\r\n const result = computePosition(\r\n rect,\r\n { width: listbox.offsetWidth || rect.width, height: listbox.offsetHeight || 240 },\r\n { placement: 'bottom-start', offset: 2, flip: true },\r\n );\r\n\r\n listbox.style.position = 'fixed';\r\n listbox.style.top = `${result.top}px`;\r\n listbox.style.left = `${result.left}px`;\r\n listbox.style.width = `${rect.width}px`;\r\n }\r\n\r\n private _filterOptions(query: string): void {\r\n if (!this._filterable) return;\r\n const lower = query.toLowerCase();\r\n this._filtered = this._options.filter(\r\n (o) => o.label.toLowerCase().includes(lower) || o.value.toLowerCase().includes(lower),\r\n );\r\n if (this._open) this._renderListbox();\r\n }\r\n\r\n private _select(value: string): void {\r\n this._value = value;\r\n this.setAttribute('value', value);\r\n this.closeList();\r\n this.dispatchEvent(\r\n new CustomEvent('u-combobox-select', {\r\n detail: { value },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n private _handleOutsideClick = (e: MouseEvent): void => {\r\n if (!this._open) return;\r\n const path = e.composedPath();\r\n if (!path.includes(this)) {\r\n this.closeList();\r\n }\r\n };\r\n\r\n _mount(): void {\r\n const input = this._root.querySelector('input')!;\r\n const toggleBtn = this._root.querySelector('[part=\"toggle-btn\"]')!;\r\n const listbox = this._root.querySelector('[part=\"listbox\"]')!;\r\n\r\n input.addEventListener('focus', () => this.openList());\r\n input.addEventListener('input', () => {\r\n this._filterOptions(input.value);\r\n if (!this._open) this.openList();\r\n });\r\n input.addEventListener('keydown', (e: Event) => {\r\n const ke = e as KeyboardEvent;\r\n if (ke.key === 'Escape') {\r\n this.closeList();\r\n input.blur();\r\n }\r\n if (ke.key === 'ArrowDown') {\r\n e.preventDefault();\r\n this._focusNext();\r\n }\r\n if (ke.key === 'ArrowUp') {\r\n e.preventDefault();\r\n this._focusPrev();\r\n }\r\n if (ke.key === 'Enter') {\r\n const active = listbox.querySelector(\r\n '.combobox-option:hover, .combobox-option:focus',\r\n ) as HTMLElement;\r\n if (active) {\r\n const val = active.getAttribute('data-value') || '';\r\n this._select(val);\r\n }\r\n }\r\n });\r\n\r\n toggleBtn.addEventListener('click', () => {\r\n if (this._open) this.closeList();\r\n else this.openList();\r\n });\r\n\r\n listbox.addEventListener('click', (e: Event) => {\r\n const option = (e.target as HTMLElement).closest('.combobox-option') as HTMLElement;\r\n if (!option) return;\r\n const val = option.getAttribute('data-value') || '';\r\n this._select(val);\r\n });\r\n\r\n document.addEventListener('pointerdown', this._handleOutsideClick);\r\n }\r\n\r\n private _focusNext(): void {\r\n const listbox = this._root.querySelector('[part=\"listbox\"]')!;\r\n const options = listbox.querySelectorAll('.combobox-option') as NodeListOf<HTMLElement>;\r\n const current = listbox.querySelector(':focus') as HTMLElement;\r\n const idx = Array.from(options).indexOf(current);\r\n if (idx < options.length - 1) options[idx + 1].focus();\r\n else if (options.length > 0) options[0].focus();\r\n }\r\n\r\n private _focusPrev(): void {\r\n const listbox = this._root.querySelector('[part=\"listbox\"]')!;\r\n const options = listbox.querySelectorAll('.combobox-option') as NodeListOf<HTMLElement>;\r\n const current = listbox.querySelector(':focus') as HTMLElement;\r\n const idx = Array.from(options).indexOf(current);\r\n if (idx > 0) options[idx - 1].focus();\r\n else if (options.length > 0) options[options.length - 1].focus();\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { calendarStyles } from './styles.js';\r\n\r\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\nconst MONTHS = [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December',\r\n];\r\n\r\nexport interface CalendarProps {\r\n value?: string;\r\n min?: string;\r\n max?: string;\r\n class?: string;\r\n onChange?: (value: string) => void;\r\n}\r\n\r\nexport class UCalendar extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['value', 'min', 'max', 'class'];\r\n }\r\n\r\n private _value: string = '';\r\n private _min: string = '';\r\n private _max: string = '';\r\n private _viewYear: number = new Date().getFullYear();\r\n private _viewMonth: number = new Date().getMonth();\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${calendarStyles}</style>\r\n<div part=\"calendar\" class=\"calendar\">\r\n <div part=\"header\" class=\"cal-header\">\r\n <button part=\"nav-btn\" class=\"cal-nav-btn\" data-action=\"prev\">&lsaquo;</button>\r\n <div part=\"title\" class=\"cal-title\"></div>\r\n <button part=\"nav-btn\" class=\"cal-nav-btn\" data-action=\"next\">&rsaquo;</button>\r\n </div>\r\n <div part=\"day-names\" class=\"cal-day-names\"></div>\r\n <div part=\"days-grid\" class=\"cal-days-grid\"></div>\r\n</div>`;\r\n }\r\n\r\n get value(): string {\r\n return this._value;\r\n }\r\n set value(val: string) {\r\n this.setAttribute('value', val);\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n if (this._value) {\r\n const d = new Date(this._value);\r\n if (!isNaN(d.getTime())) {\r\n this._viewYear = d.getFullYear();\r\n this._viewMonth = d.getMonth();\r\n }\r\n }\r\n this._renderDayNames();\r\n this._render();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'value') this._value = newVal ?? '';\r\n else if (name === 'min') this._min = newVal ?? '';\r\n else if (name === 'max') this._max = newVal ?? '';\r\n else if (name === 'class') { this._sync(); return; }\r\n this._render();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"calendar\"]')!;\r\n el.className = `calendar ${this.className}`.trim();\r\n }\r\n\r\n private _renderDayNames(): void {\r\n const container = this._root.querySelector('[part=\"day-names\"]')!;\r\n container.innerHTML = DAYS.map((d) => `<span part=\"day-name\" class=\"cal-day-name\">${d}</span>`).join('');\r\n }\r\n\r\n private _render(): void {\r\n const title = this._root.querySelector('[part=\"title\"]')!;\r\n title.textContent = `${MONTHS[this._viewMonth]} ${this._viewYear}`;\r\n\r\n const grid = this._root.querySelector('[part=\"days-grid\"]')!;\r\n grid.innerHTML = '';\r\n\r\n const firstDay = new Date(this._viewYear, this._viewMonth, 1).getDay();\r\n const daysInMonth = new Date(this._viewYear, this._viewMonth + 1, 0).getDate();\r\n const today = new Date();\r\n const todayStr = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`;\r\n\r\n for (let i = 0; i < firstDay; i++) {\r\n const empty = document.createElement('span');\r\n empty.className = 'cal-day cal-day-empty';\r\n empty.setAttribute('part', 'day-empty');\r\n grid.appendChild(empty);\r\n }\r\n\r\n for (let d = 1; d <= daysInMonth; d++) {\r\n const dayEl = document.createElement('button');\r\n dayEl.className = 'cal-day';\r\n dayEl.setAttribute('part', 'day');\r\n dayEl.textContent = String(d);\r\n\r\n const dateStr = `${this._viewYear}-${String(this._viewMonth + 1).padStart(2, '0')}-${String(d).padStart(2, '0')}`;\r\n dayEl.setAttribute('data-date', dateStr);\r\n\r\n if (dateStr === todayStr) dayEl.classList.add('cal-today');\r\n if (dateStr === this._value) dayEl.classList.add('cal-selected');\r\n\r\n if (this._min && dateStr < this._min) dayEl.classList.add('cal-disabled');\r\n if (this._max && dateStr > this._max) dayEl.classList.add('cal-disabled');\r\n\r\n grid.appendChild(dayEl);\r\n }\r\n }\r\n\r\n private _navigate(dir: number): void {\r\n this._viewMonth += dir;\r\n if (this._viewMonth < 0) {\r\n this._viewMonth = 11;\r\n this._viewYear--;\r\n }\r\n if (this._viewMonth > 11) {\r\n this._viewMonth = 0;\r\n this._viewYear++;\r\n }\r\n this._render();\r\n }\r\n\r\n goToDate(year: number, month: number): void {\r\n this._viewYear = year;\r\n this._viewMonth = month;\r\n this._render();\r\n }\r\n\r\n _mount(): void {\r\n const header = this._root.querySelector('[part=\"header\"]')!;\r\n header.addEventListener('click', (e: Event) => {\r\n const btn = (e.target as HTMLElement).closest('[data-action]') as HTMLElement;\r\n if (!btn) return;\r\n this._navigate(btn.getAttribute('data-action') === 'next' ? 1 : -1);\r\n });\r\n\r\n const grid = this._root.querySelector('[part=\"days-grid\"]')!;\r\n grid.addEventListener('click', (e: Event) => {\r\n const day = (e.target as HTMLElement).closest('.cal-day') as HTMLElement;\r\n if (!day || day.classList.contains('cal-empty') || day.classList.contains('cal-disabled'))\r\n return;\r\n const date = day.getAttribute('data-date') || '';\r\n this._value = date;\r\n this.setAttribute('value', date);\r\n this._render();\r\n this.dispatchEvent(\r\n new CustomEvent('u-calendar-change', {\r\n detail: { value: date },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { dataTableStyles } from './styles.js';\r\n\r\nexport interface DataTableColumn {\r\n key: string;\r\n label: string;\r\n sortable?: boolean;\r\n filterable?: boolean;\r\n width?: string;\r\n render?: (value: any, row: any, index: number) => string;\r\n}\r\n\r\nexport interface DataTableProps {\r\n columns?: DataTableColumn[];\r\n rows?: Record<string, any>[];\r\n pageSize?: number;\r\n sortable?: boolean;\r\n selectable?: boolean;\r\n class?: string;\r\n onSort?: (key: string, dir: string) => void;\r\n onSelect?: (selected: string[]) => void;\r\n}\r\n\r\nexport class UDataTable extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['page-size', 'sortable', 'selectable', 'class'];\r\n }\r\n\r\n private _columns: DataTableColumn[] = [];\r\n private _rows: Record<string, any>[] = [];\r\n private _pageSize: number = 10;\r\n private _sortable: boolean = false;\r\n private _selectable: boolean = false;\r\n private _sortKey: string = '';\r\n private _sortDir: 'asc' | 'desc' = 'asc';\r\n private _page: number = 1;\r\n private _selected: Set<string> = new Set();\r\n private _filterText: string = '';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${dataTableStyles}</style>\r\n<div part=\"data-table\" class=\"data-table\">\r\n <div part=\"toolbar\" class=\"dt-toolbar\">\r\n <div part=\"search\" class=\"dt-search\">\r\n <input part=\"search-input\" class=\"dt-search-input\" type=\"text\" placeholder=\"Filter...\" />\r\n </div>\r\n <div part=\"page-info\" class=\"dt-page-info\"></div>\r\n </div>\r\n <div part=\"table-wrapper\" class=\"dt-table-wrapper\">\r\n <table part=\"table\" class=\"dt-table\">\r\n <thead><tr part=\"header-row\"></tr></thead>\r\n <tbody part=\"tbody\"></tbody>\r\n </table>\r\n </div>\r\n <div part=\"pagination\" class=\"dt-pagination\">\r\n <button part=\"page-btn\" class=\"dt-page-btn\" data-page=\"prev\">&lsaquo; Prev</button>\r\n <div part=\"page-numbers\" class=\"dt-page-numbers\"></div>\r\n <button part=\"page-btn\" class=\"dt-page-btn\" data-page=\"next\">Next &rsaquo;</button>\r\n </div>\r\n</div>`;\r\n }\r\n\r\n get columns(): DataTableColumn[] {\r\n return this._columns;\r\n }\r\n set columns(val: DataTableColumn[]) {\r\n this._columns = val;\r\n this._render();\r\n }\r\n get rows(): Record<string, any>[] {\r\n return this._rows;\r\n }\r\n set rows(val: Record<string, any>[]) {\r\n this._rows = val;\r\n this._render();\r\n }\r\n get pageSize(): number {\r\n return this._pageSize;\r\n }\r\n set pageSize(val: number) {\r\n this.setAttribute('page-size', String(val));\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'page-size') this._pageSize = Number(newVal) || 10;\r\n else if (name === 'sortable') this._sortable = newVal !== null;\r\n else if (name === 'selectable') this._selectable = newVal !== null;\r\n else if (name === 'class') return;\r\n this._render();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"data-table\"]')!;\r\n el.className = `data-table ${this.className}`.trim();\r\n }\r\n\r\n private _getProcessedData(): Record<string, any>[] {\r\n let data = [...this._rows];\r\n if (this._filterText) {\r\n const lower = this._filterText.toLowerCase();\r\n data = data.filter((row) =>\r\n this._columns.some((col) =>\r\n String(row[col.key] ?? '')\r\n .toLowerCase()\r\n .includes(lower),\r\n ),\r\n );\r\n }\r\n if (this._sortKey) {\r\n data.sort((a, b) => {\r\n const va = a[this._sortKey],\r\n vb = b[this._sortKey];\r\n if (va < vb) return this._sortDir === 'asc' ? -1 : 1;\r\n if (va > vb) return this._sortDir === 'asc' ? 1 : -1;\r\n return 0;\r\n });\r\n }\r\n return data;\r\n }\r\n\r\n private _getPageData(): Record<string, any>[] {\r\n const data = this._getProcessedData();\r\n const start = (this._page - 1) * this._pageSize;\r\n return data.slice(start, start + this._pageSize);\r\n }\r\n\r\n private _render(): void {\r\n this._renderHeader();\r\n this._renderBody();\r\n this._renderPagination();\r\n }\r\n\r\n private _renderHeader(): void {\r\n const row = this._root.querySelector('[part=\"header-row\"]')!;\r\n row.innerHTML = '';\r\n if (this._selectable) {\r\n const th = document.createElement('th');\r\n th.className = 'dt-col-check';\r\n th.setAttribute('part', 'header-checkbox');\r\n const cb = document.createElement('input');\r\n cb.type = 'checkbox';\r\n cb.setAttribute('part', 'select-all');\r\n cb.addEventListener('change', () => {\r\n const data = this._getPageData();\r\n if (cb.checked)\r\n data.forEach((r) => this._selected.add(r.id ?? r._key ?? JSON.stringify(r)));\r\n else {\r\n this._selected.clear();\r\n }\r\n this._renderBody();\r\n this._dispatchSelect();\r\n });\r\n th.appendChild(cb);\r\n row.appendChild(th);\r\n }\r\n for (const col of this._columns) {\r\n const th = document.createElement('th');\r\n th.textContent = col.label;\r\n if (col.width) th.style.width = col.width;\r\n if (this._sortable && col.sortable) {\r\n th.classList.add('dt-sortable');\r\n th.setAttribute('data-key', col.key);\r\n if (col.key === this._sortKey) {\r\n th.classList.add('dt-sorted');\r\n th.textContent = `${col.label} ${this._sortDir === 'asc' ? '▲' : '▼'}`;\r\n }\r\n }\r\n row.appendChild(th);\r\n }\r\n }\r\n\r\n private _renderBody(): void {\r\n const tbody = this._root.querySelector('[part=\"tbody\"]')!;\r\n tbody.innerHTML = '';\r\n const data = this._getPageData();\r\n if (data.length === 0) {\r\n const tr = document.createElement('tr');\r\n const td = document.createElement('td');\r\n td.className = 'dt-empty';\r\n td.setAttribute('part', 'empty');\r\n td.colSpan = this._columns.length + (this._selectable ? 1 : 0);\r\n td.textContent = 'No data';\r\n tr.appendChild(td);\r\n tbody.appendChild(tr);\r\n return;\r\n }\r\n for (let i = 0; i < data.length; i++) {\r\n const row = data[i];\r\n const tr = document.createElement('tr');\r\n tr.setAttribute('part', 'row');\r\n const rowKey = row.id ?? row._key ?? String(i);\r\n if (this._selected.has(rowKey)) tr.classList.add('dt-row-selected');\r\n if (this._selectable) {\r\n const td = document.createElement('td');\r\n const cb = document.createElement('input');\r\n cb.type = 'checkbox';\r\n cb.setAttribute('part', 'select-row');\r\n cb.checked = this._selected.has(rowKey);\r\n cb.addEventListener('change', () => {\r\n if (cb.checked) this._selected.add(rowKey);\r\n else this._selected.delete(rowKey);\r\n tr.classList.toggle('dt-row-selected', cb.checked);\r\n this._dispatchSelect();\r\n });\r\n td.appendChild(cb);\r\n tr.appendChild(td);\r\n }\r\n for (const col of this._columns) {\r\n const td = document.createElement('td');\r\n td.setAttribute('part', 'cell');\r\n const val = row[col.key];\r\n td.innerHTML = col.render ? col.render(val, row, i) : String(val ?? '');\r\n tr.appendChild(td);\r\n }\r\n tbody.appendChild(tr);\r\n }\r\n }\r\n\r\n private _renderPagination(): void {\r\n const total = this._getProcessedData().length;\r\n const totalPages = Math.max(1, Math.ceil(total / this._pageSize));\r\n if (this._page > totalPages) this._page = totalPages;\r\n\r\n const info = this._root.querySelector('[part=\"page-info\"]')!;\r\n info.textContent = `${total} items`;\r\n\r\n const numbers = this._root.querySelector('[part=\"page-numbers\"]')!;\r\n numbers.innerHTML = '';\r\n for (let i = 1; i <= totalPages; i++) {\r\n const btn = document.createElement('button');\r\n btn.className = `dt-page-num ${i === this._page ? 'active' : ''}`;\r\n btn.setAttribute('part', 'page-num');\r\n btn.textContent = String(i);\r\n btn.addEventListener('click', () => {\r\n this._page = i;\r\n this._render();\r\n });\r\n numbers.appendChild(btn);\r\n }\r\n }\r\n\r\n private _dispatchSelect(): void {\r\n this.dispatchEvent(\r\n new CustomEvent('u-datatable-select', {\r\n detail: { selected: Array.from(this._selected) },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n _mount(): void {\r\n const header = this._root.querySelector('[part=\"header-row\"]')!;\r\n header.addEventListener('click', (e: Event) => {\r\n const th = (e.target as HTMLElement).closest('.dt-sortable') as HTMLElement;\r\n if (!th) return;\r\n const key = th.getAttribute('data-key') || '';\r\n if (this._sortKey === key) {\r\n this._sortDir = this._sortDir === 'asc' ? 'desc' : 'asc';\r\n } else {\r\n this._sortKey = key;\r\n this._sortDir = 'asc';\r\n }\r\n this._render();\r\n this.dispatchEvent(\r\n new CustomEvent('u-datatable-sort', {\r\n detail: { key: this._sortKey, dir: this._sortDir },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n\r\n const searchInput = this._root.querySelector('[part=\"search-input\"]')! as HTMLInputElement;\r\n searchInput.addEventListener('input', () => {\r\n this._filterText = searchInput.value;\r\n this._page = 1;\r\n this._render();\r\n });\r\n\r\n const pagination = this._root.querySelector('[part=\"pagination\"]')!;\r\n pagination.addEventListener('click', (e: Event) => {\r\n const btn = (e.target as HTMLElement).closest('[data-page]') as HTMLElement;\r\n if (!btn) return;\r\n const totalPages = Math.max(1, Math.ceil(this._getProcessedData().length / this._pageSize));\r\n if (btn.getAttribute('data-page') === 'next' && this._page < totalPages) {\r\n this._page++;\r\n this._render();\r\n }\r\n if (btn.getAttribute('data-page') === 'prev' && this._page > 1) {\r\n this._page--;\r\n this._render();\r\n }\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { commandPaletteStyles } from './styles.js';\r\n\r\nexport interface CommandItem {\r\n id: string;\r\n label: string;\r\n description?: string;\r\n shortcut?: string;\r\n icon?: string;\r\n group?: string;\r\n}\r\n\r\nexport interface CommandPaletteProps {\r\n open?: boolean;\r\n items?: CommandItem[];\r\n placeholder?: string;\r\n shortcut?: string;\r\n class?: string;\r\n onSelect?: (id: string) => void;\r\n onClose?: () => void;\r\n}\r\n\r\nexport class UCommandPalette extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['open', 'placeholder', 'shortcut', 'class'];\r\n }\r\n\r\n private _open: boolean = false;\r\n private _items: CommandItem[] = [];\r\n private _placeholder: string = 'Search commands...';\r\n private _shortcut: string = 'Ctrl+K';\r\n private _filtered: CommandItem[] = [];\r\n private _selectedIndex: number = -1;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${commandPaletteStyles}</style>\r\n<div part=\"backdrop\" class=\"cp-backdrop\" hidden></div>\r\n<div part=\"dialog\" class=\"cp-dialog\" role=\"dialog\" aria-modal=\"true\" hidden>\r\n <div part=\"dialog-inner\" class=\"cp-dialog-inner\">\r\n <div part=\"search-wrapper\" class=\"cp-search-wrapper\">\r\n <span part=\"search-icon\" class=\"cp-search-icon\">&#128269;</span>\r\n <input part=\"search-input\" class=\"cp-search-input\" type=\"text\" role=\"combobox\" aria-expanded=\"true\" aria-haspopup=\"listbox\" />\r\n <kbd part=\"shortcut-hint\" class=\"cp-shortcut-hint\"></kbd>\r\n </div>\r\n <div part=\"results\" class=\"cp-results\" role=\"listbox\"></div>\r\n <div part=\"footer\" class=\"cp-footer\">\r\n <span>&uarr;&darr; Navigate</span>\r\n <span>&crarr; Select</span>\r\n <span>Esc Close</span>\r\n </div>\r\n </div>\r\n</div>`;\r\n }\r\n\r\n get open(): boolean {\r\n return this._open;\r\n }\r\n set open(val: boolean) {\r\n this._open = val;\r\n if (val) this.setAttribute('open', '');\r\n else this.removeAttribute('open');\r\n }\r\n get items(): CommandItem[] {\r\n return this._items;\r\n }\r\n set items(val: CommandItem[]) {\r\n this._items = val;\r\n this._filtered = [...val];\r\n }\r\n\r\n openPalette(): void {\r\n this.open = true;\r\n }\r\n closePalette(): void {\r\n this.open = false;\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._filtered = [...this._items];\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'open') {\r\n this._open = newVal !== null;\r\n this._updateOpenState();\r\n } else if (name === 'placeholder') {\r\n this._placeholder = newVal ?? '';\r\n const input = this._root.querySelector('[part=\"search-input\"]') as HTMLInputElement | null;\r\n if (input) input.placeholder = this._placeholder;\r\n } else if (name === 'shortcut') {\r\n this._shortcut = newVal ?? 'Ctrl+K';\r\n this._sync();\r\n } else if (name === 'class') {\r\n this._sync();\r\n }\r\n }\r\n\r\n private _sync(): void {\r\n const dialog = this._root.querySelector('[part=\"dialog\"]')! as HTMLElement;\r\n dialog.className = `cp-dialog ${this.className}`.trim();\r\n const hint = this._root.querySelector('[part=\"shortcut-hint\"]')!;\r\n hint.textContent = this._shortcut;\r\n const input = this._root.querySelector('[part=\"search-input\"]') as HTMLInputElement;\r\n input.placeholder = this._placeholder;\r\n }\r\n\r\n private _updateOpenState(): void {\r\n const backdrop = this._root.querySelector('[part=\"backdrop\"]')! as HTMLElement;\r\n const dialog = this._root.querySelector('[part=\"dialog\"]')! as HTMLElement;\r\n const input = this._root.querySelector('[part=\"search-input\"]') as HTMLInputElement;\r\n\r\n if (this._open) {\r\n backdrop.removeAttribute('hidden');\r\n dialog.removeAttribute('hidden');\r\n this._selectedIndex = -1;\r\n this._filtered = [...this._items];\r\n this._positionDialog();\r\n\r\n // Scroll lock on mobile\r\n if (window.innerWidth < 640) {\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n this._renderResults();\r\n requestAnimationFrame(() => input.focus());\r\n this.dispatchEvent(\r\n new CustomEvent('u-command-palette-open', { bubbles: true, composed: true }),\r\n );\r\n } else {\r\n backdrop.setAttribute('hidden', '');\r\n dialog.setAttribute('hidden', '');\r\n document.body.style.overflow = '';\r\n input.value = '';\r\n this.dispatchEvent(\r\n new CustomEvent('u-command-palette-close', { bubbles: true, composed: true }),\r\n );\r\n }\r\n }\r\n\r\n private _positionDialog(): void {\r\n const dialog = this._root.querySelector('[part=\"dialog\"]')! as HTMLElement;\r\n const isMobile = window.innerWidth < 640;\r\n\r\n if (isMobile) {\r\n dialog.style.position = 'fixed';\r\n dialog.style.top = '16px';\r\n dialog.style.left = '16px';\r\n dialog.style.right = '16px';\r\n dialog.style.width = 'auto';\r\n dialog.style.transform = 'none';\r\n const results = this._root.querySelector('[part=\"results\"]')! as HTMLElement;\r\n results.style.maxHeight = `${window.innerHeight - 200}px`;\r\n } else {\r\n dialog.style.position = 'fixed';\r\n dialog.style.top = '20%';\r\n dialog.style.left = '50%';\r\n dialog.style.transform = 'translateX(-50%)';\r\n dialog.style.width = '540px';\r\n dialog.style.right = 'auto';\r\n const results = this._root.querySelector('[part=\"results\"]')! as HTMLElement;\r\n results.style.maxHeight = '320px';\r\n }\r\n }\r\n\r\n private _renderResults(): void {\r\n const container = this._root.querySelector('[part=\"results\"]')!;\r\n container.innerHTML = '';\r\n\r\n if (this._filtered.length === 0) {\r\n const div = document.createElement('div');\r\n div.className = 'cp-empty';\r\n div.setAttribute('part', 'empty');\r\n div.textContent = 'No results found';\r\n container.appendChild(div);\r\n return;\r\n }\r\n\r\n const groups = new Map<string, CommandItem[]>();\r\n for (const item of this._filtered) {\r\n const group = item.group || 'General';\r\n if (!groups.has(group)) groups.set(group, []);\r\n groups.get(group)!.push(item);\r\n }\r\n\r\n let idx = 0;\r\n for (const [groupName, groupItems] of groups) {\r\n const groupEl = document.createElement('div');\r\n groupEl.className = 'cp-group';\r\n groupEl.setAttribute('part', 'group');\r\n const label = document.createElement('div');\r\n label.className = 'cp-group-label';\r\n label.setAttribute('part', 'group-label');\r\n label.textContent = groupName;\r\n groupEl.appendChild(label);\r\n\r\n for (const item of groupItems) {\r\n const btn = document.createElement('button');\r\n btn.className = 'cp-item';\r\n btn.setAttribute('part', 'item');\r\n btn.setAttribute('role', 'option');\r\n btn.setAttribute('data-id', item.id);\r\n btn.setAttribute('data-index', String(idx));\r\n if (idx === this._selectedIndex) btn.classList.add('cp-item-active');\r\n\r\n const labelSpan = document.createElement('span');\r\n labelSpan.className = 'cp-item-label';\r\n labelSpan.setAttribute('part', 'item-label');\r\n labelSpan.textContent = item.label;\r\n btn.appendChild(labelSpan);\r\n\r\n if (item.description) {\r\n const desc = document.createElement('span');\r\n desc.className = 'cp-item-desc';\r\n desc.setAttribute('part', 'item-desc');\r\n desc.textContent = item.description;\r\n btn.appendChild(desc);\r\n }\r\n\r\n if (item.shortcut) {\r\n const kbd = document.createElement('kbd');\r\n kbd.className = 'cp-item-shortcut';\r\n kbd.setAttribute('part', 'item-shortcut');\r\n kbd.textContent = item.shortcut;\r\n btn.appendChild(kbd);\r\n }\r\n\r\n groupEl.appendChild(btn);\r\n idx++;\r\n }\r\n container.appendChild(groupEl);\r\n }\r\n }\r\n\r\n private _selectActive(): void {\r\n const container = this._root.querySelector('[part=\"results\"]')!;\r\n const items = container.querySelectorAll('.cp-item');\r\n if (this._selectedIndex >= 0 && this._selectedIndex < items.length) {\r\n const btn = items[this._selectedIndex] as HTMLElement;\r\n const id = btn.getAttribute('data-id') || '';\r\n this._select(id);\r\n }\r\n }\r\n\r\n private _select(id: string): void {\r\n this.closePalette();\r\n this.dispatchEvent(\r\n new CustomEvent('u-command-select', {\r\n detail: { id },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n private _handleOutsideClick = (e: MouseEvent): void => {\r\n if (!this._open) return;\r\n const path = e.composedPath();\r\n const dialog = this._root.querySelector('[part=\"dialog\"]')!;\r\n if (!path.includes(dialog)) {\r\n this.closePalette();\r\n }\r\n };\r\n\r\n _mount(): void {\r\n const input = this._root.querySelector('[part=\"search-input\"]')! as HTMLInputElement;\r\n const results = this._root.querySelector('[part=\"results\"]')!;\r\n\r\n input.addEventListener('input', () => {\r\n const query = input.value.toLowerCase();\r\n this._filtered = this._items.filter(\r\n (item) =>\r\n item.label.toLowerCase().includes(query) ||\r\n (item.description && item.description.toLowerCase().includes(query)),\r\n );\r\n this._selectedIndex = -1;\r\n this._renderResults();\r\n });\r\n\r\n input.addEventListener('keydown', (e: Event) => {\r\n const ke = e as KeyboardEvent;\r\n const items = results.querySelectorAll('.cp-item');\r\n\r\n if (ke.key === 'ArrowDown') {\r\n e.preventDefault();\r\n this._selectedIndex = Math.min(this._selectedIndex + 1, items.length - 1);\r\n this._renderResults();\r\n if (items[this._selectedIndex])\r\n (items[this._selectedIndex] as HTMLElement).scrollIntoView({ block: 'nearest' });\r\n } else if (ke.key === 'ArrowUp') {\r\n e.preventDefault();\r\n this._selectedIndex = Math.max(this._selectedIndex - 1, -1);\r\n this._renderResults();\r\n if (items[this._selectedIndex])\r\n (items[this._selectedIndex] as HTMLElement).scrollIntoView({ block: 'nearest' });\r\n } else if (ke.key === 'Enter') {\r\n e.preventDefault();\r\n this._selectActive();\r\n } else if (ke.key === 'Escape') {\r\n this.closePalette();\r\n }\r\n });\r\n\r\n results.addEventListener('click', (e: Event) => {\r\n const btn = (e.target as HTMLElement).closest('.cp-item') as HTMLElement;\r\n if (!btn) return;\r\n const id = btn.getAttribute('data-id') || '';\r\n this._select(id);\r\n });\r\n\r\n results.addEventListener('mousemove', (e: Event) => {\r\n const btn = (e.target as HTMLElement).closest('.cp-item') as HTMLElement;\r\n if (!btn) return;\r\n const idx = Number(btn.getAttribute('data-index'));\r\n if (!isNaN(idx) && idx !== this._selectedIndex) {\r\n this._selectedIndex = idx;\r\n this._renderResults();\r\n }\r\n });\r\n\r\n document.addEventListener('keydown', (e: Event) => {\r\n const ke = e as KeyboardEvent;\r\n if (this._open) return;\r\n const match = this._shortcut\r\n .toLowerCase()\r\n .replace(/ctrl/gi, 'control')\r\n .replace(/cmd/gi, 'meta');\r\n const parts = match.split('+').map((s) => s.trim().toLowerCase());\r\n const keys = new Set(parts);\r\n const mod = keys.has('control') ? ke.ctrlKey : keys.has('meta') ? ke.metaKey : false;\r\n const key = ke.key.toLowerCase();\r\n if (mod && keys.has(key)) {\r\n e.preventDefault();\r\n this.openPalette();\r\n }\r\n });\r\n\r\n document.addEventListener('pointerdown', this._handleOutsideClick);\r\n\r\n // Reposition on resize\r\n window.addEventListener('resize', () => {\r\n if (this._open) this._positionDialog();\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { toastStyles } from './styles.js';\r\n\r\nexport interface ToastOptions {\r\n title: string;\r\n description?: string;\r\n variant?: 'info' | 'success' | 'warning' | 'error';\r\n duration?: number;\r\n action?: { label: string; onClick: () => void };\r\n}\r\n\r\nexport interface ToastProps {\r\n placement?:\r\n 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\r\n class?: string;\r\n}\r\n\r\ninterface ToastEntry {\r\n id: string;\r\n options: ToastOptions;\r\n element: HTMLElement;\r\n timer: ReturnType<typeof setTimeout> | null;\r\n}\r\n\r\nlet toastId = 0;\r\n\r\nexport class UToast extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['placement', 'class'];\r\n }\r\n\r\n private _entries: ToastEntry[] = [];\r\n private _placement: string = 'top-right';\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${toastStyles}</style><div part=\"container\" class=\"toast-container toast-top-right\"></div>`;\r\n }\r\n\r\n get placement(): string {\r\n return this._placement;\r\n }\r\n set placement(val: string) {\r\n this.setAttribute('placement', val);\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._updatePlacement();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'placement') {\r\n this._placement = newVal ?? 'top-right';\r\n this._updatePlacement();\r\n }\r\n }\r\n\r\n private _updatePlacement(): void {\r\n const container = this._root.querySelector('[part=\"container\"]')!;\r\n container.className = `toast-container toast-${this._placement} ${this.className}`.trim();\r\n }\r\n\r\n show(opts: ToastOptions): string {\r\n const id = `toast-${++toastId}`;\r\n const duration = opts.duration ?? 4000;\r\n const variant = opts.variant ?? 'info';\r\n\r\n const el = document.createElement('div');\r\n el.className = `toast toast-${variant}`;\r\n el.setAttribute('part', 'toast');\r\n el.setAttribute('role', 'alert');\r\n\r\n const body = document.createElement('div');\r\n body.className = 'toast-body';\r\n body.setAttribute('part', 'body');\r\n\r\n const title = document.createElement('div');\r\n title.className = 'toast-title';\r\n title.setAttribute('part', 'title');\r\n title.textContent = opts.title;\r\n body.appendChild(title);\r\n\r\n if (opts.description) {\r\n const desc = document.createElement('div');\r\n desc.className = 'toast-desc';\r\n desc.setAttribute('part', 'description');\r\n desc.textContent = opts.description;\r\n body.appendChild(desc);\r\n }\r\n\r\n el.appendChild(body);\r\n\r\n if (opts.action) {\r\n const btn = document.createElement('button');\r\n btn.className = 'toast-action';\r\n btn.setAttribute('part', 'action');\r\n btn.textContent = opts.action.label;\r\n btn.addEventListener('click', () => {\r\n opts.action!.onClick();\r\n this.dismiss(id);\r\n });\r\n el.appendChild(btn);\r\n }\r\n\r\n const close = document.createElement('button');\r\n close.className = 'toast-close';\r\n // @deprecated 'close' → use part=\"close-btn\"\r\n close.setAttribute('part', 'close close-btn');\r\n close.innerHTML = '&times;';\r\n close.setAttribute('aria-label', 'Dismiss');\r\n close.addEventListener('click', () => this.dismiss(id));\r\n el.appendChild(close);\r\n\r\n const container = this._root.querySelector('[part=\"container\"]')!;\r\n container.appendChild(el);\r\n\r\n const entry: ToastEntry = { id, options: opts, element: el, timer: null };\r\n\r\n if (duration > 0) {\r\n entry.timer = setTimeout(() => this.dismiss(id), duration);\r\n }\r\n\r\n this._entries.push(entry);\r\n this.dispatchEvent(\r\n new CustomEvent('u-toast-show', {\r\n detail: { id, ...opts },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n\r\n return id;\r\n }\r\n\r\n dismiss(id: string): void {\r\n const idx = this._entries.findIndex((e) => e.id === id);\r\n if (idx === -1) return;\r\n const entry = this._entries[idx];\r\n if (entry.timer) clearTimeout(entry.timer);\r\n entry.element.classList.add('toast-exit');\r\n setTimeout(() => {\r\n if (entry.element.parentNode) entry.element.parentNode.removeChild(entry.element);\r\n }, 200);\r\n this._entries.splice(idx, 1);\r\n this.dispatchEvent(\r\n new CustomEvent('u-toast-dismiss', {\r\n detail: { id },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n dismissAll(): void {\r\n for (const entry of [...this._entries]) {\r\n this.dismiss(entry.id);\r\n }\r\n }\r\n\r\n _mount(): void {}\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { computePosition, type Placement } from '../core/position.js';\r\nimport { contextMenuStyles } from './styles.js';\r\n\r\nexport interface ContextMenuItem {\r\n label: string;\r\n value: string;\r\n disabled?: boolean;\r\n divider?: boolean;\r\n icon?: string;\r\n}\r\n\r\nexport interface ContextMenuProps {\r\n class?: string;\r\n onSelect?: (value: string) => void;\r\n}\r\n\r\nexport class UContextMenu extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['class'];\r\n }\r\n\r\n private _items: ContextMenuItem[] = [];\r\n private _open: boolean = false;\r\n private _selectedIndex: number = -1;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${contextMenuStyles}</style>\r\n<slot part=\"trigger\" class=\"cm-trigger\"></slot>\r\n<div part=\"menu\" class=\"cm-menu\" role=\"menu\" hidden>\r\n <div part=\"items\" class=\"cm-items\"></div>\r\n</div>`;\r\n }\r\n\r\n get items(): ContextMenuItem[] {\r\n return this._items;\r\n }\r\n set items(val: ContextMenuItem[]) {\r\n this._items = val;\r\n this._renderItems();\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._parseSlotItems();\r\n this._renderItems();\r\n this._sync();\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'class') this._sync();\r\n }\r\n\r\n private _parseSlotItems(): void {\r\n const slotItems = this.querySelectorAll('u-context-menu-item');\r\n const parsed: ContextMenuItem[] = [];\r\n slotItems.forEach((el) => {\r\n const value = el.getAttribute('value') || '';\r\n const label = el.textContent || value;\r\n const disabled = el.hasAttribute('disabled');\r\n parsed.push({ label, value, disabled });\r\n });\r\n if (parsed.length > 0) this._items = parsed;\r\n }\r\n\r\n private _renderItems(): void {\r\n const container = this._root.querySelector('[part=\"items\"]')!;\r\n container.innerHTML = '';\r\n this._items.forEach((item, i) => {\r\n if (item.divider) {\r\n const div = document.createElement('div');\r\n div.className = 'cm-divider';\r\n div.setAttribute('part', 'divider');\r\n container.appendChild(div);\r\n return;\r\n }\r\n const btn = document.createElement('button');\r\n btn.className = 'cm-item';\r\n btn.setAttribute('part', 'item');\r\n btn.setAttribute('role', 'menuitem');\r\n btn.setAttribute('data-value', item.value);\r\n btn.setAttribute('data-index', String(i));\r\n if (item.disabled) btn.setAttribute('disabled', '');\r\n if (item.icon) {\r\n const icon = document.createElement('span');\r\n icon.className = 'cm-item-icon';\r\n icon.setAttribute('part', 'item-icon');\r\n icon.textContent = item.icon;\r\n btn.appendChild(icon);\r\n }\r\n const label = document.createElement('span');\r\n label.className = 'cm-item-label';\r\n label.setAttribute('part', 'item-label');\r\n label.textContent = item.label;\r\n btn.appendChild(label);\r\n container.appendChild(btn);\r\n });\r\n }\r\n\r\n private _sync(): void {\r\n const menu = this._root.querySelector('[part=\"menu\"]')! as HTMLElement;\r\n menu.className = `cm-menu ${this.className}`.trim();\r\n }\r\n\r\n private _openMenu(x: number, y: number): void {\r\n const menu = this._root.querySelector('[part=\"menu\"]')! as HTMLElement;\r\n const itemsContainer = this._root.querySelector('[part=\"items\"]')! as HTMLElement;\r\n\r\n // Temporarily suppress the entrance animation so we can measure &\r\n // position the menu without a visible flash at (0,0).\r\n menu.style.animation = 'none';\r\n menu.removeAttribute('hidden');\r\n\r\n // Force layout — needed for offsetWidth/offsetHeight to be accurate\r\n // and for the browser to register the menu in the DOM tree.\r\n void menu.offsetHeight;\r\n\r\n const trigger = new DOMRect(x, y, 0, 0);\r\n const result = computePosition(\r\n trigger,\r\n { width: menu.offsetWidth || 0, height: menu.offsetHeight || 0 },\r\n { placement: 'bottom-start', margin: 8, flip: true },\r\n );\r\n\r\n menu.style.left = `${result.left}px`;\r\n menu.style.top = `${result.top}px`;\r\n menu.style.maxHeight = `${result.maxHeight ?? 320}px`;\r\n itemsContainer.style.maxHeight = `${(result.maxHeight ?? 320) - 16}px`;\r\n\r\n // Re-enable the entrance animation in a separate layout frame so\r\n // the scale/opacity keyframes play from the positioned location.\r\n void menu.offsetHeight;\r\n menu.style.animation = '';\r\n menu.style.transformOrigin = 'top left';\r\n\r\n this._selectedIndex = -1;\r\n this._open = true;\r\n this._focusFirst();\r\n this.dispatchEvent(\r\n new CustomEvent('u-context-menu-open', {\r\n detail: { x, y },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n private _closeMenu(): void {\r\n if (!this._open) return;\r\n const menu = this._root.querySelector('[part=\"menu\"]')! as HTMLElement;\r\n menu.setAttribute('hidden', '');\r\n this._open = false;\r\n this._selectedIndex = -1;\r\n this.dispatchEvent(\r\n new CustomEvent('u-context-menu-close', {\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n private _focusFirst(): void {\r\n const btns = this._root.querySelectorAll('.cm-item:not([disabled])');\r\n if (btns.length > 0) {\r\n (btns[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n private _handleOutsideClick = (e: MouseEvent): void => {\r\n if (!this._open) return;\r\n const path = e.composedPath();\r\n if (!path.includes(this)) {\r\n this._closeMenu();\r\n }\r\n };\r\n\r\n _mount(): void {\r\n this.addEventListener('contextmenu', (e: Event) => {\r\n const ce = e as MouseEvent;\r\n ce.preventDefault();\r\n this._closeMenu();\r\n this._parseSlotItems();\r\n this._renderItems();\r\n this._openMenu(ce.clientX, ce.clientY);\r\n });\r\n\r\n const menu = this._root.querySelector('[part=\"menu\"]')!;\r\n const itemsContainer = this._root.querySelector('[part=\"items\"]')!;\r\n\r\n menu.addEventListener('click', (e: Event) => {\r\n const btn = (e.target as HTMLElement).closest('.cm-item') as HTMLElement;\r\n if (!btn || btn.hasAttribute('disabled')) return;\r\n const value = btn.getAttribute('data-value') || '';\r\n this._closeMenu();\r\n this.dispatchEvent(\r\n new CustomEvent('u-context-menu-select', {\r\n detail: { value },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n });\r\n\r\n itemsContainer.addEventListener('keydown', (e: Event) => {\r\n const ke = e as KeyboardEvent;\r\n const btns = itemsContainer.querySelectorAll<HTMLElement>('.cm-item:not([disabled])');\r\n\r\n if (ke.key === 'ArrowDown') {\r\n e.preventDefault();\r\n this._selectedIndex = Math.min(this._selectedIndex + 1, btns.length - 1);\r\n btns[this._selectedIndex]?.focus();\r\n } else if (ke.key === 'ArrowUp') {\r\n e.preventDefault();\r\n this._selectedIndex = Math.max(this._selectedIndex - 1, 0);\r\n btns[this._selectedIndex]?.focus();\r\n } else if (ke.key === 'Escape') {\r\n this._closeMenu();\r\n }\r\n });\r\n\r\n document.addEventListener('pointerdown', this._handleOutsideClick);\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { sortableStyles } from './styles.js';\r\n\r\nexport interface SortableProps {\r\n disabled?: boolean;\r\n handleSelector?: string;\r\n class?: string;\r\n onReorder?: (fromIndex: number, toIndex: number) => void;\r\n}\r\n\r\nexport class USortable extends UElement {\r\n static get observedAttributes(): string[] {\r\n return ['disabled', 'class'];\r\n }\r\n\r\n private _disabled: boolean = false;\r\n private _handleSelector: string = '';\r\n private _dragging: HTMLElement | null = null;\r\n private _placeholder: HTMLElement | null = null;\r\n private _dragIndex: number = -1;\r\n private _dropIndex: number = -1;\r\n private _offsetX: number = 0;\r\n private _offsetY: number = 0;\r\n private _dragClone: HTMLElement | null = null;\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${sortableStyles}</style>\r\n<div part=\"sortable\" class=\"sortable\">\r\n <slot></slot>\r\n</div>`;\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n if (name === 'class') this._sync();\r\n }\r\n\r\n get disabled(): boolean { return this._disabled; }\r\n set disabled(val: boolean) {\r\n this._disabled = val;\r\n if (val) this.setAttribute('disabled', '');\r\n else this.removeAttribute('disabled');\r\n }\r\n get handleSelector(): string { return this._handleSelector; }\r\n set handleSelector(val: string) { this._handleSelector = val; }\r\n\r\n private _getItems(): HTMLElement[] {\r\n const slot = this._root.querySelector('slot')! as HTMLSlotElement;\r\n const assigned = slot.assignedElements({ flatten: true });\r\n return assigned.filter(\r\n (el) => el instanceof HTMLElement && !el.hasAttribute('hidden') && el.style.display !== 'none',\r\n ) as HTMLElement[];\r\n }\r\n\r\n private _getHandle(item: HTMLElement): HTMLElement {\r\n if (this._handleSelector) {\r\n return (item.querySelector(this._handleSelector) as HTMLElement) || item;\r\n }\r\n return item;\r\n }\r\n\r\n private _findItem(target: HTMLElement): HTMLElement | null {\r\n const items = this._getItems();\r\n for (const item of items) {\r\n if (item === target || item.contains(target)) return item;\r\n }\r\n return null;\r\n }\r\n\r\n private _onPointerDown = (e: PointerEvent): void => {\r\n if (this._disabled) return;\r\n const target = e.target as HTMLElement;\r\n const item = this._findItem(target);\r\n if (!item) return;\r\n\r\n const handle = this._getHandle(item);\r\n if (!handle.contains(target)) return;\r\n\r\n e.preventDefault();\r\n const items = this._getItems();\r\n const idx = items.indexOf(item);\r\n if (idx === -1) return;\r\n\r\n this._dragging = item;\r\n this._dragIndex = idx;\r\n const rect = item.getBoundingClientRect();\r\n this._offsetX = e.clientX - rect.left;\r\n this._offsetY = e.clientY - rect.top;\r\n\r\n this._placeholder = document.createElement('div');\r\n this._placeholder.className = 'sortable-placeholder';\r\n this._placeholder.style.width = `${rect.width}px`;\r\n this._placeholder.style.height = `${rect.height}px`;\r\n\r\n this._dragClone = item.cloneNode(true) as HTMLElement;\r\n this._dragClone.style.position = 'fixed';\r\n this._dragClone.style.zIndex = getComputedStyle(this).getPropertyValue('--u-z-drag').trim() || '99999';\r\n this._dragClone.style.width = `${rect.width}px`;\r\n this._dragClone.style.height = `${rect.height}px`;\r\n this._dragClone.style.left = `${rect.left}px`;\r\n this._dragClone.style.top = `${rect.top}px`;\r\n this._dragClone.style.pointerEvents = 'none';\r\n this._dragClone.style.cursor = 'grabbing';\r\n this._dragClone.style.transition = 'none';\r\n this._dragClone.classList.add('sortable-dragging');\r\n document.body.appendChild(this._dragClone);\r\n\r\n item.style.opacity = '0.3';\r\n\r\n item.parentNode?.insertBefore(this._placeholder, item.nextSibling);\r\n\r\n document.addEventListener('pointermove', this._onPointerMove);\r\n document.addEventListener('pointerup', this._onPointerUp);\r\n };\r\n\r\n private _onPointerMove = (e: PointerEvent): void => {\r\n if (!this._dragging || !this._dragClone) return;\r\n e.preventDefault();\r\n\r\n this._dragClone.style.left = `${e.clientX - this._offsetX}px`;\r\n this._dragClone.style.top = `${e.clientY - this._offsetY}px`;\r\n\r\n const items = this._getItems();\r\n const container = this._placeholder!.parentNode!;\r\n let targetIdx = this._dragIndex;\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n if (i === this._dragIndex) continue;\r\n const rect = items[i].getBoundingClientRect();\r\n const midY = rect.top + rect.height / 2;\r\n if (e.clientY < midY) {\r\n targetIdx = i;\r\n break;\r\n }\r\n targetIdx = i;\r\n }\r\n\r\n if (targetIdx !== this._dropIndex) {\r\n this._dropIndex = targetIdx;\r\n const ref =\r\n targetIdx >= this._dragIndex\r\n ? items[targetIdx]?.nextSibling || null\r\n : items[targetIdx];\r\n container.insertBefore(this._placeholder!, ref);\r\n }\r\n };\r\n\r\n private _onPointerUp = (e: PointerEvent): void => {\r\n if (!this._dragging) return;\r\n e.preventDefault();\r\n\r\n document.removeEventListener('pointermove', this._onPointerMove);\r\n document.removeEventListener('pointerup', this._onPointerUp);\r\n\r\n if (this._dragClone && this._dragClone.parentNode) {\r\n this._dragClone.parentNode.removeChild(this._dragClone);\r\n }\r\n this._dragClone = null;\r\n\r\n this._dragging.style.opacity = '';\r\n\r\n const parent = this._placeholder!.parentNode!;\r\n const placeholder = this._placeholder!;\r\n const dragging = this._dragging;\r\n\r\n parent.insertBefore(dragging, placeholder);\r\n parent.removeChild(placeholder);\r\n\r\n const items = this._getItems();\r\n const newIndex = items.indexOf(dragging);\r\n\r\n if (newIndex !== -1 && newIndex !== this._dragIndex) {\r\n this.dispatchEvent(\r\n new CustomEvent('u-sortable-reorder', {\r\n detail: { fromIndex: this._dragIndex, toIndex: newIndex },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n this._dragging = null;\r\n this._placeholder = null;\r\n this._dragIndex = -1;\r\n this._dropIndex = -1;\r\n };\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n private _sync(): void {\r\n const el = this._root.querySelector('[part=\"sortable\"]')!;\r\n el.className = `sortable ${this.className}`.trim();\r\n }\r\n\r\n _mount(): void {\r\n this.addEventListener('pointerdown', this._onPointerDown);\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\r\nimport { formStyles } from './styles.js';\r\n\r\nexport interface FormProps {\r\n class?: string;\r\n onSubmit?: (data: Record<string, string>) => void;\r\n onError?: (errors: Record<string, string>) => void;\r\n}\r\n\r\nexport class UForm extends UElement {\r\n private _fields: Map<string, HTMLElement> = new Map();\r\n\r\n static get observedAttributes(): string[] {\r\n return ['class'];\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._root.innerHTML = `<style>${formStyles}</style>\r\n<form part=\"form\" class=\"form\" novalidate>\r\n <slot></slot>\r\n</form>`;\r\n }\r\n\r\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\r\n if (oldVal === newVal) return;\r\n this._sync();\r\n }\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n this._sync();\r\n }\r\n\r\n get form(): HTMLFormElement | null {\r\n return this._root.querySelector('form');\r\n }\r\n\r\n private _sync(): void {\r\n const form = this._root.querySelector('form');\r\n if (!form) return;\r\n form.className = `form ${this.className}`.trim();\r\n }\r\n\r\n validate(): boolean {\r\n let valid = true;\r\n const errors: Record<string, string> = {};\r\n this._fields.clear();\r\n\r\n const inputs = this.querySelectorAll<HTMLElement>(\r\n 'input, textarea, select, u-input, u-textarea, u-select, u-checkbox, u-radio-group',\r\n );\r\n\r\n inputs.forEach((el) => {\r\n const name = el.getAttribute('name') || '';\r\n if (!name) return;\r\n this._fields.set(name, el);\r\n\r\n const anyEl = el as any;\r\n if (typeof anyEl.checkValidity === 'function') {\r\n if (!anyEl.checkValidity()) {\r\n valid = false;\r\n errors[name] = anyEl.validationMessage || 'Invalid';\r\n const field = el.closest('u-field');\r\n if (field) {\r\n field.setAttribute('error', errors[name]);\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (!valid) {\r\n this.dispatchEvent(\r\n new CustomEvent('u-form-error', {\r\n detail: { errors },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n getValues(): Record<string, string> {\r\n const values: Record<string, string> = {};\r\n const inputs = this.querySelectorAll<HTMLElement>(\r\n 'input, textarea, select, u-input, u-textarea, u-select, u-checkbox, u-radio-group',\r\n );\r\n\r\n inputs.forEach((el) => {\r\n const name = el.getAttribute('name') || '';\r\n if (!name) return;\r\n\r\n const anyEl = el as any;\r\n const tag = el.tagName.toLowerCase();\r\n\r\n if (tag === 'input' && anyEl.type === 'checkbox') {\r\n values[name] = String(anyEl.checked);\r\n } else if (tag === 'u-checkbox') {\r\n values[name] = String(anyEl.checked ?? false);\r\n } else if ('value' in anyEl) {\r\n values[name] = String(anyEl.value ?? '');\r\n }\r\n });\r\n\r\n return values;\r\n }\r\n\r\n reset(): void {\r\n const form = this._root.querySelector('form')!;\r\n form.reset();\r\n this.querySelectorAll('u-field').forEach((f) => f.removeAttribute('error'));\r\n }\r\n\r\n _mount(): void {\r\n const form = this._root.querySelector('form')!;\r\n\r\n form.addEventListener('submit', (e: Event) => {\r\n e.preventDefault();\r\n if (this.validate()) {\r\n const data = this.getValues();\r\n this.dispatchEvent(\r\n new CustomEvent('u-form-submit', {\r\n detail: { data },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n });\r\n }\r\n}\r\n","import { UElement } from '../core/element.js';\nimport { badgeStyles } from './styles.js';\n\nexport type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\n\nexport interface BadgeProps {\n variant?: BadgeVariant;\n size?: BadgeSize;\n dot?: boolean;\n pill?: boolean;\n class?: string;\n}\n\nexport class UBadge extends UElement {\n static get observedAttributes(): string[] {\n return ['variant', 'size', 'dot', 'pill', 'class'];\n }\n\n private _variant: BadgeVariant = 'default';\n private _size: BadgeSize = 'md';\n private _dot: boolean = false;\n private _pill: boolean = true;\n\n constructor() {\n super();\n this._root.innerHTML = `<style>${badgeStyles}</style><span part=\"badge\" class=\"badge badge-default badge-md badge-pill\"><slot></slot></span>`;\n }\n\n get variant(): BadgeVariant { return this._variant; }\n set variant(val: BadgeVariant) { this.setAttribute('variant', val); }\n get size(): BadgeSize { return this._size; }\n set size(val: BadgeSize) { this.setAttribute('size', val); }\n get dot(): boolean { return this._dot; }\n set dot(val: boolean) { if (val) this.setAttribute('dot', ''); else this.removeAttribute('dot'); }\n get pill(): boolean { return this._pill; }\n set pill(val: boolean) { if (!val) this.removeAttribute('pill'); else this.setAttribute('pill', ''); }\n\n connectedCallback(): void {\n super.connectedCallback();\n this._sync();\n }\n\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\n if (oldVal === newVal) return;\n switch (name) {\n case 'variant':\n this._variant = (newVal as BadgeVariant) ?? 'default';\n break;\n case 'size':\n this._size = (newVal as BadgeSize) ?? 'md';\n break;\n case 'dot':\n this._dot = newVal !== null;\n break;\n case 'pill':\n this._pill = newVal !== null;\n break;\n case 'class':\n break;\n }\n this._sync();\n }\n\n private _sync(): void {\n const el = this._root.querySelector('[part=\"badge\"]')!;\n el.className = `badge badge-${this._variant} badge-${this._size} ${this.className}`.trim();\n if (this._dot) {\n el.classList.add('badge-dot');\n } else if (this._pill) {\n el.classList.add('badge-pill');\n } else {\n el.classList.add('badge-square');\n }\n }\n\n _mount(): void {}\n}\n\nexport function Badge(props: BadgeProps = {}): UBadge {\n const el = new UBadge();\n if (props.variant) el.variant = props.variant;\n if (props.size) el.size = props.size;\n if (props.dot != null) el.dot = props.dot;\n if (props.pill != null) el.pill = props.pill;\n return el;\n}\n","import { UElement } from '../core/element.js';\nimport { cardStyles } from './styles.js';\n\nexport type CardVariant = 'default' | 'outlined' | 'elevated';\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg';\n\nexport interface CardProps {\n variant?: CardVariant;\n padding?: CardPadding;\n hoverable?: boolean;\n as?: string;\n class?: string;\n}\n\nexport class UCard extends UElement {\n static get observedAttributes(): string[] {\n return ['variant', 'padding', 'hoverable', 'class'];\n }\n\n private _variant: CardVariant = 'default';\n private _padding: CardPadding = 'md';\n private _hoverable: boolean = false;\n\n constructor() {\n super();\n this._root.innerHTML = `<style>${cardStyles}</style>\n<div part=\"card\" class=\"card card-default card-padding-md\">\n <div part=\"image\" class=\"card-image card-image-top\">\n <slot name=\"image\"></slot>\n </div>\n <div part=\"header\">\n <slot name=\"header\"></slot>\n </div>\n <div part=\"content\">\n <slot></slot>\n </div>\n <div part=\"footer\">\n <slot name=\"footer\"></slot>\n </div>\n</div>`;\n }\n\n get variant(): CardVariant { return this._variant; }\n set variant(val: CardVariant) { this.setAttribute('variant', val); }\n get padding(): CardPadding { return this._padding; }\n set padding(val: CardPadding) { this.setAttribute('padding', val); }\n get hoverable(): boolean { return this._hoverable; }\n set hoverable(val: boolean) { if (val) this.setAttribute('hoverable', ''); else this.removeAttribute('hoverable'); }\n\n connectedCallback(): void {\n super.connectedCallback();\n this._sync();\n }\n\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null): void {\n if (oldVal === newVal) return;\n switch (name) {\n case 'variant':\n this._variant = (newVal as CardVariant) ?? 'default';\n break;\n case 'padding':\n this._padding = (newVal as CardPadding) ?? 'md';\n break;\n case 'hoverable':\n this._hoverable = newVal !== null;\n break;\n case 'class':\n break;\n }\n this._sync();\n }\n\n private _sync(): void {\n const el = this._root.querySelector('[part=\"card\"]')!;\n el.className = `card card-${this._variant} card-padding-${this._padding} ${this.className}`.trim();\n if (this._hoverable) el.classList.add('card-hoverable');\n const imageSlot = this._root.querySelector('slot[name=\"image\"]') as HTMLSlotElement;\n if (imageSlot) {\n const assigned = imageSlot.assignedNodes({ flatten: true });\n const imageEl = assigned.length > 0 ? imageSlot.parentElement : null;\n if (imageEl) {\n imageEl.classList.toggle('card-image-top', assigned.length > 0);\n }\n }\n }\n\n _mount(): void {\n const imageSlot = this._root.querySelector('slot[name=\"image\"]') as HTMLSlotElement;\n if (imageSlot) {\n imageSlot.addEventListener('slotchange', () => this._sync());\n }\n }\n}\n\nexport function Card(props: CardProps = {}): UCard {\n const el = new UCard();\n if (props.variant) el.variant = props.variant;\n if (props.padding) el.padding = props.padding;\n if (props.hoverable != null) el.hoverable = props.hoverable;\n return el;\n}\n"]}