@domphy/ui 0.1.48 → 0.3.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/global.ts","../../core/src/types/EventProperties.ts","../../core/src/constants/HtmlTags.ts","../../core/src/classes/Notifier.ts","../../core/src/classes/State.ts","../../core/src/utils.ts","../../core/src/helpers.ts","../../core/src/constants/VoidTags.ts","../../core/src/constants/SvgTags.ts","../../core/src/constants/BooleanAttributes.ts","../../core/src/constants/PrefixCSS.ts","../../core/src/constants/CamelAttributes.ts","../../core/src/classes/ElementAttribute.ts","../../core/src/classes/AttributeList.ts","../../core/src/classes/TextNode.ts","../../core/src/classes/ElementList.ts","../../core/src/classes/StyleProperty.ts","../../core/src/classes/StyleRule.ts","../../core/src/classes/StyleList.ts","../../core/src/classes/ElementNode.ts","../../core/src/classes/RecordState.ts","../../theme/src/light.ts","../../theme/src/theme.ts","../../theme/src/size.ts","../../theme/src/density.ts","../../theme/src/tone.ts","../src/index.ts","../src/patches/abbreviation.ts","../src/patches/card.ts","../src/patches/splitter.ts","../src/patches/command.ts","../src/patches/toggle.ts","../src/patches/toggleGroup.ts","../src/patches/inputOTP.ts","../src/patches/alert.ts","../src/patches/avatar.ts","../src/patches/badge.ts","../src/patches/breadcrumb.ts","../src/patches/breadcrumbEllipsis.ts","../src/patches/tag.ts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../src/utils/floating.ts","../src/patches/combobox.ts","../src/patches/popoverArrow.ts","../src/patches/blockquote.ts","../src/patches/button.ts","../src/patches/inputCheckbox.ts","../src/patches/code.ts","../src/patches/details.ts","../src/patches/descriptionList.ts","../src/patches/dialog.ts","../src/patches/emphasis.ts","../src/patches/figure.ts","../src/patches/formGroup.ts","../src/patches/heading.ts","../src/patches/horizontalRule.ts","../src/patches/image.ts","../src/patches/icon.ts","../src/patches/inputColor.ts","../src/patches/inputDateTime.ts","../src/patches/inputFile.ts","../src/patches/inputSearch.ts","../src/patches/inputText.ts","../src/patches/inputRange.ts","../src/patches/inputNumber.ts","../src/patches/keyboard.ts","../src/patches/label.ts","../src/patches/link.ts","../src/patches/mark.ts","../src/patches/paragraph.ts","../src/patches/preformated.ts","../src/patches/progress.ts","../src/patches/inputRadio.ts","../src/patches/select.ts","../src/patches/skeleton.ts","../src/patches/spinner.ts","../src/patches/selectList.ts","../src/patches/selectItem.ts","../src/patches/selectBox.ts","../src/patches/inputSwitch.ts","../src/patches/buttonSwitch.ts","../src/patches/small.ts","../src/patches/strong.ts","../src/patches/subscript.ts","../src/patches/superscript.ts","../src/patches/table.ts","../src/patches/textarea.ts","../src/patches/unorderedList.ts","../src/patches/orderedList.ts","../src/patches/pagination.ts","../src/patches/divider.ts","../src/patches/drawer.ts","../src/patches/popover.ts","../src/patches/toast.ts","../src/patches/tooltip.ts","../src/patches/transitionGroup.ts","../src/patches/tabs.ts","../src/patches/tab.ts","../src/patches/tabPanel.ts","../src/patches/menu.ts","../src/patches/menuItem.ts","../src/patches/form.ts","../src/patches/field.ts","../src/classes/FieldState.ts","../src/classes/FormState.ts"],"sourcesContent":["export * as core from \"@domphy/core\"\r\nexport * as theme from \"@domphy/theme\"\r\nexport * as ui from \"./index.js\"\r\n","export const EventProperties = [\r\n \"onAbort\",\r\n \"onAuxClick\",\r\n \"onBeforeMatch\",\r\n \"onBeforeToggle\",\r\n \"onBlur\",\r\n \"onCancel\",\r\n \"onCanPlay\",\r\n \"onCanPlayThrough\",\r\n \"onChange\",\r\n \"onClick\",\r\n \"onClose\",\r\n \"onContextLost\",\r\n \"onContextMenu\",\r\n \"onContextRestored\",\r\n \"onCopy\",\r\n \"onCueChange\",\r\n \"onCut\",\r\n \"onDblClick\",\r\n \"onDrag\",\r\n \"onDragEnd\",\r\n \"onDragEnter\",\r\n \"onDragLeave\",\r\n \"onDragOver\",\r\n \"onDragStart\",\r\n \"onDrop\",\r\n \"onDurationChange\",\r\n \"onEmptied\",\r\n \"onEnded\",\r\n \"onError\",\r\n \"onFocus\",\r\n \"onFormData\",\r\n \"onInput\",\r\n \"onInvalid\",\r\n \"onKeyDown\",\r\n \"onKeyPress\",\r\n \"onKeyUp\",\r\n \"onLoad\",\r\n \"onLoadedData\",\r\n \"onLoadedMetadata\",\r\n \"onLoadStart\",\r\n \"onMouseDown\",\r\n \"onMouseEnter\",\r\n \"onMouseLeave\",\r\n \"onMouseMove\",\r\n \"onMouseOut\",\r\n \"onMouseOver\",\r\n \"onMouseUp\",\r\n \"onPaste\",\r\n \"onPause\",\r\n \"onPlay\",\r\n \"onPlaying\",\r\n \"onProgress\",\r\n \"onRateChange\",\r\n \"onReset\",\r\n \"onResize\",\r\n \"onScroll\",\r\n \"onScrollEnd\",\r\n \"onSecurityPolicyViolation\",\r\n \"onSeeked\",\r\n \"onSeeking\",\r\n \"onSelect\",\r\n \"onSlotChange\",\r\n \"onStalled\",\r\n \"onSubmit\",\r\n \"onSuspend\",\r\n \"onTimeUpdate\",\r\n \"onToggle\",\r\n \"onVolumeChange\",\r\n \"onWaiting\",\r\n \"onWheel\",\r\n \"onTouchStart\",\r\n \"onTouchMove\",\r\n \"onTouchEnd\",\r\n \"onTouchCancel\",\r\n \"onPointerDown\",\r\n \"onPointerMove\",\r\n \"onPointerUp\",\r\n \"onPointerCancel\",\r\n \"onPointerEnter\",\r\n \"onPointerLeave\",\r\n \"onPointerOver\",\r\n \"onPointerOut\",\r\n \"onGotPointerCapture\",\r\n \"onLostPointerCapture\",\r\n \"onCompositionStart\",\r\n \"onCompositionUpdate\",\r\n \"onCompositionEnd\",\r\n \"onTransitionEnd\",\r\n \"onTransitionStart\",\r\n \"onAnimationStart\",\r\n \"onAnimationEnd\",\r\n \"onAnimationIteration\",\r\n \"onFullscreenChange\",\r\n \"onFullscreenError\",\r\n \"onFocusIn\",\r\n \"onFocusOut\",\r\n] as const\r\n\r\nexport const eventNameMap = EventProperties.reduce((acc, ev) => {\r\n const key = ev.slice(2).toLowerCase() as keyof HTMLElementEventMap\r\n acc[key] = ev;\r\n return acc;\r\n}, {} as Partial<Record<keyof HTMLElementEventMap, (typeof EventProperties)[number]>>);\r\n","export const HtmlTags = [\r\n \"a\",\r\n \"abbr\",\r\n \"address\",\r\n \"article\",\r\n \"aside\",\r\n \"audio\",\r\n \"b\",\r\n \"base\",\r\n \"blockquote\",\r\n \"br\",\r\n \"button\",\r\n \"canvas\",\r\n \"caption\",\r\n \"cite\",\r\n \"code\",\r\n \"col\",\r\n \"colgroup\",\r\n \"data\",\r\n \"datalist\",\r\n \"dd\",\r\n \"del\",\r\n \"details\",\r\n \"dfn\",\r\n \"dialog\",\r\n \"div\",\r\n \"dl\",\r\n \"dt\",\r\n \"em\",\r\n \"fieldset\",\r\n \"figcaption\",\r\n \"figure\",\r\n \"footer\",\r\n \"form\",\r\n \"h1\",\r\n \"h2\",\r\n \"h3\",\r\n \"h4\",\r\n \"h5\",\r\n \"h6\",\r\n \"header\",\r\n \"hgroup\",\r\n \"i\",\r\n \"iframe\",\r\n \"img\",\r\n \"input\",\r\n \"ins\",\r\n \"kbd\",\r\n \"label\",\r\n \"legend\",\r\n \"li\",\r\n \"main\",\r\n \"map\",\r\n \"mark\",\r\n \"meta\",\r\n \"meter\",\r\n \"nav\",\r\n \"noscript\",\r\n \"object\",\r\n \"ol\",\r\n \"optgroup\",\r\n \"option\",\r\n \"output\",\r\n \"p\",\r\n \"param\",\r\n \"picture\",\r\n \"pre\",\r\n \"progress\",\r\n \"q\",\r\n \"rp\",\r\n \"rt\",\r\n \"ruby\",\r\n \"s\",\r\n \"samp\",\r\n \"section\",\r\n \"select\",\r\n \"slot\",\r\n \"small\",\r\n \"source\",\r\n \"span\",\r\n \"strong\",\r\n \"sub\",\r\n \"summary\",\r\n \"sup\",\r\n \"table\",\r\n \"tbody\",\r\n \"td\",\r\n \"template\",\r\n \"textarea\",\r\n \"tfoot\",\r\n \"th\",\r\n \"thead\",\r\n \"time\",\r\n \"title\",\r\n \"tr\",\r\n \"track\",\r\n \"u\",\r\n \"ul\",\r\n \"var\",\r\n \"video\",\r\n \"wbr\",\r\n \"bdi\",\r\n \"bdo\",\r\n \"math\",\r\n \"menu\",\r\n \"search\",\r\n \"area\",\r\n \"embed\",\r\n \"hr\",\r\n \"animate\",\r\n \"animateMotion\",\r\n \"animateTransform\",\r\n \"circle\",\r\n \"clipPath\",\r\n \"cursor\",\r\n \"defs\",\r\n \"desc\",\r\n \"ellipse\",\r\n \"feBlend\",\r\n \"feColorMatrix\",\r\n \"feComponentTransfer\",\r\n \"feComposite\",\r\n \"feConvolveMatrix\",\r\n \"feDiffuseLighting\",\r\n \"feDisplacementMap\",\r\n \"feDistantLight\",\r\n \"feDropShadow\",\r\n \"feFlood\",\r\n \"feFuncA\",\r\n \"feFuncB\",\r\n \"feFuncG\",\r\n \"feFuncR\",\r\n \"feGaussianBlur\",\r\n \"feImage\",\r\n \"feMerge\",\r\n \"feMergeNode\",\r\n \"feMorphology\",\r\n \"feOffset\",\r\n \"fePointLight\",\r\n \"feSpecularLighting\",\r\n \"feSpotLight\",\r\n \"feTile\",\r\n \"feTurbulence\",\r\n \"filter\",\r\n \"foreignObject\",\r\n \"g\",\r\n \"image\",\r\n \"line\",\r\n \"linearGradient\",\r\n \"marker\",\r\n \"mask\",\r\n \"metadata\",\r\n \"mpath\",\r\n \"path\",\r\n \"pattern\",\r\n \"polygon\",\r\n \"polyline\",\r\n \"prefetch\",\r\n \"radialGradient\",\r\n \"rect\",\r\n \"set\",\r\n \"solidColor\",\r\n \"stop\",\r\n \"svg\",\r\n \"switch\",\r\n \"symbol\",\r\n \"tbreak\",\r\n \"text\",\r\n \"textPath\",\r\n \"tspan\",\r\n \"use\",\r\n \"view\",\r\n];","import { Handler } from \"../types.js\"\n\ntype ChainEntry = [notifier: Notifier, event: string]\n\n// Shared across all instances to track the flush chain for circular detection.\nlet _chain: ChainEntry[] = []\n\n// Microtask scheduler. Older embedded Chromium runtimes (SketchUp 2020 /\n// 2021.0 ship CEF 64) predate `queueMicrotask` (added in Chrome 71). A\n// resolved Promise's `.then` runs as a microtask in the same checkpoint, so\n// it is the standard fallback. The `.catch` mimics `queueMicrotask`'s\n// behaviour of surfacing thrown errors to the global error handler rather\n// than silently becoming an unhandled-rejection.\nconst _microtask: (cb: () => void) => void =\n typeof queueMicrotask === \"function\"\n ? queueMicrotask\n : (cb) => {\n Promise.resolve().then(cb).catch((e) => {\n setTimeout(() => { throw e }, 0)\n })\n }\n\nexport class Notifier {\n private _listeners: Record<string, Set<Handler>> | null = {}\n private _pending: Map<string, { args: unknown[], chain: ChainEntry[] }> = new Map()\n private _scheduled = false\n\n _dispose(): void {\n if (this._listeners) {\n for (const event in this._listeners) {\n this._listeners[event].clear()\n }\n }\n this._listeners = null\n }\n\n addListener(event: string, listener: Handler): () => void {\n if (!this._listeners) return () => {}\n\n if (typeof event !== \"string\" || typeof listener !== \"function\") {\n throw new Error(\"Event name must be a string, listener must be a function\")\n }\n\n if (!this._listeners[event]) {\n this._listeners[event] = new Set()\n }\n\n const release = () => this.removeListener(event, listener)\n\n if (this._listeners[event].has(listener)) return release\n\n this._listeners[event].add(listener)\n if (typeof listener.onSubscribe === \"function\") {\n listener.onSubscribe(release)\n }\n\n return release\n }\n\n removeListener(event: string, listener: Handler): void {\n if (!this._listeners) return\n\n const listeners = this._listeners[event]\n if (listeners && listeners.has(listener)) {\n listeners.delete(listener)\n if (listeners.size === 0) {\n delete this._listeners[event]\n }\n }\n }\n\n notify(event: string, ...args: unknown[]): void {\n if (!this._listeners) return\n if (!this._listeners[event]) return\n\n if (this._isCircular(event)) return\n\n this._pending.set(event, { args, chain: [..._chain] })\n\n if (!this._scheduled) {\n this._scheduled = true\n _microtask(() => this._flushAll())\n }\n }\n\n private _isCircular(event: string): boolean {\n const idx = _chain.findIndex(([n, e]) => n === this && e === event)\n if (idx === -1) return false\n\n const names = [..._chain.slice(idx).map(([, e]) => e), event]\n console.error(`[Domphy] Circular dependency detected:\\n ${names.join(\" → \")}`)\n return true\n }\n\n private _flushAll(): void {\n this._scheduled = false\n const pending = this._pending\n this._pending = new Map()\n\n for (const [event, { args, chain }] of pending) {\n _chain = chain\n this._flush(event, args)\n }\n _chain = []\n }\n\n private _flush(event: string, args: unknown[]): void {\n if (!this._listeners) return\n const listeners = this._listeners[event]\n if (!listeners) return\n\n _chain.push([this, event])\n\n for (const listener of [...listeners]) {\n if (!listeners.has(listener)) continue\n try {\n listener(...args)\n } catch (e) {\n console.error(e)\n }\n }\n\n _chain.pop()\n }\n}\n","import { Notifier } from \"./Notifier.js\";\r\nimport { Handler } from \"../types.js\"\r\n\r\nexport type ValueListener<T> = ((_value: T) => void) & Handler\r\nexport type ValueOrState<T> = T | State<T>\r\n\r\nexport class State<T> {\r\n readonly _isState = true;\r\n private _value: T;\r\n readonly initialValue: T;\r\n private _notifier: Notifier | null = new Notifier();\r\n\r\n constructor(initialValue: T, readonly name: string = typeof initialValue) {\r\n this.initialValue = initialValue;\r\n this._value = initialValue;\r\n }\r\n\r\n get(listener?: ValueListener<T>): T {\r\n if (listener) this.addListener(listener);\r\n return this._value;\r\n }\r\n\r\n set(newValue: T): void {\r\n if (!this._notifier) return;\r\n this._value = newValue;\r\n this._notifier.notify(this.name, newValue);\r\n }\r\n\r\n reset(): void {\r\n this.set(this.initialValue);\r\n }\r\n\r\n addListener(listener: ValueListener<T>): () => void {\r\n if (!this._notifier) return () => { };\r\n return this._notifier.addListener(this.name, listener);\r\n }\r\n\r\n removeListener(listener: ValueListener<T>): void {\r\n if (!this._notifier) return;\r\n this._notifier.removeListener(this.name, listener);\r\n }\r\n\r\n _dispose(): void {\r\n if (this._notifier) {\r\n this._notifier._dispose();\r\n this._notifier = null;\r\n }\r\n }\r\n}\r\n","import { DomphyElement, HookMap, EventName, Handler, Listener } from \"./types.js\";\r\nimport { State } from \"./classes/State.js\"\r\n\r\nimport { deepClone, addEvent, addHook } from \"./helpers.js\"\r\n\r\nexport function merge(source: Record<string, any> = {}, target: Record<string, any> = {}): Record<string, any> {\r\n const comma = [\"animation\", \"transition\", \"boxShadow\", \"textShadow\", \"background\", \"fontFamily\"]\r\n const space = [\"class\", \"rel\", \"transform\", \"acceptCharset\", \"sandbox\"]\r\n const adjacent = [\"content\"]\r\n if (Object.prototype.toString.call(target) === \"[object Object]\" && Object.getPrototypeOf(target) === Object.prototype) { // plainjs not class instance\r\n target = deepClone(target)\r\n }\r\n\r\n for (const key in target) {\r\n\r\n const value = target[key];\r\n if (value === undefined || value === null || value === \"\") continue;\r\n\r\n if (typeof value === \"object\" && !Array.isArray(value)) {\r\n if (typeof source[key] === \"object\") {\r\n source[key] = merge(source[key], value);\r\n } else {\r\n source[key] = value;\r\n }\r\n\r\n } else {\r\n if (comma.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\", \")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\", \")\r\n }\r\n\r\n } else if (adjacent.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\"\")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\"\")\r\n }\r\n } else if (space.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\" \")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\" \")\r\n }\r\n } else if (key.startsWith(\"on\")) {\r\n let name = key.replace(\"on\", \"\").toLowerCase() as EventName\r\n addEvent(source as DomphyElement, name, value)\r\n } else if (key.startsWith(\"_on\")) {\r\n let name = key.replace(\"_on\", \"\") as keyof HookMap\r\n addHook(source as DomphyElement, name, value)\r\n } else {\r\n source[key] = value;\r\n }\r\n }\r\n }\r\n return source;\r\n}\r\n\r\nexport function hashString(str: string = \"\"): string {\r\n let hash = 0x811c9dc5; // FNV-1a 32-bit offset basis\r\n for (let i = 0; i < str.length; i++) {\r\n hash ^= str.charCodeAt(i);\r\n hash = (hash * 0x01000193) >>> 0; // FNV prime, keep 32-bit unsigned\r\n }\r\n return String.fromCharCode(97 + (hash % 26)) + hash.toString(16);\r\n}\r\n\r\nexport function toState<T>(val: T | State<T>, name?: string): State<T> {\r\n return (val instanceof State || (val as any)?._isState) ? val as State<T> : new State<T>(val, name);\r\n}\r\n\r\nexport function r<T>(fn: (listener: Listener) => T): (listener: Listener) => T {\r\n return fn;\r\n}\r\n\r\n","import { DomphyElement, PartialElement, HookMap, EventName, Handler, TagName } from \"./types.js\";\r\nimport { ElementNode } from \"./classes/ElementNode.js\"\r\nimport { State } from \"./classes/State.js\"\r\nimport { eventNameMap } from \"./types/EventProperties.js\"\r\nimport { HtmlTags } from \"./constants/HtmlTags.js\"\r\nimport {merge} from \"./utils.js\"\r\n\r\nexport function addHook<K extends keyof HookMap>(partial: PartialElement, hookName: K, handler: HookMap[K]): void {\r\n const hookProperty = `_on${hookName}` as keyof PartialElement;\r\n let current = partial[hookProperty];\r\n\r\n if (typeof current === \"function\") {\r\n (partial as any)[hookProperty] = (...args: any[]) => {\r\n (current as Function)(...args);\r\n (handler as Function)(...args);\r\n };\r\n } else {\r\n (partial as any)[hookProperty] = handler;\r\n }\r\n}\r\n\r\nexport function addEvent<K extends keyof HTMLElementEventMap>(\r\n attributes: PartialElement,\r\n eventName: K,\r\n handler: (event: HTMLElementEventMap[K], node: ElementNode) => void\r\n): void {\r\n const eventProperty = eventNameMap[eventName];\r\n if (!eventProperty) {\r\n throw Error(`invalid event name \"${eventName}\"`);\r\n }\r\n const current = (attributes as any)[eventProperty]\r\n\r\n if (typeof current == \"function\") {\r\n (attributes as any)[eventProperty] = (event: HTMLElementEventMap[K], node: ElementNode) => {\r\n current(event, node)\r\n handler(event, node);\r\n };\r\n } else {\r\n (attributes as any)[eventProperty] = handler\r\n }\r\n}\r\n\r\nexport function deepClone(value: any, seen = new WeakMap()): any {\r\n if (value === null || typeof value !== \"object\") return value;\r\n if (typeof value === \"function\") return value;\r\n if (seen.has(value)) return seen.get(value);\r\n\r\n const proto = Object.getPrototypeOf(value);\r\n if (proto !== Object.prototype && !Array.isArray(value)) return value; // ignore class instance\r\n\r\n let clone: any;\r\n\r\n if (Array.isArray(value)) {\r\n clone = [];\r\n seen.set(value, clone);\r\n for (const v of value) clone.push(deepClone(v, seen));\r\n return clone;\r\n }\r\n\r\n if (value instanceof Date) return new Date(value);\r\n if (value instanceof RegExp) return new RegExp(value);\r\n if (value instanceof Map) {\r\n clone = new Map();\r\n seen.set(value, clone);\r\n for (const [k, v] of value) clone.set(deepClone(k, seen), deepClone(v, seen));\r\n return clone;\r\n }\r\n if (value instanceof Set) {\r\n clone = new Set();\r\n seen.set(value, clone);\r\n for (const v of value) clone.add(deepClone(v, seen));\r\n return clone;\r\n }\r\n if (ArrayBuffer.isView(value)) {\r\n return new (value as any).constructor(value);\r\n }\r\n if (value instanceof ArrayBuffer) {\r\n return value.slice(0);\r\n }\r\n\r\n clone = Object.create(proto);\r\n seen.set(value, clone);\r\n\r\n for (const key of Reflect.ownKeys(value)) {\r\n clone[key] = deepClone(value[key], seen);\r\n }\r\n\r\n return clone;\r\n}\r\n\r\nexport function validate(element: DomphyElement | PartialElement, asPartial = false): boolean {\r\n if (Object.prototype.toString.call(element) !== \"[object Object]\") {\r\n throw Error(`typeof ${element} is invalid DomphyElement`);\r\n }\r\n let keys = Object.keys(element);\r\n for (let i = 0; i < keys.length; i++) {\r\n let key = keys[i];\r\n let val = element[key as keyof typeof element]\r\n if (i == 0 && !HtmlTags.includes(key) && !key.includes(\"-\") && !asPartial) { // web-component\r\n throw Error(`key ${key} is not valid HTML tag name`);\r\n } else if (key == \"style\" && val && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"style\" must be a object`);\r\n } else if (key == \"$\") {\r\n element.$!.forEach(v => validate(v as PartialElement, true))\r\n } else if (key.startsWith(\"_on\") && typeof val != \"function\") {\r\n throw Error(`hook ${key} value \"${val}\" must be a function `)\r\n } else if (key.startsWith(\"on\") && typeof val != \"function\") {\r\n throw Error(`event ${key} value \"${val}\" must be a function `);\r\n } else if (key == \"_portal\" && typeof val !== \"function\") {\r\n throw Error(`\"_portal\" must be a function return HTMLElement`);\r\n } else if (key == \"_context\" && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"_context\" must be a object`);\r\n } else if (key == \"_metadata\" && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"_metadata\" must be a object`);\r\n } else if (key == \"_key\" && (typeof val !== \"string\" && typeof val !== \"number\")) {\r\n throw Error(`\"_key\" must be a string or number`);\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function isValid(element: DomphyElement): boolean {\r\n\r\n if (Array.isArray(element)) return false;\r\n if (!element || typeof element !== \"object\") return false;\r\n\r\n let keys = Object.keys(element);\r\n for (let i = 0; i < keys.length; i++) {\r\n let key = keys[i];\r\n let val = element[key as keyof typeof element];\r\n if (i == 0 && !HtmlTags.includes(key)) return false\r\n if (key === \"style\" && (val == null || typeof val !== \"object\" || Array.isArray(val))) return false;\r\n if (key.startsWith(\"_on\") && typeof val !== \"function\") return false;\r\n if (key.startsWith(\"on\") && typeof val !== \"function\") return false;\r\n if (key === \"_portalChildren\" && !Array.isArray(val)) return false;\r\n if ((key === \"_context\" || key === \"_metadata\") && (val == null || typeof val !== \"object\" || Array.isArray(val))) return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function isHTML(str: string): boolean {\r\n return /<([a-z][\\w-]*)(\\s[^>]*)?>.*<\\/\\1>|<([a-z][\\w-]*)(\\s[^>]*)?\\/>/i.test(str.trim());\r\n}\r\n\r\nexport function escapeHTML(str: string): string {\r\n return str\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n\r\nexport function addClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => String(reactive(listener)) + \" \" + className\r\n } else {\r\n let current = element.class || \"\"\r\n let split = String(current).split(\" \")\r\n split.push(className)\r\n element.class = split.filter(e => e).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function removeClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.filter(e => e != className).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.filter(e => e != className).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function toggleClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function getTagName(element: DomphyElement): TagName | undefined {\r\n return Object.keys(element).find(e => HtmlTags.includes(e)) as TagName | undefined\r\n}\r\n\r\n\r\nexport function camelToKebab(str: string): string {\r\n return str.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\r\n}\r\n\r\nexport function selectorSplitter(selectors: string) {\n if (selectors.indexOf('@') === 0) {\r\n return [selectors];\r\n }\r\n var splitted = [];\r\n var parens = 0;\r\n var angulars = 0;\r\n var soFar = '';\r\n for (var i = 0, len = selectors.length; i < len; i++) {\r\n var char = selectors[i];\r\n if (char === '(') {\r\n parens += 1;\r\n } else if (char === ')') {\r\n parens -= 1;\r\n } else if (char === '[') {\r\n angulars += 1;\r\n } else if (char === ']') {\r\n angulars -= 1;\r\n } else if (char === ',') {\r\n if (!parens && !angulars) {\r\n splitted.push(soFar.trim());\r\n soFar = '';\r\n continue;\r\n }\r\n }\r\n soFar += char;\r\n }\r\n splitted.push(soFar.trim());\n return splitted;\n};\n\nexport function ensureDomStyle(styleParent: HTMLHeadElement | ShadowRoot): HTMLStyleElement {\n let domStyle = styleParent.querySelector(\"#domphy-style\") as HTMLStyleElement | null;\n\n if (!domStyle) {\n domStyle = document.createElement(\"style\");\n domStyle.id = \"domphy-style\";\n styleParent.appendChild(domStyle);\n }\n\n if (domStyle.dataset.domphyBase !== \"true\") {\n domStyle.sheet?.insertRule(\"[hidden] { display: none !important; }\", 0);\n domStyle.dataset.domphyBase = \"true\";\n }\n\n return domStyle;\n}\n\nexport const mergePartial = (partial: PartialElement | DomphyElement): typeof partial => {\n\r\n if (Array.isArray(partial.$)) {\r\n let part: typeof partial = {}\r\n partial.$.forEach(p => merge(part, mergePartial(p)))\r\n delete partial.$\r\n merge(part, partial) // native win\r\n\r\n return part\r\n } else {\r\n return partial\r\n }\r\n}\n","export const VoidTags = [\r\n \"area\",\r\n \"base\",\r\n \"br\",\r\n \"col\",\r\n \"embed\",\r\n \"hr\",\r\n \"img\",\r\n \"input\",\r\n \"link\",\r\n \"meta\",\r\n \"source\",\r\n \"track\",\r\n \"wbr\",\r\n] as const;\r\n\r\nexport type VoidTagName = (typeof VoidTags)[number];\r\n\r\n","export const SvgTags = [\"svg\", \"circle\", \"path\", \"rect\", \"ellipse\",\r\n \"line\", \"polyline\", \"polygon\", \"g\", \"defs\",\r\n \"use\", \"symbol\", \"linearGradient\", \"radialGradient\",\r\n \"stop\", \"clipPath\", \"mask\", \"filter\", \"text\",\r\n \"tspan\", \"textPath\", \"image\", \"pattern\", \"marker\",\r\n \"animate\", \"animateTransform\", \"animateMotion\",\r\n \"feGaussianBlur\", \"feComposite\", \"feColorMatrix\",\r\n \"feMerge\", \"feMergeNode\", \"feOffset\", \"feFlood\",\r\n \"feBlend\", \"foreignObject\"]","export const BooleanAttributes = [\r\n \"allowFullScreen\",\r\n \"async\",\r\n \"autoFocus\",\r\n \"autoPlay\",\r\n \"checked\",\r\n \"compact\",\r\n \"contentEditable\",\r\n \"controls\",\r\n \"declare\",\r\n \"default\",\r\n \"defer\",\r\n \"disabled\",\r\n \"formNoValidate\",\r\n \"hidden\",\r\n \"isMap\",\r\n \"itemScope\",\r\n \"loop\",\r\n \"multiple\",\r\n \"muted\",\r\n \"noHref\",\r\n \"noShade\",\r\n \"noValidate\",\r\n \"open\",\r\n \"playsInline\",\r\n \"readonly\",\r\n \"required\",\r\n \"reversed\",\r\n \"scoped\",\r\n \"selected\",\r\n \"sortable\",\r\n \"trueSpeed\",\r\n \"typeMustMatch\",\r\n \"wmode\",\r\n \"autoCapitalize\",\r\n \"translate\",\r\n \"spellCheck\",\r\n \"inert\",\r\n \"download\",\r\n \"noModule\",\r\n \"paused\",\r\n \"autoPictureInPicture\",\r\n] as const;","//browserslist query \"> 0.1%, not dead\"\r\nexport const PrefixCSS: Record<string, string[]> = {\r\n transform: [\"webkit\", \"ms\"],\r\n transition: [\"webkit\", \"ms\"],\r\n animation: [\"webkit\"],\r\n userSelect: [\"webkit\", \"ms\"],\r\n flexDirection: [\"webkit\", \"ms\"],\r\n flexWrap: [\"webkit\", \"ms\"],\r\n justifyContent: [\"webkit\", \"ms\"],\r\n alignItems: [\"webkit\", \"ms\"],\r\n alignSelf: [\"webkit\", \"ms\"],\r\n order: [\"webkit\", \"ms\"],\r\n flexGrow: [\"webkit\", \"ms\"],\r\n flexShrink: [\"webkit\", \"ms\"],\r\n flexBasis: [\"webkit\", \"ms\"],\r\n columns: [\"webkit\"],\r\n columnCount: [\"webkit\"],\r\n columnGap: [\"webkit\"],\r\n columnRule: [\"webkit\"],\r\n columnWidth: [\"webkit\"],\r\n boxSizing: [\"webkit\"],\r\n appearance: [\"webkit\", \"moz\"],\r\n filter: [\"webkit\"],\r\n backdropFilter: [\"webkit\"],\r\n clipPath: [\"webkit\"],\r\n mask: [\"webkit\"],\r\n maskImage: [\"webkit\"],\r\n textSizeAdjust: [\"webkit\", \"ms\"],\r\n hyphens: [\"webkit\", \"ms\"],\r\n writingMode: [\"webkit\", \"ms\"],\r\n gridTemplateColumns: [\"ms\"],\r\n gridTemplateRows: [\"ms\"],\r\n gridAutoColumns: [\"ms\"],\r\n gridAutoRows: [\"ms\"],\r\n gridColumn: [\"ms\"],\r\n gridRow: [\"ms\"],\r\n marginInlineStart: [\"webkit\"],\r\n marginInlineEnd: [\"webkit\"],\r\n paddingInlineStart: [\"webkit\"],\r\n paddingInlineEnd: [\"webkit\"],\r\n minInlineSize: [\"webkit\"],\r\n maxInlineSize: [\"webkit\"],\r\n minBlockSize: [\"webkit\"],\r\n maxBlockSize: [\"webkit\"],\r\n inlineSize: [\"webkit\"],\r\n blockSize: [\"webkit\"],\r\n tabSize: [\"moz\"],\r\n overscrollBehavior: [\"webkit\", \"ms\"],\r\n touchAction: [\"ms\"],\r\n resize: [\"webkit\"],\r\n printColorAdjust: [\"webkit\"],\r\n backgroundClip: [\"webkit\"],\r\n boxDecorationBreak: [\"webkit\"],\r\n overflowScrolling: [\"webkit\"],\r\n};\r\n","export const CamelAttributes: string[] = [\r\n \"viewBox\",\r\n \"preserveAspectRatio\",\r\n \"gradientTransform\",\r\n \"gradientUnits\",\r\n \"spreadMethod\",\r\n \"markerStart\",\r\n \"markerMid\",\r\n \"markerEnd\",\r\n \"markerHeight\",\r\n \"markerWidth\",\r\n \"markerUnits\",\r\n \"refX\",\r\n \"refY\",\r\n \"patternContentUnits\",\r\n \"patternTransform\",\r\n \"patternUnits\",\r\n \"filterUnits\",\r\n \"primitiveUnits\",\r\n \"kernelUnitLength\",\r\n \"clipPathUnits\",\r\n \"maskContentUnits\",\r\n \"maskUnits\"\r\n] as const\r\n","import { escapeHTML, camelToKebab } from \"../helpers.js\";\nimport { BooleanAttributes, CamelAttributes } from \"../constants.js\";\nimport type { ElementNode } from \"./ElementNode.js\"\nimport { type AttributeValue } from \"../types.js\"\nimport { Notifier } from \"./Notifier.js\"\n\nexport class ElementAttribute {\n readonly name: string;\n readonly isBoolean: boolean;\n value: any;\n parent: ElementNode;\n _notifier = new Notifier();\n\n constructor(name: string, value: any, parent: any) {\n this.parent = parent;\n this.isBoolean = (BooleanAttributes as readonly string[]).includes(name);\n if (CamelAttributes.includes(name)) {\n this.name = name\n } else {\n this.name = camelToKebab(name)\n }\n this.value = undefined;\n this.set(value);\n }\n\n render(): void {\n if (!this.parent || !this.parent.domElement) return;\n const domElement = this.parent.domElement;\n\n const mutateAttrs = [\"value\"];\n if (this.isBoolean) {\n if (this.value === false || this.value == null) {\n domElement.removeAttribute(this.name)\n } else {\n domElement.setAttribute(this.name, this.value === true ? \"\" : this.value)\n }\n } else if (this.value == null) {\n domElement.removeAttribute(this.name);\n } else if (mutateAttrs.includes(this.name)) {\n (domElement as any)[this.name] = this.value;\n } else {\n domElement.setAttribute(this.name, this.value);\n }\n }\n\n set(value: AttributeValue): void {\n let prev = this.value;\n\n if (value == null) {\n this.value = null;\n } else if (typeof value === \"string\" && /<\\/?[a-z][\\s\\S]*>/i.test(value)) {\n this.value = escapeHTML(value);\n } else if (typeof value == \"function\") {\n let listener: any = () => {\n if (!this.parent || this.parent._disposed) return;\n let p = this.value;\n this.value = this.isBoolean ? Boolean((value as Function)()) : (value as Function)();\n this.render();\n if (p !== this.value) this._notifier.notify(this.name, this.value);\n };\n\n listener.elementNode = this.parent!;\n listener.debug = `class:${this.parent?.tagName}_${this.parent?.nodeId} attribute:${this.name}`;\n\n listener.onSubscribe = (release: () => void) => {\n if (this.parent) {\n this.parent.addHook(\"BeforeRemove\", () => {\n release();\n listener = null;\n });\n }\n };\n\n this.value = this.isBoolean ? Boolean(value(listener)) : value(listener);\n } else {\n this.value = this.isBoolean ? Boolean(value) : value;\n }\n\n this.render();\n if (prev !== this.value) this._notifier.notify(this.name, this.value);\n }\n\n addListener(callback: (value: any) => void): void {\n const handler = callback as any\n handler.onSubscribe = (release: () => void) => this.parent?.addHook(\"BeforeRemove\", release);\n this._notifier.addListener(this.name, handler)\n }\n\n remove(): void {\n if (this.parent && this.parent.attributes) {\n this.parent.attributes.remove(this.name);\n }\n this._dispose();\n }\n\n _dispose(): void {\n this._notifier._dispose();\n this.value = null;\n this.parent = null as any\n }\n\n generateHTML(): string {\n const { name, value } = this;\n if (this.isBoolean) {\n return value ? `${name}` : \"\";\n } else {\n const val = Array.isArray(value) ? JSON.stringify(value) : value;\n return `${name}=\"${escapeHTML(String(val))}\"`;\n }\n }\n}\n","import type { ElementNode } from \"./ElementNode.js\";\nimport { ElementAttribute } from \"./ElementAttribute.js\";\nimport { BooleanAttributes } from \"../constants.js\";\nimport { AttributeValue } from \"../types.js\"\n\nexport class AttributeList {\n items: Record<string, ElementAttribute> | null = {};\n parent: ElementNode | null;\n\n constructor(parent: ElementNode) {\n this.parent = parent;\n }\n\n generateHTML(): string {\n if (!this.items) return \"\";\n const str = Object.values(this.items)\n .map((attr) => attr.generateHTML())\n .join(\" \");\n return str ? ` ${str}` : \"\";\n }\n\n get(name: string): any {\n if (!this.items) return undefined;\n return this.items[name]?.value;\n }\n\n set(name: string, value: AttributeValue): void {\n if (!this.items || !this.parent) return;\n if (this.items[name]) {\n this.items[name].set(value);\n } else {\n this.items[name] = new ElementAttribute(name, value, this.parent);\n }\n }\n\n addListener(name: string, callback: (value: string | number) => void): void {\n if (this.has(name)) {\n this.items![name].addListener(callback);\n }\n }\n\n has(name: string): boolean {\n if (!this.items) return false;\n return Object.prototype.hasOwnProperty.call(this.items, name);\n }\n\n remove(name: string): void {\n if (!this.items) return;\n\n if (this.items[name]) {\n this.items[name]._dispose();\n delete this.items[name];\n }\n\n if (this.parent && this.parent.domElement && this.parent.domElement instanceof Element) {\n this.parent.domElement.removeAttribute(name);\n }\n }\n\n _dispose(): void {\n if (this.items) {\n for (const key in this.items) {\n this.items[key]._dispose();\n }\n }\n this.items = null;\n this.parent = null;\n }\n\n toggle(name: string, force?: boolean): void {\n if (\n !BooleanAttributes.includes(name as (typeof BooleanAttributes)[number])\n ) {\n throw Error(`${name} is not a boolean attribute`);\n }\n if (force === true) {\n this.set(name, true);\n } else if (force === false) {\n this.remove(name);\n } else {\n this.has(name) ? this.remove(name) : this.set(name, true);\n }\n }\n\n addClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n\n const add = (classes: string, newClass: string) => {\n const list = (classes || \"\").split(\" \").filter((e: string) => e);\n !list.includes(newClass) && list.push(className)\n return list.join(\" \")\n }\n\n let current = this.get(\"class\");\n\n if (typeof current === \"function\") {\n this.set(\"class\", () => add(current(), className));\n } else {\n this.set(\"class\", add(current, className))\n }\n }\n\n hasClass(className: string): boolean {\n if (!className || typeof className !== \"string\") return false;\n const current = this.get(\"class\") || \"\";\n const list = current.split(\" \").filter((e: string) => e);\n return list.includes(className);\n }\n\n toggleClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n this.hasClass(className)\n ? this.removeClass(className)\n : this.addClass(className);\n }\n\n removeClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n const current = this.get(\"class\") || \"\";\n const list: string[] = current.split(\" \").filter((e: string) => e);\n const updated = list.filter((cls) => cls !== className);\n updated.length > 0\n ? this.set(\"class\", updated.join(\" \"))\n : this.remove(\"class\");\n }\n\n replaceClass(oldClass: string, newClass: string): void {\n if (\n !oldClass ||\n !newClass ||\n typeof oldClass !== \"string\" ||\n typeof newClass !== \"string\"\n )\n return;\n if (this.hasClass(oldClass)) {\n this.removeClass(oldClass);\n this.addClass(newClass);\n }\n }\n}\n","import { ElementNode } from \"./ElementNode.js\";\r\nimport { isHTML } from \"../helpers.js\";\r\n\r\nexport class TextNode {\r\n type = \"TextNode\"\r\n parent: ElementNode;\r\n text: string;\r\n domText?: ChildNode;\r\n\r\n constructor(textContent: string | number, parent: ElementNode) {\r\n this.parent = parent;\r\n this.text = textContent === \"\" ? \"\\u200B\" : String(textContent);\r\n }\r\n _createDOMNode() {\r\n let newNode: ChildNode;\r\n if (isHTML(this.text)) {\r\n const tpl = document.createElement(\"template\");\r\n tpl.innerHTML = this.text.trim();\r\n newNode = tpl.content.firstChild || document.createTextNode(\"\");\r\n } else {\r\n newNode = document.createTextNode(this.text);\r\n }\r\n this.domText = newNode;\r\n return newNode;\r\n }\r\n\r\n _dispose(): void {\r\n this.domText = undefined;\r\n this.text = \"\";\r\n }\r\n\r\n generateHTML(): string {\r\n return this.text === \"\\u200B\" ? \"&#8203;\" : this.text;\r\n }\r\n\r\n render(domText: ChildNode | DocumentFragment | HTMLElement): void {\r\n const newNode = this._createDOMNode();\r\n domText.appendChild(newNode);\r\n }\r\n}","import { TextNode } from \"./TextNode.js\";\r\nimport { ElementNode } from \"./ElementNode.js\";\r\nimport type { DomphyElement } from \"../types.js\";\r\nimport { ensureDomStyle } from \"../helpers.js\";\r\n\r\ntype ElementInput = DomphyElement | null | undefined | number | string\r\ntype NodeItem = ElementNode | TextNode;\r\n\r\nexport class ElementList {\r\n items: NodeItem[] = [];\r\n owner: ElementNode;\r\n _nextKey: number = 0;\r\n\r\n constructor(parent: ElementNode) {\r\n this.owner = parent;\r\n }\r\n\r\n _createNode(element: ElementInput | DomphyElement): NodeItem {\r\n return (typeof element === \"object\" && element !== null)\r\n ? new ElementNode(element, this.owner, this._nextKey++)\r\n : new TextNode(element == null ? \"\" : String(element), this.owner);\r\n }\r\n\r\n _moveDomElement(node: NodeItem, index: number) {\r\n if (!this.owner || !this.owner.domElement) return;\r\n const dom = this.owner.domElement;\r\n\r\n const el = node instanceof ElementNode ? node.domElement : node.domText;\r\n if (el) {\r\n const currentRef = dom.childNodes[index] || null;\r\n if (el !== currentRef) {\r\n dom.insertBefore(el, currentRef);\r\n }\r\n }\r\n }\r\n\r\n _swapDomElement(aNode: NodeItem, bNode: NodeItem) {\r\n if (!this.owner || !this.owner.domElement) return;\r\n const parent = this.owner.domElement;\r\n\r\n const a = aNode instanceof ElementNode ? aNode.domElement : aNode.domText;\r\n const b = bNode instanceof ElementNode ? bNode.domElement : bNode.domText;\r\n if (!a || !b) return;\r\n\r\n const aNext = a.nextSibling;\r\n const bNext = b.nextSibling;\r\n\r\n parent.insertBefore(a, bNext);\r\n parent.insertBefore(b, aNext);\r\n }\r\n\r\n update(inputs: ElementInput[], updateDom = true, silent = false): void {\r\n\r\n const oldItems = this.items.slice(); // snapshot for cleanup\r\n\r\n // keyed lookup from old list\r\n const keyed = new Map<string | number, NodeItem>();\r\n for (const item of oldItems) {\r\n if (item instanceof ElementNode && item.key !== null && item.key !== undefined) {\r\n keyed.set(item.key, item);\r\n }\r\n }\r\n\r\n if (!silent && this.owner.domElement) this.owner._hooks?.BeforeUpdate?.(this.owner, inputs);\r\n // build target order using existing ops (mutating this.items)\r\n for (let i = 0; i < inputs.length; i++) {\r\n const input = inputs[i];\r\n const key =\r\n (typeof input === \"object\" && input !== null) ? (input as any)._key : undefined;\r\n\r\n if (key !== undefined) {\r\n const reused = keyed.get(key);\r\n if (reused) {\r\n keyed.delete(key);\r\n\r\n const cur = this.items.indexOf(reused);\r\n if (cur !== i && cur >= 0) {\r\n const isPortal = reused instanceof ElementNode && !!reused._portal;\r\n this.move(cur, i, isPortal ? false : updateDom, true);\r\n }\r\n reused.parent = this.owner as any;\r\n continue;\r\n }\r\n }\r\n\r\n this.insert(input, i, updateDom, true);\r\n }\r\n\r\n while (this.items.length > inputs.length) {\r\n this.remove(this.items[this.items.length - 1], updateDom, true);\r\n }\r\n keyed.forEach((node) => this.remove(node, updateDom, true));\r\n if (!silent) this.owner._hooks?.Update?.(this.owner);\r\n }\r\n\r\n insert(input: ElementInput, index?: number, updateDom = true, silent = false): NodeItem {\r\n\r\n let length = this.items.length;\r\n const finalIndex = (typeof index !== \"number\" || isNaN(index) || index < 0 || index > length)\r\n ? length\r\n : index;\r\n const item = this._createNode(input);\r\n this.items.splice(finalIndex, 0, item);\r\n\r\n if (item instanceof ElementNode) {\r\n //Parent always insert/mount before children\r\n item._hooks.Insert && item._hooks.Insert(item)\r\n\r\n let domElement = this.owner.domElement;\r\n if (updateDom && domElement) {\r\n\r\n\r\n if (item._portal) {\r\n let domElement = item._portal!(this.owner.getRoot())\r\n domElement && item.render(domElement)\r\n } else {\r\n let domNode = item._createDOMNode();\r\n const ref = domElement.childNodes[finalIndex] ?? null;\r\n domElement.insertBefore(domNode, ref);\r\n let root = domElement.getRootNode()\r\n const styleParent = root instanceof ShadowRoot ? root : document.head\r\n let domStyle = ensureDomStyle(styleParent)\r\n item.styles.render(domStyle as HTMLStyleElement)\r\n item._hooks.Mount && item._hooks.Mount(item)\r\n item.children.items.forEach(child => {\r\n if (child instanceof ElementNode && child._portal) {\r\n let dom = child._portal!(child.getRoot())\r\n dom && child.render(dom)\r\n } else {\r\n child.render(domNode)\r\n }\r\n })\r\n }\r\n }\r\n\r\n\r\n\r\n } else {\r\n let domElement = this.owner.domElement;\r\n if (updateDom && domElement) {\r\n let domNode = item._createDOMNode();\r\n const ref = domElement.childNodes[finalIndex] ?? null;\r\n domElement.insertBefore(domNode, ref);\r\n }\r\n }\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n return item;\r\n }\r\n\r\n remove(item: NodeItem, updateDom = true, silent = false): void {\r\n\r\n const index = this.items.indexOf(item);\r\n if (index < 0) return;\r\n\r\n if (item instanceof ElementNode) {\r\n const done = () => {\r\n const el = item.domElement\r\n this.items.splice(index, 1);\r\n updateDom && el && el.remove()\r\n item._hooks?.Remove?.(item)\r\n item._dispose();\r\n }\r\n if (item._hooks.BeforeRemove && item.domElement) {\r\n let doneCalled = false;\r\n const onceDone = () => { if (!doneCalled) { doneCalled = true; done(); } };\r\n item._hooks.BeforeRemove(item, onceDone);\r\n if (!doneCalled) onceDone();\r\n } else {\r\n done()\r\n }\r\n\r\n } else {\r\n const el = item.domText\r\n this.items.splice(index, 1);\r\n updateDom && el && el.remove()\r\n item._dispose();\r\n }\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n clear(updateDom = true, silent = false): void {\r\n if (this.items.length === 0) return;\r\n const snapshot = this.items.slice();\r\n\r\n for (const item of snapshot) {\r\n this.remove(item, updateDom, true);\r\n }\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n _dispose(): void {\r\n this.items.forEach(child => child._dispose())\r\n this.items = [];\r\n }\r\n\r\n swap(aIndex: number, bIndex: number, updateDom = true, silent = false) {\r\n if (aIndex < 0 || bIndex < 0 ||\r\n aIndex >= this.items.length || bIndex >= this.items.length ||\r\n aIndex === bIndex) return;\r\n\r\n const itemA = this.items[aIndex];\r\n const itemB = this.items[bIndex];\r\n\r\n this.items[aIndex] = itemB;\r\n this.items[bIndex] = itemA;\r\n\r\n if (updateDom) this._swapDomElement(itemA, itemB);\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n move(fromIndex: number, toIndex: number, updateDom = true, silent = false): void {\r\n if (fromIndex < 0 || fromIndex >= this.items.length ||\r\n toIndex < 0 || toIndex >= this.items.length || fromIndex === toIndex) return;\r\n\r\n const item = this.items[fromIndex];\r\n\r\n this.items.splice(fromIndex, 1);\r\n this.items.splice(toIndex, 0, item);\r\n\r\n if (updateDom) this._moveDomElement(item, toIndex);\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n generateHTML(): string {\r\n let html = \"\";\r\n for (const item of this.items) html += item.generateHTML();\r\n return html;\r\n }\r\n}\r\n","import type { StyleRule } from \"./StyleRule.js\";\r\nimport type { StyleValue } from \"../types.js\";\r\nimport { camelToKebab } from \"../helpers.js\";\r\nimport { PrefixCSS } from \"../constants.js\";\r\nimport { Listener } from \"../types.js\"\r\n\r\nexport class StyleProperty {\r\n name: string;\r\n cssName: string;\r\n value: StyleValue = \"\";\r\n parentRule: StyleRule;\r\n\r\n constructor(name: string, value: StyleValue, parentRule: StyleRule) {\r\n this.name = name;\r\n this.cssName = camelToKebab(name);\r\n this.parentRule = parentRule;\r\n this.set(value);\r\n }\r\n\r\n _domUpdate(): void {\r\n if (!this.parentRule) return;\r\n const domRule = this.parentRule.domRule;\r\n\r\n if (domRule && (domRule as CSSStyleRule).style) {\r\n let style: CSSStyleDeclaration = (domRule as CSSStyleRule).style;\r\n style.setProperty(this.cssName, String(this.value));\r\n\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n style.setProperty(`-${prefix}-${this.cssName}`, String(this.value));\r\n });\r\n }\r\n }\r\n }\r\n _dispose(): void {\r\n this.value = \"\";\r\n this.parentRule = null as any;\r\n }\r\n\r\n set(value: StyleValue): void {\r\n\r\n if (typeof value === \"function\") {\r\n let listener = (() => {\r\n if (!this.parentRule || this.parentRule.parentNode?._disposed) return;\r\n this.value = value(listener);\r\n this._domUpdate();\r\n }) as unknown as Listener;\r\n\r\n listener.onSubscribe = (release: () => void) => {\r\n this.parentRule.parentNode?.addHook(\"BeforeRemove\", () => {\r\n release();\r\n listener = null!;\r\n });\r\n };\r\n\r\n listener.elementNode = this.parentRule!.root!;\r\n listener.debug = `class:${this.parentRule?.root?.tagName}_${this.parentRule?.root?.nodeId} style:${this.name}`;\r\n this.value = value(listener);\r\n } else {\r\n this.value = value;\r\n }\r\n\r\n this._domUpdate();\r\n }\r\n\r\n remove(): void {\r\n if (!this.parentRule) return;\r\n\r\n if (this.parentRule.domRule instanceof CSSStyleRule) {\r\n const domStyle = this.parentRule.domRule.style;\r\n domStyle.removeProperty(this.cssName);\r\n\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n domStyle.removeProperty(`-${prefix}-${this.cssName}`);\r\n });\r\n }\r\n }\r\n delete this.parentRule.styleBlock![this.name];\r\n this._dispose();\r\n }\r\n\r\n cssText(): string {\r\n let str = `${this.cssName}: ${this.value}`;\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n str += `; -${prefix}-${this.cssName}: ${this.value}`;\r\n });\r\n }\r\n return str;\r\n }\r\n}","import { ElementNode } from \"./ElementNode.js\";\r\nimport { StyleProperty } from \"./StyleProperty.js\";\r\nimport { StyleList } from \"./StyleList.js\";\r\n\r\nexport class StyleRule {\r\n selectorText: string;\r\n domRule: CSSRule | CSSMediaRule | CSSKeyframesRule | null = null;\r\n styleList: StyleList | null;\r\n styleBlock: Record<string, StyleProperty> | null = {};\r\n parent: StyleRule | ElementNode | null;\r\n\r\n constructor(selectorText: string, parent: StyleRule | ElementNode) {\r\n this.selectorText = selectorText;\r\n this.styleList = new StyleList(this);\r\n this.parent = parent;\r\n }\r\n\r\n _dispose(): void {\r\n\r\n if (this.styleBlock) {\r\n for (const prop of Object.values(this.styleBlock)) {\r\n prop._dispose();\r\n }\r\n }\r\n\r\n if (this.styleList) {\r\n this.styleList._dispose();\r\n }\r\n\r\n this.styleBlock = null;\r\n this.styleList = null;\r\n this.domRule = null;\r\n this.parent = null;\r\n }\r\n\r\n get root() {\r\n let node = this.parent;\r\n while (node instanceof StyleRule) {\r\n node = node.parent;\r\n }\r\n return node;\r\n }\r\n\r\n get parentNode(): ElementNode | null {\r\n let root: any = this.parent;\r\n while (root && root instanceof StyleRule) {\r\n root = root.parent;\r\n }\r\n return root as ElementNode;\r\n }\r\n \r\n insertStyle(name: string, val: any): void {\r\n if (!this.styleBlock) return;\r\n if (this.styleBlock[name]) {\r\n this.styleBlock[name].set(val);\r\n } else {\r\n this.styleBlock[name] = new StyleProperty(name, val, this);\r\n }\r\n }\r\n\r\n removeStyle(name: string): void {\r\n if (!this.styleBlock) return;\r\n if (this.styleBlock[name]) {\r\n this.styleBlock[name].remove();\r\n }\r\n }\r\n\r\n cssText(): string {\r\n if (!this.styleBlock || !this.styleList) return \"\";\r\n const styleStr = Object.values(this.styleBlock).map(decl => decl.cssText()).join(\";\");\r\n const nested = this.styleList.cssText();\r\n return `${this.selectorText} { ${styleStr} ${nested} } `;\r\n }\r\n\r\n mount(domRule: CSSRule | CSSKeyframesRule): void {\r\n if (!domRule || !this.styleList) return;\r\n this.domRule = domRule;\r\n if (\"cssRules\" in domRule) {\r\n this.styleList.mount(domRule.cssRules as CSSRuleList);\r\n }\r\n }\r\n\r\n remove(): void {\r\n\r\n if (this.domRule && this.domRule.parentStyleSheet) {\r\n const sheet = this.domRule.parentStyleSheet;\r\n const rules = sheet.cssRules;\r\n for (let i = 0; i < rules.length; i++) {\r\n if (rules[i] === this.domRule) {\r\n sheet.deleteRule(i);\r\n break;\r\n }\r\n }\r\n }\r\n this._dispose();\r\n }\r\n\r\n render(domSheet: CSSStyleSheet | CSSGroupingRule) {\r\n if (!this.styleBlock || !this.styleList) return;\r\n const styleStr = Object.values(this.styleBlock).map(decl => decl.cssText()).join(\";\");\r\n try {\r\n if (!this.selectorText.startsWith(\"@\")) {\r\n const css = `${this.selectorText} { ${styleStr} }`;\r\n const index = domSheet.insertRule(css, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n if (domRule && \"selectorText\" in domRule) {\r\n this.mount(domRule);\r\n }\r\n } else if (/^@(media|supports|container|layer)\\b/.test(this.selectorText)) {\r\n const index = domSheet.insertRule(`${this.selectorText} {}`, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n if (\"cssRules\" in domRule) {\r\n this.mount(domRule as CSSGroupingRule);\r\n this.styleList.render(domRule as CSSGroupingRule);\r\n }\r\n } else if (this.selectorText.startsWith(\"@keyframes\") || this.selectorText.startsWith(\"@font-face\")) {\r\n const css = this.cssText();\r\n const index = domSheet.insertRule(css, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n this.mount(domRule);\r\n }\r\n } catch (err) {\r\n console.warn(\"Failed to insert rule:\", this.selectorText, err);\r\n }\r\n }\r\n}","import { ElementNode } from \"./ElementNode.js\";\r\nimport { selectorSplitter } from \"../helpers.js\";\r\nimport { StyleRule } from \"./StyleRule.js\";\r\n\r\nexport class StyleList {\n parent: StyleRule | ElementNode | null;\n items: StyleRule[] = [];\n domStyle: HTMLStyleElement | null = null;\n\r\n constructor(parent: StyleRule | ElementNode) {\r\n this.parent = parent;\r\n }\r\n\r\n get parentNode(): ElementNode | null {\r\n let root: any = this.parent;\r\n while (root && root instanceof StyleRule) {\r\n root = root.parent;\r\n }\r\n return root as ElementNode;\r\n }\r\n\r\n addCSS(obj: Record<string, any>, parentSelector: string = \"\"): void {\n if (!this.items || !this.parent) return;\n const basic: Record<string, any> = {};\r\n\r\n function getSelector(selector: string, prev: string): string {\r\n return selector.startsWith(\"&\")\r\n ? `${prev}${selector.slice(1)}`\r\n : `${prev} ${selector}`;\r\n }\r\n\r\n for (const selector in obj) {\r\n const value = obj[selector];\r\n let splitKeys = selectorSplitter(selector);\r\n for (let key of splitKeys) {\r\n const currentSelector = getSelector(key, parentSelector);\r\n if (/^@(container|layer|supports|media)\\b/.test(key)) {\r\n if (typeof value === \"object\" && value != null) {\r\n const rule = new StyleRule(key, this.parent);\r\n rule.styleList!.addCSS(value, parentSelector);\r\n this.items.push(rule);\n }\r\n } else if (key.startsWith(\"@keyframes\")) {\r\n const rule = new StyleRule(key, this.parent);\r\n rule.styleList!.addCSS(value, \"\");\r\n this.items.push(rule);\n } else if (key.startsWith(\"@font-face\")) {\r\n const rule = new StyleRule(key, this.parent);\r\n for (const k in value) rule.insertStyle(k, value[k]);\r\n this.items.push(rule);\n } else if (typeof value === \"object\" && value != null) {\r\n const rule = new StyleRule(currentSelector, this.parent);\r\n this.items.push(rule);\n for (const [k, v] of Object.entries(value)) {\r\n if (typeof v === \"object\" && v != null) {\r\n let newSelector = getSelector(k, currentSelector);\r\n if (k.startsWith(\"&\")) {\r\n this.addCSS(v, newSelector);\r\n } else {\r\n const r = rule.styleList!.insertRule(newSelector);\r\n r.styleList!.addCSS(v, newSelector);\r\n }\r\n } else {\r\n rule.insertStyle(k, v);\r\n }\r\n }\r\n } else {\r\n basic[key] = value;\r\n }\r\n }\r\n }\r\n\r\n if (Object.keys(basic).length) {\r\n const rule = new StyleRule(parentSelector, this.parent);\r\n for (const key in basic) rule.insertStyle(key, basic[key]);\r\n this.items.push(rule);\n }\n }\n\n cssText(): string {\n if (!this.items) return \"\";\n return this.items.map((rule) => rule.cssText()).join(\"\");\n }\n\n insertRule(selector: string): StyleRule {\n if (!this.items || !this.parent) return null as any;\n let rule = this.items.find((rule) => rule.selectorText === selector);\n if (!rule) {\n rule = new StyleRule(selector, this.parent);\n this.items.push(rule);\n }\n return rule;\n }\n\n mount(domRuleList: CSSRuleList): void {\n if (!this.items) return;\n if (!domRuleList) throw Error(\"Require domRuleList argument\");\n let wrongCount = 0;\n const fixOddEven = (css: string) => css.replace(\"(odd)\", \"(2n+1)\").replace(\"(even)\", \"(2n)\");\n\n this.items.forEach((rule, i) => {\n const index = i - wrongCount;\r\n const domRule = domRuleList[index];\r\n if (!domRule) return;\r\n if (rule.selectorText.startsWith(\"@\") && domRule instanceof CSSKeyframesRule) {\r\n rule.mount(domRule);\r\n } else if (\"keyText\" in domRule) {\r\n rule.mount(domRule);\r\n } else if (\"selectorText\" in domRule) {\r\n if (domRule.selectorText !== fixOddEven(rule.selectorText)) {\r\n wrongCount += 1;\r\n } else {\r\n rule.mount(domRule);\r\n }\r\n } else if (\"cssRules\" in domRule) {\r\n rule.mount(domRule as CSSMediaRule);\r\n }\r\n });\r\n }\r\n\r\n render(dom: HTMLStyleElement | CSSGroupingRule) {\n if (dom instanceof HTMLStyleElement) {\n this.domStyle = dom\n this.items.forEach((rule) => rule.render(dom.sheet!));\n } else if (dom instanceof CSSGroupingRule) {\n this.items.forEach((rule) => rule.render(dom));\n }\n }\n\n _dispose(): void {\n\n if (this.items) {\n for (let i = 0; i < this.items.length; i++) {\n this.items[i]._dispose();\n }\n }\n\n this.items = [];\n this.parent = null;\n this.domStyle = null;\n }\n}\n","import type { DomphyElement, EventName, HookMap, TagName, PartialElement } from \"../types.js\";\r\nimport { AttributeList } from \"./AttributeList.js\";\r\nimport { ElementList } from \"./ElementList.js\";\r\nimport { StyleList } from \"./StyleList.js\";\r\nimport { validate, mergePartial, getTagName, deepClone, ensureDomStyle } from \"../helpers.js\";\r\nimport { merge, hashString } from \"../utils.js\";\r\nimport { SvgTags } from \"../constants.js\"\r\n\r\nexport class ElementNode {\r\n _disposed = false\r\n type = \"ElementNode\"\r\n parent: ElementNode | null = null;\r\n _portal?: (root: ElementNode) => HTMLElement;\r\n tagName: TagName;\r\n children = new ElementList(this);\r\n styles = new StyleList(this);\r\n attributes = new AttributeList(this);\r\n domElement?: HTMLElement | null = null;\r\n _hooks: HookMap = {};\r\n _events?: { [K in EventName]?: (event: Event, node: ElementNode) => void } | null = null;\r\n _context?: Record<string, any> = {};\r\n _metadata?: Record<string, any> = {};\r\n key?: string | number | null = null;\r\n nodeId: string\r\n\r\n constructor(domphyElement: DomphyElement, _parent: ElementNode | null = null, index = 0) {\r\n domphyElement = deepClone(domphyElement)\r\n validate(domphyElement)\r\n domphyElement.style = domphyElement.style || {}\r\n this.parent = _parent;\r\n this.tagName = getTagName(domphyElement) as TagName;\r\n domphyElement = mergePartial(domphyElement) as DomphyElement\r\n\r\n this.key = (domphyElement as any)._key ?? null;\r\n this._context = domphyElement._context || {}\r\n this._metadata = domphyElement._metadata || {}\r\n\r\n let tempPath = `${this.parent?.nodeId}.${index}`\r\n const str = JSON.stringify(domphyElement.style || {}, (k, v) => typeof v === \"function\" ? tempPath : v,);\r\n this.nodeId = hashString(tempPath + str)\r\n\r\n this.attributes!.addClass(`${this.tagName}_${this.nodeId}`);\r\n if (domphyElement._onSchedule) domphyElement._onSchedule(this, domphyElement)\r\n\r\n this.merge(domphyElement)\r\n\r\n const children = (domphyElement as any)[this.tagName];\r\n\r\n if (children != null && children != undefined) {\r\n if (typeof children === \"function\") {\r\n\r\n let listener: any = () => {\r\n if (this._disposed) return\r\n let input = children(listener)\r\n this.children!.update(Array.isArray(input) ? input : [input])\r\n }\r\n\r\n listener!.elementNode = this;\r\n listener!.debug = `class:${this.tagName}_${this.nodeId} children`;\r\n listener!.onSubscribe = (release: () => void) => this.addHook(\"BeforeRemove\", () => {\r\n release()\r\n listener = null\r\n });\r\n listener && listener();\r\n } else {\r\n this.children!.update(Array.isArray(children) ? children : [children])\r\n }\r\n }\r\n this._hooks.Init && this._hooks.Init(this)\r\n }\r\n\r\n _createDOMNode() {\r\n const svgNamespace = \"http://www.w3.org/2000/svg\"\r\n let node = SvgTags.includes(this.tagName)\r\n ? document.createElementNS(svgNamespace, this.tagName)\r\n : document.createElement(this.tagName)\r\n\r\n this.domElement = node as HTMLElement\r\n\r\n if (this._events) {\r\n for (const key in this._events) {\r\n const eventName = key as EventName;\r\n const handler = this._events[eventName] as (event: Event, node: ElementNode) => void;\r\n let fn: any = (event: Event) => handler(event, this)\r\n node.addEventListener(eventName, fn)\r\n this.addHook(\"BeforeRemove\", (n) => {\r\n n.domElement!.removeEventListener(eventName, fn)\r\n fn = null\r\n })\r\n }\r\n }\r\n\r\n if (this.attributes) {\r\n Object.values(this.attributes.items!).forEach(attr => attr.render())\r\n }\r\n return node\r\n }\r\n\r\n _dispose(): void {\r\n this._disposed = true\r\n if (this.children) {\r\n \r\n this.children._dispose();\r\n }\r\n\r\n if (this.styles) {\r\n this.styles.items!.forEach((rule) => rule.remove());\r\n this.styles._dispose();\r\n }\r\n\r\n if (this.attributes) {\r\n this.attributes._dispose();\r\n }\r\n\r\n this.domElement = null;\r\n this._hooks = {};\r\n this._events = null;\r\n this._context = {};\r\n this._metadata = {};\r\n this.parent = null;\r\n }\r\n merge(part: PartialElement) {\r\n merge(this._context, part._context)\r\n merge(this._metadata, part._metadata)\r\n\r\n const keys = Object.keys(part)\r\n for (let i = 0; i < keys.length; i++) {\r\n const originalKey = keys[i];\r\n const value = (part as any)[originalKey];\r\n if ([\"$\", \"_onSchedule\", \"_key\", \"_context\", \"_metadata\", \"style\", this.tagName].includes(originalKey)) {\r\n continue\r\n } else if ([\"_onInit\", \"_onInsert\", \"_onMount\", \"_onBeforeUpdate\", \"_onUpdate\", \"_onBeforeRemove\", \"_onRemove\"].includes(originalKey)) {\r\n this.addHook(originalKey.substring(3) as keyof HookMap, value);\r\n } else if (originalKey.startsWith(\"on\")) {\r\n this.addEvent(originalKey.substring(2).toLowerCase() as EventName, value);\r\n } else if (originalKey == \"_portal\") {\r\n this._portal = value\r\n } else if (originalKey == \"class\" && typeof value === \"string\") {\r\n this.attributes!.addClass(value);\r\n } else {\r\n this.attributes!.set(originalKey, value);\r\n }\r\n }\r\n if (part.style) {\r\n this.styles.addCSS(part.style || {}, `.${`${this.tagName}_${this.nodeId}`}`);\r\n }\r\n\r\n }\r\n addEvent(name: EventName, callback: (event: Event, node: ElementNode) => void): void {\r\n\r\n this._events = this._events || {}\r\n\r\n let current = this._events[name]\r\n if (typeof current == \"function\") {\r\n this._events[name] = (event: Event, node: ElementNode) => {\r\n current!(event, node)\r\n callback(event, node)\r\n }\r\n } else {\r\n this._events[name] = callback\r\n }\r\n }\r\n\r\n addHook<K extends keyof HookMap>(name: K, callback: HookMap[K]): void {\r\n const current = this._hooks[name];\r\n\r\n if (typeof current === \"function\") {\r\n this._hooks[name] = ((...args: any[]) => {\r\n (current as Function)(...args);\r\n (callback as Function)(...args);\r\n }) as HookMap[K];\r\n } else {\r\n this._hooks[name] = callback;\r\n }\r\n }\r\n getRoot(): ElementNode {\r\n let root: ElementNode = this;\r\n while (root && root instanceof ElementNode && root.parent) {\r\n root = root.parent;\r\n }\r\n return root\r\n }\r\n\r\n getContext(name: string): any {\r\n let node: ElementNode | null = this;\r\n while (node && (!node._context || !Object.prototype.hasOwnProperty.call(node._context, name))) {\r\n node = node.parent;\r\n }\r\n return node && node._context ? node._context[name] : undefined;\r\n }\r\n\r\n setContext(name: string, value: any) {\r\n this._context = this._context || {}\r\n this._context[name] = value;\r\n }\r\n\r\n getMetadata(name: string): any {\r\n return this._metadata ? this._metadata[name] : undefined;\r\n }\r\n\r\n setMetadata(key: string, value: any) {\r\n this._metadata = this._metadata || {}\r\n this._metadata[key] = value;\r\n\r\n }\r\n\r\n generateCSS(): string {\r\n if (!this.styles || !this.children) return \"\";\r\n let css = this.styles.cssText()\r\n css += this.children.items.map(child => child instanceof ElementNode ? child.generateCSS() : \"\").join(\"\")\r\n return css\r\n }\r\n\r\n generateHTML(): string {\r\n if (!this.children || !this.attributes) return \"\";\r\n let content = this.children.generateHTML();\r\n const attributes = this.attributes.generateHTML();\r\n return `<${this.tagName}${attributes}>${content}</${this.tagName}>`;\r\n }\r\n\r\n mount(domElement: HTMLElement, domStyle?: HTMLStyleElement): void {\r\n if (!domElement) throw new Error(\"Missing dom node on bind\");\r\n this.domElement = domElement;\r\n\r\n if (this._events) {\r\n for (const key in this._events) {\r\n const eventName = key as EventName;\r\n const handler = this._events[eventName] as (event: Event, node: ElementNode) => void;\r\n let fn: any = (event: Event) => handler(event, this)\r\n domElement.addEventListener(eventName, fn)\r\n this.addHook(\"BeforeRemove\", (n) => {\r\n n.domElement!.removeEventListener(eventName, fn)\r\n fn = null\r\n })\r\n }\r\n }\r\n\r\n if (this.children) {\r\n this.children.items.forEach((child, i) => {\r\n const childNode = domElement.childNodes[i];\r\n if (childNode instanceof Node && child instanceof ElementNode) {\r\n child.mount(childNode as HTMLElement, domStyle);\r\n }\r\n });\r\n }\r\n\r\n this._hooks.Mount && this._hooks.Mount(this)\r\n }\r\n\r\n render(domElement: HTMLElement | SVGElement | DocumentFragment): HTMLElement | SVGElement {\r\n const newNode = this._createDOMNode();\r\n domElement.appendChild(newNode)\r\n this._hooks.Mount && this._hooks.Mount(this)\r\n let domStyle = this.getRoot().styles.domStyle\r\n let root = domElement.getRootNode()\r\n const styleParent = root instanceof ShadowRoot ? root : document.head\r\n domStyle ||= ensureDomStyle(styleParent)\r\n this.styles.render(domStyle as HTMLStyleElement)\r\n this.children.items.forEach(child => {\r\n if (child instanceof ElementNode && child._portal) {\r\n let dom = child._portal!(this.getRoot())\r\n dom && child.render(dom)\r\n } else {\r\n child.render(newNode)\r\n }\r\n })\r\n return newNode;\r\n }\r\n\r\n remove() {\r\n if (this.parent) {\r\n this.parent.children.remove(this)\r\n\r\n } else {\r\n this.domElement?.remove()\r\n this._dispose();\r\n }\r\n }\r\n}\r\n","import { Notifier } from \"./Notifier.js\"\r\n\r\ntype Listener = (...args: any[]) => void\r\n\r\nexport class RecordState<T extends Record<string, any> = Record<string, any>> {\r\n private _notifier = new Notifier()\r\n private _record: T\r\n readonly initialRecord: T\r\n\r\n constructor(record: T) {\r\n this.initialRecord = { ...record }\r\n this._record = { ...record }\r\n }\r\n\r\n get<K extends keyof T>(key: K, l?: Listener): T[K] {\r\n if (l) this._notifier.addListener(key as string, l)\r\n return this._record[key]\r\n }\r\n\r\n set<K extends keyof T>(key: K, value: T[K]): void {\r\n this._record[key] = value\r\n this._notifier.notify(key as string)\r\n }\r\n\r\n addListener<K extends keyof T>(key: K, fn: Listener): () => void {\r\n return this._notifier.addListener(key as string, fn)\r\n }\r\n\r\n removeListener<K extends keyof T>(key: K, fn: Listener): void {\r\n this._notifier.removeListener(key as string, fn)\r\n }\r\n\r\n reset<K extends keyof T>(key: K): void {\r\n this.set(key, this.initialRecord[key])\r\n }\r\n\r\n _dispose(): void {\r\n this._notifier._dispose()\r\n }\r\n}\r\n","import { ThemeInput } from \"./types.js\";\r\n\r\nlet light: ThemeInput = {\r\n direction: \"darken\",\r\n colors: {\r\n \"primary\": [\r\n \"#ffffff\",\r\n \"#e3ecff\",\r\n \"#c6daff\",\r\n \"#aac8ff\",\r\n \"#8fb6ff\",\r\n \"#76a3ff\",\r\n \"#5f91fc\",\r\n \"#4a7ff4\",\r\n \"#386ee7\",\r\n \"#2a5ed7\",\r\n \"#1e4ec2\",\r\n \"#1440aa\",\r\n \"#0c3290\",\r\n \"#072674\",\r\n \"#041a57\",\r\n \"#020f38\",\r\n \"#010419\",\r\n \"#000000\"\r\n ],\r\n \"secondary\": [\r\n \"#ffffff\",\r\n \"#fce6ea\",\r\n \"#faced6\",\r\n \"#f7b5c2\",\r\n \"#f29db0\",\r\n \"#ec859e\",\r\n \"#e36e8d\",\r\n \"#d8597d\",\r\n \"#ca456e\",\r\n \"#b93460\",\r\n \"#a42351\",\r\n \"#8e1643\",\r\n \"#770b36\",\r\n \"#5f0529\",\r\n \"#46031d\",\r\n \"#2d0210\",\r\n \"#130104\",\r\n \"#000000\"\r\n ],\r\n \"info\": [\r\n \"#ffffff\",\r\n \"#dcf0f9\",\r\n \"#b7e1f6\",\r\n \"#90d2f1\",\r\n \"#6ac3eb\",\r\n \"#42b4e2\",\r\n \"#16a4d5\",\r\n \"#0094c4\",\r\n \"#0084b2\",\r\n \"#00739e\",\r\n \"#00638a\",\r\n \"#005476\",\r\n \"#004461\",\r\n \"#00354d\",\r\n \"#002638\",\r\n \"#001623\",\r\n \"#00070d\",\r\n \"#000000\"\r\n ],\r\n \"success\": [\r\n \"#ffffff\",\r\n \"#e3f3dc\",\r\n \"#c6e8b8\",\r\n \"#a9dd94\",\r\n \"#8ed171\",\r\n \"#75c450\",\r\n \"#61b635\",\r\n \"#51a51f\",\r\n \"#429304\",\r\n \"#358100\",\r\n \"#2a7000\",\r\n \"#215f00\",\r\n \"#194d00\",\r\n \"#123c00\",\r\n \"#0b2b00\",\r\n \"#051a00\",\r\n \"#010900\",\r\n \"#000000\"\r\n ],\r\n \"warning\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"attention\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"error\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"danger\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"highlight\": [\r\n \"#ffffff\",\r\n \"#f9f5cd\",\r\n \"#f4eb95\",\r\n \"#efe05a\",\r\n \"#e6d427\",\r\n \"#d3c100\",\r\n \"#bfad00\",\r\n \"#ab9b00\",\r\n \"#988900\",\r\n \"#857700\",\r\n \"#736600\",\r\n \"#615600\",\r\n \"#4f4600\",\r\n \"#3e3600\",\r\n \"#2c2700\",\r\n \"#1b1700\",\r\n \"#090700\",\r\n \"#000000\"\r\n ],\r\n \"neutral\": [\r\n \"#ffffff\",\r\n \"#ededed\",\r\n \"#dbdbdb\",\r\n \"#cacaca\",\r\n \"#bababa\",\r\n \"#ababab\",\r\n \"#9b9b9b\",\r\n \"#8d8d8d\",\r\n \"#7e7e7e\",\r\n \"#707070\",\r\n \"#636363\",\r\n \"#565656\",\r\n \"#484848\",\r\n \"#383838\",\r\n \"#282828\",\r\n \"#181818\",\r\n \"#080808\",\r\n \"#000000\"\r\n ]\r\n },\r\n baseTones: {\r\n highlight: 5,\r\n warning: 6,\r\n error: 8,\r\n danger: 8,\r\n secondary: 8,\r\n primary: 9,\r\n info: 8,\r\n success: 8,\r\n neutral: 8,\r\n },\r\n fontSizes: [\"0.75rem\", \"0.875rem\", \"1rem\", \"1.25rem\", \"1.5625rem\", \"1.9375rem\", \"2.4375rem\", \"3.0625rem\"],\r\n densities: [0.75, 1, 1.5, 2, 2.5],\r\n darkBias: 1,\r\n custom: {},\r\n}\r\n\r\nexport default light\r\n","import { ElementNode, Listener } from \"@domphy/core\";\r\nimport { ThemeInput, ThemeVars } from \"./types.js\";\r\nimport light from \"./light.js\";\r\n\r\n// JSON clone (not structuredClone) so the build runs in older embedded\r\n// browsers like SketchUp 2022's CEF, which predates Chromium 98.\r\n// ThemeInput is plain JSON (no Map/Set/Date/typed arrays).\r\nconst clone = <T>(v: T): T => JSON.parse(JSON.stringify(v));\r\n\r\nconst themes: Record<string, ThemeInput> = {\r\n light: clone(light),\r\n dark: createDark(light),\r\n};\r\n\r\nfunction colorSteps(input: ThemeInput): number {\r\n const firstColor = Object.keys(input.colors)[0];\r\n return firstColor ? input.colors[firstColor].length : 0;\r\n}\r\n\r\n// --- Validation ---\r\n\r\nfunction validateTheme(partial: Partial<ThemeInput>): void {\r\n for (let key in partial) {\r\n if (!Object.keys(light).includes(key as keyof ThemeInput)) {\r\n throw new Error(`Invalid key: ${key}`);\r\n }\r\n }\r\n if (partial.fontSizes && !Array.isArray(partial.fontSizes)) {\r\n throw new Error(`fontSize must be array of string`);\r\n }\r\n if (partial.densities) {\r\n if (!Array.isArray(partial.densities) || partial.densities.some(v => typeof v !== \"number\")) {\r\n throw new Error(`densities must be array of number`);\r\n }\r\n }\r\n if (\"custom\" in partial) {\r\n const custom = partial.custom!;\r\n if (typeof custom !== \"object\" || custom === null) {\r\n throw new Error(`Invalid custom property: must be an object`);\r\n }\r\n }\r\n}\r\n\r\n// --- Deep Merge ---\r\n\r\nfunction deepMerge(target: any, source: any): void {\r\n for (const key in source) {\r\n if (\r\n source[key] &&\r\n typeof source[key] === \"object\" &&\r\n !Array.isArray(source[key])\r\n ) {\r\n target[key] ??= {};\r\n deepMerge(target[key], source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n}\r\n\r\n// --- Builders (pure functions) ---\r\n\r\nfunction buildThemeCSS(name: string, input: ThemeInput): string {\r\n const styles: Record<string, string | number> = {};\r\n const toneSteps = colorSteps(input);\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const colorName in input.colors) {\r\n [...Array(toneSteps).keys()].forEach(i =>\r\n styles[`--${colorName}-${i}`] = input.colors[colorName][i]\r\n );\r\n }\r\n } else if (key === \"fontSizes\") {\r\n [...Array(8).keys()].forEach(i =>\r\n styles[`--fontSize-${i}`] = input.fontSizes[i]\r\n );\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n styles[`--${key}-${k.replace(\"/\", \"_\")}`] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n let text = \"\";\r\n for (const prop in styles) {\r\n text += ` ${prop}: ${styles[prop]};\\n`;\r\n }\r\n return `[data-theme=\"${name}\"] {\\n${text}}`;\r\n}\r\n\r\n// --- Public API ---\r\n\r\nexport function getTheme(name: string): ThemeInput {\r\n if (!themes[name]) throw Error(`Theme \"${name}\" not found`);\r\n return themes[name];\r\n}\r\n\r\nexport function setTheme(name: string, input: Partial<ThemeInput>): void {\r\n validateTheme(input);\r\n if (!themes[name]) themes[name] = clone(light);\r\n deepMerge(themes[name], input);\r\n}\r\n\r\nfunction createDark(source: ThemeInput): ThemeInput {\r\n let dark = clone(source)\r\n dark.direction = \"lighten\"\r\n for (let name in dark.colors) {\r\n dark.colors[name].reverse()\r\n dark.baseTones[name] = dark.colors[name].length - 1 - dark.baseTones[name]\r\n }\r\n return dark\r\n}\r\n\r\nexport function themeTokens(name: string): Record<string, any> {\r\n let input = getTheme(name)\r\n const toneSteps = colorSteps(input);\r\n let tokens: Record<string, any> = {};\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = input.colors[name][i]);\r\n tokens[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n tokens.fontSizes = input.fontSizes;\r\n } else if (key === \"densities\") {\r\n tokens.densities = input.densities;\r\n } else {\r\n tokens[key] = {} as any;\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n tokens[key][k] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nexport function themeVars(): ThemeVars {\r\n let input = getTheme(\"light\")\r\n const toneSteps = colorSteps(input);\r\n let theme = {} as ThemeVars;\r\n\r\n for (const key in input) {\r\n const section = key as keyof ThemeVars;\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = `var(--${name}-${i})`);\r\n theme[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n theme.fontSizes = [...Array(8).keys()].map(i => `var(--fontSize-${i})`);\r\n } else if (key === \"densities\") {\r\n continue;\r\n } else {\r\n theme[section] = {} as ThemeVars[typeof section];\r\n if (typeof value === \"object\" && value !== null) {\r\n for (const k in value) {\r\n (theme[section] as Record<string, string>)[k] = `var(--${section as string}-${k.replace(\"/\", \"_\")})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return theme;\r\n}\r\n\r\nexport function themeCSS(): string {\r\n return Object.entries(themes)\r\n .map(([name, input]) => buildThemeCSS(name, input))\r\n .join(\"\\n\")\r\n}\r\n\r\nexport function themeApply(el?: HTMLStyleElement): void {\r\n if (typeof document === \"undefined\") return\r\n if (el) {\r\n el.textContent = themeCSS()\r\n return\r\n } else {\r\n el = document.getElementById(\"domphy-themes\") as HTMLStyleElement\r\n ?? Object.assign(document.createElement(\"style\"), { id: \"domphy-themes\" })\r\n el.textContent = themeCSS()\r\n document.head.appendChild(el)\r\n }\r\n\r\n}\r\n\r\nexport function themeSpacing(n: number) {\r\n return n / 4 + \"em\"\r\n}\r\n\r\nexport function themeName(object: ElementNode | Listener) {\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTheme\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let themeName = \"light\"\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTheme\")) {\r\n themeName = node.attributes.get(\"dataTheme\")\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTheme\", object)\r\n }\r\n return themeName\r\n}\r\n\r\nexport type ThemeColor = keyof ThemeInput[\"colors\"]\r\n","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { themeVars } from \"./theme.js\";\n\nconst ElementSizes = [\"inherit\"];\n\n[...Array(8).keys()].forEach(i =>{\n ElementSizes.push(`decrease-${i}`)\n ElementSizes.push(`increase-${i}`)\n})\n\nexport type ElementSize = typeof ElementSizes[number];\n\nfunction offsetSize(origin: number, size: ElementSize = \"inherit\"): number {\n\n if (!ElementSizes.includes(size!)) {\n throw Error(`size name \"${size}\" invalid`)\n }\n let resultSize: number\n if (size == \"inherit\") {\n resultSize = origin as number\n } else if (size?.startsWith(\"increase-\")) {\n let offset = parseInt(size.replace(\"increase-\", \"\"), 10)\n resultSize = origin + offset;\n } else if (size?.startsWith(\"decrease-\")) {\n let offset = parseInt(size.replace(\"decrease-\", \"\"), 10)\n resultSize = origin - offset;\n } else {\n resultSize = origin\n }\n return Math.max(0, Math.min(8, resultSize))\n}\n\nfunction contextSize(object: ElementNode | Listener | null): number {\n\n if (!object) return 2\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataSize\"))) {\n node = node.parent as ElementNode\n }\n\n let size = 2\n\n if (node && node.attributes && node.attributes.has(\"dataSize\")) {\n size = offsetSize(size, node.attributes.get(\"dataSize\"))\n typeof object == \"function\" && node.attributes.addListener(\"dataSize\", object)\n }\n return size\n}\n\n\nexport function themeSize(object: ElementNode | Listener, size: ElementSize = \"inherit\"): string {\n let index = offsetSize(contextSize(object), size)\n return themeVars().fontSizes[index]\n}","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { getTheme, themeName } from \"./theme.js\";\n\nconst ElementDensities = [\"inherit\"];\n\n[...Array(5).keys()].forEach(i => {\n ElementDensities.push(`decrease-${i}`);\n ElementDensities.push(`increase-${i}`);\n});\n\nexport type ElementDensity = typeof ElementDensities[number];\n\nfunction offsetDensity(origin: number, density: ElementDensity = \"inherit\"): number {\n\n if (!ElementDensities.includes(density!)) {\n throw Error(`density name \"${density}\" invalid`);\n }\n let resultDensity: number;\n if (density == \"inherit\") {\n resultDensity = origin as number;\n } else if (density?.startsWith(\"increase-\")) {\n let offset = parseInt(density.replace(\"increase-\", \"\"), 10);\n resultDensity = origin + offset;\n } else if (density?.startsWith(\"decrease-\")) {\n let offset = parseInt(density.replace(\"decrease-\", \"\"), 10);\n resultDensity = origin - offset;\n } else {\n resultDensity = origin;\n }\n return Math.max(0, Math.min(4, resultDensity));\n}\n\nfunction contextDensity(object: ElementNode | Listener | null): number {\n\n if (!object) return 2;\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode;\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataDensity\"))) {\n node = node.parent as ElementNode;\n }\n\n let density = 2;\n\n if (node && node.attributes && node.attributes.has(\"dataDensity\")) {\n density = offsetDensity(density, node.attributes.get(\"dataDensity\"));\n typeof object == \"function\" && node.attributes.addListener(\"dataDensity\", object);\n }\n return density;\n}\n\nexport function themeDensity(object: ElementNode | Listener | null): number {\n let index = contextDensity(object);\n return getTheme(object ? themeName(object) : \"light\").densities[index];\n}\n","import { themeVars, themeTokens, getTheme, themeName } from \"./theme.js\"\r\nimport light from \"./light.js\";\r\nimport type { Listener, ElementNode } from \"@domphy/core\";\r\n\r\nconst TONE_STEPS = light.colors.neutral.length\r\n\r\nconst ElementTones = [\"inherit\", \"base\"];\r\n\r\n[...Array(TONE_STEPS).keys()].forEach(i => {\r\n ElementTones.push(`decrease-${i}`)\r\n ElementTones.push(`increase-${i}`)\r\n ElementTones.push(`shift-${i}`)\r\n})\r\n\r\nexport type ElementTone = typeof ElementTones[number];\r\n\r\nfunction adjustTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let newIndex = tone + level;\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction shiftTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let midpoint = Math.floor((TONE_STEPS - 1) / 2)\r\n let newIndex = tone <= midpoint ? tone + level : tone - level\r\n newIndex = newIndex < 0 || newIndex > TONE_STEPS - 1 ? - newIndex : newIndex\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction offsetTone(originTone: number, tone: ElementTone = \"inherit\"): number {\r\n\r\n if (typeof tone == \"number\") return tone\r\n\r\n if (tone == \"inherit\") return originTone\r\n\r\n if (!ElementTones.includes(tone!)) {\r\n throw Error(`tone name \"${tone}\" invalid`)\r\n }\r\n\r\n if (tone.startsWith(\"increase-\")) {\r\n let offset = parseInt(tone.replace(\"increase-\", \"\"), 10)\r\n return adjustTone(originTone, offset);\r\n\r\n } else if (tone.startsWith(\"decrease-\")) {\r\n let offset = parseInt(tone.replace(\"decrease-\", \"\"), 10)\r\n return adjustTone(originTone, - offset);\r\n\r\n } else if (tone.startsWith(\"shift-\")) {\r\n let offset = parseInt(tone.replace(\"shift-\", \"\"), 10)\r\n return shiftTone(originTone, offset);\r\n\r\n } else {\r\n return originTone\r\n }\r\n}\r\n\r\nfunction contextTone(object: ElementNode | Listener | null): number {\r\n\r\n if (!object) return 0\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTone\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let tone = 0\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTone\")) {\r\n tone = offsetTone(tone, node.attributes.get(\"dataTone\"))\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTone\", object)\r\n }\r\n return tone\r\n}\r\n\r\nfunction themeTone(object: ElementNode | Listener, tone: ElementTone = \"inherit\"): number {\r\n\r\n return offsetTone(contextTone(object), tone)\r\n}\r\n\r\nfunction biasContext(context: number, direction: string, bias: number): number {\r\n if (bias <= 0) return context\r\n if (direction === \"lighten\" && context === 0) return bias\r\n if (direction === \"darken\" && context === TONE_STEPS - 1) return TONE_STEPS - 1 - bias\r\n return context\r\n}\r\n\r\nexport function themeColor(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let themeColor = color == \"inherit\" ? \"neutral\" : color;\r\n\r\n if (!object) {\r\n return themeVars()[themeColor][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(themeName(object)).baseTones[themeColor]\r\n } else {\r\n let theme = getTheme(themeName(object))\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n let colors = themeVars()[themeColor]\r\n if (!colors){\r\n throw Error(`color \"${JSON.stringify(themeColor)}\" not found on theme \"${themeName(object)}`)\r\n }\r\n let resultColor = colors[resultTone]\r\n\r\n return resultColor\r\n}\r\n\r\nexport function themeColorToken(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let colorName = color == \"inherit\" ? \"neutral\" : color;\r\n let name = object ? themeName(object as ElementNode | Listener) : \"light\";\r\n let tokens = themeTokens(name);\r\n\r\n if (!object) {\r\n return tokens[colorName][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(name).baseTones[colorName]\r\n } else {\r\n let theme = getTheme(name)\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n\r\n return tokens[colorName][resultTone]\r\n}\r\n","export * from \"./patches.js\"\r\nexport * from \"./classes.js\"\r\nexport * from \"./types.js\"\r\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction abbreviation(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"abbr\") {\n console.warn(`\"abbreviation\" primitive patch must use abbr tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n textDecorationLine: \"underline\",\n textDecorationStyle: \"dotted\",\n textDecorationColor: (listener) => themeColor(listener, \"shift-7\", color.get(listener)),\n textUnderlineOffset: themeSpacing(0.72),\n cursor: \"help\",\n \"&:hover\": {\n color: (listener) => themeColor(listener, \"shift-11\", accentColor.get(listener)),\n textDecorationColor: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n },\n },\n };\n}\n\nexport { abbreviation };\n","import { type PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction card(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n return {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"1fr auto\",\n gridTemplateAreas: '\"image image\" \"title aside\" \"desc aside\" \"content content\" \"footer footer\"',\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n outlineOffset: \"-1px\",\n overflow: \"hidden\",\n \"& > img\": {\n gridArea: \"image\",\n width: \"100%\",\n height: \"auto\",\n display: \"block\",\n },\n \"& > :is(h1,h2,h3,h4,h5,h6)\": {\n gridArea: \"title\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n fontWeight: \"600\",\n margin: 0\n },\n \"& > p\": {\n gridArea: \"desc\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n margin: 0\n },\n \"& > aside\": {\n gridArea: \"aside\",\n alignSelf: \"center\",\n padding: (listener) => themeSpacing(themeDensity(listener) * 2),\n height: \"auto\",\n },\n \"& > div\": {\n gridArea: \"content\",\n padding: (listener) => themeSpacing(themeDensity(listener) * 4),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n },\n \"& > footer\": {\n gridArea: \"footer\",\n display: \"flex\",\n gap: themeSpacing(2),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n borderTop: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n },\n },\n };\n}\n\nexport { card };\n","import { type PartialElement, merge, toState } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction splitter(props: {\r\n direction?: \"horizontal\" | \"vertical\";\r\n defaultSize?: number;\r\n min?: number;\r\n max?: number;\r\n} = {}): PartialElement {\r\n const { direction = \"horizontal\", defaultSize = 50, min = 10, max = 90 } = props;\r\n return {\r\n _onSchedule: (node, element) => {\r\n merge(element, {\r\n _context: {\r\n splitter: {\r\n direction,\r\n size: toState(defaultSize),\r\n min,\r\n max,\r\n },\r\n },\r\n });\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: direction === \"horizontal\" ? \"row\" : \"column\",\r\n overflow: \"hidden\",\r\n },\r\n };\r\n}\r\n\r\nfunction splitterPanel(): PartialElement {\r\n return {\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"splitter\");\r\n const el = node.domElement as HTMLElement;\r\n const prop = ctx.direction === \"horizontal\" ? \"width\" : \"height\";\r\n\r\n el.style[prop] = `${ctx.size.get()}%`;\r\n el.style.flexShrink = \"0\";\r\n el.style.overflow = \"auto\";\r\n\r\n const release = ctx.size.addListener((size: number) => {\r\n el.style[prop] = `${size}%`;\r\n });\r\n node.addHook(\"Remove\", release);\r\n },\r\n };\r\n}\r\n\r\nfunction splitterHandle(): PartialElement {\r\n return {\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"splitter\");\r\n const handle = node.domElement as HTMLElement;\r\n const isHorizontal = ctx.direction === \"horizontal\";\r\n\r\n handle.style.cursor = isHorizontal ? \"col-resize\" : \"row-resize\";\r\n\r\n const onMousedown = (e: MouseEvent) => {\r\n e.preventDefault();\r\n const container = handle.parentElement!;\r\n\r\n const onMousemove = (e: MouseEvent) => {\r\n const rect = container.getBoundingClientRect();\r\n const raw = isHorizontal\r\n ? ((e.clientX - rect.left) / rect.width) * 100\r\n : ((e.clientY - rect.top) / rect.height) * 100;\r\n ctx.size.set(Math.min(Math.max(raw, ctx.min), ctx.max));\r\n };\r\n\r\n const onMouseup = () => {\r\n document.removeEventListener(\"mousemove\", onMousemove);\r\n document.removeEventListener(\"mouseup\", onMouseup);\r\n };\r\n\r\n document.addEventListener(\"mousemove\", onMousemove);\r\n document.addEventListener(\"mouseup\", onMouseup);\r\n };\r\n\r\n handle.addEventListener(\"mousedown\", onMousedown);\r\n node.addHook(\"Remove\", () => handle.removeEventListener(\"mousedown\", onMousedown));\r\n },\r\n style: {\r\n flexShrink: 0,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\"),\r\n \"&:hover\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\"),\r\n },\r\n \"&::after\": {\r\n content: '\"\"',\r\n borderRadius: themeSpacing(999),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-4\"),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { splitter, splitterPanel, splitterHandle };\r\n","import { type PartialElement, merge, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction command(): PartialElement {\r\n return {\r\n _onSchedule: (node, element) => {\r\n merge(element, {\r\n _context: {\r\n command: {\r\n query: toState(\"\"),\r\n },\r\n },\r\n });\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n },\r\n };\r\n}\r\n\r\nfunction commandSearch(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"input\") {\r\n console.warn(`\"commandSearch\" patch must use input tag`);\r\n }\r\n },\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"command\");\r\n const input = node.domElement as HTMLInputElement;\r\n const onInput = () => ctx.query.set(input.value);\r\n input.addEventListener(\"input\", onInput);\r\n node.addHook(\"Remove\", () => input.removeEventListener(\"input\", onInput));\r\n },\r\n style: {\r\n fontFamily: \"inherit\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n border: \"none\",\r\n borderBottom: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-10\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&::placeholder\": {\r\n color: (listener) => themeColor(listener, \"shift-7\"),\r\n },\r\n \"&:focus-visible\": {\r\n borderBottomColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\r\n },\r\n },\r\n };\r\n}\r\n\r\nfunction commandItem(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n return {\r\n role: \"option\",\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"command\");\r\n const el = node.domElement as HTMLElement;\r\n const text = el.textContent?.toLowerCase() ?? \"\";\r\n const release = ctx.query.addListener((q: string) => {\r\n el.hidden = q.length > 0 && !text.includes(q.toLowerCase());\r\n });\r\n node.addHook(\"Remove\", release);\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n width: \"100%\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n outlineOffset: `-${themeSpacing(0.5)}`,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { command, commandSearch, commandItem };\r\n","import { type PartialElement, type ElementNode, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction toggle(props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n return {\n role: \"button\",\n _onInsert: (node) => {\n if (node.tagName !== \"button\") {\n console.warn(`\"toggle\" patch must use button tag`);\n }\n const ctx = node.getContext(\"toggleGroup\");\n const children = node.parent?.children.items as ElementNode[]\n\n let items = children.filter(n => n.type === \"ElementNode\" && n.attributes.get(\"role\") === \"button\");\n const key = node.key !== undefined ? String(node.key) : String(items.findIndex(n => n === node));\n\n node.attributes.set(\"ariaPressed\", (listener) => {\n const val = ctx.value.get(listener);\n return Array.isArray(val) ? val.includes(key) : val === key;\n })\n\n node.addEvent(\"click\", () => {\n const val = ctx.value.get();\n if (ctx.multiple) {\n const arr = Array.isArray(val) ? [...val] : [];\n ctx.value.set(arr.includes(key) ? arr.filter(v => v !== key) : [...arr, key]);\n } else {\n ctx.value.set(val === key ? \"\" : key);\n }\n })\n },\n style: {\n cursor: \"pointer\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n height: themeSpacing(6),\n paddingBlock: themeSpacing(1),\n paddingInline: themeSpacing(2),\n border: \"none\",\n borderRadius: themeSpacing(1),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n transition:\"background-color 300ms ease\",\n \"&:hover:not([disabled])\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&[aria-pressed=true]\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", accentColor.get(listener)),\n color: (listener) => themeColor(listener, \"shift-12\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { toggle };\n","import { type PartialElement, merge, toState, type ValueOrState } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeSize, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction toggleGroup(props: {\r\n value?: ValueOrState<string | string[]>;\r\n multiple?: boolean;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { multiple = false, color = \"neutral\" } = props;\r\n return {\r\n role: \"group\",\r\n _context: {\r\n toggleGroup: {\r\n value: toState(props.value ?? (multiple ? [] : \"\")),\r\n multiple,\r\n },\r\n },\r\n style: {\r\n display: \"flex\",\r\n paddingBlock: themeSpacing(1),\r\n paddingInline: themeSpacing(1),\r\n gap: themeSpacing(1),\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n outlineOffset: \"-1px\",\r\n }\r\n };\r\n}\r\n\r\nexport { toggleGroup };\r\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction inputOTP(): PartialElement {\r\n return {\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: themeSpacing(2),\r\n \"& > *\":{\r\n minWidth:themeSpacing(9) + \"!important\",\n }\r\n },\r\n _onMount: (node) => {\r\n const container = node.domElement as HTMLElement;\r\n const getInputs = () => Array.from(container.querySelectorAll(\"input\")) as HTMLInputElement[];\r\n\r\n const onInput = (e: Event) => {\r\n const inputs = getInputs();\r\n const target = e.target as HTMLInputElement;\r\n const idx = inputs.indexOf(target);\r\n if (target.value && idx < inputs.length - 1) {\r\n inputs[idx + 1].focus();\r\n }\r\n };\r\n\r\n const onKeydown = (e: KeyboardEvent) => {\r\n const inputs = getInputs();\r\n const target = e.target as HTMLInputElement;\r\n const idx = inputs.indexOf(target);\r\n if (e.key === \"Backspace\" && !target.value && idx > 0) {\r\n inputs[idx - 1].focus();\r\n }\r\n if (e.key === \"ArrowLeft\" && idx > 0) inputs[idx - 1].focus();\r\n if (e.key === \"ArrowRight\" && idx < inputs.length - 1) inputs[idx + 1].focus();\r\n };\r\n\r\n const onPaste = (e: ClipboardEvent) => {\r\n e.preventDefault();\r\n const text = e.clipboardData?.getData(\"text\") ?? \"\";\r\n const inputs = getInputs();\r\n const startIdx = inputs.indexOf(e.target as HTMLInputElement);\r\n [...text].forEach((char, i) => {\r\n if (inputs[startIdx + i]) inputs[startIdx + i].value = char;\r\n });\r\n const lastFilled = Math.min(startIdx + text.length - 1, inputs.length - 1);\r\n inputs[lastFilled]?.focus();\r\n };\r\n\r\n container.addEventListener(\"input\", onInput);\r\n container.addEventListener(\"keydown\", onKeydown as EventListener);\r\n container.addEventListener(\"paste\", onPaste as EventListener);\r\n\r\n node.addHook(\"Remove\", () => {\r\n container.removeEventListener(\"input\", onInput);\r\n container.removeEventListener(\"keydown\", onKeydown as EventListener);\r\n container.removeEventListener(\"paste\", onPaste as EventListener);\r\n });\r\n },\r\n };\r\n}\r\n\r\nexport { inputOTP };\r\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction alert(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n role: \"alert\",\n // Alert is a semantic surface block, so it should shift the local surface context.\n dataTone: \"shift-2\",\n style: {\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: themeSpacing(3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n boxShadow: (listener) => `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-8\", color.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n },\n };\n}\n\nexport { alert };\n","import { type PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction avatar(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n style: {\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n borderRadius: \"50%\",\n flexShrink: 0,\n width: themeSpacing(9),\n height: themeSpacing(9),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: \"600\",\n userSelect: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n \"& img\": {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n },\n },\n };\n}\n\nexport { avatar };\n","\nimport { type DomphyElement, type PartialElement, type ValueOrState, toState } from '@domphy/core'\nimport { themeSpacing, themeColor, themeSize, ThemeColor } from \"@domphy/theme\"\n\nfunction badge(props: {\n color?: ValueOrState<ThemeColor>\n label?: ValueOrState<string | number>\n} = {}): PartialElement {\n const { label = 999 } = props\n let state = toState(label)\n const color = toState(props.color ?? \"danger\", \"color\")\n return {\n style: {\n position: \"relative\",\n \"&::after\": {\n content: (l) => `\"${state.get(l)}\"`,\n position: \"absolute\",\n top: 0,\n right: 0,\n transform: \"translate(50%,-50%)\",\n paddingInline:themeSpacing(1),\n minWidth:themeSpacing(6),\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent:\"center\",\n fontSize: (l) => themeSize(l, \"decrease-1\"),\n borderRadius: themeSpacing(999),\n backgroundColor: (l) => themeColor(l, \"shift-9\", color.get(l)),\n color: (l) => themeColor(l, \"shift-0\", color.get(l)),\n }\n }\n }\n}\n\nexport { badge };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction breadcrumb(props: {\n color?: ValueOrState<ThemeColor>;\n separator?: string;\n} = {}): PartialElement {\n const { separator = \"/\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"nav\") console.warn('\"breadcrumb\" patch must use nav tag');\n },\n ariaLabel: \"breadcrumb\",\n style: {\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n gap: themeSpacing(1),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"& > *\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n color: (listener) => themeColor(listener, \"shift-8\", color.get(listener)),\n },\n \"& > *:not(:last-child)::after\": {\n content: `\"${separator}\"`,\n color: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n paddingInlineStart: themeSpacing(1),\n },\n \"& > [aria-current=page]\": {\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n pointerEvents: \"none\",\n },\n },\n };\n}\n\nexport { breadcrumb };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction breadcrumbEllipsis(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"button\") {\n console.warn('\"breadcrumbEllipsis\" patch must use button tag');\n }\n },\n ariaLabel: \"More breadcrumb items\",\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n paddingInline: themeSpacing(1),\n border: \"none\",\n background: \"none\",\n cursor: \"pointer\",\n color: (listener) => themeColor(listener, \"shift-8\", color.get(listener)),\n borderRadius: themeSpacing(1),\n \"&:hover\": {\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", color.get(listener))}`,\n outlineOffset: themeSpacing(0.5),\n },\n },\n };\n}\n\nexport { breadcrumbEllipsis };\n","import type { PartialElement, DomphyElement } from \"@domphy/core\";\nimport { toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nconst xSvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M6.707 5.293l5.293 5.292l5.293 -5.292a1 1 0 0 1 1.414 1.414l-5.292 5.293l5.292 5.293a1 1 0 0 1 -1.414 1.414l-5.293 -5.292l-5.293 5.292a1 1 0 1 1 -1.414 -1.414l5.292 -5.293l-5.292 -5.293a1 1 0 0 1 1.414 -1.414\" /></svg>`\n\nfunction tag(props: {\n color?: ValueOrState<ThemeColor>\n removable?: boolean\n} = {}): PartialElement {\n const { removable=false } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInit: (node) => {\n\n const removeBtn: DomphyElement<\"span\"> = {\n span: xSvg,\n onClick: (e) => { (e as Event).stopPropagation(); node.remove() },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n cursor: \"pointer\",\n borderRadius: themeSpacing(1),\n width: themeSpacing(4),\n height: themeSpacing(4),\n flexShrink: 0,\n \"&:hover\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n }\n }\n }\n\n removable && node.children.insert(removeBtn)\n\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n whiteSpace: \"nowrap\",\n userSelect: \"none\",\n height: themeSpacing(6),\n paddingBlock: \"0px\",\n borderRadius: themeSpacing(1),\n paddingInlineStart: themeSpacing(2),\n paddingInlineEnd: removable ? themeSpacing(1) : themeSpacing(2),\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n },\n };\n}\n\nexport { tag };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { ElementNode, State, PartialElement, DomphyElement, toState, ValueOrState, merge } from \"@domphy/core\";\nimport { computePosition, autoUpdate, offset, flip, shift, type Placement } from \"@floating-ui/dom\";\n\nfunction creatFloating(props: {\n open?: ValueOrState<boolean>;\n placement: State<Placement>;\n content: DomphyElement;\n}) {\n const {\n open = false,\n placement,\n } = props;\n\n let timer: ReturnType<typeof setTimeout> | null = null;\n let cleanup: (() => void) | null = null;\n let reference: HTMLElement | null = null\n let floating: HTMLElement | null = null\n let floatingNode: ElementNode | null = null\n let rootNode: ElementNode | null = null\n let mounted = false\n const openState = toState(open);\n\n const ensureMounted = () => {\n if (mounted || !rootNode) return\n mounted = true\n floatingNode = rootNode.children!.insert(props.content) as ElementNode\n }\n\n const instantShow = () => {\n ensureMounted()\n if (reference && floating) {\n cleanup && cleanup();\n cleanup = autoUpdate(reference, floating, () => {\n computePosition(reference as HTMLElement, floating as HTMLElement, {\n placement: placement.get() as Placement,\n middleware: [offset(12), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y, placement: resolved }) => {\n Object.assign((floating as HTMLElement).style, { left: `${x}px`, top: `${y}px` });\n placement.set(resolved)\n });\n });\n openState.set(true)\n }\n };\n const instantHide = () => { cleanup && cleanup(); cleanup = null; openState.set(false) }\n const show = () => { timer && clearTimeout(timer); timer = setTimeout(instantShow, 100) }\n const hide = () => { timer && clearTimeout(timer); timer = setTimeout(instantHide, 100) }\n\n const floatingPartial: PartialElement = {\n style: {\n position: \"fixed\",\n pointerEvents: \"auto\",\n visibility: (listener) => openState.get(listener) ? \"visible\" : \"hidden\",\n },\n _onMount: (node) => floating = node.domElement as HTMLElement,\n _portal: (rNode) => {\n let overlay = rNode.domElement!.querySelector(`#domphy-floating`);\n if (!overlay) {\n const overlayEle: DomphyElement<\"div\"> = {\n div: [],\n id: `domphy-floating`,\n style: { position: \"fixed\", inset: 0, zIndex: 20, pointerEvents: \"none\" },\n };\n const overlayNode = rNode.children!.insert(overlayEle) as ElementNode;\n overlay = overlayNode.domElement!;\n }\n return overlay;\n },\n };\n\n merge(props.content, floatingPartial);\n\n const anchorPartial: PartialElement = {\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\n _onMount: (node) => {\n rootNode = node.getRoot()\n reference = node.domElement as HTMLElement\n\n const handleOutside = (event: MouseEvent) => {\n if (!openState.get() || !reference || !floating) return;\n const target = event.target as Node;\n if (!reference.contains(target) && !floating.contains(target)) {\n hide()\n }\n }\n node.getRoot().domElement!.addEventListener(\"click\", handleOutside)\n\n node.addHook(\"BeforeRemove\", () => {\n if (timer) clearTimeout(timer);\n floatingNode && floatingNode.remove();\n node.getRoot().domElement!.removeEventListener(\"click\", handleOutside)\n });\n }\n };\n\n return { show, hide, anchorPartial };\n}\n\nexport { creatFloating };\n","import { type PartialElement, type DomphyElement, type StyleObject, type ValueOrState, toState, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeDensity, themeSize, type ThemeColor, } from \"@domphy/theme\";\r\nimport { type Placement } from \"@floating-ui/dom\";\r\nimport { tag } from \"./tag.js\"\r\nimport { creatFloating } from \"../utils/floating.js\"\r\n\r\nfunction combobox(props: {\r\n multiple?: boolean;\r\n value?: ValueOrState<Array<number | string | null | undefined> | number | string | null | undefined>;\r\n options?: Array<{ label: string, value: string }>;\r\n placement?: ValueOrState<Placement>;\r\n content: DomphyElement;\r\n color?: ThemeColor;\r\n open?: ValueOrState<boolean>;\r\n input?: DomphyElement;\r\n}): PartialElement {\r\n const {\r\n options = [],\r\n placement = \"bottom\",\r\n color = \"neutral\",\r\n open = false,\r\n multiple = false\r\n } = props;\r\n\r\n const state = toState(props.value)\r\n let openState = toState(open)\r\n let { show, hide, anchorPartial } = creatFloating({ open: openState, placement: toState(placement), content: props.content })\r\n\r\n const popoverPartial: PartialElement = {\r\n onClick: () => !multiple && hide(),\r\n };\r\n\r\n merge(props.content, popoverPartial);\r\n\r\n const inputStyle: StyleObject = {\r\n border: \"none\",\r\n outline: \"none\",\r\n padding: 0,\r\n margin: 0,\r\n flex: 1,\r\n height: themeSpacing(6),\r\n marginInlineStart: themeSpacing(2),\r\n fontSize: (listener: any) => themeSize(listener, \"inherit\"),\r\n color: (listener: any) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener: any) => themeColor(listener, \"inherit\", color),\r\n }\r\n\r\n let inputElement: DomphyElement\r\n if (props.input) {\r\n merge(props.input, { onFocus: () => show(), style: inputStyle, _key: \"combobox-input\" })\r\n inputElement = props.input\r\n } else {\r\n inputElement = {\r\n input: null,\r\n onFocus: () => show(),\r\n value: (listener: any) => { state.get(listener); return \"\" },\r\n style: inputStyle,\r\n _key: \"combobox-input\"\r\n }\r\n }\r\n\r\n const wrap: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const val = state.get(listener)\r\n const vals = Array.isArray(val) ? val : [val]\r\n const opts = options.filter(opt => vals.includes(opt.value))\r\n const items: DomphyElement[] = opts.map(opt => {\r\n return {\r\n span: opt.label,\r\n $: [tag({ color, removable: true })],\r\n _key: opt.value,\r\n _onRemove: (_node) => {\r\n const cur = state.get()\r\n const curVals = Array.isArray(cur) ? cur : [cur]\r\n const filter = curVals.filter(v => v !== opt.value)\r\n multiple ? state.set(filter as any) : state.set(filter[0] as any)\r\n }\r\n }\r\n })\r\n items.push(inputElement)\r\n return items\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n gap: themeSpacing(1),\r\n }\r\n }\r\n\r\n let partial: PartialElement = {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"combobox\" primitive patch must use div tag`);\r\n }\r\n },\r\n _onInit: (node) => node.children.insert(wrap),\r\n style: {\r\n minWidth: themeSpacing(32),\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n }\r\n };\r\n\r\n merge(anchorPartial, partial)\r\n return anchorPartial\r\n}\r\n\r\nexport { combobox };\r\n","import { toState, ValueOrState, PartialElement } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeSize, type ThemeColor } from \"@domphy/theme\";\r\nimport { type Placement } from \"@floating-ui/dom\";\r\n\r\nfunction popoverArrow(props: {\r\n placement?: ValueOrState<Placement>;\r\n sideOffset?: string;\r\n color?: ThemeColor;\r\n bordered?: boolean;\r\n\r\n} = {}): PartialElement {\r\n let {\r\n placement = \"bottom-end\",\r\n color = \"neutral\",\r\n sideOffset = themeSpacing(6),\r\n bordered = true\r\n } = props\r\n\r\n let place = toState(placement)\r\n\r\n const flipMap: Record<Placement, Placement> = {\r\n \"top\": \"bottom\",\r\n \"bottom\": \"top\",\r\n \"left\": \"right\",\r\n \"right\": \"left\",\r\n \"top-start\": \"bottom-end\",\r\n \"top-end\": \"bottom-start\",\r\n \"bottom-start\": \"top-end\",\r\n \"bottom-end\": \"top-start\",\r\n \"left-start\": \"right-end\",\r\n \"left-end\": \"right-start\",\r\n \"right-start\": \"left-end\",\r\n \"right-end\": \"left-start\",\r\n }\r\n\r\n const getFlipped = (listener: any) => flipMap[place.get(listener)] ?? flipMap[\"bottom-end\"]\r\n const start = (pos: string) => pos.includes(\"start\") ? sideOffset : pos.includes(\"end\") ? \"auto\" : \"50%\"\r\n const end = (pos: string) => pos.includes(\"end\") ? sideOffset : pos.includes(\"start\") ? \"auto\" : \"50%\"\r\n\r\n return {\r\n style: {\r\n fontSize: (listener) => themeSize(listener),\r\n backgroundColor: (listener) => themeColor(listener),\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n position: \"relative\",\r\n \"&::after\": {\r\n content: `\"\"`,\r\n position: \"absolute\",\r\n width: themeSpacing(1.5),\r\n height: themeSpacing(1.5),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n borderWidth: bordered ? \"1px\" : \"0px\",\r\n borderColor: (listener) => themeColor(listener, \"inherit\", color),\r\n borderTopStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n\r\n return pos.includes(\"top\") || pos.includes(\"right\") ? `solid` : \"none\"\r\n },\r\n borderBottomStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n \r\n return pos.includes(\"bottom\") || pos.includes(\"left\") ? `solid` : \"none\"\r\n },\r\n borderLeftStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"top\") || pos.includes(\"left\") ? `solid` : \"none\"\r\n },\r\n borderRightStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"bottom\") || pos.includes(\"right\") ? `solid` : \"none\"\r\n },\r\n top: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"top\") ? 0 : pos.includes(\"bottom\") ? \"auto\" : start(pos)\r\n },\r\n right: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"right\") ? 0 : pos.includes(\"left\") ? \"auto\" : end(pos)\r\n },\r\n bottom: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"bottom\") ? 0 : pos.includes(\"top\") ? \"auto\" : end(pos)\r\n },\r\n left: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"left\") ? 0 : pos.includes(\"right\") ? \"auto\" : start(pos)\r\n },\r\n transform: (listener) => {\r\n const pos = getFlipped(listener)\r\n const x = pos.includes(\"right\") || (pos.includes(\"end\") && !pos.includes(\"left\")) ? \"50%\" : \"-50%\"\r\n const y = pos.includes(\"bottom\") || (pos.includes(\"end\") && !pos.includes(\"top\")) ? \"50%\" : \"-50%\"\r\n return `translate(${x},${y}) rotate(45deg)`\r\n },\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { popoverArrow }","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\r\n\r\nfunction blockquote(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\r\n const color = toState(props.color ?? \"inherit\", \"color\");\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"blockquote\") {\r\n console.warn(`\"blockquote\" primitive patch must use blockquote tag`);\r\n }\r\n },\r\n dataTone: \"shift-2\",\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\r\n boxShadow: (listener) => `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-4\", color.get(listener))}`,\r\n border: \"none\",\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\r\n margin: 0,\r\n },\r\n };\r\n}\r\n\r\nexport { blockquote };\r\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor, } from \"@domphy/theme\";\n\nfunction button(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"button\") {\n console.warn(`\"button\" primitive patch must use button tag`);\n }\n },\n style: {\n appearance: \"none\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n // Single-line bounded control: block/radius = 1D, inline = 3D.\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n width: \"fit-content\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: (listener) => themeSpacing(themeDensity(listener) * 1),\n userSelect: \"none\",\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outlineWidth: \"1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:focus-visible\": {\n boxShadow: (listener) => `inset 0 0 0 ${themeSpacing(0.5)} ${themeColor(listener, \"shift-6\", color.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n \"&[aria-busy=true]\": {\n opacity: 0.7,\n cursor: \"wait\",\n pointerEvents: \"none\",\n },\n },\n };\n}\n\nexport { button };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction inputCheckbox(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"checkbox\",\n _onInsert: (node) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"inputCheckbox\" primitive patch must use input tag`);\n }\n },\n style: {\n appearance: \"none\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n display: \"inline-flex\",\n position: \"relative\",\n width: themeSpacing(6),\n height: themeSpacing(6),\n justifyContent: \"center\",\n alignItems: \"center\",\n transition: \"background-color 300ms, outline-color 300ms\",\n margin: 0,\n padding: 0,\n \"&::before\": {\n content: `\"\"`,\n display: \"block\",\n borderRadius: themeSpacing(1),\n lineHeight: 1,\n cursor: \"pointer\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n width: themeSpacing(4),\n height: themeSpacing(4),\n },\n \"&:hover::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:checked::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:checked:hover:not([disabled])::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:checked::after\": {\n content: `\"\"`,\n display: \"block\",\n position: \"absolute\",\n top: \"25%\",\n insetInlineStart: \"37%\",\n width: \"20%\",\n height: \"30%\",\n border: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"inherit\", accentColor.get(listener))}`,\n borderTop: 0,\n borderInlineStart: 0,\n transform: \"rotate(45deg)\",\n },\n \"&:indeterminate::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", accentColor.get(listener)),\n },\n \"&:indeterminate::after\": {\n content: `\"\"`,\n position: \"absolute\",\n inset: \"30%\",\n backgroundColor: (listener) => themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:indeterminate:hover:not([disabled])::after\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n borderRadius: themeSpacing(1.5),\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n cursor: \"not-allowed\",\n },\n \"&[disabled]::before, &[disabled]::after\": {\n outline: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", \"neutral\"),\n pointerEvents: \"none\",\n },\n }\n }\n}\n\nexport { inputCheckbox };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeSpacing, themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction code(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName != \"code\") {\n console.warn(`\"code\" primitive patch must use code tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n height: themeSpacing(6),\n paddingInline: themeSpacing(1.5),\n borderRadius: themeSpacing(1),\n },\n };\n}\n\nexport { code };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction details(\n props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor>; duration?: number } = {}\n): PartialElement {\n const { duration = 240 } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"details\") {\n console.warn(`\"details\" primitive patch must use details tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n\n overflow: \"hidden\",\n \"& > summary\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n listStyle: \"none\",\n display: \"flex\",\n justifyContent:\"space-between\",\n alignItems: \"center\",\n gap: themeSpacing(2),\n cursor: \"pointer\",\n userSelect: \"none\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n height: themeSpacing(10),\n },\n \"& > summary::-webkit-details-marker\": {\n display: \"none\",\n },\n \"& > summary::marker\": {\n content: `\"\"`,\n },\n \"& > summary::after\": {\n content: `\"\"`,\n width: themeSpacing(2),\n height: themeSpacing(2),\n flexShrink: 0,\n marginTop: `-${themeSpacing(0.5)}`,\n borderInlineEnd: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-9\", color.get(listener))}`,\n borderBottom: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-9\", color.get(listener))}`,\n transform: \"rotate(45deg)\",\n transition: `transform ${duration}ms ease`,\n },\n \"&[open] > summary::after\": {\n transform: \"rotate(-135deg)\",\n },\n \"& > summary:hover\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n },\n \"& > summary:focus-visible\": {\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n outlineOffset: `-${themeSpacing(0.5)}`,\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"& > :not(summary)\": {\n maxHeight: \"0px\",\n opacity: 0,\n overflow: \"hidden\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingTop: 0,\n paddingBottom: 0,\n transition: `max-height ${duration}ms ease, opacity ${duration}ms ease, padding ${duration}ms ease`,\n },\n \"&[open] > :not(summary)\": {\n maxHeight: themeSpacing(250),\n opacity: 1,\n paddingTop: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingBottom: (listener) => themeSpacing(themeDensity(listener) * 3),\n },\n },\n };\n}\n\nexport { details };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction descriptionList(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"dl\") {\n console.warn(`\"descriptionList\" primitive patch must use dl tag`);\n }\n },\n style: {\n display: \"grid\",\n gridTemplateColumns: `minmax(${themeSpacing(24)}, max-content) 1fr`,\n columnGap: themeSpacing(4),\n margin: 0,\n \"& dt\": {\n margin: 0,\n fontWeight: 600,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n },\n \"& dd\": {\n margin: 0,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n },\n };\n}\n\nexport { descriptionList };\n","import { type PartialElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction dialog(props: { color?: ThemeColor; open?: ValueOrState<boolean> } = {}): PartialElement {\r\n const { color = \"neutral\", open = false } = props;\r\n const state = toState(open)\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"dialog\") {\r\n console.warn(`\"dialog\" primitive patch must use dialog tag`);\r\n }\r\n },\r\n onClick: (e: MouseEvent, node) => {\r\n if (e.target !== node.domElement) return\r\n const r = node.domElement!.getBoundingClientRect()\r\n const inside =\r\n e.clientX >= r.left &&\r\n e.clientX <= r.right &&\r\n e.clientY >= r.top &&\r\n e.clientY <= r.bottom\r\n if (!inside) state.set(false)\r\n },\r\n onTransitionEnd: (_e, node) => {\r\n const dlg = node.domElement as HTMLDialogElement\r\n if (dlg.style.opacity === \"0\") {\r\n dlg.close()\r\n document.body.style.overflow = \"\"\r\n }\r\n },\r\n _onMount: (node) => {\r\n const dlg = node.domElement as HTMLDialogElement\r\n const update = (val: boolean) => {\r\n if (val) {\r\n dlg.showModal()\r\n document.body.style.overflow = \"hidden\"\r\n requestAnimationFrame(() => {\r\n dlg.style.opacity = \"1\"\r\n const focusable = dlg.querySelector<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n focusable?.focus()\r\n })\r\n } else {\r\n dlg.style.opacity = \"0\"\r\n }\r\n }\r\n update(state.get())\r\n state.addListener(update)\r\n },\r\n style: {\r\n opacity: \"0\",\r\n transition: \"opacity 200ms ease\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-10\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n border: \"none\",\r\n padding: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n boxShadow: (listener) => `0 ${themeSpacing(9)} ${themeSpacing(16)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n \"&::backdrop\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\r\n opacity: 0.75,\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { dialog };\r\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction emphasis(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"em\") {\n console.warn(`\"emphasis\" primitive patch must use em tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontStyle: \"italic\",\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n },\n };\n}\n\nexport { emphasis };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction figure(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"figure\") {\n console.warn(`\"figure\" primitive patch must use figure tag`);\n }\n },\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: themeSpacing(2),\n marginInline: 0,\n marginTop: themeSpacing(3),\n marginBottom: themeSpacing(3),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n \"& img, & svg, & video, & canvas\": {\n display: \"block\",\n maxWidth: \"100%\",\n borderRadius: themeSpacing(2),\n },\n \"& figcaption\": {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n color: (listener) => themeColor(listener, \"shift-8\", color.get(listener)),\n lineHeight: 1.45,\n },\n },\n };\n}\n\nexport { figure };\n","import { type PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, type ThemeColor } from \"@domphy/theme\";\n\nfunction formGroup(props: { color?: ValueOrState<ThemeColor>; layout?: \"horizontal\" | \"vertical\" } = {}): PartialElement {\n const { layout = \"horizontal\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n const isVertical = layout === \"vertical\";\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"fieldset\") {\n console.warn(`\"formGroup\" patch must use fieldset tag`);\n }\n },\n style: {\n margin: 0,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 3),\n border: \"none\",\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n display: \"grid\",\n gridTemplateColumns: isVertical ? `minmax(0, 1fr)` : `max-content minmax(0, 1fr)`,\n columnGap: themeSpacing(4),\n rowGap: themeSpacing(3),\n alignItems: \"start\",\n \"& > legend\": {\n gridColumn: \"1 / -1\",\n margin: 0,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: 600,\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n },\n \"& > label\": {\n gridColumn: \"1\",\n alignSelf: \"start\",\n margin: 0,\n paddingBlock: (listener) => isVertical ? \"0px\" : themeSpacing(themeDensity(listener) * 1),\n },\n \"& > label:has(+ :not(legend, label, p) + p)\": {\n gridRow: isVertical ? \"auto\" : \"span 2\",\n },\n \"& > :not(legend, label, p)\": {\n gridColumn: isVertical ? \"1\" : \"2\",\n minWidth: 0,\n width: \"100%\",\n boxSizing: \"border-box\",\n },\n \"& > p\": {\n gridColumn: isVertical ? \"1\" : \"2\",\n minWidth: 0,\n margin: 0,\n marginBlockStart: `calc(${themeSpacing(2)} * -1)`,\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n },\n };\n}\n\nexport { formGroup };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nconst Headinghift: Record<string, string> = {\n h6: \"decrease-1\",\n h5: \"inherit\",\n h4: \"increase-1\",\n h3: \"increase-2\",\n h2: \"increase-3\",\n h1: \"increase-4\",\n}\n\nfunction heading(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (![\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes(node.tagName)) {\n console.warn(`\"heading\" primitive patch must use heading tags [h1...h6]`);\n }\n },\n style: {\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n marginTop: 0,\n marginBottom: themeSpacing(2),\n fontSize: (listener) => {\n const offset = Headinghift[listener.elementNode.tagName] || \"inherit\";\n return themeSize(listener, offset);\n },\n },\n };\n}\n\nexport { heading };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction horizontalRule(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"hr\") {\n console.warn(`\"horizontalRule\" primitive patch must use hr tag`);\n }\n },\n style: {\n border: 0,\n height: \"1px\",\n marginInline: 0,\n marginTop: themeSpacing(3),\n marginBottom: themeSpacing(3),\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n },\n };\n}\n\nexport { horizontalRule };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction image(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName != \"img\") {\n console.warn(`\"image\" primitive patch must use img tag`);\n }\n },\n style: {\n display: \"block\",\n width: \"100%\",\n maxWidth: \"100%\",\n height: \"auto\",\n objectFit: \"cover\",\n borderRadius: themeSpacing(2),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n },\n };\n}\n\nexport { image };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeSpacing, themeColor, themeSize, type ThemeColor } from \"@domphy/theme\";\n\nfunction icon(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n return {\n _onInsert: (node) => {\n if (node.tagName != \"span\") {\n console.warn(`\"icon\" primitive patch should use span tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n alignSelf: \"center\",\n justifySelf: \"center\",\n verticalAlign: \"middle\",\n width: themeSpacing(4),\n height: themeSpacing(4),\n flexShrink: \"0\",\n fontSize: (listener) => themeSize(listener),\n backgroundColor: \"transparent\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener))\n },\n };\n}\n\nexport { icon };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, type ThemeColor } from \"@domphy/theme\";\n\nfunction inputColor(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"color\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputColor\" primitive patch must use input tag`);\n }\n (element as any).type = \"color\";\n },\n style: {\n appearance: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\n blockSize: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n inlineSize: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n backgroundColor: \"transparent\",\n \"&::-webkit-color-swatch-wrapper\": {\n margin: 0,\n padding: 0,\n },\n \"&::-webkit-color-swatch\": {\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n },\n \"&:hover:not([disabled]), &:focus-visible\": {\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n },\n };\n}\n\nexport { inputColor };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\ntype InputDateTimeMode = \"date\" | \"time\" | \"week\" | \"month\" | \"datetime-local\";\n\nfunction inputDateTime(\n props: { mode?: InputDateTimeMode; color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}\n): PartialElement {\n const { mode = \"datetime-local\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: mode,\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputDateTime\" primitive patch must use input tag`);\n }\n (element as any).type = mode;\n },\n style: {\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n \"&::-webkit-calendar-picker-indicator\": {\n cursor: \"pointer\",\n opacity: 0.85,\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n \"&:invalid\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n },\n };\n}\n\nexport { inputDateTime };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputFile(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"file\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputFile\" primitive patch must use input tag`);\n }\n (element as any).type = \"file\";\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\n \"&::-webkit-file-upload-button\": {\n marginTop: (listener) => themeSpacing(themeDensity(listener)),\n fontFamily: \"inherit\",\n fontSize: \"inherit\",\n border: \"none\",\n borderRadius: themeSpacing(1),\n height: themeSpacing(6),\n paddingInline: themeSpacing(2),\n cursor: \"pointer\",\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color.get(listener)),\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.8,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\n },\n \"&[disabled]::-webkit-file-upload-button\": {\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", \"neutral\"),\n },\n },\n };\n}\n\nexport { inputFile };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputSearch(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"search\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputSearch\" primitive patch must use input tag`);\n }\n (element as any).type = \"search\";\n },\n style: {\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n minWidth: themeSpacing(32),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\", color.get(listener)),\n },\n \"&::-webkit-search-decoration\": {\n display: \"none\",\n },\n \"&::-webkit-search-cancel-button\": {\n cursor: \"pointer\",\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n },\n };\n}\n\nexport { inputSearch };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputText(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"text\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputText\" primitive patch must use input tag and text type`);\n }\n (element as any).type = \"text\";\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n minWidth: themeSpacing(10),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\"),\n },\n \"&:not(:placeholder-shown)\": {\n color: (listener) => themeColor(listener, \"shift-10\"),\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n \"&:invalid:not(:placeholder-shown)\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n \"&[data-status=error]\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n \"&[data-status=warning]\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"warning\")}`,\n },\n },\n };\n}\n\nexport { inputText };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction inputRange(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"range\",\n _onInsert: (node) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputRange\" primitive patch must use input tag`);\n }\n },\n style: {\n appearance: \"none\",\n width: \"100%\",\n margin: 0,\n padding: 0,\n height: themeSpacing(4),\n background: \"transparent\",\n cursor: \"pointer\",\n \"&::-webkit-slider-runnable-track\": {\n height: themeSpacing(1.5),\n borderRadius: themeSpacing(999),\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n },\n \"&::-webkit-slider-thumb\": {\n appearance: \"none\",\n width: themeSpacing(4),\n height: themeSpacing(4),\n borderRadius: themeSpacing(999),\n border: \"none\",\n marginTop: `calc((${themeSpacing(1.5)} - ${themeSpacing(4)}) / 2)`,\n backgroundColor: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n },\n \"&:hover:not([disabled])::-webkit-slider-thumb\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-10\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n outlineOffset: themeSpacing(1),\n borderRadius: themeSpacing(2),\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { inputRange };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputNumber(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"number\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputNumber\" primitive patch must use input tag`);\n }\n (element as any).type = \"number\";\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n minWidth: themeSpacing(10),\n paddingInlineStart: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingInlineEnd: (listener) => themeSpacing(themeDensity(listener) * 1.5),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button\": {\n opacity: 1,\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n },\n };\n}\n\nexport { inputNumber };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction keyboard(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"kbd\") {\n console.warn(`\"keyboard\" primitive patch must use kbd tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n paddingBlock: themeSpacing(0.5),\n paddingInline: themeSpacing(1.5),\n borderRadius: themeSpacing(1),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n },\n };\n}\n\nexport { keyboard };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction label(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"label\") {\n console.warn(`\"label\" primitive patch must use label tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n cursor: \"pointer\",\n \"&:focus-within\": {\n color: (listener) => themeColor(listener, \"shift-10\", accentColor.get(listener)),\n },\n \"&[aria-disabled=true]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n },\n };\n}\n\nexport { label };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeSize,themeSpacing,type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction link(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\r\n const color = toState(props.color ?? \"primary\", \"color\");\r\n const accentColor = toState(props.accentColor ?? \"secondary\", \"accentColor\");\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"a\") {\r\n console.warn(`\"link\" primitive patch must use a tag`)\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener),\r\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\r\n textDecoration: \"none\",\r\n \"&:visited\": {\r\n color: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\r\n },\r\n \"&:hover:not([disabled])\": {\r\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\r\n textDecoration: \"underline\",\r\n },\r\n \"&:focus-visible\": {\r\n borderRadius: themeSpacing(1),\r\n outlineOffset:themeSpacing(1),\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { link };\r\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeSpacing, ThemeColor, themeSize, themeColor } from \"@domphy/theme\";\n\nfunction mark(props: { accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const accentColor = toState(props.accentColor ?? \"highlight\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"mark\") {\n console.warn(`\"mark\" primitive patch must use mark tag`);\n }\n },\n dataTone: \"shift-2\",\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", accentColor.get(listener)),\n height: themeSpacing(6),\n borderRadius: themeSpacing(1),\n paddingInline: themeSpacing(1.5),\n },\n };\n}\n\nexport { mark };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction paragraph(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"p\") {\n console.warn(`\"paragraph\" primitive patch must use p tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) =>themeColor(listener, \"shift-9\", color.get(listener)),\n lineHeight:1.5,\n marginTop: 0,\n marginBottom: 0,\n },\n };\n}\n\nexport { paragraph };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction preformated(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName != \"pre\") {\n console.warn(`\"preformated\" primitive patch must use pre tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n },\n };\n}\n\nexport { preformated };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction progress(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"progress\") {\n console.warn(`\"progress\" primitive patch must use progress tag`);\n }\n },\n style: {\n appearance: \"none\",\n width: \"100%\",\n height: themeSpacing(2),\n border: 0,\n borderRadius: themeSpacing(999),\n overflow: \"hidden\",\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n \"&::-webkit-progress-bar\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n borderRadius: themeSpacing(999),\n },\n \"&::-webkit-progress-value\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n borderRadius: themeSpacing(999),\n transition: \"width 220ms ease\",\n },\n },\n };\n}\n\nexport { progress };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction inputRadio(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"radio\",\n _onInsert: (node) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputRadio\" primitive patch must use input tag and radio type`);\n return;\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n appearance: \"none\",\n display: \"inline-flex\",\n position: \"relative\",\n width: themeSpacing(6),\n height: themeSpacing(6),\n justifyContent: \"center\",\n alignItems: \"center\",\n transition: \"background-color 300ms, outline-color 300ms\",\n margin: 0,\n padding: 0,\n \"&::before\": {\n content: `\"\"`,\n display: \"block\",\n borderRadius: \"50%\",\n lineHeight: 1,\n cursor: \"pointer\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n width: themeSpacing(4),\n height: themeSpacing(4)\n },\n \"&:hover::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:checked::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&:checked::after\": {\n content: `\"\"`,\n position: \"absolute\",\n inset: \"30%\",\n borderRadius: \"50%\",\n backgroundColor: (listener) => themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:checked:hover:not([disabled])::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n borderRadius: \"50%\",\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n cursor: \"not-allowed\",\n },\n \"&[disabled]::before, &[disabled]::after\": {\n outline: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", \"neutral\"),\n pointerEvents: \"none\",\n },\n }\n }\n}\n\nexport { inputRadio };\n","import { type PartialElement, type Listener } from \"@domphy/core\";\r\nimport { type ThemeColor, themeColor, themeDensity, themeSize, themeSpacing,themeColorToken } from \"@domphy/theme\";\r\n\r\nfunction select(\r\n props: { color?: ThemeColor; accentColor?: ThemeColor } = {}\r\n): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"select\") {\r\n console.warn(`\"select\" primitive patch must use select tag`);\r\n }\r\n },\r\n style: {\r\n appearance: \"none\",\r\n fontFamily: \"inherit\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n lineHeight: \"inherit\",\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n border: \"none\",\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color)}`,\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingLeft: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n paddingRight: (listener) => themeSpacing(themeDensity(listener) * 5),\r\n backgroundImage:(l: Listener)=>{\r\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 10 6\"><path d=\"M1 1l4 4 4-4\" stroke=\"${themeColorToken(l, \"shift-7\")}\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\r\n return `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\")`\r\n } ,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: `right ${themeSpacing(2)} center`,\r\n backgroundSize: `${themeSpacing(2.5)} ${themeSpacing(1.5)}`,\r\n \"&:not([multiple])\": {\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n },\r\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n },\r\n \"& optgroup\": {\r\n color: (listener) => themeColor(listener, \"shift-11\", color),\r\n },\r\n \"& option[disabled]\": {\r\n color: (listener) => themeColor(listener, \"shift-7\", \"neutral\"),\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { select };\r\n","import { type PartialElement, type StyleObject, hashString, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction skeleton(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n const keyframes = {\n \"0%,100%\": { opacity: 1 },\n \"50%\": { opacity: .4 }\n }\n const animationName = hashString(JSON.stringify(keyframes))\n return {\n ariaHidden: \"true\",\n dataTone: \"shift-2\",\n style: {\n fontSize: (listener) => themeSize(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n height: themeSpacing(6),\n display: \"block\",\n borderRadius: themeSpacing(1),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n animation: `${animationName} 1.5s ease-in-out infinite`,\n [`@keyframes ${animationName}`]: keyframes,\n } as StyleObject,\n };\n}\n\nexport { skeleton };\n","import type { PartialElement, StyleObject } from \"@domphy/core\";\nimport { hashString, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nconst keyframes = { to: { transform: \"rotate(360deg)\" } };\nconst animationName = hashString(JSON.stringify(keyframes));\n\nfunction spinner(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n role: \"status\",\n ariaLabel: \"loading\",\n _onInsert: (node) => {\n if (node.tagName != \"span\") {\n console.warn(`\"spinner\" patch must use span tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n display: \"inline-block\",\n margin: 0,\n flexShrink: 0,\n width: themeSpacing(6),\n height: themeSpacing(6),\n borderRadius: \"50%\",\n border: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderTopColor: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n boxSizing: \"border-box\",\n padding: 0,\n animation: `${animationName} 0.7s linear infinite`,\n [`@keyframes ${animationName}`]: keyframes,\n } as StyleObject,\n\n };\n}\n\nexport { spinner };\n","import { PartialElement, DomphyElement, State } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\r\nfunction selectList(props: {\r\n multiple?: boolean;\r\n value?: ValueOrState<Array<number | string | null> | number | string | null>;\r\n color?: ThemeColor;\r\n name?: string;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", multiple = false } = props;\r\n const state = toState(props.value ?? (multiple ? [] : null))\r\n\r\n const inputs: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const val = state.get(listener)\r\n const vals = Array.isArray(val) ? val : [val]\r\n return vals.map((v) => ({ input: null, name: props.name, value: v || \"\" }))\r\n },\r\n hidden: true,\r\n }\r\n\r\n let partial: PartialElement = {\r\n dataTone:\"shift-17\",\n _context: {\r\n select: {\r\n value: state,\r\n multiple,\r\n },\r\n },\r\n _onInit: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"selectList\" patch must use a div tag`)\r\n }\r\n node.children.insert(inputs)\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { selectList };\r\n","import { PartialElement, toState, type State } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\n\r\nfunction selectItem(props: {\r\n accentColor?: ThemeColor;\r\n color?: ThemeColor;\r\n value?: number | string;\r\n} = {}): PartialElement {\r\n const {\r\n accentColor = \"primary\",\r\n color = \"neutral\",\r\n value = null\r\n } = props;\r\n\r\n let partial: PartialElement = {\r\n role: \"option\",\r\n _onInit: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"selectItem\" patch must use div tag`);\r\n }\r\n let select = node.getContext(\"select\");\r\n if (select) {\r\n let state = select.value\r\n node.attributes.set(\"ariaSelected\", (listener) => {\r\n let val = state.get(listener)\r\n return select.multiple ? val.includes(value) : val == value\r\n })\r\n node.addEvent(\"click\", () => {\r\n let val = state.get()\r\n if (select.multiple) {\r\n val.includes(value) ? state.set(val.filter((v: number | string) => v !== value)) : state.set(val.concat([value]))\r\n } else {\r\n val != value && state.set(value)\r\n }\r\n })\r\n }\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled]):not([aria-selected=true])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\n },\r\n \"&[aria-selected=true]\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\n color: (listener) => themeColor(listener, \"shift-11\"),\n },\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\r\n },\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { selectItem };\r\n","import { type PartialElement, type DomphyElement, type StyleObject, type ValueOrState, toState, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeDensity, themeSize, type ThemeColor } from \"@domphy/theme\";\r\nimport { type Placement } from \"@floating-ui/dom\";\r\nimport { tag } from \"./tag.js\"\r\nimport { creatFloating } from \"../utils/floating.js\"\r\n\r\nfunction selectBox(props: {\r\n multiple?: boolean;\r\n value?: ValueOrState<Array<number | string | null | undefined> | number | string | null | undefined>;\r\n options?: Array<{ label: string, value: string }>;\r\n placement?: ValueOrState<Placement>;\r\n content: DomphyElement;\r\n color?: ThemeColor;\r\n open?: ValueOrState<boolean>;\r\n}): PartialElement {\r\n const {\r\n options = [],\r\n placement = \"bottom\",\r\n color = \"neutral\",\r\n open = false,\r\n multiple = false\r\n } = props;\r\n\r\n const state = toState(props.value)\r\n let openState = toState(open)\r\n let { show, hide, anchorPartial } = creatFloating({ open: openState, placement: toState(placement), content: props.content })\r\n\r\n const popoverPartial: PartialElement = {\r\n onClick: () => !multiple && hide(),\r\n };\r\n\r\n merge(props.content, popoverPartial);\r\n\r\n const wrap: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const val = state.get(listener)\r\n const vals = Array.isArray(val) ? val : [val]\r\n const opts = options.filter(opt => vals.includes(opt.value))\r\n return opts.map(opt => ({\r\n span: opt.label,\r\n $: [tag({ color, removable: multiple })],\r\n _key: opt.value,\r\n _onRemove: (_node) => {\r\n const cur = state.get()\r\n const curVals = Array.isArray(cur) ? cur : [cur]\r\n const filter = curVals.filter(v => v !== opt.value)\r\n multiple ? state.set(filter as any) : state.set(filter[0] as any)\r\n }\r\n })) as DomphyElement<\"span\">[]\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n gap: themeSpacing(1),\r\n flex: 1,\r\n } as StyleObject\r\n }\r\n\r\n let partial: PartialElement = {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"selectBox\" patch must use div tag`);\r\n }\r\n },\r\n _onInit: (node) => node.children.insert(wrap),\r\n onClick: () => openState.get() ? hide() : show(),\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n minHeight: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n minWidth: themeSpacing(32),\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n }\r\n };\r\n\r\n merge(anchorPartial, partial)\r\n return anchorPartial\r\n}\r\n\r\nexport { selectBox };\r\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { ThemeColor, themeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction inputSwitch(props: { accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n dataTone: \"shift-2\",\n type: \"checkbox\",\n _onSchedule: (node) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputSwitch\" primitive patch must use input tag`);\n return;\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n appearance: \"none\",\n position: \"relative\",\n display: \"inline-flex\",\n width: themeSpacing(9),\n height: themeSpacing(6),\n cursor: \"pointer\",\n margin: `0`,\n paddingBlock: themeSpacing(1),\n \"&:checked\": {\n \"&::before\": {\n backgroundColor: (listener) => themeColor(listener, \"increase-3\", accentColor.get(listener)),\n },\n \"&::after\": {\n left: `calc(100% - ${themeSpacing(3.5)})`,\n },\n },\n \"&::after\": {\n content: `\"\"`,\n aspectRatio: `1/1`,\n position: \"absolute\",\n width: themeSpacing(3),\n height: themeSpacing(3),\n borderRadius: themeSpacing(999),\n left: themeSpacing(0.5),\n top: \"50%\",\n transform: \"translateY(-50%)\",\n transition: \"left 0.3s\",\n backgroundColor: (listener) => themeColor(listener, \"decrease-3\"),\n },\n \"&::before\": {\n content: '\"\"',\n width: \"100%\",\n borderRadius: themeSpacing(999),\n display: \"inline-block\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: 1,\n backgroundColor: (listener) => themeColor(listener),\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n }\n },\n };\n}\n\nexport { inputSwitch };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction buttonSwitch(props: {\n checked?: ValueOrState<boolean>;\n accentColor?: ValueOrState<ThemeColor>;\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const { checked = false } = props;\n\n const check = toState(checked);\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onSchedule: (node) => {\n if (node.tagName != \"button\") {\n console.warn(`\"buttonSwitch\" primitive patch must use button tag`);\n }\n },\n role: \"switch\",\n ariaChecked: (listener) => check.get(listener),\n dataTone: \"shift-2\",\n onClick: () => check.set(!check.get()),\n style: {\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener),\n border: \"none\",\n outlineWidth: \"1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n minWidth: themeSpacing(12),\n minHeight: themeSpacing(6),\n borderRadius: themeSpacing(999),\n paddingLeft: themeSpacing(7),\n paddingRight: themeSpacing(2),\n transition: \"padding-left 0.3s, padding-right 0.3s\",\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"& > :first-child\": {\n content: '\"\"',\n position: \"absolute\",\n display: \"inline-flex\",\n alignItems: \"center\",\n left: themeSpacing(0.5),\n top: \"50%\",\n transform: \"translateY(-50%)\",\n transition: \"left 0.3s\",\n width: themeSpacing(5),\n height: themeSpacing(5),\n borderRadius: themeSpacing(999),\n color: (listener) => themeColor(listener, \"shift-9\"),\n backgroundColor: (listener) => themeColor(listener, \"decrease-2\", color.get(listener)),\n },\n \"&[aria-checked=true]\": {\n backgroundColor: (listener) => themeColor(listener, \"increase-3\", accentColor.get(listener)),\n outline: \"none\",\n color: (listener) => themeColor(listener, \"decrease-2\"),\n paddingLeft: themeSpacing(2),\n paddingRight: themeSpacing(7),\n },\n \"&[aria-checked=true] > :first-child\": {\n left: `calc(100% - ${themeSpacing(5.5)})`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { buttonSwitch };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction small(props: { color?: ValueOrState<ThemeColor>} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataSize:\"decrease-1\",\n _onInsert: (node) => {\n if (node.tagName != \"small\") {\n console.warn(`\"small\" primitive patch must use small tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { small };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction strong(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"strong\") {\n console.warn(`\"strong\" primitive patch must use strong tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: 700,\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener),\n },\n };\n}\n\nexport { strong };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction subscript(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"sub\") {\n console.warn(`\"subscript\" primitive patch must use sub tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n verticalAlign: \"sub\",\n lineHeight: 0,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { subscript };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction superscript(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"sup\") {\n console.warn(`\"superscript\" primitive patch must use sup tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n verticalAlign: \"super\",\n lineHeight: 0,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { superscript };\n","import { type PartialElement, type DomphyElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeDensity, themeSpacing, themeSize } from \"@domphy/theme\";\n\nfunction table(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"table\") {\n console.warn(`\"table\" primitive patch must use table tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n width: \"100%\",\n borderCollapse: \"collapse\",\n \"& caption\": {\n captionSide: \"bottom\"\n },\n \"& th, & thead td\": {\n textAlign: \"left\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\n },\n \"& td\": {\n textAlign: \"left\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n boxShadow: (listener) => `inset 0 1px 0 ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n },\n \"& tfoot th, & tfoot td\": {\n textAlign: \"left\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (l) => themeColor(l, \"shift-10\", color.get(l)),\n backgroundColor: (l) => themeColor(l, \"inherit\"),\n boxShadow: (l) => `inset 0 -1px 0 ${themeColor(l, \"shift-4\", color.get(l))}`\n },\n \"& tr\": {\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\n },\n\n \"& tbody tr:hover\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\") + \"!important\",\n }\n },\n };\n}\n\nexport { table };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction textarea(\n props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor>; autoResize?: boolean } = {}\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n const { autoResize = false } = props;\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"textarea\") {\n console.warn(`\"textarea\" primitive patch must use textarea tag`);\n }\n },\n _onMount: (node) => {\n if (autoResize) {\n const el = node.domElement as HTMLTextAreaElement;\n el.style.overflow = \"hidden\";\n const resize = () => {\n el.style.height = \"auto\";\n el.style.height = el.scrollHeight + \"px\";\n };\n el.addEventListener(\"input\", resize);\n resize();\n }\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n resize: \"vertical\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1.5),\n border:\"none\",\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1.5),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\"),\n },\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor.get(listener))}`,\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&:invalid\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"error\")}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n }\n },\n };\n}\n\nexport { textarea };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction unorderedList(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"ul\") {\n console.warn(`\"unorderedList\" primitive patch must use ul tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n marginTop: 0,\n marginBottom: 0,\n paddingLeft: themeSpacing(3),\n listStyleType: \"disc\",\n listStylePosition: \"outside\",\n },\n };\n}\n\nexport { unorderedList };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction orderedList(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"ol\") {\n console.warn(`\"orderedList\" primitive patch must use ol tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n marginTop: 0,\n marginBottom: 0,\n paddingLeft: themeSpacing(3),\n listStyleType: \"decimal\",\n listStylePosition: \"outside\",\n },\n };\n}\n\nexport { orderedList };\n","import { type PartialElement, type DomphyElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\r\nfunction getPages(current: number, total: number): (number | \"...\")[] {\r\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\r\n const pages: (number | \"...\")[] = [1];\r\n if (current > 3) pages.push(\"...\");\r\n const start = Math.max(2, current - 1);\r\n const end = Math.min(total - 1, current + 1);\r\n for (let i = start; i <= end; i++) pages.push(i);\r\n if (current < total - 2) pages.push(\"...\");\r\n pages.push(total);\r\n return pages;\r\n}\r\n\r\nfunction pagination(props: {\r\n value?: ValueOrState<number>;\r\n total: number;\r\n color?: ThemeColor;\r\n accentColor?: ThemeColor;\r\n}): PartialElement {\r\n const { total, color = \"neutral\", accentColor = \"primary\" } = props;\r\n const state = toState(props.value ?? 1);\r\n\r\n const btnBase = {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n minWidth: (listener: any) => themeSpacing(6 + themeDensity(listener) * 2),\n height: (listener: any) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener: any) => themeSpacing(themeDensity(listener) * 2),\n borderRadius: (listener: any) => themeSpacing(themeDensity(listener) * 1),\n border: \"none\",\r\n cursor: \"pointer\",\r\n fontSize: (listener: any) => themeSize(listener, \"inherit\"),\r\n backgroundColor: \"transparent\",\r\n color: (listener: any) => themeColor(listener, \"shift-9\", color),\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener: any) => themeColor(listener, \"shift-2\", color),\n },\r\n \"&[disabled]\": {\r\n opacity: 0.4,\r\n cursor: \"not-allowed\",\r\n },\r\n };\r\n\r\n const activeStyle = {\n ...btnBase,\n backgroundColor: (listener: any) => themeColor(listener, \"shift-6\", accentColor),\n color: (listener: any) => themeColor(listener, \"shift-11\", accentColor),\n fontWeight: \"600\",\n cursor: \"default\",\n \"&:hover:not([disabled])\": {\n backgroundColor: (listener: any) => themeColor(listener, \"shift-6\", accentColor),\n },\n };\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"div\") console.warn('\"pagination\" patch must use div tag');\r\n },\r\n _onInit: (node) => {\r\n const content: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const page = state.get(listener);\r\n const items: DomphyElement[] = [];\r\n\r\n // Prev button\r\n items.push({\r\n button: \"‹\",\r\n type: \"button\",\r\n ariaLabel: \"Previous page\",\r\n disabled: page <= 1,\r\n onClick: () => page > 1 && state.set(page - 1),\r\n style: btnBase,\r\n });\r\n\r\n // Page buttons\r\n for (const p of getPages(page, total)) {\r\n if (p === \"...\") {\r\n items.push({ span: \"…\", style: { display: \"inline-flex\", alignItems: \"center\", paddingInline: (listener: any) => themeSpacing(themeDensity(listener) * 2), color: (listener: any) => themeColor(listener, \"shift-7\", color) } });\n } else {\r\n const isActive = p === page;\r\n items.push({\r\n button: String(p),\r\n type: \"button\",\r\n ariaLabel: `Page ${p}`,\r\n ariaCurrent: isActive ? \"page\" : undefined,\r\n disabled: isActive,\r\n onClick: () => state.set(p),\r\n style: isActive ? activeStyle : btnBase,\r\n });\r\n }\r\n }\r\n\r\n // Next button\r\n items.push({\r\n button: \"›\",\r\n type: \"button\",\r\n ariaLabel: \"Next page\",\r\n disabled: page >= total,\r\n onClick: () => page < total && state.set(page + 1),\r\n style: btnBase,\r\n });\r\n\r\n return items;\r\n },\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: themeSpacing(1),\r\n },\r\n };\r\n node.children.insert(content);\r\n },\r\n style: {\r\n display: \"inline-flex\",\r\n },\r\n };\r\n}\r\n\r\nexport { pagination };\r\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, type ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction divider(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n role: \"separator\",\n _onInsert: (node) => {\n if (node.tagName !== \"div\") {\n console.warn(`\"divider\" patch should be used with <div>`)\n }\n },\n style: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"baseline\",\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n minHeight: \"1lh\",\n \"&::before\": {\n content: `\"\"`,\n flex:1,\n borderColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n borderWidth: \"1px\",\n borderBottomStyle: \"solid\",\n },\n \"&::after\": {\n content: `\"\"`,\n flex:1,\n borderColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n borderWidth: \"1px\",\n borderBottomStyle: \"solid\",\n },\n },\n };\n}\n\nexport { divider };\n","import { type PartialElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\ntype Placement = \"left\" | \"right\" | \"top\" | \"bottom\";\r\n\r\nconst translateOut: Record<Placement, string> = {\r\n left: \"translateX(-100%)\",\r\n right: \"translateX(100%)\",\r\n top: \"translateY(-100%)\",\r\n bottom: \"translateY(100%)\",\r\n};\r\n\r\nconst marginMap: Record<Placement, string> = {\r\n left: \"0 auto 0 0\",\r\n right: \"0 0 0 auto\",\r\n top: \"0 0 auto 0\",\r\n bottom: \"auto 0 0 0\",\r\n};\r\n\r\nconst isVertical = (p: Placement) => p === \"left\" || p === \"right\";\r\n\r\nfunction drawer(props: {\r\n color?: ThemeColor;\r\n open?: ValueOrState<boolean>;\r\n placement?: Placement;\r\n size?: string;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", open = false, placement = \"right\", size } = props;\r\n const state = toState(open);\r\n const defaultSize = isVertical(placement) ? themeSpacing(80) : themeSpacing(64);\r\n const drawerSize = size ?? defaultSize;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"dialog\") {\r\n console.warn(`\"drawer\" patch must use dialog tag`);\r\n }\r\n },\r\n onClick: (e: MouseEvent, node) => {\r\n if (e.target !== node.domElement) return;\r\n state.set(false);\r\n },\r\n onTransitionEnd: (_e, node) => {\r\n const dlg = node.domElement as HTMLDialogElement;\r\n if (!state.get()) {\r\n dlg.close();\r\n document.body.style.overflow = \"\";\r\n }\r\n },\r\n _onMount: (node) => {\r\n const dlg = node.domElement as HTMLDialogElement;\r\n const update = (val: boolean) => {\r\n if (val) {\r\n dlg.showModal();\r\n document.body.style.overflow = \"hidden\";\r\n requestAnimationFrame(() => { dlg.style.transform = \"translate(0, 0)\"; });\r\n } else {\r\n dlg.style.transform = translateOut[placement];\r\n }\r\n };\r\n update(state.get());\r\n state.addListener(update);\r\n },\r\n style: {\r\n transform: translateOut[placement],\r\n transition: \"transform 0.25s ease\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-10\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n border: \"none\",\r\n padding: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n margin: marginMap[placement],\r\n width: isVertical(placement) ? drawerSize : \"100dvw\",\r\n height: isVertical(placement) ? \"100dvh\" : drawerSize,\r\n maxWidth: \"100dvw\",\r\n maxHeight: \"100dvh\",\r\n boxShadow: (listener) => `0 ${themeSpacing(4)} ${themeSpacing(12)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n \"&::backdrop\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\r\n opacity: 0.75,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { drawer };\r\n","import { PartialElement, State, DomphyElement, toState, ValueOrState, merge } from \"@domphy/core\";\r\nimport { type Placement } from \"@floating-ui/dom\";\r\nimport { creatFloating } from \"../utils/floating.js\";\r\n\r\nfunction popover(props: {\r\n openOn: \"click\" | \"hover\";\r\n open?: ValueOrState<boolean>;\r\n placement?: ValueOrState<Placement>;\r\n content: DomphyElement;\r\n}): PartialElement {\r\n const {\r\n open = false,\r\n placement = \"bottom\",\r\n openOn = \"click\"\r\n } = props;\r\n\r\n\r\n let popoverId: string | null = null\r\n const openState = toState(open);\r\n const placeState = toState(placement);\r\n\r\n let { show, hide, anchorPartial } = creatFloating({ open: openState, placement: placeState, content: props.content })\r\n\r\n const popoverPartial: PartialElement = {\r\n role: \"dialog\",\r\n dataTone: \"shift-11\",\r\n onMouseEnter: () => openOn === \"hover\" && show(),\r\n onMouseLeave: () => openOn === \"hover\" && hide(),\r\n _onInsert: (node) => {\r\n let id = node.attributes.get(\"id\")\r\n popoverId = id || node.nodeId\r\n !id && node.attributes.set(\"id\", popoverId)\r\n },\r\n };\r\n\r\n props.content.$ ||= []\r\n props.content.$.push(popoverPartial)\r\n \r\n const triggerPartial: PartialElement = {\r\n ariaHaspopup: \"dialog\",\r\n ariaExpanded: (listener) => openState.get(listener),\r\n onMouseEnter: () => openOn === \"hover\" && show(),\r\n onMouseLeave: () => openOn === \"hover\" && hide(),\r\n onClick: () => {\r\n if (openOn === \"click\") {\r\n if (openState.get()) { hide() } else { show() }\r\n }\r\n },\r\n onFocus: () => show(),\r\n onBlur: (e, node) => {\r\n const related = (e as FocusEvent).relatedTarget as Node | null\r\n const root = node.getRoot().domElement as Element\r\n const floatingEl = popoverId ? root.querySelector(`#${CSS.escape(popoverId)}`) : null\r\n if (related && floatingEl?.contains(related)) return\r\n hide()\r\n },\r\n _onMount: (node) => popoverId && node.attributes.set(\"ariaControls\", popoverId)\r\n };\r\n merge(anchorPartial, triggerPartial);\r\n\r\n return anchorPartial;\r\n}\r\n\r\nexport { popover };\r\n","import type { DomphyElement, PartialElement, ElementNode } from \"@domphy/core\";\r\nimport { toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\r\ntype ToastPosition = \"top-left\" | \"top-center\" | \"top-right\" | \"bottom-left\" | \"bottom-center\" | \"bottom-right\";\r\n\r\nfunction toast(props: {\r\n position?: ToastPosition;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { position = \"top-center\", color = \"neutral\" } = props;\r\n const state = toState(false);\r\n\r\n const isTop = position.startsWith(\"top\");\r\n const isCenter = position.endsWith(\"center\");\r\n const isRight = position.endsWith(\"right\");\r\n\r\n const overlayEle: DomphyElement<\"div\"> = {\r\n div: [],\r\n id: `domphy-toast-${position}`,\r\n style: {\r\n position: \"fixed\",\r\n display: \"flex\",\r\n flexDirection: isTop ? \"column\" : \"column-reverse\",\r\n alignItems: isCenter ? \"center\" : isRight ? \"end\" : \"start\",\r\n inset: 0,\r\n gap: themeSpacing(4),\r\n zIndex: 30,\r\n padding: themeSpacing(6),\r\n pointerEvents: \"none\",\r\n },\r\n }\r\n\r\n return {\n _portal: (rootNode) => {\n let overlay = rootNode.domElement!.querySelector(`#domphy-toast-${position}`);\r\n if (!overlay) {\r\n const overlayNode = rootNode.children!.insert(overlayEle) as ElementNode;\r\n overlay = overlayNode.domElement!;\r\n }\r\n return overlay;\r\n },\n role: \"status\",\n ariaAtomic: \"true\",\n // Toast is rendered as an overlay surface, so it uses the inverted branch.\n dataTone: \"shift-17\",\n style: {\n minWidth: themeSpacing(32),\n pointerEvents: \"auto\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n boxShadow: (listener) => `0 ${themeSpacing(2)} ${themeSpacing(9)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n opacity: (listener) => Number(state.get(listener)),\n transform: (listener) => state.get(listener) ? \"translateY(0)\" : isTop ? \"translateY(-100%)\" : \"translateY(100%)\",\n transition: \"opacity 300ms ease, transform 300ms ease\",\n },\n _onMount: () => requestAnimationFrame(() => state.set(true)),\r\n _onBeforeRemove: (node, done) => {\r\n const onEnd = (e: Event) => {\r\n if ((e as TransitionEvent).propertyName === \"transform\") {\r\n node.domElement!.removeEventListener(\"transitionend\", onEnd)\r\n done()\r\n }\r\n }\r\n node.domElement!.addEventListener(\"transitionend\", onEnd)\r\n state.set(false)\r\n }\r\n };\r\n}\r\n\r\nexport { toast };\r\n","import { PartialElement, type DomphyElement, ValueOrState, merge, toState } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\r\nimport { type Placement } from \"@floating-ui/dom\";\r\nimport { creatFloating } from \"../utils/floating.js\";\r\nimport { popoverArrow } from \"./popoverArrow.js\";\r\n\r\n\r\nfunction tooltip(props: {\r\n open?: ValueOrState<boolean>;\r\n placement?: ValueOrState<Placement>;\r\n content?: ValueOrState<string>;\r\n} = {}): PartialElement {\r\n const {\r\n open = false,\r\n placement = \"top\",\r\n content = \"Tooltip Content\"\r\n } = props;\r\n\r\n const placeState = toState(placement)\r\n const contentState = toState(content)\r\n\r\n let tooltipId: string | null = null\r\n\r\n let contentElement: DomphyElement<\"span\"> = { span: (listener) => contentState.get(listener) }\r\n\r\n let { show, hide, anchorPartial } = creatFloating({ open, placement: placeState, content: contentElement })\r\n\r\n const tooltipPartial: PartialElement = {\r\n role: \"tooltip\",\r\n dataSize: \"decrease-1\",\r\n dataTone: \"shift-17\",\r\n _onInsert: (node) => {\r\n let id = node.attributes.get(\"id\")\r\n tooltipId = id || node.nodeId\r\n !id && node.attributes.set(\"id\", tooltipId)\r\n },\r\n style: {\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n color: (listener) => themeColor(listener, \"shift-9\"),\r\n backgroundColor: (listener) => themeColor(listener),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n },\r\n $: [popoverArrow({ placement: placeState, bordered: false })]\r\n };\r\n contentElement.$ ||= []\r\n contentElement.$.push(tooltipPartial)\r\n\r\n const triggerPartial: PartialElement = {\r\n onMouseEnter: () => show(),\r\n onMouseLeave: () => hide(),\r\n onFocus: () => show(),\r\n onBlur: () => hide(),\r\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\r\n _onMount: (node) => tooltipId && node.attributes.set(\"ariaDescribedby\", tooltipId)\r\n };\r\n\r\n merge(anchorPartial, triggerPartial)\r\n\r\n return anchorPartial;\r\n}\r\n\r\nexport { tooltip };\r\n","import { ElementNode, PartialElement } from \"@domphy/core\";\r\n\r\ntype RectMap = Map<string, DOMRect>;\r\n\r\nfunction getItemId(node: ElementNode, index: number): string {\r\n if (node.key !== undefined && node.key !== null) {\r\n return String(node.key);\r\n }\r\n return `index-${index}`;\r\n}\r\n\r\nfunction transitionGroup(props: { duration?: number; delay?: number } = {}): PartialElement {\r\n const {\r\n duration = 300,\r\n delay = 0,\r\n } = props;\r\n\r\n let previousRects: RectMap = new Map();\r\n\r\n return {\r\n _onBeforeUpdate: (node) => {\r\n previousRects = new Map();\r\n node.children.items.forEach((item, index) => {\n if (!(item instanceof ElementNode)) return;\r\n const dom = item.domElement as HTMLElement | undefined;\r\n if (!dom) return;\r\n previousRects.set(getItemId(item, index), dom.getBoundingClientRect());\r\n });\r\n },\r\n _onUpdate: (node) => {\r\n node.children.items.forEach((item, index) => {\n if (!(item instanceof ElementNode)) return;\r\n const dom = item.domElement as HTMLElement | undefined;\r\n if (!dom) return;\r\n\r\n const key = getItemId(item, index);\r\n const prev = previousRects.get(key);\r\n if (!prev) return;\r\n\r\n const next = dom.getBoundingClientRect();\r\n const deltaX = prev.left - next.left;\r\n const deltaY = prev.top - next.top;\r\n if (Math.abs(deltaX) < 0.5 && Math.abs(deltaY) < 0.5) return;\r\n\r\n const previousTransition = dom.style.transition;\r\n const previousTransform = dom.style.transform;\r\n\r\n dom.style.transition = \"none\";\r\n dom.style.transform = `translate(${deltaX}px, ${deltaY}px)`;\r\n dom.getBoundingClientRect();\r\n\r\n requestAnimationFrame(() => {\r\n dom.style.transition = `transform ${duration}ms ease ${delay}ms`;\r\n dom.style.transform = \"translate(0px, 0px)\";\r\n });\r\n\r\n const cleanup = () => {\r\n dom.style.transition = previousTransition;\r\n dom.style.transform = previousTransform;\r\n dom.removeEventListener(\"transitionend\", onEnd);\r\n };\r\n\r\n const onEnd = (event: Event) => {\r\n const transitionEvent = event as TransitionEvent;\r\n if (transitionEvent.propertyName === \"transform\") {\r\n cleanup();\r\n }\r\n };\r\n\r\n dom.addEventListener(\"transitionend\", onEnd);\r\n setTimeout(cleanup, duration + delay + 34);\r\n });\r\n previousRects.clear();\r\n },\r\n };\r\n}\r\n\r\n\r\nexport { transitionGroup };\r\n","import { PartialElement, merge } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\n\r\nfunction tabs(props: {\r\n activeKey?: ValueOrState<number | string>;\r\n} = {}): PartialElement {\r\n\r\n let partial: PartialElement = {\r\n role: \"tablist\",\r\n _onSchedule: (node, element) => {\r\n let partial = {\r\n _context: {\r\n tabs: {\r\n activeKey: toState(props.activeKey || 0),\r\n }\r\n },\r\n }\r\n merge(element, partial)\r\n },\r\n }\r\n return partial;\r\n}\r\n\r\nexport { tabs };\r\n","import { PartialElement, ElementNode } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\n\r\nfunction tab(props: {\r\n accentColor?: ThemeColor;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const {\r\n accentColor = \"primary\",\r\n color = \"neutral\",\r\n } = props;\r\n let partial: PartialElement = {\r\n role: \"tab\",\r\n _onInsert: (node) => {\r\n\r\n if (node.tagName != \"button\") {\r\n console.warn(`\"tab\" patch must use button tag`);\r\n }\r\n\r\n let context = node.getContext(\"tabs\")\r\n let children = node.parent?.children.items as ElementNode[]\r\n children = children.filter(n => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"tab\")\r\n let key = node.key || children.findIndex(n => n == node)\r\n\r\n let part: PartialElement = {\r\n id: \"tab\" + node.parent!.nodeId + key,\r\n \"ariaControls\": \"tabpanel\" + node.parent!.nodeId + key,\r\n \"ariaSelected\": (listener) => context.activeKey.get(listener) == key,\r\n onClick: () => context.activeKey.set(key),\r\n onKeyDown: (e: Event) => {\r\n const k = (e as KeyboardEvent).key;\r\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(k)) return;\r\n e.preventDefault();\r\n const tabs = (node.parent?.children.items ?? []).filter(\r\n n => n.type === \"ElementNode\" && (n as ElementNode).attributes.get(\"role\") === \"tab\"\r\n ) as ElementNode[];\r\n const idx = tabs.findIndex(n => n === node);\r\n let next = idx;\r\n if (k === \"ArrowRight\") next = (idx + 1) % tabs.length;\r\n else if (k === \"ArrowLeft\") next = (idx - 1 + tabs.length) % tabs.length;\r\n else if (k === \"Home\") next = 0;\r\n else if (k === \"End\") next = tabs.length - 1;\r\n const target = tabs[next];\r\n context.activeKey.set(target.key ?? next);\r\n (target.domElement as HTMLElement)?.focus();\r\n },\r\n }\r\n node.merge(part)\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-1\", color)}`,\n \"&:hover:not([disabled])\": {\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-2\", color)}`,\n },\r\n \"&[aria-selected=true]:not([disabled])\": {\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-6\", accentColor)}`,\n },\n \"&:focus-visible\": {\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-6\", accentColor)}`,\n\r\n },\r\n },\r\n }\r\n return partial\r\n}\r\n\r\n\r\nexport { tab };\r\n","import { PartialElement, ElementNode, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeDensity, themeColor } from \"@domphy/theme\";\n\r\nfunction tabPanel(): PartialElement {\r\n let partial: PartialElement = {\r\n role: \"tabpanel\",\r\n style: {\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n },\r\n _onInsert: (node) => {\r\n let context = node.getContext(\"tabs\")\r\n let children = node.parent?.children.items as ElementNode[]\r\n children = children.filter(n => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"tabpanel\")\r\n let key = node.key || children.findIndex(n => n == node)\r\n let part: PartialElement = {\r\n id: \"tabpanel\" + node.parent!.nodeId + key,\r\n \"ariaLabelledby\": \"tab\" + node.parent!.nodeId + key,\r\n \"hidden\": (listener) => context.activeKey.get(listener) != key,\r\n }\r\n node.merge(part)\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\n\r\n\r\nexport { tabPanel };\r\n","import { PartialElement, merge } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction menu(props: {\r\n activeKey?: ValueOrState<number | string>;\r\n selectable?: boolean;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", selectable = true } = props;\r\n\r\n let partial: PartialElement = {\r\n role: \"menu\",\r\n dataTone:\"shift-17\",\r\n _onSchedule: (node, element) => {\r\n let partial = {\r\n _context: {\r\n menu: {\r\n activeKey: toState(props.activeKey ?? null),\r\n selectable,\r\n },\r\n },\r\n };\r\n merge(element, partial);\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { menu };\r\n","import { PartialElement, ElementNode } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\r\n\r\nfunction menuItem(props: {\r\n accentColor?: ThemeColor;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const {\r\n accentColor = \"primary\",\r\n color = \"neutral\",\r\n } = props;\r\n\r\n let partial: PartialElement = {\r\n role: \"menuitem\",\r\n _onInsert: (node) => {\r\n if (node.tagName != \"button\") {\r\n console.warn(`\"menuItem\" patch must use button tag`);\r\n }\r\n\r\n let context = node.getContext(\"menu\");\r\n let children = node.parent?.children.items as ElementNode[];\r\n children = children.filter(n => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"menuitem\");\r\n let key = node.key || children.findIndex(n => n == node);\r\n if (context.selectable) {\r\n node.attributes.set(\"ariaCurrent\", (listener) => context.activeKey.get(listener) == key || undefined)\r\n node.addEvent(\"click\", () => context.activeKey.set(key))\r\n }\r\n },\r\n onKeyDown:(e:KeyboardEvent,node)=>{\r\n const k = (e as KeyboardEvent).key;\r\n if (k === \"Enter\" || k === \" \") {\r\n e.preventDefault();\r\n (node.domElement as HTMLElement)?.click();\r\n return;\r\n }\r\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(k)) return;\r\n e.preventDefault();\r\n const items = (node.parent?.children.items ?? []).filter(\r\n n => n.type === \"ElementNode\" && (n as ElementNode).attributes.get(\"role\") === \"menuitem\"\r\n ) as ElementNode[];\r\n const idx = items.findIndex(n => n === node);\r\n let next = idx;\r\n if (k === \"ArrowDown\") next = (idx + 1) % items.length;\r\n else if (k === \"ArrowUp\") next = (idx - 1 + items.length) % items.length;\r\n else if (k === \"Home\") next = 0;\r\n else if (k === \"End\") next = items.length - 1;\r\n (items[next].domElement as HTMLElement)?.focus();\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: (listener) => themeSpacing(2),\r\n width: \"100%\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n \"&:hover:not([disabled]):not([aria-current=true])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\"),\r\n },\r\n // Menu uses the current/indicator band instead of the selected fill band.\r\n \"&[aria-current=true]\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", accentColor),\r\n color: (listener) => themeColor(listener, \"shift-10\"),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n outlineOffset: `-${themeSpacing(0.5)}`,\r\n },\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { menuItem };\r\n","import { PartialElement, merge } from \"@domphy/core\";\r\nimport { FormState } from \"../classes/FormState.js\";\r\n\r\nfunction form(state: FormState): PartialElement {\r\n return {\r\n _onSchedule: (node, element) => {\r\n merge(element, { _context: { form: state } });\r\n },\r\n };\r\n}\r\n\r\nexport { form };\r\n","import { PartialElement, Listener } from \"@domphy/core\";\r\nimport { FieldValidator } from \"../classes/FieldState.js\";\r\nimport { FormState } from \"../classes/FormState.js\";\r\n\r\nfunction field(path: string, validator?: FieldValidator): PartialElement {\r\n return {\r\n _onInsert: (node) => {\r\n const state = node.getContext(\"form\") as FormState;\r\n const f = state.setField(path, undefined, validator);\r\n const tag = node.tagName;\r\n const type = node.attributes.get(\"type\") as string | undefined;\r\n\r\n if (![\"input\", \"select\", \"textarea\"].includes(tag)) {\r\n console.warn(`\"field\" patch must use input, select, or textarea tag`);\r\n }\r\n\r\n const part: PartialElement<\"input\"> = {\r\n onBlur: () => f.setTouched(),\r\n ariaInvalid: (listener: Listener) => !!f.message(\"error\", listener) || undefined,\r\n dataStatus: (listener: Listener) => f.status(listener),\r\n };\r\n\r\n if (tag === \"input\" && type === \"checkbox\") {\r\n part.checked = f.value() as boolean;\r\n part.onChange = (e) => f.setValue((e.target as HTMLInputElement).checked);\r\n } else if (tag === \"input\" && type === \"radio\") {\r\n part.onChange = (e) => f.setValue((e.target as HTMLInputElement).value);\r\n } else if (tag === \"select\") {\r\n part.value = f.value() as string;\r\n part.onChange = (e) => f.setValue((e.target as HTMLSelectElement).value);\r\n } else if (tag === \"textarea\") {\r\n part.value = f.value() as string;\r\n part.onInput = (e) => f.setValue((e.target as HTMLTextAreaElement).value);\r\n } else {\r\n part.value = f.value() as string;\r\n part.onInput = (e) => f.setValue((e.target as HTMLInputElement).value);\r\n }\r\n\r\n node.merge(part);\r\n\r\n // NOTE: value/checked are intentionally set as static defaults (one-way: DOM → state).\r\n // Do NOT change them to reactive functions like `(listener) => f.value(listener)`.\r\n // Two-way reactive binding causes an infinite loop:\r\n // setValue → notify listener → update DOM value → trigger onInput → setValue → ...\r\n // Note: Domphy's `silent` flag in setValue is NOT a solution here —\r\n // it is only used for tree synchronization when external libs (e.g. SortableJS)\r\n // manipulate the DOM directly. It does not apply to form field binding.\r\n },\r\n };\r\n}\r\n\r\nexport { field };\r\n","import { Notifier, Handler } from \"@domphy/core\";\r\n\r\nexport type FieldStatus = \"error\" | \"warning\" | \"success\" | undefined;\r\n\r\nexport type FieldMessages = {\r\n error?: string;\r\n warning?: string;\r\n success?: string;\r\n};\r\n\r\nexport type FieldValidator = (value: unknown) => FieldMessages | null | Promise<FieldMessages | null>;\r\n\r\nfunction isPromiseLike(\r\n value: FieldMessages | null | Promise<FieldMessages | null>\r\n): value is Promise<FieldMessages | null> {\r\n return !!value && typeof (value as Promise<FieldMessages | null>).then === \"function\";\r\n}\r\n\r\nexport class FieldState {\r\n _notifier = new Notifier();\r\n _value: unknown;\r\n _initValue: unknown;\r\n _messages: FieldMessages = {};\r\n _touched = false;\r\n _validator: FieldValidator | undefined;\r\n _pending = false;\r\n _validationToken = 0;\r\n\r\n constructor(initValue: unknown, validator?: FieldValidator) {\r\n this._value = initValue;\r\n this._initValue = initValue;\r\n this._validator = validator;\r\n if (validator) this.validate();\r\n }\r\n\r\n value(listener?: Handler): unknown {\r\n if (listener) this._notifier.addListener(\"value\", listener);\r\n return this._value;\r\n }\r\n\r\n setValue(val: unknown): void {\r\n this._value = val;\r\n this._notifier.notify(\"value\", val);\r\n this._notifier.notify(\"dirty\", val !== this._initValue);\r\n this.validate();\r\n }\r\n\r\n dirty(listener?: Handler): boolean {\r\n if (listener) this._notifier.addListener(\"dirty\", listener);\r\n return this._value !== this._initValue;\r\n }\r\n\r\n touched(listener?: Handler): boolean {\r\n if (listener) this._notifier.addListener(\"touched\", listener);\r\n return this._touched;\r\n }\r\n\r\n setTouched(): void {\r\n if (!this._touched) {\r\n this._touched = true;\r\n this._notifier.notify(\"touched\", true);\r\n }\r\n }\r\n\r\n configure(initValue?: unknown, validator?: FieldValidator): void {\r\n let shouldValidate = false;\r\n\r\n if (\r\n initValue !== undefined &&\r\n this._value === undefined &&\r\n this._initValue === undefined\r\n ) {\r\n this._value = initValue;\r\n this._initValue = initValue;\r\n this._notifier.notify(\"value\", initValue);\r\n this._notifier.notify(\"dirty\", false);\r\n shouldValidate = true;\r\n }\r\n\r\n if (validator !== undefined && validator !== this._validator) {\r\n this._validator = validator;\r\n shouldValidate = true;\r\n }\r\n\r\n if (shouldValidate) this.validate();\r\n }\r\n\r\n message(type: keyof FieldMessages, listener?: Handler): string | undefined {\r\n if (listener) this._notifier.addListener(type, listener);\r\n return this._messages[type];\r\n }\r\n\r\n status(listener?: Handler): FieldStatus {\r\n if (listener) this._notifier.addListener(\"status\", listener);\r\n return resolveStatus(this._messages);\r\n }\r\n\r\n setMessages(next: FieldMessages): void {\r\n const prev = this._messages;\r\n this._messages = next;\r\n for (const type of [\"error\", \"warning\", \"success\"] as const) {\r\n if (prev[type] !== next[type]) this._notifier.notify(type, next[type]);\r\n }\r\n if (resolveStatus(prev) !== resolveStatus(next)) {\r\n this._notifier.notify(\"status\", resolveStatus(next));\r\n }\r\n }\r\n\r\n reset(): void {\r\n this._value = this._initValue;\r\n this._touched = false;\r\n this._notifier.notify(\"value\", this._value);\r\n this._notifier.notify(\"dirty\", false);\r\n this._notifier.notify(\"touched\", false);\r\n this.setMessages({});\r\n this.validate();\r\n }\r\n\r\n validate(): void {\r\n const token = ++this._validationToken;\r\n\r\n if (!this._validator) {\r\n this._pending = false;\r\n this.setMessages({});\r\n return;\r\n }\r\n\r\n try {\r\n const result = this._validator(this._value);\r\n\r\n if (isPromiseLike(result)) {\r\n this._pending = true;\r\n Promise.resolve(result)\r\n .then((msg) => {\r\n if (token !== this._validationToken) return;\r\n this._pending = false;\r\n this.setMessages(msg ?? {});\r\n })\r\n .catch((error) => {\r\n if (token !== this._validationToken) return;\r\n this._pending = false;\r\n console.error(error);\r\n });\r\n } else {\r\n this._pending = false;\r\n this.setMessages(result ?? {});\r\n }\r\n } catch (error) {\r\n if (token === this._validationToken) {\r\n this._pending = false;\r\n }\r\n console.error(error);\r\n }\r\n }\r\n\r\n _dispose(): void {\r\n this._validationToken += 1;\r\n this._pending = false;\r\n this._notifier._dispose();\r\n }\r\n}\r\n\r\nfunction resolveStatus(m: FieldMessages): FieldStatus {\r\n if (m.error) return \"error\";\r\n if (m.warning) return \"warning\";\r\n if (m.success) return \"success\";\r\n return undefined;\r\n}\r\n","import { FieldState, FieldValidator } from \"./FieldState.js\";\r\n\r\nexport class FormState {\r\n fields = new Map<string, FieldState>();\r\n\r\n setField(path: string, initValue?: unknown, validator?: FieldValidator): FieldState {\r\n let field = this.fields.get(path);\r\n\r\n if (!field) {\r\n field = new FieldState(initValue, validator);\r\n this.fields.set(path, field);\r\n } else {\r\n field.configure(initValue, validator);\r\n }\r\n\r\n return field;\r\n }\r\n\r\n getField(path: string): FieldState {\r\n return this.setField(path);\r\n }\r\n\r\n removeField(path: string): void {\r\n this.fields.get(path)?._dispose();\r\n this.fields.delete(path);\r\n }\r\n\r\n get valid(): boolean {\r\n for (const f of this.fields.values()) {\r\n if (f._pending || f._messages.error) return false;\r\n }\r\n return true;\r\n }\r\n\r\n reset(): void {\r\n for (const f of this.fields.values()) f.reset();\r\n }\r\n\r\n snapshot(): Record<string, unknown> {\r\n const result: Record<string, unknown> = {};\r\n for (const [path, f] of this.fields) setByPath(result, path, f._value);\r\n return result;\r\n }\r\n\r\n _dispose(): void {\r\n for (const f of this.fields.values()) f._dispose();\r\n this.fields.clear();\r\n }\r\n}\r\n\r\nfunction setByPath(obj: Record<string, unknown>, path: string, value: unknown): void {\r\n const segments = path.split(\".\");\r\n let cur: any = obj;\r\n for (let i = 0; i < segments.length - 1; i++) {\r\n const key = segments[i];\r\n if (cur[key] == null) cur[key] = isNaN(Number(segments[i + 1])) ? {} : [];\r\n cur = cur[key];\r\n }\r\n cur[segments[segments.length - 1]] = value;\r\n}\r\n"],"mappings":"qqCAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,UAAAE,GAAA,UAAAA,GAAA,OAAAC,goBCAaC,GAAkB,CAC7B,UACA,aACA,gBACA,iBACA,SACA,WACA,YACA,mBACA,WACA,UACA,UACA,gBACA,gBACA,oBACA,SACA,cACA,QACA,aACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,UACA,UACA,UACA,aACA,UACA,YACA,YACA,aACA,UACA,SACA,eACA,mBACA,cACA,cACA,eACA,eACA,cACA,aACA,cACA,YACA,UACA,UACA,SACA,YACA,aACA,eACA,UACA,WACA,WACA,cACA,4BACA,WACA,YACA,WACA,eACA,YACA,WACA,YACA,eACA,WACA,iBACA,YACA,UACA,eACA,cACA,aACA,gBACA,gBACA,gBACA,cACA,kBACA,iBACA,iBACA,gBACA,eACA,sBACA,uBACA,qBACA,sBACA,mBACA,kBACA,oBACA,mBACA,iBACA,uBACA,qBACA,oBACA,YACA,YACF,EAEaC,GAAeD,GAAgB,OAAO,CAACE,EAAKC,IAAO,CAC9D,IAAMC,EAAMD,EAAG,MAAM,CAAC,EAAE,YAAY,EACpC,OAAAD,EAAIE,CAAG,EAAID,EACJD,CACT,EAAG,CAAC,CAAiF,ECvGxEG,GAAW,CACtB,IACA,OACA,UACA,UACA,QACA,QACA,IACA,OACA,aACA,KACA,SACA,SACA,UACA,OACA,OACA,MACA,WACA,OACA,WACA,KACA,MACA,UACA,MACA,SACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,OACA,QACA,MACA,WACA,SACA,KACA,WACA,SACA,SACA,IACA,QACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,OACA,QACA,SACA,OACA,SACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,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AAQ5B,CAAG,EAAI4B,EACpB,KAAK,UAAU,OAAO5B,CAAa,CACvC,CAEA,YAA+BA,EAAQyC,EAA0B,CAC7D,OAAO,KAAK,UAAU,YAAYzC,EAAeyC,CAAE,CACvD,CAEA,eAAkCzC,EAAQyC,EAAoB,CAC1D,KAAK,UAAU,eAAezC,EAAeyC,CAAE,CACnD,CAEA,MAAyBzC,EAAc,CACnC,KAAK,IAAIA,EAAK,KAAK,cAAcA,CAAG,CAAC,CACzC,CAEA,UAAiB,CACb,KAAK,UAAU,SAAS,CAC5B,CACJ,ECrCA,IAAA8L,GAAA,GAAAC,GAAAD,GAAA,cAAAE,EAAA,aAAAC,GAAA,eAAAC,GAAA,aAAAC,GAAA,eAAAC,EAAA,oBAAAC,GAAA,iBAAAC,EAAA,cAAAC,GAAA,cAAAC,EAAA,iBAAAC,EAAA,gBAAAC,GAAA,cAAAC,KAAA,IAAIC,GAAoB,CACtB,UAAW,SACX,OAAQ,CACN,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,KAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,MAAS,CACP,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UA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","names":["global_exports","__export","dist_exports","src_exports","EventProperties","eventNameMap","acc","ev","key","HtmlTags","_chain","_microtask","cb","e","Notifier","event","listener","release","listeners","args","idx","n","names","pending","chain","State","initialValue","name","newValue","merge","source","target","comma","space","adjacent","deepClone","value","old","val1","val2","addEvent","addHook","hashString","str","hash","i","toState","val","r","fn","partial","hookName","handler","hookProperty","current","attributes","eventName","eventProperty","node","seen","proto","clone","v","k","validate","element","asPartial","keys","isHTML","escapeHTML","getTagName","camelToKebab","selectorSplitter","selectors","splitted","parens","angulars","soFar","len","char","ensureDomStyle","styleParent","_a","domStyle","mergePartial","part","p","VoidTags","SvgTags","BooleanAttributes","PrefixCSS","CamelAttributes","ElementAttribute","parent","domElement","mutateAttrs","_b","prev","callback","AttributeList","attr","force","className","add","classes","newClass","list","updated","cls","oldClass","TextNode","textContent","newNode","tpl","domText","ElementList","ElementNode","index","dom","el","currentRef","aNode","bNode","a","b","aNext","bNext","inputs","updateDom","silent","_c","_d","oldItems","keyed","item","input","reused","cur","isPortal","length","finalIndex","domNode","ref","root","child","done","doneCalled","onceDone","snapshot","aIndex","bIndex","itemA","itemB","fromIndex","toIndex","html","StyleProperty","parentRule","domRule","style","prefix","StyleRule","_StyleRule","selectorText","StyleList","prop","styleStr","decl","nested","sheet","rules","domSheet","css","err","obj","parentSelector","basic","getSelector","selector","splitKeys","currentSelector","rule","newSelector","domRuleList","wrongCount","fixOddEven","_ElementNode","domphyElement","_parent","tempPath","children","originalKey","content","childNode","RecordState","record","__spreadValues","l","dist_exports","__export","m","W","P","N","X","Y","G","d","H","B","k","h","light","light_default","clone","v","themes","createDark","colorSteps","input","firstColor","validateTheme","partial","key","custom","deepMerge","target","source","_a","buildThemeCSS","name","styles","toneSteps","value","colorName","i","text","prop","getTheme","setTheme","dark","themeTokens","tokens","colorTones","themeVars","theme","section","themeCSS","themeApply","el","themeSpacing","n","themeName","object","node","ElementSizes","offsetSize","origin","size","resultSize","offset","contextSize","themeSize","index","ElementDensities","offsetDensity","density","resultDensity","contextDensity","themeDensity","TONE_STEPS","ElementTones","adjustTone","tone","level","newIndex","shiftTone","midpoint","offsetTone","originTone","contextTone","biasContext","context","direction","bias","themeColor","color","resultTone","colors","themeColorToken","src_exports","__export","FieldState","FormState","abbreviation","alert","avatar","badge","blockquote","breadcrumb","breadcrumbEllipsis","button","buttonSwitch","card","code","combobox","command","commandItem","commandSearch","descriptionList","details","dialog","divider","drawer","emphasis","field","figure","form","formGroup","heading","horizontalRule","icon","image","inputCheckbox","inputColor","inputDateTime","inputFile","inputNumber","inputOTP","inputRadio","inputRange","inputSearch","inputSwitch","inputText","keyboard","label","link","mark","menu","menuItem","orderedList","pagination","paragraph","popover","popoverArrow","preformated","progress","select","selectBox","selectItem","selectList","skeleton","small","spinner","splitter","splitterHandle","splitterPanel","strong","subscript","superscript","tab","tabPanel","table","tabs","tag","textarea","toast","toggle","toggleGroup","tooltip","transitionGroup","unorderedList","abbreviation","props","_a","_b","color","de","accentColor","node","listener","H","X","B","card","props","_a","color","de","listener","B","G","X","splitter","props","direction","defaultSize","min","max","node","element","b","de","splitterPanel","ctx","el","prop","release","size","splitterHandle","handle","isHorizontal","onMousedown","e","container","onMousemove","rect","raw","onMouseup","listener","X","B","command","node","element","b","de","commandSearch","props","color","accentColor","ctx","input","onInput","listener","H","B","G","X","commandItem","_a","_b","el","text","release","q","toggle","props","_a","_b","color","de","accentColor","node","ctx","items","n","key","listener","val","arr","v","H","B","X","toggleGroup","props","_a","multiple","color","de","B","listener","H","X","inputOTP","B","node","container","getInputs","onInput","e","inputs","target","idx","onKeydown","onPaste","_a","_b","_c","text","startIdx","char","i","lastFilled","alert","props","_a","color","de","B","listener","G","X","H","avatar","props","_a","color","de","B","listener","H","X","badge","props","_a","label","state","de","color","l","B","H","X","breadcrumb","props","_a","separator","color","de","node","listener","H","B","X","breadcrumbEllipsis","props","_a","color","de","node","listener","H","B","X","xSvg","tag","props","_a","removable","color","de","node","removeBtn","e","B","listener","X","H","min","max","round","floor","createCoords","v","oppositeSideMap","clamp","start","value","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","firstChar","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","direction","list","expandPaddingObject","padding","__spreadValues","getPaddingObject","rectToClientRect","rect","x","y","width","height","computeCoordsFromPlacement","_ref","placement","rtl","reference","floating","sideAxis","getSideAxis","alignmentAxis","getAlignmentAxis","alignLength","getAxisLength","side","getSide","isVertical","commonX","commonY","commonAlign","coords","getAlignment","detectOverflow","state","options","__async","_await$platform$isEle","x","y","platform","rects","elements","strategy","boundary","rootBoundary","elementContext","altBoundary","padding","evaluate","paddingObject","getPaddingObject","element","clippingClientRect","rectToClientRect","rect","offsetParent","offsetScale","elementClientRect","MAX_RESET_COUNT","computePosition","config","middleware","platformWithDetectOverflow","__spreadProps","__spreadValues","statefulPlacement","resetCount","middlewareData","i","currentMiddleware","name","fn","nextX","nextY","data","reset","flip","options","state","__async","_middlewareData$arrow","_middlewareData$flip","placement","middlewareData","rects","initialPlacement","platform","elements","_a","evaluate","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","detectOverflowOptions","__objRest","side","getSide","initialSideAxis","getSideAxis","isBasePlacement","rtl","fallbackPlacements","getOppositePlacement","getExpandedPlacements","hasFallbackAxisSideDirection","getOppositeAxisPlacements","placements","overflow","overflows","overflowsData","sides","getAlignmentSides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","d","resetPlacement","a","b","_overflowsData$filter2","currentSideAxis","acc","originSides","convertValueToCoords","state","options","__async","placement","platform","elements","rtl","side","getSide","alignment","getAlignment","isVertical","getSideAxis","mainAxisMulti","crossAxisMulti","rawValue","evaluate","mainAxis","crossAxis","alignmentAxis","offset","_middlewareData$offse","_middlewareData$arrow","x","y","middlewareData","diffCoords","__spreadProps","__spreadValues","shift","_a","checkMainAxis","checkCrossAxis","limiter","_ref","detectOverflowOptions","__objRest","coords","overflow","getOppositeAxis","mainAxisCoord","crossAxisCoord","minSide","maxSide","min","max","clamp","limitedCoords","hasWindow","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","_ref","value","isElement","isHTMLElement","isShadowRoot","isOverflowElement","element","overflow","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","_e","willChangeRe","containRe","isNotNone","isWebKitValue","isContainingBlock","elementOrCss","css","isWebKit","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","result","getNearestOverflowAncestor","parentNode","getOverflowAncestors","list","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","element","css","getComputedStyle","width","height","hasOffset","isHTMLElement","offsetWidth","offsetHeight","shouldFallback","round","unwrapElement","isElement","getScale","domElement","createCoords","rect","$","x","y","noOffsets","getVisualOffsets","win","getWindow","isWebKit","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","offsetParent","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","getFrameElement","iframeScale","iframeRect","left","top","rectToClientRect","getWindowScrollBarX","leftScroll","getNodeScroll","getDocumentElement","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","_ref","elements","strategy","topLayer","isTopLayer","offsets","isOffsetParentAnElement","getNodeName","isOverflowElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","max","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","doc","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","parentNode","getParentNode","isLastTraversableNode","getClippingElementAncestors","cache","cachedResult","result","getOverflowAncestors","el","currentContainingBlockComputedStyle","elementIsFixed","currentNode","computedStyle","currentNodeIsContaining","isContainingBlock","ancestor","getClippingRect","boundary","rootBoundary","clippingAncestors","firstRect","right","bottom","i","min","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","isTableElement","getContainingBlock","getElementRects","data","__async","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","platform","rectsAreEqual","a","b","observeMove","onMove","io","timeoutId","root","cleanup","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","floor","insetRight","insetBottom","insetLeft","options","isFirstUpdate","handleObserve","entries","ratio","__spreadProps","__spreadValues","_e","autoUpdate","reference","floating","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset","shift","flip","computePosition","reference","floating","options","cache","mergedOptions","__spreadValues","platform","platformWithCache","__spreadProps","creatFloating","props","open","placement","timer","cleanup","reference","floating","floatingNode","rootNode","mounted","openState","de","ensureMounted","instantShow","autoUpdate","computePosition","offset","flip","shift","x","y","resolved","instantHide","show","hide","floatingPartial","listener","node","rNode","overlay","overlayEle","b","e","handleOutside","event","target","combobox","props","options","placement","color","open","multiple","state","de","openState","show","hide","anchorPartial","creatFloating","popoverPartial","b","inputStyle","B","listener","H","X","inputElement","wrap","val","vals","items","opt","tag","_node","cur","filter","v","partial","node","G","popoverArrow","props","placement","color","sideOffset","B","bordered","place","de","flipMap","getFlipped","listener","_a","start","pos","end","H","X","x","blockquote","props","_a","color","de","node","listener","H","X","B","G","button","props","_a","color","de","node","listener","H","B","G","X","inputCheckbox","props","_a","_b","color","de","accentColor","node","listener","H","B","X","code","props","_a","color","de","node","listener","H","X","B","details","props","_a","_b","duration","color","de","accentColor","node","listener","H","X","B","G","descriptionList","props","_a","color","de","node","B","listener","H","X","dialog","props","color","open","state","de","node","e","r","_e","dlg","update","val","focusable","listener","H","X","B","G","emphasis","props","_a","color","de","node","listener","H","X","figure","props","_a","color","de","node","B","listener","X","H","formGroup","props","_a","layout","color","de","isVertical","node","listener","B","G","H","X","Headinghift","heading","props","_a","color","de","node","listener","X","B","offset","H","horizontalRule","props","_a","color","de","node","B","listener","X","image","props","_a","color","de","node","B","listener","X","icon","props","_a","color","de","node","B","listener","H","X","inputColor","props","_a","_b","color","de","accentColor","node","element","listener","H","B","G","X","inputDateTime","props","_a","_b","mode","color","de","accentColor","node","element","listener","H","X","B","G","inputFile","props","_a","_b","color","de","accentColor","node","element","listener","H","X","B","G","inputSearch","props","_a","_b","color","de","accentColor","node","element","listener","H","X","B","G","inputText","props","_a","_b","color","de","accentColor","node","element","B","listener","G","H","X","inputRange","props","_a","_b","color","de","accentColor","node","B","listener","X","inputNumber","props","_a","_b","color","de","accentColor","node","element","B","listener","G","H","X","keyboard","props","_a","color","de","node","listener","H","X","B","label","props","_a","_b","color","de","accentColor","node","B","listener","H","X","link","props","_a","_b","color","de","accentColor","node","listener","H","X","B","mark","props","_a","accentColor","de","node","listener","H","X","B","paragraph","props","_a","color","de","node","listener","H","X","preformated","props","_a","color","de","node","listener","H","X","B","G","progress","props","_a","_b","color","de","accentColor","node","B","listener","X","inputRadio","props","_a","_b","color","de","accentColor","node","listener","H","B","X","select","props","color","accentColor","node","listener","H","X","B","G","l","svg","Y","skeleton","props","_a","color","de","keyframes","animationName","F","listener","H","X","B","keyframes","animationName","F","spinner","props","_a","color","de","node","listener","H","X","B","selectList","props","_a","color","multiple","state","de","inputs","listener","val","v","node","B","G","H","X","selectItem","props","accentColor","color","value","node","select","state","listener","val","v","H","B","G","X","selectBox","props","options","placement","color","open","multiple","state","de","openState","show","hide","anchorPartial","creatFloating","popoverPartial","b","wrap","listener","val","vals","opt","tag","_node","cur","filter","v","B","partial","node","G","X","H","inputSwitch","props","_a","accentColor","de","node","listener","H","B","X","buttonSwitch","props","_a","_b","checked","check","de","color","accentColor","node","listener","H","X","B","small","props","_a","color","de","node","listener","H","X","strong","props","_a","color","de","node","listener","H","X","subscript","props","_a","color","de","node","listener","H","X","superscript","props","_a","color","de","node","listener","H","X","table","props","_a","color","de","node","listener","H","X","B","G","l","textarea","props","_a","_b","color","de","accentColor","autoResize","node","el","resize","listener","B","G","H","X","unorderedList","props","_a","color","de","node","listener","H","X","B","orderedList","props","_a","color","de","node","listener","H","X","B","getPages","current","total","_","i","pages","start","end","pagination","props","_a","color","accentColor","state","de","btnBase","listener","B","G","H","X","activeStyle","__spreadProps","__spreadValues","node","content","page","items","p","isActive","divider","props","_a","color","de","node","B","listener","H","X","translateOut","marginMap","isVertical","p","drawer","props","color","open","placement","size","state","de","defaultSize","B","drawerSize","node","e","_e","dlg","update","val","listener","H","X","G","popover","props","_a","open","placement","openOn","popoverId","openState","de","placeState","show","hide","anchorPartial","creatFloating","popoverPartial","node","id","b","listener","e","related","root","floatingEl","toast","props","position","color","state","de","isTop","isCenter","isRight","overlayEle","B","rootNode","overlay","listener","G","H","X","node","done","onEnd","e","tooltip","props","open","placement","content","placeState","de","contentState","tooltipId","contentElement","listener","show","hide","anchorPartial","creatFloating","tooltipPartial","node","id","B","G","X","H","popoverArrow","b","e","getItemId","node","index","transitionGroup","props","duration","delay","previousRects","item","m","dom","key","prev","next","deltaX","deltaY","previousTransition","previousTransform","cleanup","onEnd","event","tabs","props","node","element","partial","de","b","tab","props","accentColor","color","node","_a","context","children","n","key","part","listener","e","_b","_c","_d","k","tabs","idx","next","target","H","B","G","X","tabPanel","listener","B","G","node","_a","context","children","n","key","part","menu","props","color","selectable","node","element","_a","partial","de","b","listener","B","G","H","X","menuItem","props","accentColor","color","node","_a","context","children","n","key","listener","e","_b","_c","_d","k","items","idx","next","B","H","G","X","form","state","node","element","b","field","path","validator","node","f","tag","type","part","listener","e","isPromiseLike","value","FieldState","initValue","validator","g","listener","val","shouldValidate","type","resolveStatus","next","prev","token","result","msg","error","m","FormState","path","initValue","validator","field","FieldState","_a","f","result","setByPath","obj","value","segments","cur","i","key"]}
1
+ {"version":3,"sources":["../src/global.ts","../../core/src/types/EventProperties.ts","../../core/src/constants/HtmlTags.ts","../../core/src/classes/Notifier.ts","../../core/src/classes/State.ts","../../core/src/utils.ts","../../core/src/helpers.ts","../../core/src/constants/VoidTags.ts","../../core/src/constants/SvgTags.ts","../../core/src/constants/BooleanAttributes.ts","../../core/src/constants/PrefixCSS.ts","../../core/src/constants/CamelAttributes.ts","../../core/src/classes/ElementAttribute.ts","../../core/src/classes/AttributeList.ts","../../core/src/classes/TextNode.ts","../../core/src/classes/ElementList.ts","../../core/src/classes/StyleProperty.ts","../../core/src/classes/StyleRule.ts","../../core/src/classes/StyleList.ts","../../core/src/classes/ElementNode.ts","../../core/src/classes/RecordState.ts","../../theme/src/light.ts","../../theme/src/theme.ts","../../theme/src/size.ts","../../theme/src/density.ts","../../theme/src/tone.ts","../src/index.ts","../src/patches/abbreviation.ts","../src/patches/card.ts","../src/patches/splitter.ts","../src/patches/command.ts","../src/patches/toggle.ts","../src/patches/toggleGroup.ts","../src/patches/inputOTP.ts","../src/patches/alert.ts","../src/patches/avatar.ts","../src/patches/badge.ts","../src/patches/breadcrumb.ts","../src/patches/breadcrumbEllipsis.ts","../src/patches/tag.ts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../src/utils/floating.ts","../src/patches/combobox.ts","../src/patches/popoverArrow.ts","../src/patches/blockquote.ts","../src/patches/button.ts","../src/patches/inputCheckbox.ts","../src/patches/code.ts","../src/patches/details.ts","../src/patches/descriptionList.ts","../src/patches/dialog.ts","../src/patches/emphasis.ts","../src/patches/figure.ts","../src/patches/formGroup.ts","../src/patches/heading.ts","../src/patches/horizontalRule.ts","../src/patches/image.ts","../src/patches/icon.ts","../src/patches/inputColor.ts","../src/patches/inputDateTime.ts","../src/patches/inputFile.ts","../src/patches/inputSearch.ts","../src/patches/inputText.ts","../src/patches/inputRange.ts","../src/patches/inputNumber.ts","../src/patches/keyboard.ts","../src/patches/label.ts","../src/patches/link.ts","../src/patches/mark.ts","../src/patches/paragraph.ts","../src/patches/preformated.ts","../src/patches/progress.ts","../src/patches/inputRadio.ts","../src/patches/select.ts","../src/patches/skeleton.ts","../src/patches/spinner.ts","../src/patches/selectList.ts","../src/patches/selectItem.ts","../src/patches/selectBox.ts","../src/patches/inputSwitch.ts","../src/patches/buttonSwitch.ts","../src/patches/small.ts","../src/patches/strong.ts","../src/patches/subscript.ts","../src/patches/superscript.ts","../src/patches/table.ts","../src/patches/textarea.ts","../src/patches/unorderedList.ts","../src/patches/orderedList.ts","../src/patches/pagination.ts","../src/patches/divider.ts","../src/patches/drawer.ts","../src/patches/popover.ts","../src/patches/toast.ts","../src/patches/tooltip.ts","../src/patches/transitionGroup.ts","../src/patches/tabs.ts","../src/patches/tab.ts","../src/patches/tabPanel.ts","../src/patches/menu.ts","../src/patches/menuItem.ts","../src/patches/form.ts","../src/patches/field.ts","../src/classes/FieldState.ts","../src/classes/FormState.ts"],"sourcesContent":["export * as core from \"@domphy/core\"\r\nexport * as theme from \"@domphy/theme\"\r\nexport * as ui from \"./index.js\"\r\n","export const EventProperties = [\r\n \"onAbort\",\r\n \"onAuxClick\",\r\n \"onBeforeMatch\",\r\n \"onBeforeToggle\",\r\n \"onBlur\",\r\n \"onCancel\",\r\n \"onCanPlay\",\r\n \"onCanPlayThrough\",\r\n \"onChange\",\r\n \"onClick\",\r\n \"onClose\",\r\n \"onContextLost\",\r\n \"onContextMenu\",\r\n \"onContextRestored\",\r\n \"onCopy\",\r\n \"onCueChange\",\r\n \"onCut\",\r\n \"onDblClick\",\r\n \"onDrag\",\r\n \"onDragEnd\",\r\n \"onDragEnter\",\r\n \"onDragLeave\",\r\n \"onDragOver\",\r\n \"onDragStart\",\r\n \"onDrop\",\r\n \"onDurationChange\",\r\n \"onEmptied\",\r\n \"onEnded\",\r\n \"onError\",\r\n \"onFocus\",\r\n \"onFormData\",\r\n \"onInput\",\r\n \"onInvalid\",\r\n \"onKeyDown\",\r\n \"onKeyPress\",\r\n \"onKeyUp\",\r\n \"onLoad\",\r\n \"onLoadedData\",\r\n \"onLoadedMetadata\",\r\n \"onLoadStart\",\r\n \"onMouseDown\",\r\n \"onMouseEnter\",\r\n \"onMouseLeave\",\r\n \"onMouseMove\",\r\n \"onMouseOut\",\r\n \"onMouseOver\",\r\n \"onMouseUp\",\r\n \"onPaste\",\r\n \"onPause\",\r\n \"onPlay\",\r\n \"onPlaying\",\r\n \"onProgress\",\r\n \"onRateChange\",\r\n \"onReset\",\r\n \"onResize\",\r\n \"onScroll\",\r\n \"onScrollEnd\",\r\n \"onSecurityPolicyViolation\",\r\n \"onSeeked\",\r\n \"onSeeking\",\r\n \"onSelect\",\r\n \"onSlotChange\",\r\n \"onStalled\",\r\n \"onSubmit\",\r\n \"onSuspend\",\r\n \"onTimeUpdate\",\r\n \"onToggle\",\r\n \"onVolumeChange\",\r\n \"onWaiting\",\r\n \"onWheel\",\r\n \"onTouchStart\",\r\n \"onTouchMove\",\r\n \"onTouchEnd\",\r\n \"onTouchCancel\",\r\n \"onPointerDown\",\r\n \"onPointerMove\",\r\n \"onPointerUp\",\r\n \"onPointerCancel\",\r\n \"onPointerEnter\",\r\n \"onPointerLeave\",\r\n \"onPointerOver\",\r\n \"onPointerOut\",\r\n \"onGotPointerCapture\",\r\n \"onLostPointerCapture\",\r\n \"onCompositionStart\",\r\n \"onCompositionUpdate\",\r\n \"onCompositionEnd\",\r\n \"onTransitionEnd\",\r\n \"onTransitionStart\",\r\n \"onAnimationStart\",\r\n \"onAnimationEnd\",\r\n \"onAnimationIteration\",\r\n \"onFullscreenChange\",\r\n \"onFullscreenError\",\r\n \"onFocusIn\",\r\n \"onFocusOut\",\r\n] as const\r\n\r\nexport const eventNameMap = EventProperties.reduce((acc, ev) => {\r\n const key = ev.slice(2).toLowerCase() as keyof HTMLElementEventMap\r\n acc[key] = ev;\r\n return acc;\r\n}, {} as Partial<Record<keyof HTMLElementEventMap, (typeof EventProperties)[number]>>);\r\n","export const HtmlTags = [\r\n \"a\",\r\n \"abbr\",\r\n \"address\",\r\n \"article\",\r\n \"aside\",\r\n \"audio\",\r\n \"b\",\r\n \"base\",\r\n \"blockquote\",\r\n \"br\",\r\n \"button\",\r\n \"canvas\",\r\n \"caption\",\r\n \"cite\",\r\n \"code\",\r\n \"col\",\r\n \"colgroup\",\r\n \"data\",\r\n \"datalist\",\r\n \"dd\",\r\n \"del\",\r\n \"details\",\r\n \"dfn\",\r\n \"dialog\",\r\n \"div\",\r\n \"dl\",\r\n \"dt\",\r\n \"em\",\r\n \"fieldset\",\r\n \"figcaption\",\r\n \"figure\",\r\n \"footer\",\r\n \"form\",\r\n \"h1\",\r\n \"h2\",\r\n \"h3\",\r\n \"h4\",\r\n \"h5\",\r\n \"h6\",\r\n \"header\",\r\n \"hgroup\",\r\n \"i\",\r\n \"iframe\",\r\n \"img\",\r\n \"input\",\r\n \"ins\",\r\n \"kbd\",\r\n \"label\",\r\n \"legend\",\r\n \"li\",\r\n \"main\",\r\n \"map\",\r\n \"mark\",\r\n \"meta\",\r\n \"meter\",\r\n \"nav\",\r\n \"noscript\",\r\n \"object\",\r\n \"ol\",\r\n \"optgroup\",\r\n \"option\",\r\n \"output\",\r\n \"p\",\r\n \"param\",\r\n \"picture\",\r\n \"pre\",\r\n \"progress\",\r\n \"q\",\r\n \"rp\",\r\n \"rt\",\r\n \"ruby\",\r\n \"s\",\r\n \"samp\",\r\n \"section\",\r\n \"select\",\r\n \"slot\",\r\n \"small\",\r\n \"source\",\r\n \"span\",\r\n \"strong\",\r\n \"sub\",\r\n \"summary\",\r\n \"sup\",\r\n \"table\",\r\n \"tbody\",\r\n \"td\",\r\n \"template\",\r\n \"textarea\",\r\n \"tfoot\",\r\n \"th\",\r\n \"thead\",\r\n \"time\",\r\n \"title\",\r\n \"tr\",\r\n \"track\",\r\n \"u\",\r\n \"ul\",\r\n \"var\",\r\n \"video\",\r\n \"wbr\",\r\n \"bdi\",\r\n \"bdo\",\r\n \"math\",\r\n \"menu\",\r\n \"search\",\r\n \"area\",\r\n \"embed\",\r\n \"hr\",\r\n \"animate\",\r\n \"animateMotion\",\r\n \"animateTransform\",\r\n \"circle\",\r\n \"clipPath\",\r\n \"cursor\",\r\n \"defs\",\r\n \"desc\",\r\n \"ellipse\",\r\n \"feBlend\",\r\n \"feColorMatrix\",\r\n \"feComponentTransfer\",\r\n \"feComposite\",\r\n \"feConvolveMatrix\",\r\n \"feDiffuseLighting\",\r\n \"feDisplacementMap\",\r\n \"feDistantLight\",\r\n \"feDropShadow\",\r\n \"feFlood\",\r\n \"feFuncA\",\r\n \"feFuncB\",\r\n \"feFuncG\",\r\n \"feFuncR\",\r\n \"feGaussianBlur\",\r\n \"feImage\",\r\n \"feMerge\",\r\n \"feMergeNode\",\r\n \"feMorphology\",\r\n \"feOffset\",\r\n \"fePointLight\",\r\n \"feSpecularLighting\",\r\n \"feSpotLight\",\r\n \"feTile\",\r\n \"feTurbulence\",\r\n \"filter\",\r\n \"foreignObject\",\r\n \"g\",\r\n \"image\",\r\n \"line\",\r\n \"linearGradient\",\r\n \"marker\",\r\n \"mask\",\r\n \"metadata\",\r\n \"mpath\",\r\n \"path\",\r\n \"pattern\",\r\n \"polygon\",\r\n \"polyline\",\r\n \"prefetch\",\r\n \"radialGradient\",\r\n \"rect\",\r\n \"set\",\r\n \"solidColor\",\r\n \"stop\",\r\n \"svg\",\r\n \"switch\",\r\n \"symbol\",\r\n \"tbreak\",\r\n \"text\",\r\n \"textPath\",\r\n \"tspan\",\r\n \"use\",\r\n \"view\",\r\n];","import { Handler } from \"../types.js\"\n\ntype ChainEntry = [notifier: Notifier, event: string]\n\n// Shared across all instances to track the flush chain for circular detection.\nlet _chain: ChainEntry[] = []\n\n// Microtask scheduler. Older embedded Chromium runtimes (SketchUp 2020 /\n// 2021.0 ship CEF 64) predate `queueMicrotask` (added in Chrome 71). A\n// resolved Promise's `.then` runs as a microtask in the same checkpoint, so\n// it is the standard fallback. The `.catch` mimics `queueMicrotask`'s\n// behaviour of surfacing thrown errors to the global error handler rather\n// than silently becoming an unhandled-rejection.\nconst _microtask: (cb: () => void) => void =\n typeof queueMicrotask === \"function\"\n ? queueMicrotask\n : (cb) => {\n Promise.resolve().then(cb).catch((e) => {\n setTimeout(() => { throw e }, 0)\n })\n }\n\n// Cap on self-re-notifications within one settle burst. A converging update\n// (clamp/normalize) reaches a fixpoint in a pass or two; anything beyond this is\n// a genuinely diverging self-feedback loop and is stopped like a cycle.\nconst SELF_NOTIFY_CAP = 100\n\nexport class Notifier {\n private _listeners: Record<string, Set<Handler>> | null = {}\n private _pending: Map<string, { args: unknown[], chain: ChainEntry[] }> = new Map()\n private _scheduled = false\n // Args currently being delivered per event (used to detect a self-update fixpoint).\n private _flushing: Map<string, unknown[]> = new Map()\n // Self-re-notification depth in the current settle burst (runaway guard).\n private _selfDepth = 0\n\n _dispose(): void {\n if (this._listeners) {\n for (const event in this._listeners) {\n this._listeners[event].clear()\n }\n }\n this._listeners = null\n }\n\n addListener(event: string, listener: Handler): () => void {\n if (!this._listeners) return () => {}\n\n if (typeof event !== \"string\" || typeof listener !== \"function\") {\n throw new Error(\"Event name must be a string, listener must be a function\")\n }\n\n if (!this._listeners[event]) {\n this._listeners[event] = new Set()\n }\n\n const release = () => this.removeListener(event, listener)\n\n if (this._listeners[event].has(listener)) return release\n\n this._listeners[event].add(listener)\n if (typeof listener.onSubscribe === \"function\") {\n listener.onSubscribe(release)\n }\n\n return release\n }\n\n removeListener(event: string, listener: Handler): void {\n if (!this._listeners) return\n\n const listeners = this._listeners[event]\n if (listeners && listeners.has(listener)) {\n listeners.delete(listener)\n if (listeners.size === 0) {\n delete this._listeners[event]\n }\n }\n }\n\n notify(event: string, ...args: unknown[]): void {\n if (!this._listeners) return\n if (!this._listeners[event]) return\n\n // A listener that re-sets its OWN state mid-flush shows up as [this,event] at\n // the TOP of the chain. That is a converging self-update (clamp/normalize),\n // not a cross-state cycle — let it re-propagate with a fresh chain. A deeper\n // match (intervening notifiers) is a real cycle and is still rejected.\n const top = _chain.length ? _chain[_chain.length - 1] : null\n const selfReentry = !!top && top[0] === this && top[1] === event\n\n if (selfReentry) {\n const inflight = this._flushing.get(event)\n // Same value as the one being delivered → fixpoint reached, stop quietly.\n if (inflight && inflight[0] === args[0]) return\n if (this._selfDepth >= SELF_NOTIFY_CAP) {\n console.error(`[Domphy] Runaway self-update on \"${event}\" — stopped after ${SELF_NOTIFY_CAP} iterations`)\n return\n }\n this._selfDepth++\n this._pending.set(event, { args, chain: [] })\n } else {\n if (this._isCircular(event)) return\n this._pending.set(event, { args, chain: [..._chain] })\n }\n\n if (!this._scheduled) {\n this._scheduled = true\n _microtask(() => this._flushAll())\n }\n }\n\n private _isCircular(event: string): boolean {\n const idx = _chain.findIndex(([n, e]) => n === this && e === event)\n if (idx === -1) return false\n\n const names = [..._chain.slice(idx).map(([, e]) => e), event]\n console.error(`[Domphy] Circular dependency detected:\\n ${names.join(\" → \")}`)\n return true\n }\n\n private _flushAll(): void {\n this._scheduled = false\n const pending = this._pending\n this._pending = new Map()\n\n for (const [event, { args, chain }] of pending) {\n _chain = chain\n this._flush(event, args)\n }\n _chain = []\n // Burst settled (no self-update re-queued anything) → reset the runaway guard.\n if (this._pending.size === 0) this._selfDepth = 0\n }\n\n private _flush(event: string, args: unknown[]): void {\n if (!this._listeners) return\n const listeners = this._listeners[event]\n if (!listeners) return\n\n _chain.push([this, event])\n this._flushing.set(event, args)\n\n for (const listener of [...listeners]) {\n if (!listeners.has(listener)) continue\n try {\n listener(...args)\n } catch (e) {\n console.error(e)\n }\n }\n\n this._flushing.delete(event)\n _chain.pop()\n }\n}\n","import { Notifier } from \"./Notifier.js\";\r\nimport { Handler } from \"../types.js\"\r\n\r\nexport type ValueListener<T> = ((_value: T) => void) & Handler\r\nexport type ValueOrState<T> = T | State<T>\r\n\r\nexport class State<T> {\r\n readonly _isState = true;\r\n private _value: T;\r\n readonly initialValue: T;\r\n private _notifier: Notifier | null = new Notifier();\r\n\r\n constructor(initialValue: T, readonly name: string = typeof initialValue) {\r\n this.initialValue = initialValue;\r\n this._value = initialValue;\r\n }\r\n\r\n get(listener?: ValueListener<T>): T {\r\n if (listener) this.addListener(listener);\r\n return this._value;\r\n }\r\n\r\n set(newValue: T): void {\r\n if (!this._notifier) return;\r\n this._value = newValue;\r\n this._notifier.notify(this.name, newValue);\r\n }\r\n\r\n reset(): void {\r\n this.set(this.initialValue);\r\n }\r\n\r\n addListener(listener: ValueListener<T>): () => void {\r\n if (!this._notifier) return () => { };\r\n return this._notifier.addListener(this.name, listener);\r\n }\r\n\r\n removeListener(listener: ValueListener<T>): void {\r\n if (!this._notifier) return;\r\n this._notifier.removeListener(this.name, listener);\r\n }\r\n\r\n _dispose(): void {\r\n if (this._notifier) {\r\n this._notifier._dispose();\r\n this._notifier = null;\r\n }\r\n }\r\n}\r\n","import { DomphyElement, HookMap, EventName, Handler, Listener } from \"./types.js\";\r\nimport { State } from \"./classes/State.js\"\r\n\r\nimport { deepClone, addEvent, addHook } from \"./helpers.js\"\r\n\r\nexport function merge(source: Record<string, any> = {}, target: Record<string, any> = {}): Record<string, any> {\r\n const comma = [\"animation\", \"transition\", \"boxShadow\", \"textShadow\", \"background\", \"fontFamily\"]\r\n const space = [\"class\", \"rel\", \"transform\", \"acceptCharset\", \"sandbox\"]\r\n const adjacent = [\"content\"]\r\n if (Object.prototype.toString.call(target) === \"[object Object]\" && Object.getPrototypeOf(target) === Object.prototype) { // plainjs not class instance\r\n target = deepClone(target)\r\n }\r\n\r\n for (const key in target) {\r\n\r\n const value = target[key];\r\n if (value === undefined || value === null || value === \"\") continue;\r\n\r\n if (typeof value === \"object\" && !Array.isArray(value)) {\r\n if (typeof source[key] === \"object\") {\r\n source[key] = merge(source[key], value);\r\n } else {\r\n source[key] = value;\r\n }\r\n\r\n } else {\r\n if (comma.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\", \")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\", \")\r\n }\r\n\r\n } else if (adjacent.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\"\")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\"\")\r\n }\r\n } else if (space.includes(key)) {\r\n if (typeof source[key] === \"function\" || typeof value === \"function\") {\r\n let old = source[key]\r\n source[key] = (listener: Handler) => {\r\n let val1 = typeof old === \"function\" ? old(listener) : old\r\n let val2 = typeof value === \"function\" ? value(listener) : value\r\n return [val1, val2].filter(e => e).join(\" \")\r\n }\r\n } else {\r\n source[key] = [source[key], value].filter(e => e).join(\" \")\r\n }\r\n } else if (key.startsWith(\"on\")) {\r\n let name = key.replace(\"on\", \"\").toLowerCase() as EventName\r\n addEvent(source as DomphyElement, name, value)\r\n } else if (key.startsWith(\"_on\")) {\r\n let name = key.replace(\"_on\", \"\") as keyof HookMap\r\n addHook(source as DomphyElement, name, value)\r\n } else {\r\n source[key] = value;\r\n }\r\n }\r\n }\r\n return source;\r\n}\r\n\r\nexport function hashString(str: string = \"\"): string {\r\n let hash = 0x811c9dc5; // FNV-1a 32-bit offset basis\r\n for (let i = 0; i < str.length; i++) {\r\n hash ^= str.charCodeAt(i);\r\n hash = (hash * 0x01000193) >>> 0; // FNV prime, keep 32-bit unsigned\r\n }\r\n return String.fromCharCode(97 + (hash % 26)) + hash.toString(16);\r\n}\r\n\r\nexport function toState<T>(val: T | State<T>, name?: string): State<T> {\r\n return (val instanceof State || (val as any)?._isState) ? val as State<T> : new State<T>(val, name);\r\n}\r\n\r\nexport function r<T>(fn: (listener: Listener) => T): (listener: Listener) => T {\r\n return fn;\r\n}\r\n\r\n","import { DomphyElement, PartialElement, HookMap, EventName, Handler, TagName } from \"./types.js\";\r\nimport { ElementNode } from \"./classes/ElementNode.js\"\r\nimport { State } from \"./classes/State.js\"\r\nimport { eventNameMap } from \"./types/EventProperties.js\"\r\nimport { HtmlTags } from \"./constants/HtmlTags.js\"\r\nimport {merge} from \"./utils.js\"\r\n\r\nexport function addHook<K extends keyof HookMap>(partial: PartialElement, hookName: K, handler: HookMap[K]): void {\r\n const hookProperty = `_on${hookName}` as keyof PartialElement;\r\n let current = partial[hookProperty];\r\n\r\n if (typeof current === \"function\") {\r\n (partial as any)[hookProperty] = (...args: any[]) => {\r\n (current as Function)(...args);\r\n (handler as Function)(...args);\r\n };\r\n } else {\r\n (partial as any)[hookProperty] = handler;\r\n }\r\n}\r\n\r\nexport function addEvent<K extends keyof HTMLElementEventMap>(\r\n attributes: PartialElement,\r\n eventName: K,\r\n handler: (event: HTMLElementEventMap[K], node: ElementNode) => void\r\n): void {\r\n const eventProperty = eventNameMap[eventName];\r\n if (!eventProperty) {\r\n throw Error(`invalid event name \"${eventName}\"`);\r\n }\r\n const current = (attributes as any)[eventProperty]\r\n\r\n if (typeof current == \"function\") {\r\n (attributes as any)[eventProperty] = (event: HTMLElementEventMap[K], node: ElementNode) => {\r\n current(event, node)\r\n handler(event, node);\r\n };\r\n } else {\r\n (attributes as any)[eventProperty] = handler\r\n }\r\n}\r\n\r\nexport function deepClone(value: any, seen = new WeakMap()): any {\r\n if (value === null || typeof value !== \"object\") return value;\r\n if (typeof value === \"function\") return value;\r\n if (seen.has(value)) return seen.get(value);\r\n\r\n const proto = Object.getPrototypeOf(value);\r\n if (proto !== Object.prototype && !Array.isArray(value)) return value; // ignore class instance\r\n\r\n let clone: any;\r\n\r\n if (Array.isArray(value)) {\r\n clone = [];\r\n seen.set(value, clone);\r\n for (const v of value) clone.push(deepClone(v, seen));\r\n return clone;\r\n }\r\n\r\n if (value instanceof Date) return new Date(value);\r\n if (value instanceof RegExp) return new RegExp(value);\r\n if (value instanceof Map) {\r\n clone = new Map();\r\n seen.set(value, clone);\r\n for (const [k, v] of value) clone.set(deepClone(k, seen), deepClone(v, seen));\r\n return clone;\r\n }\r\n if (value instanceof Set) {\r\n clone = new Set();\r\n seen.set(value, clone);\r\n for (const v of value) clone.add(deepClone(v, seen));\r\n return clone;\r\n }\r\n if (ArrayBuffer.isView(value)) {\r\n return new (value as any).constructor(value);\r\n }\r\n if (value instanceof ArrayBuffer) {\r\n return value.slice(0);\r\n }\r\n\r\n clone = Object.create(proto);\r\n seen.set(value, clone);\r\n\r\n for (const key of Reflect.ownKeys(value)) {\r\n clone[key] = deepClone(value[key], seen);\r\n }\r\n\r\n return clone;\r\n}\r\n\r\nexport function validate(element: DomphyElement | PartialElement, asPartial = false): boolean {\r\n if (Object.prototype.toString.call(element) !== \"[object Object]\") {\r\n throw Error(`typeof ${element} is invalid DomphyElement`);\r\n }\r\n let keys = Object.keys(element);\r\n for (let i = 0; i < keys.length; i++) {\r\n let key = keys[i];\r\n let val = element[key as keyof typeof element]\r\n if (i == 0 && !HtmlTags.includes(key) && !key.includes(\"-\") && !asPartial) { // web-component\r\n throw Error(`key ${key} is not valid HTML tag name`);\r\n } else if (key == \"style\" && val && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"style\" must be a object`);\r\n } else if (key == \"$\") {\r\n element.$!.forEach(v => validate(v as PartialElement, true))\r\n } else if (key.startsWith(\"_on\") && typeof val != \"function\") {\r\n throw Error(`hook ${key} value \"${val}\" must be a function `)\r\n } else if (key.startsWith(\"on\") && typeof val != \"function\") {\r\n throw Error(`event ${key} value \"${val}\" must be a function `);\r\n } else if (key == \"_portal\" && typeof val !== \"function\") {\r\n throw Error(`\"_portal\" must be a function return HTMLElement`);\r\n } else if (key == \"_context\" && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"_context\" must be a object`);\r\n } else if (key == \"_metadata\" && Object.prototype.toString.call(val) !== \"[object Object]\") {\r\n throw Error(`\"_metadata\" must be a object`);\r\n } else if (key == \"_key\" && (typeof val !== \"string\" && typeof val !== \"number\")) {\r\n throw Error(`\"_key\" must be a string or number`);\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function isValid(element: DomphyElement): boolean {\r\n\r\n if (Array.isArray(element)) return false;\r\n if (!element || typeof element !== \"object\") return false;\r\n\r\n let keys = Object.keys(element);\r\n for (let i = 0; i < keys.length; i++) {\r\n let key = keys[i];\r\n let val = element[key as keyof typeof element];\r\n if (i == 0 && !HtmlTags.includes(key)) return false\r\n if (key === \"style\" && (val == null || typeof val !== \"object\" || Array.isArray(val))) return false;\r\n if (key.startsWith(\"_on\") && typeof val !== \"function\") return false;\r\n if (key.startsWith(\"on\") && typeof val !== \"function\") return false;\r\n if (key === \"_portalChildren\" && !Array.isArray(val)) return false;\r\n if ((key === \"_context\" || key === \"_metadata\") && (val == null || typeof val !== \"object\" || Array.isArray(val))) return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function isHTML(str: string): boolean {\r\n return /<([a-z][\\w-]*)(\\s[^>]*)?>.*<\\/\\1>|<([a-z][\\w-]*)(\\s[^>]*)?\\/>/i.test(str.trim());\r\n}\r\n\r\nexport function escapeHTML(str: string): string {\r\n return str\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n\r\nexport function addClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => String(reactive(listener)) + \" \" + className\r\n } else {\r\n let current = element.class || \"\"\r\n let split = String(current).split(\" \")\r\n split.push(className)\r\n element.class = split.filter(e => e).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function removeClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.filter(e => e != className).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.filter(e => e != className).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function toggleClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function getTagName(element: DomphyElement): TagName | undefined {\r\n return Object.keys(element).find(e => HtmlTags.includes(e)) as TagName | undefined\r\n}\r\n\r\n\r\nexport function camelToKebab(str: string): string {\r\n return str.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\r\n}\r\n\r\nexport function selectorSplitter(selectors: string) {\r\n if (selectors.indexOf('@') === 0) {\r\n return [selectors];\r\n }\r\n var splitted = [];\r\n var parens = 0;\r\n var angulars = 0;\r\n var soFar = '';\r\n for (var i = 0, len = selectors.length; i < len; i++) {\r\n var char = selectors[i];\r\n if (char === '(') {\r\n parens += 1;\r\n } else if (char === ')') {\r\n parens -= 1;\r\n } else if (char === '[') {\r\n angulars += 1;\r\n } else if (char === ']') {\r\n angulars -= 1;\r\n } else if (char === ',') {\r\n if (!parens && !angulars) {\r\n splitted.push(soFar.trim());\r\n soFar = '';\r\n continue;\r\n }\r\n }\r\n soFar += char;\r\n }\r\n splitted.push(soFar.trim());\r\n return splitted;\r\n};\r\n\r\nexport function normalizeSelectorKey(selectorText: string): string {\r\n const text = selectorText.trim();\r\n // At-rule headers (@media, @keyframes, @supports...) are matched\r\n // whitespace-insensitive because CSSOM reformats them unpredictably.\r\n if (text.startsWith(\"@\")) return text.replace(/\\s+/g, \"\");\r\n return text\r\n .replace(/\\s*([>+~,])\\s*/g, \"$1\") // tighten combinators and selector lists\r\n .replace(/\\s+/g, \" \") // collapse descendant-combinator whitespace\r\n .replace(/\\(\\s*odd\\s*\\)/g, \"(2n+1)\") // CSSOM serializes :nth-child(odd) as (2n+1)\r\n .replace(/\\(\\s*even\\s*\\)/g, \"(2n)\")\r\n .trim();\r\n}\r\n\r\nexport function collectCSSRules(rules: CSSRuleList, map: Map<string, CSSRule>): Map<string, CSSRule> {\r\n for (let i = 0; i < rules.length; i++) {\r\n const rule = rules[i] as any;\r\n let key: string | null = null;\r\n if (typeof rule.selectorText === \"string\") {\r\n key = normalizeSelectorKey(rule.selectorText);\r\n } else if (typeof rule.cssText === \"string\" && rule.cssText.startsWith(\"@\")) {\r\n key = normalizeSelectorKey(rule.cssText.split(\"{\")[0]);\r\n }\r\n if (key && !map.has(key)) map.set(key, rule as CSSRule);\r\n }\r\n return map;\r\n}\r\n\r\nexport function ensureDomStyle(styleParent: HTMLHeadElement | ShadowRoot): HTMLStyleElement {\r\n let domStyle = styleParent.querySelector(\"#domphy-style\") as HTMLStyleElement | null;\r\n\r\n if (!domStyle) {\r\n domStyle = document.createElement(\"style\");\r\n domStyle.id = \"domphy-style\";\r\n styleParent.appendChild(domStyle);\r\n }\r\n\r\n if (domStyle.dataset.domphyBase !== \"true\") {\r\n domStyle.sheet?.insertRule(\"[hidden] { display: none !important; }\", 0);\r\n domStyle.dataset.domphyBase = \"true\";\r\n }\r\n\r\n return domStyle;\r\n}\r\n\r\nexport const mergePartial = (partial: PartialElement | DomphyElement): typeof partial => {\r\n\r\n if (Array.isArray(partial.$)) {\r\n let part: typeof partial = {}\r\n partial.$.forEach(p => merge(part, mergePartial(p)))\r\n delete partial.$\r\n merge(part, partial) // native win\r\n\r\n return part\r\n } else {\r\n return partial\r\n }\r\n}\r\n","export const VoidTags = [\r\n \"area\",\r\n \"base\",\r\n \"br\",\r\n \"col\",\r\n \"embed\",\r\n \"hr\",\r\n \"img\",\r\n \"input\",\r\n \"link\",\r\n \"meta\",\r\n \"source\",\r\n \"track\",\r\n \"wbr\",\r\n] as const;\r\n\r\nexport type VoidTagName = (typeof VoidTags)[number];\r\n\r\n","export const SvgTags = [\"svg\", \"circle\", \"path\", \"rect\", \"ellipse\",\r\n \"line\", \"polyline\", \"polygon\", \"g\", \"defs\",\r\n \"use\", \"symbol\", \"linearGradient\", \"radialGradient\",\r\n \"stop\", \"clipPath\", \"mask\", \"filter\", \"text\",\r\n \"tspan\", \"textPath\", \"image\", \"pattern\", \"marker\",\r\n \"animate\", \"animateTransform\", \"animateMotion\",\r\n \"feGaussianBlur\", \"feComposite\", \"feColorMatrix\",\r\n \"feMerge\", \"feMergeNode\", \"feOffset\", \"feFlood\",\r\n \"feBlend\", \"foreignObject\"]","export const BooleanAttributes = [\r\n \"allowFullScreen\",\r\n \"async\",\r\n \"autoFocus\",\r\n \"autoPlay\",\r\n \"checked\",\r\n \"compact\",\r\n \"contentEditable\",\r\n \"controls\",\r\n \"declare\",\r\n \"default\",\r\n \"defer\",\r\n \"disabled\",\r\n \"formNoValidate\",\r\n \"hidden\",\r\n \"isMap\",\r\n \"itemScope\",\r\n \"loop\",\r\n \"multiple\",\r\n \"muted\",\r\n \"noHref\",\r\n \"noShade\",\r\n \"noValidate\",\r\n \"open\",\r\n \"playsInline\",\r\n \"readonly\",\r\n \"required\",\r\n \"reversed\",\r\n \"scoped\",\r\n \"selected\",\r\n \"sortable\",\r\n \"trueSpeed\",\r\n \"typeMustMatch\",\r\n \"wmode\",\r\n \"autoCapitalize\",\r\n \"translate\",\r\n \"spellCheck\",\r\n \"inert\",\r\n \"download\",\r\n \"noModule\",\r\n \"paused\",\r\n \"autoPictureInPicture\",\r\n] as const;","//browserslist query \"> 0.1%, not dead\"\r\nexport const PrefixCSS: Record<string, string[]> = {\r\n transform: [\"webkit\", \"ms\"],\r\n transition: [\"webkit\", \"ms\"],\r\n animation: [\"webkit\"],\r\n userSelect: [\"webkit\", \"ms\"],\r\n flexDirection: [\"webkit\", \"ms\"],\r\n flexWrap: [\"webkit\", \"ms\"],\r\n justifyContent: [\"webkit\", \"ms\"],\r\n alignItems: [\"webkit\", \"ms\"],\r\n alignSelf: [\"webkit\", \"ms\"],\r\n order: [\"webkit\", \"ms\"],\r\n flexGrow: [\"webkit\", \"ms\"],\r\n flexShrink: [\"webkit\", \"ms\"],\r\n flexBasis: [\"webkit\", \"ms\"],\r\n columns: [\"webkit\"],\r\n columnCount: [\"webkit\"],\r\n columnGap: [\"webkit\"],\r\n columnRule: [\"webkit\"],\r\n columnWidth: [\"webkit\"],\r\n boxSizing: [\"webkit\"],\r\n appearance: [\"webkit\", \"moz\"],\r\n filter: [\"webkit\"],\r\n backdropFilter: [\"webkit\"],\r\n clipPath: [\"webkit\"],\r\n mask: [\"webkit\"],\r\n maskImage: [\"webkit\"],\r\n textSizeAdjust: [\"webkit\", \"ms\"],\r\n hyphens: [\"webkit\", \"ms\"],\r\n writingMode: [\"webkit\", \"ms\"],\r\n gridTemplateColumns: [\"ms\"],\r\n gridTemplateRows: [\"ms\"],\r\n gridAutoColumns: [\"ms\"],\r\n gridAutoRows: [\"ms\"],\r\n gridColumn: [\"ms\"],\r\n gridRow: [\"ms\"],\r\n marginInlineStart: [\"webkit\"],\r\n marginInlineEnd: [\"webkit\"],\r\n paddingInlineStart: [\"webkit\"],\r\n paddingInlineEnd: [\"webkit\"],\r\n minInlineSize: [\"webkit\"],\r\n maxInlineSize: [\"webkit\"],\r\n minBlockSize: [\"webkit\"],\r\n maxBlockSize: [\"webkit\"],\r\n inlineSize: [\"webkit\"],\r\n blockSize: [\"webkit\"],\r\n tabSize: [\"moz\"],\r\n overscrollBehavior: [\"webkit\", \"ms\"],\r\n touchAction: [\"ms\"],\r\n resize: [\"webkit\"],\r\n printColorAdjust: [\"webkit\"],\r\n backgroundClip: [\"webkit\"],\r\n boxDecorationBreak: [\"webkit\"],\r\n overflowScrolling: [\"webkit\"],\r\n};\r\n","export const CamelAttributes: string[] = [\r\n \"viewBox\",\r\n \"preserveAspectRatio\",\r\n \"gradientTransform\",\r\n \"gradientUnits\",\r\n \"spreadMethod\",\r\n \"markerStart\",\r\n \"markerMid\",\r\n \"markerEnd\",\r\n \"markerHeight\",\r\n \"markerWidth\",\r\n \"markerUnits\",\r\n \"refX\",\r\n \"refY\",\r\n \"patternContentUnits\",\r\n \"patternTransform\",\r\n \"patternUnits\",\r\n \"filterUnits\",\r\n \"primitiveUnits\",\r\n \"kernelUnitLength\",\r\n \"clipPathUnits\",\r\n \"maskContentUnits\",\r\n \"maskUnits\"\r\n] as const\r\n","import { escapeHTML, camelToKebab } from \"../helpers.js\";\nimport { BooleanAttributes, CamelAttributes } from \"../constants.js\";\nimport type { ElementNode } from \"./ElementNode.js\"\nimport { type AttributeValue } from \"../types.js\"\nimport { Notifier } from \"./Notifier.js\"\n\nexport class ElementAttribute {\n readonly name: string;\n readonly isBoolean: boolean;\n value: any;\n parent: ElementNode;\n _notifier = new Notifier();\n // Release handles for the reactive listener's state subscriptions, so a\n // re-set (e.g. patch() replacing a reactive value) can drop the old listener\n // instead of leaking it on the long-lived State until node removal.\n private _releases: (() => void)[] = [];\n\n constructor(name: string, value: any, parent: any) {\n this.parent = parent;\n this.isBoolean = (BooleanAttributes as readonly string[]).includes(name);\n if (CamelAttributes.includes(name)) {\n this.name = name\n } else {\n this.name = camelToKebab(name)\n }\n this.value = undefined;\n this.set(value);\n }\n\n render(): void {\n if (!this.parent || !this.parent.domElement) return;\n const domElement = this.parent.domElement;\n\n const mutateAttrs = [\"value\"];\n if (this.isBoolean) {\n if (this.value === false || this.value == null) {\n domElement.removeAttribute(this.name)\n } else {\n domElement.setAttribute(this.name, this.value === true ? \"\" : this.value)\n }\n } else if (this.value == null) {\n domElement.removeAttribute(this.name);\n } else if (mutateAttrs.includes(this.name)) {\n (domElement as any)[this.name] = this.value;\n } else {\n domElement.setAttribute(this.name, this.value);\n }\n }\n\n set(value: AttributeValue): void {\n let prev = this.value;\n\n // Drop any previous reactive subscription before (re)binding.\n if (this._releases.length) {\n for (const release of this._releases) release();\n this._releases = [];\n }\n\n if (value == null) {\n this.value = null;\n } else if (typeof value == \"function\") {\n let listener: any = () => {\n if (!this.parent || this.parent._disposed) return;\n let p = this.value;\n // Re-pass `listener` so states read only on a later run (conditional\n // dependencies) get subscribed too — matching children/style paths.\n this.value = this.isBoolean ? Boolean((value as Function)(listener)) : (value as Function)(listener);\n this.render();\n if (p !== this.value) this._notifier.notify(this.name, this.value);\n };\n\n listener.elementNode = this.parent!;\n listener.debug = `class:${this.parent?.tagName}_${this.parent?.nodeId} attribute:${this.name}`;\n\n listener.onSubscribe = (release: () => void) => {\n this._releases.push(release);\n if (this.parent) {\n this.parent.addHook(\"BeforeRemove\", () => {\n release();\n listener = null;\n });\n }\n };\n\n this.value = this.isBoolean ? Boolean(value(listener)) : value(listener);\n } else {\n this.value = this.isBoolean ? Boolean(value) : value;\n }\n\n this.render();\n if (prev !== this.value) this._notifier.notify(this.name, this.value);\n }\n\n addListener(callback: (value: any) => void): void {\n const handler = callback as any\n handler.onSubscribe = (release: () => void) => this.parent?.addHook(\"BeforeRemove\", release);\n this._notifier.addListener(this.name, handler)\n }\n\n remove(): void {\n if (this.parent && this.parent.attributes) {\n this.parent.attributes.remove(this.name);\n }\n this._dispose();\n }\n\n _dispose(): void {\n this._notifier._dispose();\n this.value = null;\n this.parent = null as any\n }\n\n generateHTML(): string {\n const { name, value } = this;\n if (this.isBoolean) {\n return value ? `${name}` : \"\";\n } else {\n const val = Array.isArray(value) ? JSON.stringify(value) : value;\n return `${name}=\"${escapeHTML(String(val))}\"`;\n }\n }\n}\n","import type { ElementNode } from \"./ElementNode.js\";\nimport { ElementAttribute } from \"./ElementAttribute.js\";\nimport { BooleanAttributes } from \"../constants.js\";\nimport { AttributeValue } from \"../types.js\"\n\nexport class AttributeList {\n items: Record<string, ElementAttribute> | null = {};\n parent: ElementNode | null;\n\n constructor(parent: ElementNode) {\n this.parent = parent;\n }\n\n generateHTML(): string {\n if (!this.items) return \"\";\n const str = Object.values(this.items)\n .map((attr) => attr.generateHTML())\n .join(\" \");\n return str ? ` ${str}` : \"\";\n }\n\n get(name: string): any {\n if (!this.items) return undefined;\n return this.items[name]?.value;\n }\n\n set(name: string, value: AttributeValue): void {\n if (!this.items || !this.parent) return;\n if (this.items[name]) {\n this.items[name].set(value);\n } else {\n this.items[name] = new ElementAttribute(name, value, this.parent);\n }\n }\n\n addListener(name: string, callback: (value: string | number) => void): void {\n if (this.has(name)) {\n this.items![name].addListener(callback);\n }\n }\n\n has(name: string): boolean {\n if (!this.items) return false;\n return Object.prototype.hasOwnProperty.call(this.items, name);\n }\n\n remove(name: string): void {\n if (!this.items) return;\n\n if (this.items[name]) {\n this.items[name]._dispose();\n delete this.items[name];\n }\n\n if (this.parent && this.parent.domElement && this.parent.domElement instanceof Element) {\n this.parent.domElement.removeAttribute(name);\n }\n }\n\n _dispose(): void {\n if (this.items) {\n for (const key in this.items) {\n this.items[key]._dispose();\n }\n }\n this.items = null;\n this.parent = null;\n }\n\n toggle(name: string, force?: boolean): void {\n if (\n !BooleanAttributes.includes(name as (typeof BooleanAttributes)[number])\n ) {\n throw Error(`${name} is not a boolean attribute`);\n }\n if (force === true) {\n this.set(name, true);\n } else if (force === false) {\n this.remove(name);\n } else {\n this.has(name) ? this.remove(name) : this.set(name, true);\n }\n }\n\n addClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n\n const add = (classes: string, newClass: string) => {\n const list = (classes || \"\").split(\" \").filter((e: string) => e);\n !list.includes(newClass) && list.push(className)\n return list.join(\" \")\n }\n\n let current = this.get(\"class\");\n\n if (typeof current === \"function\") {\n this.set(\"class\", () => add(current(), className));\n } else {\n this.set(\"class\", add(current, className))\n }\n }\n\n hasClass(className: string): boolean {\n if (!className || typeof className !== \"string\") return false;\n const current = this.get(\"class\") || \"\";\n const list = current.split(\" \").filter((e: string) => e);\n return list.includes(className);\n }\n\n toggleClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n this.hasClass(className)\n ? this.removeClass(className)\n : this.addClass(className);\n }\n\n removeClass(className: string): void {\n if (!className || typeof className !== \"string\") return;\n const current = this.get(\"class\") || \"\";\n const list: string[] = current.split(\" \").filter((e: string) => e);\n const updated = list.filter((cls) => cls !== className);\n updated.length > 0\n ? this.set(\"class\", updated.join(\" \"))\n : this.remove(\"class\");\n }\n\n replaceClass(oldClass: string, newClass: string): void {\n if (\n !oldClass ||\n !newClass ||\n typeof oldClass !== \"string\" ||\n typeof newClass !== \"string\"\n )\n return;\n if (this.hasClass(oldClass)) {\n this.removeClass(oldClass);\n this.addClass(newClass);\n }\n }\n}\n","import { ElementNode } from \"./ElementNode.js\";\r\nimport { isHTML, escapeHTML } from \"../helpers.js\";\r\n\r\nexport class TextNode {\r\n type = \"TextNode\"\r\n parent: ElementNode;\r\n text: string;\r\n domText?: ChildNode;\r\n\r\n constructor(textContent: string | number, parent: ElementNode) {\r\n this.parent = parent;\r\n this.text = textContent === \"\" ? \"\\u200B\" : String(textContent);\r\n }\r\n _createDOMNode() {\r\n let newNode: ChildNode;\r\n if (isHTML(this.text)) {\r\n const tpl = document.createElement(\"template\");\r\n tpl.innerHTML = this.text.trim();\r\n newNode = tpl.content.firstChild || document.createTextNode(\"\");\r\n } else {\r\n newNode = document.createTextNode(this.text);\r\n }\r\n this.domText = newNode;\r\n return newNode;\r\n }\r\n\r\n _dispose(): void {\r\n this.domText = undefined;\r\n this.text = \"\";\r\n }\r\n\r\n generateHTML(): string {\r\n if (this.text === \"\\u200B\") return \"&#8203;\";\r\n // Mirror _createDOMNode: a single-root HTML string is intentional inline\r\n // HTML, anything else is plain text and must be escaped so the server\r\n // output is XSS-safe and parses back to the same text node the client\r\n // builds (otherwise hydration child alignment drifts).\r\n return isHTML(this.text) ? this.text : escapeHTML(this.text);\r\n }\r\n\r\n render(domText: ChildNode | DocumentFragment | HTMLElement): void {\r\n const newNode = this._createDOMNode();\r\n domText.appendChild(newNode);\r\n }\r\n}","import { TextNode } from \"./TextNode.js\";\r\nimport { ElementNode } from \"./ElementNode.js\";\r\nimport type { DomphyElement } from \"../types.js\";\r\nimport { ensureDomStyle, getTagName } from \"../helpers.js\";\r\n\r\ntype ElementInput = DomphyElement | null | undefined | number | string\r\ntype NodeItem = ElementNode | TextNode;\r\n\r\nexport class ElementList {\r\n items: NodeItem[] = [];\r\n owner: ElementNode;\r\n _nextKey: number = 0;\r\n\r\n constructor(parent: ElementNode) {\r\n this.owner = parent;\r\n }\r\n\r\n _createNode(element: ElementInput | DomphyElement): NodeItem {\r\n return (typeof element === \"object\" && element !== null)\r\n ? new ElementNode(element, this.owner, this._nextKey++)\r\n : new TextNode(element == null ? \"\" : String(element), this.owner);\r\n }\r\n\r\n _moveDomElement(node: NodeItem, index: number) {\r\n if (!this.owner || !this.owner.domElement) return;\r\n const dom = this.owner.domElement;\r\n\r\n const el = node instanceof ElementNode ? node.domElement : node.domText;\r\n if (el) {\r\n const currentRef = dom.childNodes[index] || null;\r\n if (el !== currentRef) {\r\n dom.insertBefore(el, currentRef);\r\n }\r\n }\r\n }\r\n\r\n _swapDomElement(aNode: NodeItem, bNode: NodeItem) {\r\n if (!this.owner || !this.owner.domElement) return;\r\n const parent = this.owner.domElement;\r\n\r\n const a = aNode instanceof ElementNode ? aNode.domElement : aNode.domText;\r\n const b = bNode instanceof ElementNode ? bNode.domElement : bNode.domText;\r\n if (!a || !b) return;\r\n\r\n const aNext = a.nextSibling;\r\n const bNext = b.nextSibling;\r\n\r\n parent.insertBefore(a, bNext);\r\n parent.insertBefore(b, aNext);\r\n }\r\n\r\n update(inputs: ElementInput[], updateDom = true, silent = false): void {\r\n\r\n const oldItems = this.items.slice(); // snapshot for cleanup\r\n\r\n // keyed lookup from old list\r\n const keyed = new Map<string | number, NodeItem>();\r\n for (const item of oldItems) {\r\n if (item instanceof ElementNode && item.key !== null && item.key !== undefined) {\r\n keyed.set(item.key, item);\r\n }\r\n }\r\n\r\n if (!silent && this.owner.domElement) this.owner._hooks?.BeforeUpdate?.(this.owner, inputs);\r\n\r\n const oldSet = new Set<NodeItem>(oldItems);\r\n const claimed = new Set<NodeItem>();\r\n\r\n // build target order using existing ops (mutating this.items)\r\n for (let i = 0; i < inputs.length; i++) {\r\n const input = inputs[i];\r\n const isObj = typeof input === \"object\" && input !== null;\r\n const key = isObj ? (input as any)._key : undefined;\r\n const tag = isObj ? getTagName(input as DomphyElement) : undefined;\r\n\r\n // Keyed reuse: same key + same tag → reuse the node and patch it in place\r\n // (preserves DOM identity/state while reflecting new data).\r\n if (key !== undefined) {\r\n const reused = keyed.get(key);\r\n if (reused instanceof ElementNode && reused.tagName === tag) {\r\n keyed.delete(key);\r\n const cur = this.items.indexOf(reused);\r\n if (cur !== i && cur >= 0) {\r\n const isPortal = !!reused._portal;\r\n this.move(cur, i, isPortal ? false : updateDom, true);\r\n }\r\n reused.parent = this.owner as any;\r\n reused.patch(input as DomphyElement);\r\n claimed.add(reused);\r\n continue;\r\n }\r\n // key present but no tag-compatible match → fall through to insert; any\r\n // stale keyed node keeps its slot in `keyed` and is removed below.\r\n } else if (isObj) {\r\n // Unkeyed positional reuse: reuse the old unkeyed element already sitting\r\n // at this slot if its tag matches — this is what preserves focus, scroll,\r\n // selection, IME and uncontrolled input values across plain list updates.\r\n const at = this.items[i];\r\n if (at instanceof ElementNode && at.key == null && at.tagName === tag\r\n && oldSet.has(at) && !claimed.has(at)) {\r\n at.parent = this.owner as any;\r\n at.patch(input as DomphyElement);\r\n claimed.add(at);\r\n continue;\r\n }\r\n }\r\n\r\n claimed.add(this.insert(input, i, updateDom, true));\r\n }\r\n\r\n // Remove leftover nodes beyond the new length. Iterate a SNAPSHOT (not a\r\n // `while length > inputs.length` loop): a removal may defer (async exit\r\n // animation), leaving the node in `items`, so a length-based loop would spin.\r\n const extras = this.items.slice(inputs.length);\r\n for (const node of extras) this.remove(node, updateDom, true);\r\n keyed.forEach((node) => this.remove(node, updateDom, true));\r\n if (!silent) this.owner._hooks?.Update?.(this.owner);\r\n }\r\n\r\n insert(input: ElementInput, index?: number, updateDom = true, silent = false): NodeItem {\r\n\r\n let length = this.items.length;\r\n const finalIndex = (typeof index !== \"number\" || isNaN(index) || index < 0 || index > length)\r\n ? length\r\n : index;\r\n const item = this._createNode(input);\r\n this.items.splice(finalIndex, 0, item);\r\n\r\n if (item instanceof ElementNode) {\r\n //Parent always insert/mount before children\r\n item._hooks.Insert && item._hooks.Insert(item)\r\n\r\n let domElement = this.owner.domElement;\r\n if (updateDom && domElement) {\r\n\r\n\r\n if (item._portal) {\r\n let domElement = item._portal!(this.owner.getRoot())\r\n domElement && item.render(domElement)\r\n } else {\r\n let domNode = item._createDOMNode();\r\n const ref = domElement.childNodes[finalIndex] ?? null;\r\n domElement.insertBefore(domNode, ref);\r\n let root = domElement.getRootNode()\r\n const styleParent = root instanceof ShadowRoot ? root : document.head\r\n let domStyle = ensureDomStyle(styleParent)\r\n item.styles.render(domStyle as HTMLStyleElement)\r\n item._hooks.Mount && item._hooks.Mount(item)\r\n item.children.items.forEach(child => {\r\n if (child instanceof ElementNode && child._portal) {\r\n let dom = child._portal!(child.getRoot())\r\n dom && child.render(dom)\r\n } else {\r\n child.render(domNode)\r\n }\r\n })\r\n }\r\n }\r\n\r\n\r\n\r\n } else {\r\n let domElement = this.owner.domElement;\r\n if (updateDom && domElement) {\r\n let domNode = item._createDOMNode();\r\n const ref = domElement.childNodes[finalIndex] ?? null;\r\n domElement.insertBefore(domNode, ref);\r\n }\r\n }\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n return item;\r\n }\r\n\r\n remove(item: NodeItem, updateDom = true, silent = false): void {\r\n\r\n const index = this.items.indexOf(item);\r\n if (index < 0) return;\r\n\r\n if (item instanceof ElementNode) {\r\n // Guard against re-entrant removal of a node whose (deferred) removal is\r\n // already in flight — otherwise update()'s extras + keyed passes could\r\n // fire its BeforeRemove/animation twice. Synchronous removals are already\r\n // guarded by the indexOf check above (the node is spliced before re-entry).\r\n if (item._beforeRemoveFired) return;\r\n const done = () => {\r\n const el = item.domElement\r\n // Re-resolve position at completion time — a deferred (animated) removal\r\n // may run after other inserts/removes have shifted indices.\r\n const i = this.items.indexOf(item);\r\n if (i >= 0) this.items.splice(i, 1);\r\n updateDom && el && el.remove()\r\n item._dispose(); // _dispose fires Remove + releases subscriptions for the whole subtree\r\n }\r\n if (item._hooks.BeforeRemove && item.domElement) {\r\n let doneCalled = false;\r\n const onceDone = () => { if (!doneCalled) { doneCalled = true; done(); } };\r\n item._beforeRemoveFired = true; // prevent _dispose from re-firing BeforeRemove\r\n item._hooks.BeforeRemove(item, onceDone);\r\n // Auto-complete only for sync cleanup hooks. A hook that declares `done`\r\n // (arity >= 2, e.g. an exit animation) owns completion and defers removal.\r\n if ((item._hooks.BeforeRemove as Function).length < 2 && !doneCalled) onceDone();\r\n } else {\r\n done()\r\n }\r\n\r\n } else {\r\n const el = item.domText\r\n this.items.splice(index, 1);\r\n updateDom && el && el.remove()\r\n item._dispose();\r\n }\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n clear(updateDom = true, silent = false): void {\r\n if (this.items.length === 0) return;\r\n const snapshot = this.items.slice();\r\n\r\n for (const item of snapshot) {\r\n this.remove(item, updateDom, true);\r\n }\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n _dispose(): void {\r\n this.items.forEach(child => child._dispose())\r\n this.items = [];\r\n }\r\n\r\n swap(aIndex: number, bIndex: number, updateDom = true, silent = false) {\r\n if (aIndex < 0 || bIndex < 0 ||\r\n aIndex >= this.items.length || bIndex >= this.items.length ||\r\n aIndex === bIndex) return;\r\n\r\n const itemA = this.items[aIndex];\r\n const itemB = this.items[bIndex];\r\n\r\n this.items[aIndex] = itemB;\r\n this.items[bIndex] = itemA;\r\n\r\n if (updateDom) this._swapDomElement(itemA, itemB);\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n move(fromIndex: number, toIndex: number, updateDom = true, silent = false): void {\r\n if (fromIndex < 0 || fromIndex >= this.items.length ||\r\n toIndex < 0 || toIndex >= this.items.length || fromIndex === toIndex) return;\r\n\r\n const item = this.items[fromIndex];\r\n\r\n this.items.splice(fromIndex, 1);\r\n this.items.splice(toIndex, 0, item);\r\n\r\n if (updateDom) this._moveDomElement(item, toIndex);\r\n\r\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\r\n }\r\n\r\n generateHTML(): string {\r\n let html = \"\";\r\n for (const item of this.items) html += item.generateHTML();\r\n return html;\r\n }\r\n}\r\n","import type { StyleRule } from \"./StyleRule.js\";\r\nimport type { StyleValue } from \"../types.js\";\r\nimport { camelToKebab } from \"../helpers.js\";\r\nimport { PrefixCSS } from \"../constants.js\";\r\nimport { Listener } from \"../types.js\"\r\n\r\nexport class StyleProperty {\r\n name: string;\r\n cssName: string;\r\n value: StyleValue = \"\";\r\n parentRule: StyleRule;\r\n\r\n constructor(name: string, value: StyleValue, parentRule: StyleRule) {\r\n this.name = name;\r\n this.cssName = camelToKebab(name);\r\n this.parentRule = parentRule;\r\n this.set(value);\r\n }\r\n\r\n _domUpdate(): void {\r\n if (!this.parentRule) return;\r\n const domRule = this.parentRule.domRule;\r\n\r\n if (domRule && (domRule as CSSStyleRule).style) {\r\n let style: CSSStyleDeclaration = (domRule as CSSStyleRule).style;\r\n style.setProperty(this.cssName, String(this.value));\r\n\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n style.setProperty(`-${prefix}-${this.cssName}`, String(this.value));\r\n });\r\n }\r\n }\r\n }\r\n _dispose(): void {\r\n this.value = \"\";\r\n this.parentRule = null as any;\r\n }\r\n\r\n set(value: StyleValue): void {\r\n\r\n if (typeof value === \"function\") {\r\n let listener = (() => {\r\n if (!this.parentRule || this.parentRule.parentNode?._disposed) return;\r\n this.value = value(listener);\r\n this._domUpdate();\r\n }) as unknown as Listener;\r\n\r\n listener.onSubscribe = (release: () => void) => {\r\n this.parentRule.parentNode?.addHook(\"BeforeRemove\", () => {\r\n release();\r\n listener = null!;\r\n });\r\n };\r\n\r\n listener.elementNode = this.parentRule!.root!;\r\n listener.debug = `class:${this.parentRule?.root?.tagName}_${this.parentRule?.root?.nodeId} style:${this.name}`;\r\n this.value = value(listener);\r\n } else {\r\n this.value = value;\r\n }\r\n\r\n this._domUpdate();\r\n }\r\n\r\n remove(): void {\r\n if (!this.parentRule) return;\r\n\r\n if (this.parentRule.domRule instanceof CSSStyleRule) {\r\n const domStyle = this.parentRule.domRule.style;\r\n domStyle.removeProperty(this.cssName);\r\n\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n domStyle.removeProperty(`-${prefix}-${this.cssName}`);\r\n });\r\n }\r\n }\r\n delete this.parentRule.styleBlock![this.name];\r\n this._dispose();\r\n }\r\n\r\n cssText(): string {\r\n let str = `${this.cssName}: ${this.value}`;\r\n if (PrefixCSS[this.name]) {\r\n PrefixCSS[this.name].forEach((prefix) => {\r\n str += `; -${prefix}-${this.cssName}: ${this.value}`;\r\n });\r\n }\r\n return str;\r\n }\r\n}","import { ElementNode } from \"./ElementNode.js\";\r\nimport { StyleProperty } from \"./StyleProperty.js\";\r\nimport { StyleList } from \"./StyleList.js\";\r\n\r\nexport class StyleRule {\r\n selectorText: string;\r\n domRule: CSSRule | CSSMediaRule | CSSKeyframesRule | null = null;\r\n styleList: StyleList | null;\r\n styleBlock: Record<string, StyleProperty> | null = {};\r\n parent: StyleRule | ElementNode | null;\r\n\r\n constructor(selectorText: string, parent: StyleRule | ElementNode) {\r\n this.selectorText = selectorText;\r\n this.styleList = new StyleList(this);\r\n this.parent = parent;\r\n }\r\n\r\n _dispose(): void {\r\n\r\n if (this.styleBlock) {\r\n for (const prop of Object.values(this.styleBlock)) {\r\n prop._dispose();\r\n }\r\n }\r\n\r\n if (this.styleList) {\r\n this.styleList._dispose();\r\n }\r\n\r\n this.styleBlock = null;\r\n this.styleList = null;\r\n this.domRule = null;\r\n this.parent = null;\r\n }\r\n\r\n get root() {\r\n let node = this.parent;\r\n while (node instanceof StyleRule) {\r\n node = node.parent;\r\n }\r\n return node;\r\n }\r\n\r\n get parentNode(): ElementNode | null {\r\n let root: any = this.parent;\r\n while (root && root instanceof StyleRule) {\r\n root = root.parent;\r\n }\r\n return root as ElementNode;\r\n }\r\n \r\n insertStyle(name: string, val: any): void {\r\n if (!this.styleBlock) return;\r\n if (this.styleBlock[name]) {\r\n this.styleBlock[name].set(val);\r\n } else {\r\n this.styleBlock[name] = new StyleProperty(name, val, this);\r\n }\r\n }\r\n\r\n removeStyle(name: string): void {\r\n if (!this.styleBlock) return;\r\n if (this.styleBlock[name]) {\r\n this.styleBlock[name].remove();\r\n }\r\n }\r\n\r\n cssText(): string {\r\n if (!this.styleBlock || !this.styleList) return \"\";\r\n const styleStr = Object.values(this.styleBlock).map(decl => decl.cssText()).join(\";\");\r\n const nested = this.styleList.cssText();\r\n return `${this.selectorText} { ${styleStr} ${nested} } `;\r\n }\r\n\r\n mount(domRule: CSSRule | CSSKeyframesRule): void {\r\n if (!domRule || !this.styleList) return;\r\n this.domRule = domRule;\r\n if (\"cssRules\" in domRule) {\r\n this.styleList.mount(domRule.cssRules as CSSRuleList);\r\n }\r\n }\r\n\r\n remove(): void {\r\n\r\n if (this.domRule && this.domRule.parentStyleSheet) {\r\n const sheet = this.domRule.parentStyleSheet;\r\n const rules = sheet.cssRules;\r\n for (let i = 0; i < rules.length; i++) {\r\n if (rules[i] === this.domRule) {\r\n sheet.deleteRule(i);\r\n break;\r\n }\r\n }\r\n }\r\n this._dispose();\r\n }\r\n\r\n render(domSheet: CSSStyleSheet | CSSGroupingRule) {\r\n if (!this.styleBlock || !this.styleList) return;\r\n const styleStr = Object.values(this.styleBlock).map(decl => decl.cssText()).join(\";\");\r\n try {\r\n if (!this.selectorText.startsWith(\"@\")) {\r\n const css = `${this.selectorText} { ${styleStr} }`;\r\n const index = domSheet.insertRule(css, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n if (domRule && \"selectorText\" in domRule) {\r\n this.mount(domRule);\r\n }\r\n } else if (/^@(media|supports|container|layer)\\b/.test(this.selectorText)) {\r\n const index = domSheet.insertRule(`${this.selectorText} {}`, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n if (\"cssRules\" in domRule) {\r\n this.mount(domRule as CSSGroupingRule);\r\n this.styleList.render(domRule as CSSGroupingRule);\r\n }\r\n } else if (this.selectorText.startsWith(\"@keyframes\") || this.selectorText.startsWith(\"@font-face\")) {\r\n const css = this.cssText();\r\n const index = domSheet.insertRule(css, domSheet.cssRules.length);\r\n const domRule = domSheet.cssRules[index];\r\n this.mount(domRule);\r\n }\r\n } catch (err) {\r\n console.warn(\"Failed to insert rule:\", this.selectorText, err);\r\n }\r\n }\r\n}","import { ElementNode } from \"./ElementNode.js\";\r\nimport { selectorSplitter, normalizeSelectorKey } from \"../helpers.js\";\r\nimport { StyleRule } from \"./StyleRule.js\";\r\n\r\nexport class StyleList {\r\n parent: StyleRule | ElementNode | null;\r\n items: StyleRule[] = [];\r\n domStyle: HTMLStyleElement | null = null;\r\n\r\n constructor(parent: StyleRule | ElementNode) {\r\n this.parent = parent;\r\n }\r\n\r\n get parentNode(): ElementNode | null {\r\n let root: any = this.parent;\r\n while (root && root instanceof StyleRule) {\r\n root = root.parent;\r\n }\r\n return root as ElementNode;\r\n }\r\n\r\n addCSS(obj: Record<string, any>, parentSelector: string = \"\"): void {\r\n if (!this.items || !this.parent) return;\r\n const basic: Record<string, any> = {};\r\n\r\n function getSelector(selector: string, prev: string): string {\r\n return selector.startsWith(\"&\")\r\n ? `${prev}${selector.slice(1)}`\r\n : `${prev} ${selector}`;\r\n }\r\n\r\n for (const selector in obj) {\r\n const value = obj[selector];\r\n let splitKeys = selectorSplitter(selector);\r\n for (let key of splitKeys) {\r\n const currentSelector = getSelector(key, parentSelector);\r\n if (/^@(container|layer|supports|media)\\b/.test(key)) {\r\n if (typeof value === \"object\" && value != null) {\r\n const rule = new StyleRule(key, this.parent);\r\n rule.styleList!.addCSS(value, parentSelector);\r\n this.items.push(rule);\r\n }\r\n } else if (key.startsWith(\"@keyframes\")) {\r\n const rule = new StyleRule(key, this.parent);\r\n rule.styleList!.addCSS(value, \"\");\r\n this.items.push(rule);\r\n } else if (key.startsWith(\"@font-face\")) {\r\n const rule = new StyleRule(key, this.parent);\r\n for (const k in value) rule.insertStyle(k, value[k]);\r\n this.items.push(rule);\r\n } else if (typeof value === \"object\" && value != null) {\r\n const rule = new StyleRule(currentSelector, this.parent);\r\n this.items.push(rule);\r\n for (const [k, v] of Object.entries(value)) {\r\n if (typeof v === \"object\" && v != null) {\r\n let newSelector = getSelector(k, currentSelector);\r\n if (k.startsWith(\"&\")) {\r\n this.addCSS(v, newSelector);\r\n } else {\r\n const r = rule.styleList!.insertRule(newSelector);\r\n r.styleList!.addCSS(v, newSelector);\r\n }\r\n } else {\r\n rule.insertStyle(k, v);\r\n }\r\n }\r\n } else {\r\n basic[key] = value;\r\n }\r\n }\r\n }\r\n\r\n if (Object.keys(basic).length) {\r\n const rule = new StyleRule(parentSelector, this.parent);\r\n for (const key in basic) rule.insertStyle(key, basic[key]);\r\n this.items.push(rule);\r\n }\r\n }\r\n\r\n cssText(): string {\r\n if (!this.items) return \"\";\r\n return this.items.map((rule) => rule.cssText()).join(\"\");\r\n }\r\n\r\n insertRule(selector: string): StyleRule {\r\n if (!this.items || !this.parent) return null as any;\r\n let rule = this.items.find((rule) => rule.selectorText === selector);\r\n if (!rule) {\r\n rule = new StyleRule(selector, this.parent);\r\n this.items.push(rule);\r\n }\r\n return rule;\r\n }\r\n\r\n hydrate(domRuleMap: Map<string, CSSRule>): void {\r\n if (!this.items) return;\r\n for (const rule of this.items) {\r\n const domRule = domRuleMap.get(normalizeSelectorKey(rule.selectorText));\r\n if (domRule) rule.mount(domRule as CSSRule);\r\n }\r\n }\r\n\r\n mount(domRuleList: CSSRuleList): void {\r\n if (!this.items) return;\r\n if (!domRuleList) throw Error(\"Require domRuleList argument\");\r\n let wrongCount = 0;\r\n const fixOddEven = (css: string) => css.replace(\"(odd)\", \"(2n+1)\").replace(\"(even)\", \"(2n)\");\r\n\r\n this.items.forEach((rule, i) => {\r\n const index = i - wrongCount;\r\n const domRule = domRuleList[index];\r\n if (!domRule) return;\r\n if (rule.selectorText.startsWith(\"@\") && domRule instanceof CSSKeyframesRule) {\r\n rule.mount(domRule);\r\n } else if (\"keyText\" in domRule) {\r\n rule.mount(domRule);\r\n } else if (\"selectorText\" in domRule) {\r\n if (domRule.selectorText !== fixOddEven(rule.selectorText)) {\r\n wrongCount += 1;\r\n } else {\r\n rule.mount(domRule);\r\n }\r\n } else if (\"cssRules\" in domRule) {\r\n rule.mount(domRule as CSSMediaRule);\r\n }\r\n });\r\n }\r\n\r\n render(dom: HTMLStyleElement | CSSGroupingRule) {\r\n if (dom instanceof HTMLStyleElement) {\r\n this.domStyle = dom\r\n this.items.forEach((rule) => rule.render(dom.sheet!));\r\n } else if (dom instanceof CSSGroupingRule) {\r\n this.items.forEach((rule) => rule.render(dom));\r\n }\r\n }\r\n\r\n _dispose(): void {\r\n\r\n if (this.items) {\r\n for (let i = 0; i < this.items.length; i++) {\r\n this.items[i]._dispose();\r\n }\r\n }\r\n\r\n this.items = [];\r\n this.parent = null;\r\n this.domStyle = null;\r\n }\r\n}\r\n","import type { DomphyElement, EventName, HookMap, TagName, PartialElement } from \"../types.js\";\r\nimport { AttributeList } from \"./AttributeList.js\";\r\nimport { ElementList } from \"./ElementList.js\";\r\nimport { StyleList } from \"./StyleList.js\";\r\nimport { validate, mergePartial, getTagName, deepClone, ensureDomStyle, collectCSSRules } from \"../helpers.js\";\r\nimport { merge, hashString } from \"../utils.js\";\r\nimport { SvgTags, VoidTags } from \"../constants.js\"\r\n\r\nexport class ElementNode {\r\n _disposed = false\r\n _beforeRemoveFired = false\r\n type = \"ElementNode\"\r\n parent: ElementNode | null = null;\r\n _portal?: (root: ElementNode) => HTMLElement;\r\n tagName: TagName;\r\n children = new ElementList(this);\r\n styles = new StyleList(this);\r\n attributes = new AttributeList(this);\r\n domElement?: HTMLElement | null = null;\r\n _hooks: HookMap = {};\r\n _events?: { [K in EventName]?: (event: Event, node: ElementNode) => void } | null = null;\r\n _boundEvents = new Set<EventName>();\r\n _context?: Record<string, any> = {};\r\n _metadata?: Record<string, any> = {};\r\n key?: string | number | null = null;\r\n nodeId: string\r\n\r\n constructor(domphyElement: DomphyElement, _parent: ElementNode | null = null, index = 0) {\r\n domphyElement = deepClone(domphyElement)\r\n validate(domphyElement)\r\n domphyElement.style = domphyElement.style || {}\r\n this.parent = _parent;\r\n this.tagName = getTagName(domphyElement) as TagName;\r\n domphyElement = mergePartial(domphyElement) as DomphyElement\r\n\r\n this.key = (domphyElement as any)._key ?? null;\r\n this._context = domphyElement._context || {}\r\n this._metadata = domphyElement._metadata || {}\r\n\r\n let tempPath = `${this.parent?.nodeId}.${index}`\r\n const str = JSON.stringify(domphyElement.style || {}, (k, v) => typeof v === \"function\" ? tempPath : v,);\r\n this.nodeId = hashString(tempPath + str)\r\n\r\n this.attributes!.addClass(`${this.tagName}_${this.nodeId}`);\r\n if (domphyElement._onSchedule) domphyElement._onSchedule(this, domphyElement)\r\n\r\n this.merge(domphyElement)\r\n\r\n const children = (domphyElement as any)[this.tagName];\r\n\r\n if (children != null && children != undefined) {\r\n if (typeof children === \"function\") {\r\n\r\n let listener: any = () => {\r\n if (this._disposed) return\r\n let input = children(listener)\r\n this.children!.update(Array.isArray(input) ? input : [input])\r\n }\r\n\r\n listener!.elementNode = this;\r\n listener!.debug = `class:${this.tagName}_${this.nodeId} children`;\r\n listener!.onSubscribe = (release: () => void) => this.addHook(\"BeforeRemove\", () => {\r\n release()\r\n listener = null\r\n });\r\n listener && listener();\r\n } else {\r\n this.children!.update(Array.isArray(children) ? children : [children])\r\n }\r\n }\r\n this._hooks.Init && this._hooks.Init(this)\r\n }\r\n\r\n _createDOMNode() {\r\n const svgNamespace = \"http://www.w3.org/2000/svg\"\r\n let node = SvgTags.includes(this.tagName)\r\n ? document.createElementNS(svgNamespace, this.tagName)\r\n : document.createElement(this.tagName)\r\n\r\n this.domElement = node as HTMLElement\r\n\r\n if (this._events) {\r\n for (const key in this._events) this._bindEvent(key as EventName)\r\n }\r\n\r\n if (this.attributes) {\r\n Object.values(this.attributes.items!).forEach(attr => attr.render())\r\n }\r\n return node\r\n }\r\n\r\n // Bind a DOM listener that dispatches LIVE from this._events, so patch() can\r\n // swap the handler (e.g. a list item's onClick closure after its data changes)\r\n // without detaching/reattaching the DOM listener.\r\n _bindEvent(eventName: EventName): void {\r\n if (!this.domElement || this._boundEvents.has(eventName)) return\r\n this._boundEvents.add(eventName)\r\n let fn: any = (event: Event) => this._events?.[eventName]?.(event, this)\r\n this.domElement.addEventListener(eventName, fn)\r\n this.addHook(\"BeforeRemove\", (n) => {\r\n n.domElement?.removeEventListener(eventName, fn)\r\n fn = null\r\n })\r\n }\r\n\r\n _dispose(): void {\r\n if (this._disposed) return\r\n this._disposed = true\r\n\r\n // Fire BeforeRemove so reactive-listener releases (registered as BeforeRemove\r\n // hooks via onSubscribe) actually run for this node. Descendants are torn\r\n // down through this recursive _dispose — not through ElementList.remove — so\r\n // without this their subscriptions to long-lived State/RecordState leak.\r\n // Skip if the async-removal path in ElementList already fired it.\r\n if (!this._beforeRemoveFired) {\r\n this._beforeRemoveFired = true\r\n this._hooks.BeforeRemove?.(this, () => { })\r\n }\r\n\r\n if (this.children) {\r\n this.children._dispose();\r\n }\r\n\r\n if (this.styles) {\r\n this.styles.items!.forEach((rule) => rule.remove());\r\n this.styles._dispose();\r\n }\r\n\r\n if (this.attributes) {\r\n this.attributes._dispose();\r\n }\r\n\r\n // _onRemove fires for every node in the subtree, not just the directly-removed one.\r\n this._hooks.Remove?.(this)\r\n\r\n this.domElement = null;\r\n this._hooks = {};\r\n this._events = null;\r\n this._context = {};\r\n this._metadata = {};\r\n this.parent = null;\r\n }\r\n merge(part: PartialElement) {\r\n merge(this._context, part._context)\r\n merge(this._metadata, part._metadata)\r\n\r\n const keys = Object.keys(part)\r\n for (let i = 0; i < keys.length; i++) {\r\n const originalKey = keys[i];\r\n const value = (part as any)[originalKey];\r\n if ([\"$\", \"_onSchedule\", \"_key\", \"_context\", \"_metadata\", \"style\", this.tagName].includes(originalKey)) {\r\n continue\r\n } else if ([\"_onInit\", \"_onInsert\", \"_onMount\", \"_onBeforeUpdate\", \"_onUpdate\", \"_onBeforeRemove\", \"_onRemove\"].includes(originalKey)) {\r\n this.addHook(originalKey.substring(3) as keyof HookMap, value);\r\n } else if (originalKey.startsWith(\"on\")) {\r\n this.addEvent(originalKey.substring(2).toLowerCase() as EventName, value);\r\n } else if (originalKey == \"_portal\") {\r\n this._portal = value\r\n } else if (originalKey == \"class\" && typeof value === \"string\") {\r\n this.attributes!.addClass(value);\r\n } else {\r\n this.attributes!.set(originalKey, value);\r\n }\r\n }\r\n if (part.style) {\r\n this.styles.addCSS(part.style || {}, `.${`${this.tagName}_${this.nodeId}`}`);\r\n }\r\n\r\n }\r\n\r\n // Update this live node IN PLACE from a fresh element description, preserving\r\n // its DOM element (and thus focus/scroll/selection/uncontrolled value) and its\r\n // children's identity. Used by list reconciliation to reuse a node by key\r\n // (keyed) or position (unkeyed) while reflecting new data, instead of\r\n // destroying and recreating the DOM. Styles and lifecycle hooks are NOT\r\n // re-applied (reused items share structure; hooks already ran). Reactive\r\n // content (a function child) keeps its own listener and is left untouched.\r\n patch(rawElement: DomphyElement): void {\r\n let element: any = deepClone(rawElement)\r\n element.style = element.style || {}\r\n element = mergePartial(element)\r\n\r\n // Children / content — recurse so grandchildren are reused/patched too.\r\n const content = element[this.tagName]\r\n if (typeof content !== \"function\") {\r\n const next = content == null ? [] : Array.isArray(content) ? content : [content]\r\n this.children.update(next, !!this.domElement, true)\r\n }\r\n\r\n if (element._context) merge(this._context, element._context)\r\n if (element._metadata) merge(this._metadata, element._metadata)\r\n\r\n // Rebuild attributes and events. Events are replaced (live dispatch in\r\n // _bindEvent reads this._events, so swapping the map is enough); attributes\r\n // present before but absent now are removed; the auto scope class is kept.\r\n const autoClass = `${this.tagName}_${this.nodeId}`\r\n const reserved = [\"$\", \"_onSchedule\", \"_key\", \"_context\", \"_metadata\", \"style\", this.tagName]\r\n const hookKeys = [\"_onInit\", \"_onInsert\", \"_onMount\", \"_onBeforeUpdate\", \"_onUpdate\", \"_onBeforeRemove\", \"_onRemove\"]\r\n const keep = new Set<string>([\"class\"])\r\n let userClass: string | null = null\r\n\r\n this._events = {}\r\n for (const key of Object.keys(element)) {\r\n if (reserved.includes(key) || hookKeys.includes(key) || key === \"_portal\") continue\r\n const value = element[key]\r\n if (key.startsWith(\"on\") && typeof value === \"function\") {\r\n this.addEvent(key.substring(2).toLowerCase() as EventName, value)\r\n } else if (key === \"class\" && typeof value === \"string\") {\r\n userClass = value\r\n } else {\r\n this.attributes!.set(key, value)\r\n keep.add(key)\r\n }\r\n }\r\n\r\n this.attributes!.set(\"class\", userClass ? `${autoClass} ${userClass}` : autoClass)\r\n\r\n if (this.attributes!.items) {\r\n for (const name of Object.keys(this.attributes!.items)) {\r\n if (!keep.has(name)) this.attributes!.remove(name)\r\n }\r\n }\r\n\r\n if (this._events) {\r\n for (const key in this._events) this._bindEvent(key as EventName)\r\n }\r\n }\r\n\r\n addEvent(name: EventName, callback: (event: Event, node: ElementNode) => void): void {\r\n\r\n this._events = this._events || {}\r\n\r\n let current = this._events[name]\r\n if (typeof current == \"function\") {\r\n this._events[name] = (event: Event, node: ElementNode) => {\r\n current!(event, node)\r\n callback(event, node)\r\n }\r\n } else {\r\n this._events[name] = callback\r\n }\r\n }\r\n\r\n addHook<K extends keyof HookMap>(name: K, callback: HookMap[K]): void {\r\n const current = this._hooks[name];\r\n\r\n if (typeof current === \"function\") {\r\n const composed = ((...args: any[]) => {\r\n (current as Function)(...args);\r\n (callback as Function)(...args);\r\n }) as HookMap[K];\r\n // Preserve the maximum declared arity across composed hooks. Removal logic\r\n // inspects BeforeRemove.length (>= 2 means the hook owns `done()`, e.g. an\r\n // exit animation); a naive (...args) wrapper would report 0 and break that.\r\n try {\r\n Object.defineProperty(composed, \"length\", {\r\n value: Math.max((current as Function).length, (callback as Function).length),\r\n configurable: true,\r\n });\r\n } catch { /* length non-configurable on some engines — best effort */ }\r\n this._hooks[name] = composed;\r\n } else {\r\n this._hooks[name] = callback;\r\n }\r\n }\r\n getRoot(): ElementNode {\r\n let root: ElementNode = this;\r\n while (root && root instanceof ElementNode && root.parent) {\r\n root = root.parent;\r\n }\r\n return root\r\n }\r\n\r\n getContext(name: string): any {\r\n let node: ElementNode | null = this;\r\n while (node && (!node._context || !Object.prototype.hasOwnProperty.call(node._context, name))) {\r\n node = node.parent;\r\n }\r\n return node && node._context ? node._context[name] : undefined;\r\n }\r\n\r\n setContext(name: string, value: any) {\r\n this._context = this._context || {}\r\n this._context[name] = value;\r\n }\r\n\r\n getMetadata(name: string): any {\r\n return this._metadata ? this._metadata[name] : undefined;\r\n }\r\n\r\n setMetadata(key: string, value: any) {\r\n this._metadata = this._metadata || {}\r\n this._metadata[key] = value;\r\n\r\n }\r\n\r\n generateCSS(): string {\r\n if (!this.styles || !this.children) return \"\";\r\n let css = this.styles.cssText()\r\n css += this.children.items.map(child => child instanceof ElementNode ? child.generateCSS() : \"\").join(\"\")\r\n return css\r\n }\r\n\r\n generateHTML(): string {\r\n if (!this.children || !this.attributes) return \"\";\r\n const attributes = this.attributes.generateHTML();\r\n // Void elements must not emit a closing tag — `<br></br>` is parsed by the\r\n // HTML tokenizer as two <br>, which corrupts hydration child alignment.\r\n if ((VoidTags as readonly string[]).includes(this.tagName)) {\r\n return `<${this.tagName}${attributes}>`;\r\n }\r\n const content = this.children.generateHTML();\r\n return `<${this.tagName}${attributes}>${content}</${this.tagName}>`;\r\n }\r\n\r\n mount(domElement: HTMLElement, domStyle?: HTMLStyleElement): void {\r\n if (!domElement) throw new Error(\"Missing dom node on bind\");\r\n this.domElement = domElement;\r\n\r\n if (this._events) {\r\n for (const key in this._events) this._bindEvent(key as EventName)\r\n }\r\n\r\n if (this.children) {\r\n this.children.items.forEach((child, i) => {\r\n const childNode = domElement.childNodes[i];\r\n if (!childNode) return;\r\n if (child instanceof ElementNode) {\r\n child.mount(childNode as HTMLElement);\r\n } else {\r\n // Bind the server-rendered text/inline-HTML node so that reactive\r\n // child updates after hydration can locate and replace it.\r\n child.domText = childNode;\r\n }\r\n });\r\n }\r\n\r\n // Attach reactive style declarations to the server-rendered stylesheet so\r\n // post-hydration updates mutate the existing CSSOM rules instead of being\r\n // silently dropped (StyleProperty._domUpdate needs a bound domRule). Done\r\n // once from the call that received the style element, walking the whole\r\n // subtree because per-node selectors are globally unique.\r\n if (domStyle) {\r\n const sheet = domStyle.sheet;\r\n if (sheet) this._hydrateStyles(collectCSSRules(sheet.cssRules, new Map()));\r\n }\r\n\r\n this._hooks.Mount && this._hooks.Mount(this)\r\n }\r\n\r\n _hydrateStyles(domRuleMap: Map<string, CSSRule>): void {\r\n this.styles?.hydrate(domRuleMap);\r\n if (this.children) {\r\n for (const child of this.children.items) {\r\n if (child instanceof ElementNode) child._hydrateStyles(domRuleMap);\r\n }\r\n }\r\n }\r\n\r\n render(domElement: HTMLElement | SVGElement | DocumentFragment): HTMLElement | SVGElement {\r\n const newNode = this._createDOMNode();\r\n domElement.appendChild(newNode)\r\n this._hooks.Mount && this._hooks.Mount(this)\r\n let domStyle = this.getRoot().styles.domStyle\r\n let root = domElement.getRootNode()\r\n const styleParent = root instanceof ShadowRoot ? root : document.head\r\n domStyle ||= ensureDomStyle(styleParent)\r\n this.styles.render(domStyle as HTMLStyleElement)\r\n this.children.items.forEach(child => {\r\n if (child instanceof ElementNode && child._portal) {\r\n let dom = child._portal!(this.getRoot())\r\n dom && child.render(dom)\r\n } else {\r\n child.render(newNode)\r\n }\r\n })\r\n return newNode;\r\n }\r\n\r\n remove() {\r\n if (this.parent) {\r\n this.parent.children.remove(this)\r\n } else {\r\n // Root removal must also run BeforeRemove/Remove (and release reactive\r\n // subscriptions across the whole tree via _dispose), honoring async done().\r\n const done = () => {\r\n this.domElement?.remove()\r\n this._dispose()\r\n }\r\n if (this._hooks.BeforeRemove && this.domElement) {\r\n let called = false\r\n const once = () => { if (!called) { called = true; done() } }\r\n this._beforeRemoveFired = true\r\n this._hooks.BeforeRemove(this, once)\r\n if ((this._hooks.BeforeRemove as Function).length < 2 && !called) once()\r\n } else {\r\n done()\r\n }\r\n }\r\n }\r\n}\r\n","import { Notifier } from \"./Notifier.js\"\r\n\r\ntype Listener = (...args: any[]) => void\r\n\r\nexport class RecordState<T extends Record<string, any> = Record<string, any>> {\r\n private _notifier = new Notifier()\r\n private _record: T\r\n readonly initialRecord: T\r\n\r\n constructor(record: T) {\r\n this.initialRecord = { ...record }\r\n this._record = { ...record }\r\n }\r\n\r\n get<K extends keyof T>(key: K, l?: Listener): T[K] {\r\n if (l) this._notifier.addListener(key as string, l)\r\n return this._record[key]\r\n }\r\n\r\n set<K extends keyof T>(key: K, value: T[K]): void {\r\n this._record[key] = value\r\n this._notifier.notify(key as string)\r\n }\r\n\r\n addListener<K extends keyof T>(key: K, fn: Listener): () => void {\r\n return this._notifier.addListener(key as string, fn)\r\n }\r\n\r\n removeListener<K extends keyof T>(key: K, fn: Listener): void {\r\n this._notifier.removeListener(key as string, fn)\r\n }\r\n\r\n reset<K extends keyof T>(key: K): void {\r\n this.set(key, this.initialRecord[key])\r\n }\r\n\r\n _dispose(): void {\r\n this._notifier._dispose()\r\n }\r\n}\r\n","import { ThemeInput } from \"./types.js\";\r\n\r\nlet light: ThemeInput = {\r\n direction: \"darken\",\r\n colors: {\r\n \"primary\": [\r\n \"#ffffff\",\r\n \"#e3ecff\",\r\n \"#c6daff\",\r\n \"#aac8ff\",\r\n \"#8fb6ff\",\r\n \"#76a3ff\",\r\n \"#5f91fc\",\r\n \"#4a7ff4\",\r\n \"#386ee7\",\r\n \"#2a5ed7\",\r\n \"#1e4ec2\",\r\n \"#1440aa\",\r\n \"#0c3290\",\r\n \"#072674\",\r\n \"#041a57\",\r\n \"#020f38\",\r\n \"#010419\",\r\n \"#000000\"\r\n ],\r\n \"secondary\": [\r\n \"#ffffff\",\r\n \"#fce6ea\",\r\n \"#faced6\",\r\n \"#f7b5c2\",\r\n \"#f29db0\",\r\n \"#ec859e\",\r\n \"#e36e8d\",\r\n \"#d8597d\",\r\n \"#ca456e\",\r\n \"#b93460\",\r\n \"#a42351\",\r\n \"#8e1643\",\r\n \"#770b36\",\r\n \"#5f0529\",\r\n \"#46031d\",\r\n \"#2d0210\",\r\n \"#130104\",\r\n \"#000000\"\r\n ],\r\n \"info\": [\r\n \"#ffffff\",\r\n \"#dcf0f9\",\r\n \"#b7e1f6\",\r\n \"#90d2f1\",\r\n \"#6ac3eb\",\r\n \"#42b4e2\",\r\n \"#16a4d5\",\r\n \"#0094c4\",\r\n \"#0084b2\",\r\n \"#00739e\",\r\n \"#00638a\",\r\n \"#005476\",\r\n \"#004461\",\r\n \"#00354d\",\r\n \"#002638\",\r\n \"#001623\",\r\n \"#00070d\",\r\n \"#000000\"\r\n ],\r\n \"success\": [\r\n \"#ffffff\",\r\n \"#e3f3dc\",\r\n \"#c6e8b8\",\r\n \"#a9dd94\",\r\n \"#8ed171\",\r\n \"#75c450\",\r\n \"#61b635\",\r\n \"#51a51f\",\r\n \"#429304\",\r\n \"#358100\",\r\n \"#2a7000\",\r\n \"#215f00\",\r\n \"#194d00\",\r\n \"#123c00\",\r\n \"#0b2b00\",\r\n \"#051a00\",\r\n \"#010900\",\r\n \"#000000\"\r\n ],\r\n \"warning\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"attention\": [\r\n \"#ffffff\",\r\n \"#ffeada\",\r\n \"#ffd3b3\",\r\n \"#ffbd8d\",\r\n \"#ffa96b\",\r\n \"#ff9853\",\r\n \"#ec8640\",\r\n \"#d77531\",\r\n \"#c16523\",\r\n \"#aa5718\",\r\n \"#944a0f\",\r\n \"#7e3d09\",\r\n \"#673106\",\r\n \"#512504\",\r\n \"#3b1a03\",\r\n \"#250e02\",\r\n \"#0e0401\",\r\n \"#000000\"\r\n ],\r\n \"error\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"danger\": [\r\n \"#ffffff\",\r\n \"#fce7e4\",\r\n \"#fbcfca\",\r\n \"#f8b7b0\",\r\n \"#f59f96\",\r\n \"#ef877e\",\r\n \"#e86f67\",\r\n \"#de5852\",\r\n \"#d3403e\",\r\n \"#c5282c\",\r\n \"#b30a1b\",\r\n \"#9e000b\",\r\n \"#860001\",\r\n \"#6c0000\",\r\n \"#510000\",\r\n \"#340000\",\r\n \"#170000\",\r\n \"#000000\"\r\n ],\r\n \"highlight\": [\r\n \"#ffffff\",\r\n \"#f9f5cd\",\r\n \"#f4eb95\",\r\n \"#efe05a\",\r\n \"#e6d427\",\r\n \"#d3c100\",\r\n \"#bfad00\",\r\n \"#ab9b00\",\r\n \"#988900\",\r\n \"#857700\",\r\n \"#736600\",\r\n \"#615600\",\r\n \"#4f4600\",\r\n \"#3e3600\",\r\n \"#2c2700\",\r\n \"#1b1700\",\r\n \"#090700\",\r\n \"#000000\"\r\n ],\r\n \"neutral\": [\r\n \"#ffffff\",\r\n \"#ededed\",\r\n \"#dbdbdb\",\r\n \"#cacaca\",\r\n \"#bababa\",\r\n \"#ababab\",\r\n \"#9b9b9b\",\r\n \"#8d8d8d\",\r\n \"#7e7e7e\",\r\n \"#707070\",\r\n \"#636363\",\r\n \"#565656\",\r\n \"#484848\",\r\n \"#383838\",\r\n \"#282828\",\r\n \"#181818\",\r\n \"#080808\",\r\n \"#000000\"\r\n ]\r\n },\r\n baseTones: {\r\n highlight: 5,\r\n warning: 6,\r\n error: 8,\r\n danger: 8,\r\n secondary: 8,\r\n primary: 9,\r\n info: 8,\r\n success: 8,\r\n neutral: 8,\r\n },\r\n fontSizes: [\"0.75rem\", \"0.875rem\", \"1rem\", \"1.25rem\", \"1.5625rem\", \"1.9375rem\", \"2.4375rem\", \"3.0625rem\"],\r\n densities: [0.75, 1, 1.5, 2, 2.5],\r\n darkBias: 1,\r\n custom: {},\r\n}\r\n\r\nexport default light\r\n","import { ElementNode, Listener } from \"@domphy/core\";\r\nimport { ThemeInput, ThemeVars } from \"./types.js\";\r\nimport light from \"./light.js\";\r\n\r\n// JSON clone (not structuredClone) so the build runs in older embedded\r\n// browsers like SketchUp 2022's CEF, which predates Chromium 98.\r\n// ThemeInput is plain JSON (no Map/Set/Date/typed arrays).\r\nconst clone = <T>(v: T): T => JSON.parse(JSON.stringify(v));\r\n\r\n// Custom-token keys may contain CSS-illegal characters (e.g. \"radius/sm/lg\").\r\n// Map every illegal char to \"_\" so the declared property name and the var()\r\n// reference always agree and stay valid CSS.\r\nconst escapeKey = (k: string): string => k.replace(/[^a-zA-Z0-9_-]/g, \"_\");\r\n\r\nconst themes: Record<string, ThemeInput> = {\r\n light: clone(light),\r\n dark: createDark(light),\r\n};\r\n\r\nfunction colorSteps(input: ThemeInput): number {\r\n const firstColor = Object.keys(input.colors)[0];\r\n return firstColor ? input.colors[firstColor].length : 0;\r\n}\r\n\r\n// --- Validation ---\r\n\r\nfunction validateTheme(partial: Partial<ThemeInput>): void {\r\n for (let key in partial) {\r\n if (!Object.keys(light).includes(key as keyof ThemeInput)) {\r\n throw new Error(`Invalid key: ${key}`);\r\n }\r\n }\r\n if (partial.fontSizes && !Array.isArray(partial.fontSizes)) {\r\n throw new Error(`fontSize must be array of string`);\r\n }\r\n if (partial.densities) {\r\n if (!Array.isArray(partial.densities) || partial.densities.some(v => typeof v !== \"number\")) {\r\n throw new Error(`densities must be array of number`);\r\n }\r\n }\r\n if (\"custom\" in partial) {\r\n const custom = partial.custom!;\r\n if (typeof custom !== \"object\" || custom === null) {\r\n throw new Error(`Invalid custom property: must be an object`);\r\n }\r\n }\r\n}\r\n\r\n// --- Deep Merge ---\r\n\r\nfunction deepMerge(target: any, source: any): void {\r\n for (const key in source) {\r\n if (\r\n source[key] &&\r\n typeof source[key] === \"object\" &&\r\n !Array.isArray(source[key])\r\n ) {\r\n target[key] ??= {};\r\n deepMerge(target[key], source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n}\r\n\r\n// --- Builders (pure functions) ---\r\n\r\nfunction buildThemeCSS(name: string, input: ThemeInput): string {\r\n const styles: Record<string, string | number> = {};\r\n const toneSteps = colorSteps(input);\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const colorName in input.colors) {\r\n [...Array(toneSteps).keys()].forEach(i =>\r\n styles[`--${colorName}-${i}`] = input.colors[colorName][i]\r\n );\r\n }\r\n } else if (key === \"fontSizes\") {\r\n [...Array(8).keys()].forEach(i =>\r\n styles[`--fontSize-${i}`] = input.fontSizes[i]\r\n );\r\n } else if (key === \"custom\") {\r\n if (value && typeof value === \"object\") {\r\n for (const k in value as Record<string, string>) {\r\n styles[`--custom-${escapeKey(k)}`] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n // densities / baseTones / direction / darkBias are not CSS custom properties\r\n }\r\n\r\n let text = \"\";\r\n for (const prop in styles) {\r\n text += ` ${prop}: ${styles[prop]};\\n`;\r\n }\r\n return `[data-theme=\"${name}\"] {\\n${text}}`;\r\n}\r\n\r\n// --- Public API ---\r\n\r\nexport function getTheme(name: string): ThemeInput {\r\n if (!themes[name]) throw Error(`Theme \"${name}\" not found`);\r\n return themes[name];\r\n}\r\n\r\nexport function setTheme(name: string, input: Partial<ThemeInput>): void {\r\n validateTheme(input);\r\n if (!themes[name]) themes[name] = clone(light);\r\n deepMerge(themes[name], input);\r\n}\r\n\r\nfunction createDark(source: ThemeInput): ThemeInput {\r\n let dark = clone(source)\r\n dark.direction = \"lighten\"\r\n for (let name in dark.colors) {\r\n dark.colors[name].reverse()\r\n dark.baseTones[name] = dark.colors[name].length - 1 - dark.baseTones[name]\r\n }\r\n return dark\r\n}\r\n\r\nexport function themeTokens(name: string): Record<string, any> {\r\n let input = getTheme(name)\r\n const toneSteps = colorSteps(input);\r\n let tokens: Record<string, any> = {};\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = input.colors[name][i]);\r\n tokens[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n tokens.fontSizes = input.fontSizes;\r\n } else if (key === \"densities\") {\r\n tokens.densities = input.densities;\r\n } else if (key === \"custom\") {\r\n tokens.custom = {};\r\n if (value && typeof value === \"object\") {\r\n for (const k in value as Record<string, string>) {\r\n tokens.custom[k] = (value as Record<string, string>)[k];\r\n }\r\n }\r\n }\r\n // baseTones / direction / darkBias are metadata — reachable via getTheme(), not tokens\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nexport function themeVars(): ThemeVars {\r\n let input = getTheme(\"light\")\r\n const toneSteps = colorSteps(input);\r\n let theme = {} as ThemeVars;\r\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\r\n for (const name in input.colors) {\r\n let colorTones = {} as Partial<Record<number, string>>;\r\n [...Array(toneSteps).keys()].forEach(i => colorTones[i] = `var(--${name}-${i})`);\r\n theme[name] = colorTones as Record<number, string>;\r\n }\r\n } else if (key === \"fontSizes\") {\r\n theme.fontSizes = [...Array(8).keys()].map(i => `var(--fontSize-${i})`);\r\n } else if (key === \"custom\") {\r\n theme.custom = {} as Record<string, string>;\r\n if (value && typeof value === \"object\") {\r\n for (const k in value as Record<string, string>) {\r\n theme.custom[k] = `var(--custom-${escapeKey(k)})`;\r\n }\r\n }\r\n }\r\n // densities / baseTones / direction / darkBias are not exposed as CSS vars\r\n }\r\n\r\n return theme;\r\n}\r\n\r\nexport function themeCSS(): string {\r\n return Object.entries(themes)\r\n .map(([name, input]) => buildThemeCSS(name, input))\r\n .join(\"\\n\")\r\n}\r\n\r\nexport function themeApply(el?: HTMLStyleElement): void {\r\n if (typeof document === \"undefined\") return\r\n if (el) {\r\n el.textContent = themeCSS()\r\n return\r\n } else {\r\n el = document.getElementById(\"domphy-themes\") as HTMLStyleElement\r\n ?? Object.assign(document.createElement(\"style\"), { id: \"domphy-themes\" })\r\n el.textContent = themeCSS()\r\n document.head.appendChild(el)\r\n }\r\n\r\n}\r\n\r\nexport function themeSpacing(n: number) {\r\n return n / 4 + \"em\"\r\n}\r\n\r\nexport function themeName(object: ElementNode | Listener) {\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTheme\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let themeName = \"light\"\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTheme\")) {\r\n themeName = node.attributes.get(\"dataTheme\")\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTheme\", object)\r\n }\r\n return themeName\r\n}\r\n\r\nexport type ThemeColor = keyof ThemeInput[\"colors\"]\r\n","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { themeVars } from \"./theme.js\";\n\nconst ElementSizes = [\"inherit\"];\n\n[...Array(8).keys()].forEach(i =>{\n ElementSizes.push(`decrease-${i}`)\n ElementSizes.push(`increase-${i}`)\n})\n\nexport type ElementSize = typeof ElementSizes[number];\n\nfunction offsetSize(origin: number, size: ElementSize = \"inherit\"): number {\n\n if (!ElementSizes.includes(size!)) {\n throw Error(`size name \"${size}\" invalid`)\n }\n let resultSize: number\n if (size == \"inherit\") {\n resultSize = origin as number\n } else if (size?.startsWith(\"increase-\")) {\n let offset = parseInt(size.replace(\"increase-\", \"\"), 10)\n resultSize = origin + offset;\n } else if (size?.startsWith(\"decrease-\")) {\n let offset = parseInt(size.replace(\"decrease-\", \"\"), 10)\n resultSize = origin - offset;\n } else {\n resultSize = origin\n }\n return Math.max(0, Math.min(8, resultSize))\n}\n\nfunction contextSize(object: ElementNode | Listener | null): number {\n\n if (!object) return 2\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataSize\"))) {\n node = node.parent as ElementNode\n }\n\n let size = 2\n\n if (node && node.attributes && node.attributes.has(\"dataSize\")) {\n size = offsetSize(size, node.attributes.get(\"dataSize\"))\n typeof object == \"function\" && node.attributes.addListener(\"dataSize\", object)\n }\n return size\n}\n\n\nexport function themeSize(object: ElementNode | Listener, size: ElementSize = \"inherit\"): string {\n let index = offsetSize(contextSize(object), size)\n return themeVars().fontSizes[index]\n}","import type { ElementNode, Listener } from \"@domphy/core\";\nimport { getTheme, themeName } from \"./theme.js\";\n\nconst ElementDensities = [\"inherit\"];\n\n[...Array(5).keys()].forEach(i => {\n ElementDensities.push(`decrease-${i}`);\n ElementDensities.push(`increase-${i}`);\n});\n\nexport type ElementDensity = typeof ElementDensities[number];\n\nfunction offsetDensity(origin: number, density: ElementDensity = \"inherit\"): number {\n\n if (!ElementDensities.includes(density!)) {\n throw Error(`density name \"${density}\" invalid`);\n }\n let resultDensity: number;\n if (density == \"inherit\") {\n resultDensity = origin as number;\n } else if (density?.startsWith(\"increase-\")) {\n let offset = parseInt(density.replace(\"increase-\", \"\"), 10);\n resultDensity = origin + offset;\n } else if (density?.startsWith(\"decrease-\")) {\n let offset = parseInt(density.replace(\"decrease-\", \"\"), 10);\n resultDensity = origin - offset;\n } else {\n resultDensity = origin;\n }\n return Math.max(0, Math.min(4, resultDensity));\n}\n\nfunction contextDensity(object: ElementNode | Listener | null): number {\n\n if (!object) return 2;\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode;\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataDensity\"))) {\n node = node.parent as ElementNode;\n }\n\n let density = 2;\n\n if (node && node.attributes && node.attributes.has(\"dataDensity\")) {\n density = offsetDensity(density, node.attributes.get(\"dataDensity\"));\n typeof object == \"function\" && node.attributes.addListener(\"dataDensity\", object);\n }\n return density;\n}\n\nexport function themeDensity(object: ElementNode | Listener | null): number {\n let index = contextDensity(object);\n return getTheme(object ? themeName(object) : \"light\").densities[index];\n}\n","import { themeVars, themeTokens, getTheme, themeName } from \"./theme.js\"\r\nimport light from \"./light.js\";\r\nimport type { Listener, ElementNode } from \"@domphy/core\";\r\n\r\nconst TONE_STEPS = light.colors.neutral.length\r\n\r\nconst ElementTones = [\"inherit\", \"base\"];\r\n\r\n[...Array(TONE_STEPS).keys()].forEach(i => {\r\n ElementTones.push(`decrease-${i}`)\r\n ElementTones.push(`increase-${i}`)\r\n ElementTones.push(`shift-${i}`)\r\n})\r\n\r\nexport type ElementTone = typeof ElementTones[number];\r\n\r\nfunction adjustTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let newIndex = tone + level;\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction shiftTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let midpoint = Math.floor((TONE_STEPS - 1) / 2)\r\n let newIndex = tone <= midpoint ? tone + level : tone - level\r\n // Clamp overshoot to the near boundary. (Negating an out-of-range index, as\r\n // a prior version did, flips it to the opposite extreme — e.g. shift past\r\n // the dark end would land on the lightest tone.)\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction offsetTone(originTone: number, tone: ElementTone = \"inherit\"): number {\r\n\r\n if (typeof tone == \"number\") return tone\r\n\r\n if (tone == \"inherit\") return originTone\r\n\r\n if (!ElementTones.includes(tone!)) {\r\n throw Error(`tone name \"${tone}\" invalid`)\r\n }\r\n\r\n if (tone.startsWith(\"increase-\")) {\r\n let offset = parseInt(tone.replace(\"increase-\", \"\"), 10)\r\n return adjustTone(originTone, offset);\r\n\r\n } else if (tone.startsWith(\"decrease-\")) {\r\n let offset = parseInt(tone.replace(\"decrease-\", \"\"), 10)\r\n return adjustTone(originTone, - offset);\r\n\r\n } else if (tone.startsWith(\"shift-\")) {\r\n let offset = parseInt(tone.replace(\"shift-\", \"\"), 10)\r\n return shiftTone(originTone, offset);\r\n\r\n } else {\r\n return originTone\r\n }\r\n}\r\n\r\nfunction contextTone(object: ElementNode | Listener | null): number {\r\n\r\n if (!object) return 0\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTone\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let tone = 0\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTone\")) {\r\n tone = offsetTone(tone, node.attributes.get(\"dataTone\"))\r\n typeof object == \"function\" && node.attributes.addListener(\"dataTone\", object)\r\n }\r\n return tone\r\n}\r\n\r\nfunction themeTone(object: ElementNode | Listener, tone: ElementTone = \"inherit\"): number {\r\n\r\n return offsetTone(contextTone(object), tone)\r\n}\r\n\r\nfunction biasContext(context: number, direction: string, bias: number): number {\r\n if (bias <= 0) return context\r\n if (direction === \"lighten\" && context === 0) return bias\r\n if (direction === \"darken\" && context === TONE_STEPS - 1) return TONE_STEPS - 1 - bias\r\n return context\r\n}\r\n\r\nexport function themeColor(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let themeColor = color == \"inherit\" ? \"neutral\" : color;\r\n\r\n if (!object) {\r\n // No node context implies the light theme (themeVars reads getTheme(\"light\")).\r\n if (tone == \"base\") return themeVars()[themeColor][getTheme(\"light\").baseTones[themeColor]]\r\n return themeVars()[themeColor][offsetTone(0, tone)]\r\n }\r\n\r\n const name = themeName(object)\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(name).baseTones[themeColor]\r\n } else {\r\n let theme = getTheme(name)\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n let colors = themeVars()[themeColor]\r\n if (!colors){\r\n throw Error(`color \"${themeColor}\" not found on theme \"${name}\"`)\r\n }\r\n let resultColor = colors[resultTone]\r\n\r\n return resultColor\r\n}\r\n\r\nexport function themeColorToken(object: ElementNode | Listener | null, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n\r\n let colorName = color == \"inherit\" ? \"neutral\" : color;\r\n let name = object ? themeName(object as ElementNode | Listener) : \"light\";\r\n let tokens = themeTokens(name);\r\n\r\n if (!object) {\r\n if (tone == \"base\") return tokens[colorName][getTheme(\"light\").baseTones[colorName]]\r\n return tokens[colorName][offsetTone(0, tone)]\r\n }\r\n\r\n let resultTone: number\r\n if (tone == \"base\") {\r\n resultTone = getTheme(name).baseTones[colorName]\r\n } else {\r\n let theme = getTheme(name)\r\n let context = biasContext(contextTone(object), theme.direction, theme.darkBias)\r\n resultTone = offsetTone(context, tone)\r\n }\r\n\r\n return tokens[colorName][resultTone]\r\n}\r\n","export * from \"./patches.js\"\r\nexport * from \"./classes.js\"\r\nexport * from \"./types.js\"\r\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction abbreviation(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"abbr\") {\n console.warn(`\"abbreviation\" primitive patch must use abbr tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n textDecorationLine: \"underline\",\n textDecorationStyle: \"dotted\",\n textDecorationColor: (listener) => themeColor(listener, \"shift-7\", color.get(listener)),\n textUnderlineOffset: themeSpacing(0.72),\n cursor: \"help\",\n \"&:hover\": {\n color: (listener) => themeColor(listener, \"shift-11\", accentColor.get(listener)),\n textDecorationColor: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n },\n },\n };\n}\n\nexport { abbreviation };\n","import { type PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction card(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n return {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"1fr auto\",\n gridTemplateAreas: '\"image image\" \"title aside\" \"desc aside\" \"content content\" \"footer footer\"',\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n outlineOffset: \"-1px\",\n overflow: \"hidden\",\n \"& > img\": {\n gridArea: \"image\",\n width: \"100%\",\n height: \"auto\",\n display: \"block\",\n },\n \"& > :is(h1,h2,h3,h4,h5,h6)\": {\n gridArea: \"title\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n fontWeight: \"600\",\n margin: 0\n },\n \"& > p\": {\n gridArea: \"desc\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n margin: 0\n },\n \"& > aside\": {\n gridArea: \"aside\",\n alignSelf: \"center\",\n padding: (listener) => themeSpacing(themeDensity(listener) * 2),\n height: \"auto\",\n },\n \"& > div\": {\n gridArea: \"content\",\n padding: (listener) => themeSpacing(themeDensity(listener) * 4),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n },\n \"& > footer\": {\n gridArea: \"footer\",\n display: \"flex\",\n gap: themeSpacing(2),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n borderTop: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n },\n },\n };\n}\n\nexport { card };\n","import { type PartialElement, merge, toState } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction splitter(props: {\r\n direction?: \"horizontal\" | \"vertical\";\r\n defaultSize?: number;\r\n min?: number;\r\n max?: number;\r\n} = {}): PartialElement {\r\n const { direction = \"horizontal\", defaultSize = 50, min = 10, max = 90 } = props;\r\n return {\r\n _onSchedule: (node, element) => {\r\n merge(element, {\r\n _context: {\r\n splitter: {\r\n direction,\r\n size: toState(defaultSize),\r\n min,\r\n max,\r\n },\r\n },\r\n });\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: direction === \"horizontal\" ? \"row\" : \"column\",\r\n overflow: \"hidden\",\r\n },\r\n };\r\n}\r\n\r\nfunction splitterPanel(): PartialElement {\r\n return {\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"splitter\");\r\n if (!ctx) {\r\n console.warn(`\"splitterPanel\" patch must be used inside a \"splitter\"`);\r\n return;\r\n }\r\n const el = node.domElement as HTMLElement;\r\n const prop = ctx.direction === \"horizontal\" ? \"width\" : \"height\";\r\n\r\n el.style[prop] = `${ctx.size.get()}%`;\r\n el.style.flexShrink = \"0\";\r\n el.style.overflow = \"auto\";\r\n\r\n const release = ctx.size.addListener((size: number) => {\r\n el.style[prop] = `${size}%`;\r\n });\r\n node.addHook(\"Remove\", release);\r\n },\r\n };\r\n}\r\n\r\nfunction splitterHandle(): PartialElement {\r\n return {\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"splitter\");\r\n if (!ctx) {\r\n console.warn(`\"splitterHandle\" patch must be used inside a \"splitter\"`);\r\n return;\r\n }\r\n const handle = node.domElement as HTMLElement;\r\n const isHorizontal = ctx.direction === \"horizontal\";\r\n\r\n handle.style.cursor = isHorizontal ? \"col-resize\" : \"row-resize\";\r\n\r\n const onMousedown = (e: MouseEvent) => {\r\n e.preventDefault();\r\n const container = handle.parentElement!;\r\n\r\n const onMousemove = (e: MouseEvent) => {\r\n const rect = container.getBoundingClientRect();\r\n const raw = isHorizontal\r\n ? ((e.clientX - rect.left) / rect.width) * 100\r\n : ((e.clientY - rect.top) / rect.height) * 100;\r\n ctx.size.set(Math.min(Math.max(raw, ctx.min), ctx.max));\r\n };\r\n\r\n const onMouseup = () => {\r\n document.removeEventListener(\"mousemove\", onMousemove);\r\n document.removeEventListener(\"mouseup\", onMouseup);\r\n };\r\n\r\n document.addEventListener(\"mousemove\", onMousemove);\r\n document.addEventListener(\"mouseup\", onMouseup);\r\n };\r\n\r\n handle.addEventListener(\"mousedown\", onMousedown);\r\n node.addHook(\"Remove\", () => handle.removeEventListener(\"mousedown\", onMousedown));\r\n },\r\n style: {\r\n flexShrink: 0,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\"),\r\n \"&:hover\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\"),\r\n },\r\n \"&::after\": {\r\n content: '\"\"',\r\n borderRadius: themeSpacing(999),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-4\"),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { splitter, splitterPanel, splitterHandle };\r\n","import { type PartialElement, merge, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction command(): PartialElement {\r\n return {\r\n _onSchedule: (node, element) => {\r\n merge(element, {\r\n _context: {\r\n command: {\r\n query: toState(\"\"),\r\n },\r\n },\r\n });\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n },\r\n };\r\n}\r\n\r\nfunction commandSearch(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"input\") {\r\n console.warn(`\"commandSearch\" patch must use input tag`);\r\n }\r\n },\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"command\");\r\n if (!ctx) {\r\n console.warn(`\"commandSearch\" patch must be used inside a \"command\"`);\r\n return;\r\n }\r\n const input = node.domElement as HTMLInputElement;\r\n const onInput = () => ctx.query.set(input.value);\r\n input.addEventListener(\"input\", onInput);\r\n node.addHook(\"Remove\", () => input.removeEventListener(\"input\", onInput));\r\n },\r\n style: {\r\n fontFamily: \"inherit\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n border: \"none\",\r\n borderBottom: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-10\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&::placeholder\": {\r\n color: (listener) => themeColor(listener, \"shift-7\"),\r\n },\r\n \"&:focus-visible\": {\r\n borderBottomColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\r\n },\r\n },\r\n };\r\n}\r\n\r\nfunction commandItem(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n return {\r\n role: \"option\",\r\n _onMount: (node) => {\r\n const ctx = node.getContext(\"command\");\r\n if (!ctx) {\r\n console.warn(`\"commandItem\" patch must be used inside a \"command\"`);\r\n return;\r\n }\r\n const el = node.domElement as HTMLElement;\r\n const text = el.textContent?.toLowerCase() ?? \"\";\r\n const release = ctx.query.addListener((q: string) => {\r\n el.hidden = q.length > 0 && !text.includes(q.toLowerCase());\r\n });\r\n node.addHook(\"Remove\", release);\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n width: \"100%\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n outlineOffset: `-${themeSpacing(0.5)}`,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { command, commandSearch, commandItem };\r\n","import { type PartialElement, type ElementNode, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction toggle(props: {\n color?: ValueOrState<ThemeColor>;\n accentColor?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n return {\n role: \"button\",\n _onInsert: (node) => {\n if (node.tagName !== \"button\") {\n console.warn(`\"toggle\" patch must use button tag`);\n }\n const ctx = node.getContext(\"toggleGroup\");\n if (!ctx) {\n console.warn(`\"toggle\" patch must be used inside a \"toggleGroup\"`);\n return;\n }\n const children = (node.parent?.children.items ?? []) as ElementNode[]\n\n let items = children.filter(n => n.type === \"ElementNode\" && n.attributes.get(\"role\") === \"button\");\n // node.key is null (not undefined) when absent — check both so an\n // explicit _key of 0 or \"\" keeps its real key instead of \"null\"/index.\n const key = node.key !== null && node.key !== undefined ? String(node.key) : String(items.findIndex(n => n === node));\n\n node.attributes.set(\"ariaPressed\", (listener) => {\n const val = ctx.value.get(listener);\n return Array.isArray(val) ? val.includes(key) : val === key;\n })\n\n node.addEvent(\"click\", () => {\n const val = ctx.value.get();\n if (ctx.multiple) {\n const arr = Array.isArray(val) ? [...val] : [];\n ctx.value.set(arr.includes(key) ? arr.filter(v => v !== key) : [...arr, key]);\n } else {\n ctx.value.set(val === key ? \"\" : key);\n }\n })\n },\n style: {\n cursor: \"pointer\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n height: themeSpacing(6),\n paddingBlock: themeSpacing(1),\n paddingInline: themeSpacing(2),\n border: \"none\",\n borderRadius: themeSpacing(1),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n transition:\"background-color 300ms ease\",\n \"&:hover:not([disabled])\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&[aria-pressed=true]\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", accentColor.get(listener)),\n color: (listener) => themeColor(listener, \"shift-12\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { toggle };\n","import { type PartialElement, merge, toState, type ValueOrState } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeSize, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction toggleGroup(props: {\r\n value?: ValueOrState<string | string[]>;\r\n multiple?: boolean;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { multiple = false, color = \"neutral\" } = props;\r\n return {\r\n role: \"group\",\r\n _context: {\r\n toggleGroup: {\r\n value: toState(props.value ?? (multiple ? [] : \"\")),\r\n multiple,\r\n },\r\n },\r\n style: {\r\n display: \"flex\",\r\n paddingBlock: themeSpacing(1),\r\n paddingInline: themeSpacing(1),\r\n gap: themeSpacing(1),\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n outlineOffset: \"-1px\",\r\n }\r\n };\r\n}\r\n\r\nexport { toggleGroup };\r\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction inputOTP(): PartialElement {\r\n return {\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: themeSpacing(2),\r\n \"& > *\":{\r\n minWidth:themeSpacing(9) + \"!important\",\n }\r\n },\r\n _onMount: (node) => {\r\n const container = node.domElement as HTMLElement;\r\n const getInputs = () => Array.from(container.querySelectorAll(\"input\")) as HTMLInputElement[];\r\n\r\n const onInput = (e: Event) => {\r\n const inputs = getInputs();\r\n const target = e.target as HTMLInputElement;\r\n const idx = inputs.indexOf(target);\r\n if (target.value && idx < inputs.length - 1) {\r\n inputs[idx + 1].focus();\r\n }\r\n };\r\n\r\n const onKeydown = (e: KeyboardEvent) => {\r\n const inputs = getInputs();\r\n const target = e.target as HTMLInputElement;\r\n const idx = inputs.indexOf(target);\r\n if (e.key === \"Backspace\" && !target.value && idx > 0) {\r\n inputs[idx - 1].focus();\r\n }\r\n if (e.key === \"ArrowLeft\" && idx > 0) inputs[idx - 1].focus();\r\n if (e.key === \"ArrowRight\" && idx < inputs.length - 1) inputs[idx + 1].focus();\r\n };\r\n\r\n const onPaste = (e: ClipboardEvent) => {\r\n e.preventDefault();\r\n const text = e.clipboardData?.getData(\"text\") ?? \"\";\r\n const inputs = getInputs();\r\n const startIdx = inputs.indexOf(e.target as HTMLInputElement);\r\n [...text].forEach((char, i) => {\r\n if (inputs[startIdx + i]) inputs[startIdx + i].value = char;\r\n });\r\n const lastFilled = Math.min(startIdx + text.length - 1, inputs.length - 1);\r\n inputs[lastFilled]?.focus();\r\n };\r\n\r\n container.addEventListener(\"input\", onInput);\r\n container.addEventListener(\"keydown\", onKeydown as EventListener);\r\n container.addEventListener(\"paste\", onPaste as EventListener);\r\n\r\n node.addHook(\"Remove\", () => {\r\n container.removeEventListener(\"input\", onInput);\r\n container.removeEventListener(\"keydown\", onKeydown as EventListener);\r\n container.removeEventListener(\"paste\", onPaste as EventListener);\r\n });\r\n },\r\n };\r\n}\r\n\r\nexport { inputOTP };\r\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction alert(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n role: \"alert\",\n // Alert is a semantic surface block, so it should shift the local surface context.\n dataTone: \"shift-2\",\n style: {\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: themeSpacing(3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n boxShadow: (listener) => `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-8\", color.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n },\n };\n}\n\nexport { alert };\n","import { type PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction avatar(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n style: {\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n borderRadius: \"50%\",\n flexShrink: 0,\n width: themeSpacing(9),\n height: themeSpacing(9),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: \"600\",\n userSelect: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n \"& img\": {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n },\n },\n };\n}\n\nexport { avatar };\n","\nimport { type DomphyElement, type PartialElement, type ValueOrState, toState } from '@domphy/core'\nimport { themeSpacing, themeColor, themeSize, ThemeColor } from \"@domphy/theme\"\n\nfunction badge(props: {\n color?: ValueOrState<ThemeColor>\n label?: ValueOrState<string | number>\n} = {}): PartialElement {\n const { label = 999 } = props\n let state = toState(label)\n const color = toState(props.color ?? \"danger\", \"color\")\n return {\n style: {\n position: \"relative\",\n \"&::after\": {\n content: (l) => `\"${state.get(l)}\"`,\n position: \"absolute\",\n top: 0,\n right: 0,\n transform: \"translate(50%,-50%)\",\n paddingInline:themeSpacing(1),\n minWidth:themeSpacing(6),\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent:\"center\",\n fontSize: (l) => themeSize(l, \"decrease-1\"),\n borderRadius: themeSpacing(999),\n backgroundColor: (l) => themeColor(l, \"shift-9\", color.get(l)),\n color: (l) => themeColor(l, \"shift-0\", color.get(l)),\n }\n }\n }\n}\n\nexport { badge };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction breadcrumb(props: {\n color?: ValueOrState<ThemeColor>;\n separator?: string;\n} = {}): PartialElement {\n const { separator = \"/\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"nav\") console.warn('\"breadcrumb\" patch must use nav tag');\n },\n ariaLabel: \"breadcrumb\",\n style: {\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n gap: themeSpacing(1),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"& > *\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n color: (listener) => themeColor(listener, \"shift-8\", color.get(listener)),\n },\n \"& > *:not(:last-child)::after\": {\n content: `\"${separator}\"`,\n color: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n paddingInlineStart: themeSpacing(1),\n },\n \"& > [aria-current=page]\": {\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n pointerEvents: \"none\",\n },\n },\n };\n}\n\nexport { breadcrumb };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction breadcrumbEllipsis(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"button\") {\n console.warn('\"breadcrumbEllipsis\" patch must use button tag');\n }\n },\n ariaLabel: \"More breadcrumb items\",\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n paddingInline: themeSpacing(1),\n border: \"none\",\n background: \"none\",\n cursor: \"pointer\",\n color: (listener) => themeColor(listener, \"shift-8\", color.get(listener)),\n borderRadius: themeSpacing(1),\n \"&:hover\": {\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", color.get(listener))}`,\n outlineOffset: themeSpacing(0.5),\n },\n },\n };\n}\n\nexport { breadcrumbEllipsis };\n","import type { PartialElement, DomphyElement } from \"@domphy/core\";\nimport { toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nconst xSvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M6.707 5.293l5.293 5.292l5.293 -5.292a1 1 0 0 1 1.414 1.414l-5.292 5.293l5.292 5.293a1 1 0 0 1 -1.414 1.414l-5.293 -5.292l-5.293 5.292a1 1 0 1 1 -1.414 -1.414l5.292 -5.293l-5.292 -5.293a1 1 0 0 1 1.414 -1.414\" /></svg>`\n\nfunction tag(props: {\n color?: ValueOrState<ThemeColor>\n removable?: boolean\n} = {}): PartialElement {\n const { removable=false } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInit: (node) => {\n\n const removeBtn: DomphyElement<\"span\"> = {\n span: xSvg,\n onClick: (e) => { (e as Event).stopPropagation(); node.remove() },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n cursor: \"pointer\",\n borderRadius: themeSpacing(1),\n width: themeSpacing(4),\n height: themeSpacing(4),\n flexShrink: 0,\n \"&:hover\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n }\n }\n }\n\n removable && node.children.insert(removeBtn)\n\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n whiteSpace: \"nowrap\",\n userSelect: \"none\",\n height: themeSpacing(6),\n paddingBlock: \"0px\",\n borderRadius: themeSpacing(1),\n paddingInlineStart: themeSpacing(2),\n paddingInlineEnd: removable ? themeSpacing(1) : themeSpacing(2),\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n },\n };\n}\n\nexport { tag };\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { ElementNode, State, PartialElement, DomphyElement, toState, ValueOrState, merge } from \"@domphy/core\";\nimport { computePosition, autoUpdate, offset, flip, shift, type Placement } from \"@floating-ui/dom\";\n\nfunction creatFloating(props: {\n open?: ValueOrState<boolean>;\n placement: State<Placement>;\n content: DomphyElement;\n}) {\n const {\n open = false,\n placement,\n } = props;\n\n let timer: ReturnType<typeof setTimeout> | null = null;\n let cleanup: (() => void) | null = null;\n let reference: HTMLElement | null = null\n let floating: HTMLElement | null = null\n let floatingNode: ElementNode | null = null\n let rootNode: ElementNode | null = null\n let mounted = false\n const openState = toState(open);\n\n const ensureMounted = () => {\n if (mounted || !rootNode) return\n mounted = true\n floatingNode = rootNode.children!.insert(props.content) as ElementNode\n }\n\n const instantShow = () => {\n ensureMounted()\n if (reference && floating) {\n cleanup && cleanup();\n cleanup = autoUpdate(reference, floating, () => {\n computePosition(reference as HTMLElement, floating as HTMLElement, {\n placement: placement.get() as Placement,\n middleware: [offset(12), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y, placement: resolved }) => {\n Object.assign((floating as HTMLElement).style, { left: `${x}px`, top: `${y}px` });\n placement.set(resolved)\n });\n });\n openState.set(true)\n }\n };\n const instantHide = () => { cleanup && cleanup(); cleanup = null; openState.set(false) }\n const show = () => { timer && clearTimeout(timer); timer = setTimeout(instantShow, 100) }\n const hide = () => { timer && clearTimeout(timer); timer = setTimeout(instantHide, 100) }\n\n const floatingPartial: PartialElement = {\n style: {\n position: \"fixed\",\n pointerEvents: \"auto\",\n visibility: (listener) => openState.get(listener) ? \"visible\" : \"hidden\",\n },\n _onMount: (node) => floating = node.domElement as HTMLElement,\n _portal: (rNode) => {\n let overlay = rNode.domElement!.querySelector(`#domphy-floating`);\n if (!overlay) {\n const overlayEle: DomphyElement<\"div\"> = {\n div: [],\n id: `domphy-floating`,\n style: { position: \"fixed\", inset: 0, zIndex: 20, pointerEvents: \"none\" },\n };\n const overlayNode = rNode.children!.insert(overlayEle) as ElementNode;\n overlay = overlayNode.domElement!;\n }\n return overlay;\n },\n };\n\n merge(props.content, floatingPartial);\n\n const anchorPartial: PartialElement = {\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\n _onMount: (node) => {\n rootNode = node.getRoot()\n reference = node.domElement as HTMLElement\n\n const handleOutside = (event: MouseEvent) => {\n if (!openState.get() || !reference || !floating) return;\n const target = event.target as Node;\n if (!reference.contains(target) && !floating.contains(target)) {\n hide()\n }\n }\n node.getRoot().domElement!.addEventListener(\"click\", handleOutside)\n\n node.addHook(\"BeforeRemove\", () => {\n if (timer) clearTimeout(timer);\n // Tear down the @floating-ui autoUpdate loop (scroll/resize/rAF\n // listeners). Without this, removing the anchor while the overlay\n // is open leaks observers that keep positioning a detached node.\n if (cleanup) { cleanup(); cleanup = null; }\n floatingNode && floatingNode.remove();\n node.getRoot().domElement!.removeEventListener(\"click\", handleOutside)\n });\n }\n };\n\n return { show, hide, anchorPartial };\n}\n\nexport { creatFloating };\n","import { type PartialElement, type DomphyElement, type StyleObject, type ValueOrState, toState, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeDensity, themeSize, type ThemeColor, } from \"@domphy/theme\";\r\nimport { type Placement } from \"@floating-ui/dom\";\r\nimport { tag } from \"./tag.js\"\r\nimport { creatFloating } from \"../utils/floating.js\"\r\n\r\nfunction combobox(props: {\r\n multiple?: boolean;\r\n value?: ValueOrState<Array<number | string | null | undefined> | number | string | null | undefined>;\r\n options?: Array<{ label: string, value: string }>;\r\n placement?: ValueOrState<Placement>;\r\n content: DomphyElement;\r\n color?: ThemeColor;\r\n open?: ValueOrState<boolean>;\r\n input?: DomphyElement;\r\n}): PartialElement {\r\n const {\r\n options = [],\r\n placement = \"bottom\",\r\n color = \"neutral\",\r\n open = false,\r\n multiple = false\r\n } = props;\r\n\r\n const state = toState(props.value)\r\n let openState = toState(open)\r\n let { show, hide, anchorPartial } = creatFloating({ open: openState, placement: toState(placement), content: props.content })\r\n\r\n const popoverPartial: PartialElement = {\r\n onClick: () => !multiple && hide(),\r\n };\r\n\r\n merge(props.content, popoverPartial);\r\n\r\n const inputStyle: StyleObject = {\r\n border: \"none\",\r\n outline: \"none\",\r\n padding: 0,\r\n margin: 0,\r\n flex: 1,\r\n height: themeSpacing(6),\r\n marginInlineStart: themeSpacing(2),\r\n fontSize: (listener: any) => themeSize(listener, \"inherit\"),\r\n color: (listener: any) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener: any) => themeColor(listener, \"inherit\", color),\r\n }\r\n\r\n let inputElement: DomphyElement\r\n if (props.input) {\r\n merge(props.input, { onFocus: () => show(), style: inputStyle, _key: \"combobox-input\" })\r\n inputElement = props.input\r\n } else {\r\n inputElement = {\r\n input: null,\r\n onFocus: () => show(),\r\n value: (listener: any) => { state.get(listener); return \"\" },\r\n style: inputStyle,\r\n _key: \"combobox-input\"\r\n }\r\n }\r\n\r\n const wrap: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const val = state.get(listener)\r\n const vals = Array.isArray(val) ? val : [val]\r\n const opts = options.filter(opt => vals.includes(opt.value))\r\n const items: DomphyElement[] = opts.map(opt => {\r\n return {\r\n span: opt.label,\r\n $: [tag({ color, removable: true })],\r\n _key: opt.value,\r\n _onRemove: (_node) => {\r\n const cur = state.get()\r\n const curVals = Array.isArray(cur) ? cur : [cur]\r\n const filter = curVals.filter(v => v !== opt.value)\r\n multiple ? state.set(filter as any) : state.set(filter[0] as any)\r\n }\r\n }\r\n })\r\n items.push(inputElement)\r\n return items\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n gap: themeSpacing(1),\r\n }\r\n }\r\n\r\n let partial: PartialElement = {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"combobox\" primitive patch must use div tag`);\r\n }\r\n },\r\n _onInit: (node) => node.children.insert(wrap),\r\n style: {\r\n minWidth: themeSpacing(32),\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n }\r\n };\r\n\r\n merge(anchorPartial, partial)\r\n return anchorPartial\r\n}\r\n\r\nexport { combobox };\r\n","import { toState, ValueOrState, PartialElement } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeSize, type ThemeColor } from \"@domphy/theme\";\r\nimport { type Placement } from \"@floating-ui/dom\";\r\n\r\nfunction popoverArrow(props: {\r\n placement?: ValueOrState<Placement>;\r\n sideOffset?: string;\r\n color?: ThemeColor;\r\n bordered?: boolean;\r\n\r\n} = {}): PartialElement {\r\n let {\r\n placement = \"bottom-end\",\r\n color = \"neutral\",\r\n sideOffset = themeSpacing(6),\r\n bordered = true\r\n } = props\r\n\r\n let place = toState(placement)\r\n\r\n const flipMap: Record<Placement, Placement> = {\r\n \"top\": \"bottom\",\r\n \"bottom\": \"top\",\r\n \"left\": \"right\",\r\n \"right\": \"left\",\r\n \"top-start\": \"bottom-end\",\r\n \"top-end\": \"bottom-start\",\r\n \"bottom-start\": \"top-end\",\r\n \"bottom-end\": \"top-start\",\r\n \"left-start\": \"right-end\",\r\n \"left-end\": \"right-start\",\r\n \"right-start\": \"left-end\",\r\n \"right-end\": \"left-start\",\r\n }\r\n\r\n const getFlipped = (listener: any) => flipMap[place.get(listener)] ?? flipMap[\"bottom-end\"]\r\n const start = (pos: string) => pos.includes(\"start\") ? sideOffset : pos.includes(\"end\") ? \"auto\" : \"50%\"\r\n const end = (pos: string) => pos.includes(\"end\") ? sideOffset : pos.includes(\"start\") ? \"auto\" : \"50%\"\r\n\r\n return {\r\n style: {\r\n fontSize: (listener) => themeSize(listener),\r\n backgroundColor: (listener) => themeColor(listener),\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n position: \"relative\",\r\n \"&::after\": {\r\n content: `\"\"`,\r\n position: \"absolute\",\r\n width: themeSpacing(1.5),\r\n height: themeSpacing(1.5),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n borderWidth: bordered ? \"1px\" : \"0px\",\r\n borderColor: (listener) => themeColor(listener, \"inherit\", color),\r\n borderTopStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n\r\n return pos.includes(\"top\") || pos.includes(\"right\") ? `solid` : \"none\"\r\n },\r\n borderBottomStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n \r\n return pos.includes(\"bottom\") || pos.includes(\"left\") ? `solid` : \"none\"\r\n },\r\n borderLeftStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"top\") || pos.includes(\"left\") ? `solid` : \"none\"\r\n },\r\n borderRightStyle: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"bottom\") || pos.includes(\"right\") ? `solid` : \"none\"\r\n },\r\n top: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"top\") ? 0 : pos.includes(\"bottom\") ? \"auto\" : start(pos)\r\n },\r\n right: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"right\") ? 0 : pos.includes(\"left\") ? \"auto\" : end(pos)\r\n },\r\n bottom: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"bottom\") ? 0 : pos.includes(\"top\") ? \"auto\" : end(pos)\r\n },\r\n left: (listener) => {\r\n const pos = getFlipped(listener)\r\n return pos.includes(\"left\") ? 0 : pos.includes(\"right\") ? \"auto\" : start(pos)\r\n },\r\n transform: (listener) => {\r\n const pos = getFlipped(listener)\r\n const x = pos.includes(\"right\") || (pos.includes(\"end\") && !pos.includes(\"left\")) ? \"50%\" : \"-50%\"\r\n const y = pos.includes(\"bottom\") || (pos.includes(\"end\") && !pos.includes(\"top\")) ? \"50%\" : \"-50%\"\r\n return `translate(${x},${y}) rotate(45deg)`\r\n },\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { popoverArrow }","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\r\n\r\nfunction blockquote(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\r\n const color = toState(props.color ?? \"inherit\", \"color\");\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"blockquote\") {\r\n console.warn(`\"blockquote\" primitive patch must use blockquote tag`);\r\n }\r\n },\r\n dataTone: \"shift-2\",\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\r\n boxShadow: (listener) => `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-4\", color.get(listener))}`,\r\n border: \"none\",\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\r\n margin: 0,\r\n },\r\n };\r\n}\r\n\r\nexport { blockquote };\r\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor, } from \"@domphy/theme\";\n\nfunction button(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"primary\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"button\") {\n console.warn(`\"button\" primitive patch must use button tag`);\n }\n },\n style: {\n appearance: \"none\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n // Single-line bounded control: block/radius = 1D, inline = 3D.\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n width: \"fit-content\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: (listener) => themeSpacing(themeDensity(listener) * 1),\n userSelect: \"none\",\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outlineWidth: \"1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:focus-visible\": {\n boxShadow: (listener) => `inset 0 0 0 ${themeSpacing(0.5)} ${themeColor(listener, \"shift-6\", color.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n \"&[aria-busy=true]\": {\n opacity: 0.7,\n cursor: \"wait\",\n pointerEvents: \"none\",\n },\n },\n };\n}\n\nexport { button };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction inputCheckbox(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"checkbox\",\n _onInsert: (node) => {\n if (node.tagName !== \"input\") {\n console.warn(`\"inputCheckbox\" primitive patch must use input tag`);\n }\n },\n style: {\n appearance: \"none\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n display: \"inline-flex\",\n position: \"relative\",\n width: themeSpacing(6),\n height: themeSpacing(6),\n justifyContent: \"center\",\n alignItems: \"center\",\n transition: \"background-color 300ms, outline-color 300ms\",\n margin: 0,\n padding: 0,\n \"&::before\": {\n content: `\"\"`,\n display: \"block\",\n borderRadius: themeSpacing(1),\n lineHeight: 1,\n cursor: \"pointer\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n width: themeSpacing(4),\n height: themeSpacing(4),\n },\n \"&:hover::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:checked::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:checked:hover:not([disabled])::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:checked::after\": {\n content: `\"\"`,\n display: \"block\",\n position: \"absolute\",\n top: \"25%\",\n insetInlineStart: \"37%\",\n width: \"20%\",\n height: \"30%\",\n border: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"inherit\", accentColor.get(listener))}`,\n borderTop: 0,\n borderInlineStart: 0,\n transform: \"rotate(45deg)\",\n },\n \"&:indeterminate::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", accentColor.get(listener)),\n },\n \"&:indeterminate::after\": {\n content: `\"\"`,\n position: \"absolute\",\n inset: \"30%\",\n backgroundColor: (listener) => themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:indeterminate:hover:not([disabled])::after\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n borderRadius: themeSpacing(1.5),\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n cursor: \"not-allowed\",\n },\n \"&[disabled]::before, &[disabled]::after\": {\n outline: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", \"neutral\"),\n pointerEvents: \"none\",\n },\n }\n }\n}\n\nexport { inputCheckbox };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeSpacing, themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction code(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName != \"code\") {\n console.warn(`\"code\" primitive patch must use code tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n height: themeSpacing(6),\n paddingInline: themeSpacing(1.5),\n borderRadius: themeSpacing(1),\n },\n };\n}\n\nexport { code };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction details(\n props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor>; duration?: number } = {}\n): PartialElement {\n const { duration = 240 } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"details\") {\n console.warn(`\"details\" primitive patch must use details tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n\n overflow: \"hidden\",\n \"& > summary\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n listStyle: \"none\",\n display: \"flex\",\n justifyContent:\"space-between\",\n alignItems: \"center\",\n gap: themeSpacing(2),\n cursor: \"pointer\",\n userSelect: \"none\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n height: themeSpacing(10),\n },\n \"& > summary::-webkit-details-marker\": {\n display: \"none\",\n },\n \"& > summary::marker\": {\n content: `\"\"`,\n },\n \"& > summary::after\": {\n content: `\"\"`,\n width: themeSpacing(2),\n height: themeSpacing(2),\n flexShrink: 0,\n marginTop: `-${themeSpacing(0.5)}`,\n borderInlineEnd: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-9\", color.get(listener))}`,\n borderBottom: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-9\", color.get(listener))}`,\n transform: \"rotate(45deg)\",\n transition: `transform ${duration}ms ease`,\n },\n \"&[open] > summary::after\": {\n transform: \"rotate(-135deg)\",\n },\n \"& > summary:hover\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n },\n \"& > summary:focus-visible\": {\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n outlineOffset: `-${themeSpacing(0.5)}`,\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"& > :not(summary)\": {\n maxHeight: \"0px\",\n opacity: 0,\n overflow: \"hidden\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingTop: 0,\n paddingBottom: 0,\n transition: `max-height ${duration}ms ease, opacity ${duration}ms ease, padding ${duration}ms ease`,\n },\n \"&[open] > :not(summary)\": {\n maxHeight: themeSpacing(250),\n opacity: 1,\n paddingTop: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingBottom: (listener) => themeSpacing(themeDensity(listener) * 3),\n },\n },\n };\n}\n\nexport { details };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction descriptionList(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"dl\") {\n console.warn(`\"descriptionList\" primitive patch must use dl tag`);\n }\n },\n style: {\n display: \"grid\",\n gridTemplateColumns: `minmax(${themeSpacing(24)}, max-content) 1fr`,\n columnGap: themeSpacing(4),\n margin: 0,\n \"& dt\": {\n margin: 0,\n fontWeight: 600,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n },\n \"& dd\": {\n margin: 0,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n },\n };\n}\n\nexport { descriptionList };\n","import { type PartialElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction dialog(props: { color?: ThemeColor; open?: ValueOrState<boolean> } = {}): PartialElement {\r\n const { color = \"neutral\", open = false } = props;\r\n const state = toState(open)\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"dialog\") {\r\n console.warn(`\"dialog\" primitive patch must use dialog tag`);\r\n }\r\n },\r\n onClick: (e: MouseEvent, node) => {\r\n if (e.target !== node.domElement) return\r\n const r = node.domElement!.getBoundingClientRect()\r\n const inside =\r\n e.clientX >= r.left &&\r\n e.clientX <= r.right &&\r\n e.clientY >= r.top &&\r\n e.clientY <= r.bottom\r\n if (!inside) state.set(false)\r\n },\r\n onTransitionEnd: (_e, node) => {\r\n const dlg = node.domElement as HTMLDialogElement\r\n if (dlg.style.opacity === \"0\") {\r\n dlg.close()\r\n document.body.style.overflow = \"\"\r\n }\r\n },\r\n _onMount: (node) => {\r\n const dlg = node.domElement as HTMLDialogElement\r\n const update = (val: boolean) => {\r\n if (val) {\r\n dlg.showModal()\r\n document.body.style.overflow = \"hidden\"\r\n requestAnimationFrame(() => {\r\n dlg.style.opacity = \"1\"\r\n const focusable = dlg.querySelector<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n focusable?.focus()\r\n })\r\n } else {\r\n dlg.style.opacity = \"0\"\r\n }\r\n }\r\n update(state.get())\r\n const release = state.addListener(update)\r\n // Release the listener on the user-provided `open` State and always\r\n // restore page scroll on removal — otherwise removing an open dialog\r\n // leaks the listener and leaves document.body locked at overflow:hidden.\r\n node.addHook(\"Remove\", () => {\r\n release()\r\n document.body.style.overflow = \"\"\r\n })\r\n },\r\n style: {\r\n opacity: \"0\",\r\n transition: \"opacity 200ms ease\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-10\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n border: \"none\",\r\n padding: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n boxShadow: (listener) => `0 ${themeSpacing(9)} ${themeSpacing(16)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n \"&::backdrop\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\r\n opacity: 0.75,\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { dialog };\r\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction emphasis(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"em\") {\n console.warn(`\"emphasis\" primitive patch must use em tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontStyle: \"italic\",\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n },\n };\n}\n\nexport { emphasis };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction figure(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"figure\") {\n console.warn(`\"figure\" primitive patch must use figure tag`);\n }\n },\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: themeSpacing(2),\n marginInline: 0,\n marginTop: themeSpacing(3),\n marginBottom: themeSpacing(3),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n \"& img, & svg, & video, & canvas\": {\n display: \"block\",\n maxWidth: \"100%\",\n borderRadius: themeSpacing(2),\n },\n \"& figcaption\": {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n color: (listener) => themeColor(listener, \"shift-8\", color.get(listener)),\n lineHeight: 1.45,\n },\n },\n };\n}\n\nexport { figure };\n","import { type PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, type ThemeColor } from \"@domphy/theme\";\n\nfunction formGroup(props: { color?: ValueOrState<ThemeColor>; layout?: \"horizontal\" | \"vertical\" } = {}): PartialElement {\n const { layout = \"horizontal\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n const isVertical = layout === \"vertical\";\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"fieldset\") {\n console.warn(`\"formGroup\" patch must use fieldset tag`);\n }\n },\n style: {\n margin: 0,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 3),\n border: \"none\",\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n display: \"grid\",\n gridTemplateColumns: isVertical ? `minmax(0, 1fr)` : `max-content minmax(0, 1fr)`,\n columnGap: themeSpacing(4),\n rowGap: themeSpacing(3),\n alignItems: \"start\",\n \"& > legend\": {\n gridColumn: \"1 / -1\",\n margin: 0,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: 600,\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n },\n \"& > label\": {\n gridColumn: \"1\",\n alignSelf: \"start\",\n margin: 0,\n paddingBlock: (listener) => isVertical ? \"0px\" : themeSpacing(themeDensity(listener) * 1),\n },\n \"& > label:has(+ :not(legend, label, p) + p)\": {\n gridRow: isVertical ? \"auto\" : \"span 2\",\n },\n \"& > :not(legend, label, p)\": {\n gridColumn: isVertical ? \"1\" : \"2\",\n minWidth: 0,\n width: \"100%\",\n boxSizing: \"border-box\",\n },\n \"& > p\": {\n gridColumn: isVertical ? \"1\" : \"2\",\n minWidth: 0,\n margin: 0,\n marginBlockStart: `calc(${themeSpacing(2)} * -1)`,\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n },\n };\n}\n\nexport { formGroup };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nconst Headinghift: Record<string, string> = {\n h6: \"decrease-1\",\n h5: \"inherit\",\n h4: \"increase-1\",\n h3: \"increase-2\",\n h2: \"increase-3\",\n h1: \"increase-4\",\n}\n\nfunction heading(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (![\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes(node.tagName)) {\n console.warn(`\"heading\" primitive patch must use heading tags [h1...h6]`);\n }\n },\n style: {\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n marginTop: 0,\n marginBottom: themeSpacing(2),\n fontSize: (listener) => {\n const offset = Headinghift[listener.elementNode.tagName] || \"inherit\";\n return themeSize(listener, offset);\n },\n },\n };\n}\n\nexport { heading };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction horizontalRule(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"hr\") {\n console.warn(`\"horizontalRule\" primitive patch must use hr tag`);\n }\n },\n style: {\n border: 0,\n height: \"1px\",\n marginInline: 0,\n marginTop: themeSpacing(3),\n marginBottom: themeSpacing(3),\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n },\n };\n}\n\nexport { horizontalRule };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction image(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName != \"img\") {\n console.warn(`\"image\" primitive patch must use img tag`);\n }\n },\n style: {\n display: \"block\",\n width: \"100%\",\n maxWidth: \"100%\",\n height: \"auto\",\n objectFit: \"cover\",\n borderRadius: themeSpacing(2),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n },\n };\n}\n\nexport { image };\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeSpacing, themeColor, themeSize, type ThemeColor } from \"@domphy/theme\";\n\nfunction icon(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n return {\n _onInsert: (node) => {\n if (node.tagName != \"span\") {\n console.warn(`\"icon\" primitive patch should use span tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n alignSelf: \"center\",\n justifySelf: \"center\",\n verticalAlign: \"middle\",\n width: themeSpacing(4),\n height: themeSpacing(4),\n flexShrink: \"0\",\n fontSize: (listener) => themeSize(listener),\n backgroundColor: \"transparent\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener))\n },\n };\n}\n\nexport { icon };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, type ThemeColor } from \"@domphy/theme\";\n\nfunction inputColor(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"color\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputColor\" primitive patch must use input tag`);\n }\n (element as any).type = \"color\";\n },\n style: {\n appearance: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\n blockSize: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n inlineSize: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n backgroundColor: \"transparent\",\n \"&::-webkit-color-swatch-wrapper\": {\n margin: 0,\n padding: 0,\n },\n \"&::-webkit-color-swatch\": {\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n },\n \"&:hover:not([disabled]), &:focus-visible\": {\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n },\n };\n}\n\nexport { inputColor };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\ntype InputDateTimeMode = \"date\" | \"time\" | \"week\" | \"month\" | \"datetime-local\";\n\nfunction inputDateTime(\n props: { mode?: InputDateTimeMode; color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}\n): PartialElement {\n const { mode = \"datetime-local\" } = props;\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: mode,\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputDateTime\" primitive patch must use input tag`);\n }\n (element as any).type = mode;\n },\n style: {\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n \"&::-webkit-calendar-picker-indicator\": {\n cursor: \"pointer\",\n opacity: 0.85,\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n \"&:invalid\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n },\n };\n}\n\nexport { inputDateTime };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputFile(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"file\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputFile\" primitive patch must use input tag`);\n }\n (element as any).type = \"file\";\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 1),\n \"&::-webkit-file-upload-button\": {\n marginTop: (listener) => themeSpacing(themeDensity(listener)),\n fontFamily: \"inherit\",\n fontSize: \"inherit\",\n border: \"none\",\n borderRadius: themeSpacing(1),\n height: themeSpacing(6),\n paddingInline: themeSpacing(2),\n cursor: \"pointer\",\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color.get(listener)),\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.8,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\n },\n \"&[disabled]::-webkit-file-upload-button\": {\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", \"neutral\"),\n },\n },\n };\n}\n\nexport { inputFile };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputSearch(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"search\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputSearch\" primitive patch must use input tag`);\n }\n (element as any).type = \"search\";\n },\n style: {\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n minWidth: themeSpacing(32),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\", color.get(listener)),\n },\n \"&::-webkit-search-decoration\": {\n display: \"none\",\n },\n \"&::-webkit-search-cancel-button\": {\n cursor: \"pointer\",\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n },\n },\n };\n}\n\nexport { inputSearch };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputText(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"text\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputText\" primitive patch must use input tag and text type`);\n }\n (element as any).type = \"text\";\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n minWidth: themeSpacing(10),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\"),\n },\n \"&:not(:placeholder-shown)\": {\n color: (listener) => themeColor(listener, \"shift-10\"),\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n \"&:invalid:not(:placeholder-shown)\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n \"&[data-status=error]\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"error\")}`,\n },\n \"&[data-status=warning]\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", \"warning\")}`,\n },\n },\n };\n}\n\nexport { inputText };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction inputRange(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"range\",\n _onInsert: (node) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputRange\" primitive patch must use input tag`);\n }\n },\n style: {\n appearance: \"none\",\n width: \"100%\",\n margin: 0,\n padding: 0,\n height: themeSpacing(4),\n background: \"transparent\",\n cursor: \"pointer\",\n \"&::-webkit-slider-runnable-track\": {\n height: themeSpacing(1.5),\n borderRadius: themeSpacing(999),\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n },\n \"&::-webkit-slider-thumb\": {\n appearance: \"none\",\n width: themeSpacing(4),\n height: themeSpacing(4),\n borderRadius: themeSpacing(999),\n border: \"none\",\n marginTop: `calc((${themeSpacing(1.5)} - ${themeSpacing(4)}) / 2)`,\n backgroundColor: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n },\n \"&:hover:not([disabled])::-webkit-slider-thumb\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-10\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n outlineOffset: themeSpacing(1),\n borderRadius: themeSpacing(2),\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { inputRange };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputNumber(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"number\",\n _onSchedule: (node, element) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputNumber\" primitive patch must use input tag`);\n }\n (element as any).type = \"number\";\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n minWidth: themeSpacing(10),\n paddingInlineStart: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingInlineEnd: (listener) => themeSpacing(themeDensity(listener) * 1.5),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button\": {\n opacity: 1,\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n },\n };\n}\n\nexport { inputNumber };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction keyboard(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"kbd\") {\n console.warn(`\"keyboard\" primitive patch must use kbd tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n paddingBlock: themeSpacing(0.5),\n paddingInline: themeSpacing(1.5),\n borderRadius: themeSpacing(1),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n },\n };\n}\n\nexport { keyboard };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction label(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"label\") {\n console.warn(`\"label\" primitive patch must use label tag`);\n }\n },\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n cursor: \"pointer\",\n \"&:focus-within\": {\n color: (listener) => themeColor(listener, \"shift-10\", accentColor.get(listener)),\n },\n \"&[aria-disabled=true]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n },\n },\n };\n}\n\nexport { label };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeSize,themeSpacing,type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction link(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\r\n const color = toState(props.color ?? \"primary\", \"color\");\r\n const accentColor = toState(props.accentColor ?? \"secondary\", \"accentColor\");\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"a\") {\r\n console.warn(`\"link\" primitive patch must use a tag`)\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener),\r\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\r\n textDecoration: \"none\",\r\n \"&:visited\": {\r\n color: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\r\n },\r\n \"&:hover:not([disabled])\": {\r\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\r\n textDecoration: \"underline\",\r\n },\r\n \"&:focus-visible\": {\r\n borderRadius: themeSpacing(1),\r\n outlineOffset:themeSpacing(1),\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { link };\r\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeSpacing, ThemeColor, themeSize, themeColor } from \"@domphy/theme\";\n\nfunction mark(props: { accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const accentColor = toState(props.accentColor ?? \"highlight\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"mark\") {\n console.warn(`\"mark\" primitive patch must use mark tag`);\n }\n },\n dataTone: \"shift-2\",\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", accentColor.get(listener)),\n height: themeSpacing(6),\n borderRadius: themeSpacing(1),\n paddingInline: themeSpacing(1.5),\n },\n };\n}\n\nexport { mark };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction paragraph(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"p\") {\n console.warn(`\"paragraph\" primitive patch must use p tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) =>themeColor(listener, \"shift-9\", color.get(listener)),\n lineHeight:1.5,\n marginTop: 0,\n marginBottom: 0,\n },\n };\n}\n\nexport { paragraph };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction preformated(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataTone: \"shift-2\",\n _onInsert: (node) => {\n if (node.tagName != \"pre\") {\n console.warn(`\"preformated\" primitive patch must use pre tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n border: \"none\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n },\n };\n}\n\nexport { preformated };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction progress(props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"progress\") {\n console.warn(`\"progress\" primitive patch must use progress tag`);\n }\n },\n style: {\n appearance: \"none\",\n width: \"100%\",\n height: themeSpacing(2),\n border: 0,\n borderRadius: themeSpacing(999),\n overflow: \"hidden\",\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n \"&::-webkit-progress-bar\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color.get(listener)),\n borderRadius: themeSpacing(999),\n },\n \"&::-webkit-progress-value\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n borderRadius: themeSpacing(999),\n transition: \"width 220ms ease\",\n },\n },\n };\n}\n\nexport { progress };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction inputRadio(props: { color?: ValueOrState<ThemeColor>, accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n type: \"radio\",\n _onInsert: (node) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputRadio\" primitive patch must use input tag and radio type`);\n return;\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n appearance: \"none\",\n display: \"inline-flex\",\n position: \"relative\",\n width: themeSpacing(6),\n height: themeSpacing(6),\n justifyContent: \"center\",\n alignItems: \"center\",\n transition: \"background-color 300ms, outline-color 300ms\",\n margin: 0,\n padding: 0,\n \"&::before\": {\n content: `\"\"`,\n display: \"block\",\n borderRadius: \"50%\",\n lineHeight: 1,\n cursor: \"pointer\",\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n width: themeSpacing(4),\n height: themeSpacing(4)\n },\n \"&:hover::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color.get(listener)),\n },\n \"&:checked::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&:checked::after\": {\n content: `\"\"`,\n position: \"absolute\",\n inset: \"30%\",\n borderRadius: \"50%\",\n backgroundColor: (listener) => themeColor(listener, \"shift-8\", accentColor.get(listener)),\n },\n \"&:checked:hover:not([disabled])::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor.get(listener)),\n },\n \"&:focus-visible\": {\n borderRadius: \"50%\",\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&[disabled]\": {\n cursor: \"not-allowed\",\n },\n \"&[disabled]::before, &[disabled]::after\": {\n outline: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", \"neutral\"),\n pointerEvents: \"none\",\n },\n }\n }\n}\n\nexport { inputRadio };\n","import { type PartialElement, type Listener } from \"@domphy/core\";\r\nimport { type ThemeColor, themeColor, themeDensity, themeSize, themeSpacing,themeColorToken } from \"@domphy/theme\";\r\n\r\nfunction select(\r\n props: { color?: ThemeColor; accentColor?: ThemeColor } = {}\r\n): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"select\") {\r\n console.warn(`\"select\" primitive patch must use select tag`);\r\n }\r\n },\r\n style: {\r\n appearance: \"none\",\r\n fontFamily: \"inherit\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n lineHeight: \"inherit\",\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n border: \"none\",\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color)}`,\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingLeft: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n paddingRight: (listener) => themeSpacing(themeDensity(listener) * 5),\r\n backgroundImage:(l: Listener)=>{\r\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 10 6\"><path d=\"M1 1l4 4 4-4\" stroke=\"${themeColorToken(l, \"shift-7\")}\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`\r\n return `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\")`\r\n } ,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundPosition: `right ${themeSpacing(2)} center`,\r\n backgroundSize: `${themeSpacing(2.5)} ${themeSpacing(1.5)}`,\r\n \"&:not([multiple])\": {\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n },\r\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n },\r\n \"& optgroup\": {\r\n color: (listener) => themeColor(listener, \"shift-11\", color),\r\n },\r\n \"& option[disabled]\": {\r\n color: (listener) => themeColor(listener, \"shift-7\", \"neutral\"),\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { select };\r\n","import { type PartialElement, type StyleObject, hashString, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nfunction skeleton(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n const keyframes = {\n \"0%,100%\": { opacity: 1 },\n \"50%\": { opacity: .4 }\n }\n const animationName = hashString(JSON.stringify(keyframes))\n return {\n ariaHidden: \"true\",\n dataTone: \"shift-2\",\n style: {\n fontSize: (listener) => themeSize(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n height: themeSpacing(6),\n display: \"block\",\n borderRadius: themeSpacing(1),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n animation: `${animationName} 1.5s ease-in-out infinite`,\n [`@keyframes ${animationName}`]: keyframes,\n } as StyleObject,\n };\n}\n\nexport { skeleton };\n","import type { PartialElement, StyleObject } from \"@domphy/core\";\nimport { hashString, toState, type ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\nconst keyframes = { to: { transform: \"rotate(360deg)\" } };\nconst animationName = hashString(JSON.stringify(keyframes));\n\nfunction spinner(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n role: \"status\",\n ariaLabel: \"loading\",\n _onInsert: (node) => {\n if (node.tagName != \"span\") {\n console.warn(`\"spinner\" patch must use span tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n display: \"inline-block\",\n margin: 0,\n flexShrink: 0,\n width: themeSpacing(6),\n height: themeSpacing(6),\n borderRadius: \"50%\",\n border: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n borderTopColor: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n boxSizing: \"border-box\",\n padding: 0,\n animation: `${animationName} 0.7s linear infinite`,\n [`@keyframes ${animationName}`]: keyframes,\n } as StyleObject,\n\n };\n}\n\nexport { spinner };\n","import { PartialElement, DomphyElement, State } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\r\nfunction selectList(props: {\r\n multiple?: boolean;\r\n value?: ValueOrState<Array<number | string | null> | number | string | null>;\r\n color?: ThemeColor;\r\n name?: string;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", multiple = false } = props;\r\n const state = toState(props.value ?? (multiple ? [] : null))\r\n\r\n const inputs: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const val = state.get(listener)\r\n const vals = Array.isArray(val) ? val : [val]\r\n return vals.map((v) => ({ input: null, name: props.name, value: v || \"\" }))\r\n },\r\n hidden: true,\r\n }\r\n\r\n let partial: PartialElement = {\r\n dataTone:\"shift-17\",\n _context: {\r\n select: {\r\n value: state,\r\n multiple,\r\n },\r\n },\r\n _onInit: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"selectList\" patch must use a div tag`)\r\n }\r\n node.children.insert(inputs)\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { selectList };\r\n","import { PartialElement, toState, type State } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\n\r\nfunction selectItem(props: {\r\n accentColor?: ThemeColor;\r\n color?: ThemeColor;\r\n value?: number | string;\r\n} = {}): PartialElement {\r\n const {\r\n accentColor = \"primary\",\r\n color = \"neutral\",\r\n value = null\r\n } = props;\r\n\r\n let partial: PartialElement = {\r\n role: \"option\",\r\n _onInit: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"selectItem\" patch must use div tag`);\r\n }\r\n let select = node.getContext(\"select\");\r\n if (select) {\r\n let state = select.value\r\n node.attributes.set(\"ariaSelected\", (listener) => {\r\n let val = state.get(listener)\r\n return select.multiple ? val.includes(value) : val == value\r\n })\r\n node.addEvent(\"click\", () => {\r\n let val = state.get()\r\n if (select.multiple) {\r\n val.includes(value) ? state.set(val.filter((v: number | string) => v !== value)) : state.set(val.concat([value]))\r\n } else {\r\n val != value && state.set(value)\r\n }\r\n })\r\n }\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled]):not([aria-selected=true])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\n },\r\n \"&[aria-selected=true]\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\n color: (listener) => themeColor(listener, \"shift-11\"),\n },\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\r\n },\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { selectItem };\r\n","import { type PartialElement, type DomphyElement, type StyleObject, type ValueOrState, toState, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeDensity, themeSize, type ThemeColor } from \"@domphy/theme\";\r\nimport { type Placement } from \"@floating-ui/dom\";\r\nimport { tag } from \"./tag.js\"\r\nimport { creatFloating } from \"../utils/floating.js\"\r\n\r\nfunction selectBox(props: {\r\n multiple?: boolean;\r\n value?: ValueOrState<Array<number | string | null | undefined> | number | string | null | undefined>;\r\n options?: Array<{ label: string, value: string }>;\r\n placement?: ValueOrState<Placement>;\r\n content: DomphyElement;\r\n color?: ThemeColor;\r\n open?: ValueOrState<boolean>;\r\n}): PartialElement {\r\n const {\r\n options = [],\r\n placement = \"bottom\",\r\n color = \"neutral\",\r\n open = false,\r\n multiple = false\r\n } = props;\r\n\r\n const state = toState(props.value)\r\n let openState = toState(open)\r\n let { show, hide, anchorPartial } = creatFloating({ open: openState, placement: toState(placement), content: props.content })\r\n\r\n const popoverPartial: PartialElement = {\r\n onClick: () => !multiple && hide(),\r\n };\r\n\r\n merge(props.content, popoverPartial);\r\n\r\n const wrap: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const val = state.get(listener)\r\n const vals = Array.isArray(val) ? val : [val]\r\n const opts = options.filter(opt => vals.includes(opt.value))\r\n return opts.map(opt => ({\r\n span: opt.label,\r\n $: [tag({ color, removable: multiple })],\r\n _key: opt.value,\r\n _onRemove: (_node) => {\r\n const cur = state.get()\r\n const curVals = Array.isArray(cur) ? cur : [cur]\r\n const filter = curVals.filter(v => v !== opt.value)\r\n multiple ? state.set(filter as any) : state.set(filter[0] as any)\r\n }\r\n })) as DomphyElement<\"span\">[]\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n gap: themeSpacing(1),\r\n flex: 1,\r\n } as StyleObject\r\n }\r\n\r\n let partial: PartialElement = {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"div\") {\r\n console.warn(`\"selectBox\" patch must use div tag`);\r\n }\r\n },\r\n _onInit: (node) => node.children.insert(wrap),\r\n onClick: () => openState.get() ? hide() : show(),\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n minHeight: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n minWidth: themeSpacing(32),\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-9\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n }\r\n };\r\n\r\n merge(anchorPartial, partial)\r\n return anchorPartial\r\n}\r\n\r\nexport { selectBox };\r\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { ThemeColor, themeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction inputSwitch(props: { accentColor?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n dataTone: \"shift-2\",\n type: \"checkbox\",\n _onSchedule: (node) => {\n if (node.tagName != \"input\") {\n console.warn(`\"inputSwitch\" primitive patch must use input tag`);\n return;\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n appearance: \"none\",\n position: \"relative\",\n display: \"inline-flex\",\n width: themeSpacing(9),\n height: themeSpacing(6),\n cursor: \"pointer\",\n margin: `0`,\n paddingBlock: themeSpacing(1),\n \"&:checked\": {\n \"&::before\": {\n backgroundColor: (listener) => themeColor(listener, \"increase-3\", accentColor.get(listener)),\n },\n \"&::after\": {\n left: `calc(100% - ${themeSpacing(3.5)})`,\n },\n },\n \"&::after\": {\n content: `\"\"`,\n aspectRatio: `1/1`,\n position: \"absolute\",\n width: themeSpacing(3),\n height: themeSpacing(3),\n borderRadius: themeSpacing(999),\n left: themeSpacing(0.5),\n top: \"50%\",\n transform: \"translateY(-50%)\",\n transition: \"left 0.3s\",\n backgroundColor: (listener) => themeColor(listener, \"decrease-3\"),\n },\n \"&::before\": {\n content: '\"\"',\n width: \"100%\",\n borderRadius: themeSpacing(999),\n display: \"inline-block\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: 1,\n backgroundColor: (listener) => themeColor(listener),\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n }\n },\n };\n}\n\nexport { inputSwitch };\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction buttonSwitch(props: {\n checked?: ValueOrState<boolean>;\n accentColor?: ValueOrState<ThemeColor>;\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const { checked = false } = props;\n\n const check = toState(checked);\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n\n return {\n _onSchedule: (node) => {\n if (node.tagName != \"button\") {\n console.warn(`\"buttonSwitch\" primitive patch must use button tag`);\n }\n },\n role: \"switch\",\n ariaChecked: (listener) => check.get(listener),\n dataTone: \"shift-2\",\n onClick: () => check.set(!check.get()),\n style: {\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener),\n border: \"none\",\n outlineWidth: \"1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n minWidth: themeSpacing(12),\n minHeight: themeSpacing(6),\n borderRadius: themeSpacing(999),\n paddingLeft: themeSpacing(7),\n paddingRight: themeSpacing(2),\n transition: \"padding-left 0.3s, padding-right 0.3s\",\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"& > :first-child\": {\n content: '\"\"',\n position: \"absolute\",\n display: \"inline-flex\",\n alignItems: \"center\",\n left: themeSpacing(0.5),\n top: \"50%\",\n transform: \"translateY(-50%)\",\n transition: \"left 0.3s\",\n width: themeSpacing(5),\n height: themeSpacing(5),\n borderRadius: themeSpacing(999),\n color: (listener) => themeColor(listener, \"shift-9\"),\n backgroundColor: (listener) => themeColor(listener, \"decrease-2\", color.get(listener)),\n },\n \"&[aria-checked=true]\": {\n backgroundColor: (listener) => themeColor(listener, \"increase-3\", accentColor.get(listener)),\n outline: \"none\",\n color: (listener) => themeColor(listener, \"decrease-2\"),\n paddingLeft: themeSpacing(2),\n paddingRight: themeSpacing(7),\n },\n \"&[aria-checked=true] > :first-child\": {\n left: `calc(100% - ${themeSpacing(5.5)})`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n },\n },\n };\n}\n\nexport { buttonSwitch };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction small(props: { color?: ValueOrState<ThemeColor>} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n dataSize:\"decrease-1\",\n _onInsert: (node) => {\n if (node.tagName != \"small\") {\n console.warn(`\"small\" primitive patch must use small tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { small };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction strong(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"strong\") {\n console.warn(`\"strong\" primitive patch must use strong tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n fontWeight: 700,\n color: (listener) => themeColor(listener, \"shift-11\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener),\n },\n };\n}\n\nexport { strong };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction subscript(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"sub\") {\n console.warn(`\"subscript\" primitive patch must use sub tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n verticalAlign: \"sub\",\n lineHeight: 0,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { subscript };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction superscript(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"sup\") {\n console.warn(`\"superscript\" primitive patch must use sup tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\n verticalAlign: \"super\",\n lineHeight: 0,\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n },\n };\n}\n\nexport { superscript };\n","import { type PartialElement, type DomphyElement, toState, type ValueOrState } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeDensity, themeSpacing, themeSize } from \"@domphy/theme\";\n\nfunction table(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"table\") {\n console.warn(`\"table\" primitive patch must use table tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n width: \"100%\",\n borderCollapse: \"collapse\",\n \"& caption\": {\n captionSide: \"bottom\"\n },\n \"& th, & thead td\": {\n textAlign: \"left\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (listener) => themeColor(listener, \"shift-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\n },\n \"& td\": {\n textAlign: \"left\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n boxShadow: (listener) => `inset 0 1px 0 ${themeColor(listener, \"shift-3\", color.get(listener))}`,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n },\n \"& tfoot th, & tfoot td\": {\n textAlign: \"left\",\n fontWeight: 500,\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\n color: (l) => themeColor(l, \"shift-10\", color.get(l)),\n backgroundColor: (l) => themeColor(l, \"inherit\"),\n boxShadow: (l) => `inset 0 -1px 0 ${themeColor(l, \"shift-4\", color.get(l))}`\n },\n \"& tr\": {\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\n },\n\n \"& tbody tr:hover\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\") + \"!important\",\n }\n },\n };\n}\n\nexport { table };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeDensity, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction textarea(\n props: { color?: ValueOrState<ThemeColor>; accentColor?: ValueOrState<ThemeColor>; autoResize?: boolean } = {}\n): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n const accentColor = toState(props.accentColor ?? \"primary\", \"accentColor\");\n const { autoResize = false } = props;\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"textarea\") {\n console.warn(`\"textarea\" primitive patch must use textarea tag`);\n }\n },\n _onMount: (node) => {\n if (autoResize) {\n const el = node.domElement as HTMLTextAreaElement;\n el.style.overflow = \"hidden\";\n const resize = () => {\n el.style.height = \"auto\";\n el.style.height = el.scrollHeight + \"px\";\n };\n el.addEventListener(\"input\", resize);\n resize();\n }\n },\n style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n resize: \"vertical\",\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1.5),\n border:\"none\",\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1.5),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color.get(listener))}`,\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color.get(listener)),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-7\"),\n },\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor.get(listener))}`,\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor.get(listener))}`,\n },\n \"&:invalid\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"error\")}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-8\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n }\n },\n };\n}\n\nexport { textarea };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction unorderedList(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"ul\") {\n console.warn(`\"unorderedList\" primitive patch must use ul tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n marginTop: 0,\n marginBottom: 0,\n paddingLeft: themeSpacing(3),\n listStyleType: \"disc\",\n listStylePosition: \"outside\",\n },\n };\n}\n\nexport { unorderedList };\n","import { PartialElement, toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction orderedList(props: { color?: ValueOrState<ThemeColor> } = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"ol\") {\n console.warn(`\"orderedList\" primitive patch must use ol tag`);\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n marginTop: 0,\n marginBottom: 0,\n paddingLeft: themeSpacing(3),\n listStyleType: \"decimal\",\n listStylePosition: \"outside\",\n },\n };\n}\n\nexport { orderedList };\n","import { type PartialElement, type DomphyElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\r\nfunction getPages(current: number, total: number): (number | \"...\")[] {\r\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\r\n const pages: (number | \"...\")[] = [1];\r\n if (current > 3) pages.push(\"...\");\r\n const start = Math.max(2, current - 1);\r\n const end = Math.min(total - 1, current + 1);\r\n for (let i = start; i <= end; i++) pages.push(i);\r\n if (current < total - 2) pages.push(\"...\");\r\n pages.push(total);\r\n return pages;\r\n}\r\n\r\nfunction pagination(props: {\r\n value?: ValueOrState<number>;\r\n total: number;\r\n color?: ThemeColor;\r\n accentColor?: ThemeColor;\r\n}): PartialElement {\r\n const { total, color = \"neutral\", accentColor = \"primary\" } = props;\r\n const state = toState(props.value ?? 1);\r\n\r\n const btnBase = {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n minWidth: (listener: any) => themeSpacing(6 + themeDensity(listener) * 2),\n height: (listener: any) => themeSpacing(6 + themeDensity(listener) * 2),\n paddingInline: (listener: any) => themeSpacing(themeDensity(listener) * 2),\n borderRadius: (listener: any) => themeSpacing(themeDensity(listener) * 1),\n border: \"none\",\r\n cursor: \"pointer\",\r\n fontSize: (listener: any) => themeSize(listener, \"inherit\"),\r\n backgroundColor: \"transparent\",\r\n color: (listener: any) => themeColor(listener, \"shift-9\", color),\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener: any) => themeColor(listener, \"shift-2\", color),\n },\r\n \"&[disabled]\": {\r\n opacity: 0.4,\r\n cursor: \"not-allowed\",\r\n },\r\n };\r\n\r\n const activeStyle = {\n ...btnBase,\n backgroundColor: (listener: any) => themeColor(listener, \"shift-6\", accentColor),\n color: (listener: any) => themeColor(listener, \"shift-11\", accentColor),\n fontWeight: \"600\",\n cursor: \"default\",\n \"&:hover:not([disabled])\": {\n backgroundColor: (listener: any) => themeColor(listener, \"shift-6\", accentColor),\n },\n };\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"div\") console.warn('\"pagination\" patch must use div tag');\r\n },\r\n _onInit: (node) => {\r\n const content: DomphyElement<\"div\"> = {\r\n div: (listener) => {\r\n const page = state.get(listener);\r\n const items: DomphyElement[] = [];\r\n\r\n // Prev button\r\n items.push({\r\n button: \"‹\",\r\n type: \"button\",\r\n ariaLabel: \"Previous page\",\r\n disabled: page <= 1,\r\n onClick: () => page > 1 && state.set(page - 1),\r\n style: btnBase,\r\n });\r\n\r\n // Page buttons\r\n for (const p of getPages(page, total)) {\r\n if (p === \"...\") {\r\n items.push({ span: \"…\", style: { display: \"inline-flex\", alignItems: \"center\", paddingInline: (listener: any) => themeSpacing(themeDensity(listener) * 2), color: (listener: any) => themeColor(listener, \"shift-7\", color) } });\n } else {\r\n const isActive = p === page;\r\n items.push({\r\n button: String(p),\r\n type: \"button\",\r\n ariaLabel: `Page ${p}`,\r\n ariaCurrent: isActive ? \"page\" : undefined,\r\n disabled: isActive,\r\n onClick: () => state.set(p),\r\n style: isActive ? activeStyle : btnBase,\r\n });\r\n }\r\n }\r\n\r\n // Next button\r\n items.push({\r\n button: \"›\",\r\n type: \"button\",\r\n ariaLabel: \"Next page\",\r\n disabled: page >= total,\r\n onClick: () => page < total && state.set(page + 1),\r\n style: btnBase,\r\n });\r\n\r\n return items;\r\n },\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: themeSpacing(1),\r\n },\r\n };\r\n node.children.insert(content);\r\n },\r\n style: {\r\n display: \"inline-flex\",\r\n },\r\n };\r\n}\r\n\r\nexport { pagination };\r\n","import type { PartialElement } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\nimport { themeColor, type ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction divider(props: {\n color?: ValueOrState<ThemeColor>;\n} = {}): PartialElement {\n const color = toState(props.color ?? \"neutral\", \"color\");\n\n return {\n role: \"separator\",\n _onInsert: (node) => {\n if (node.tagName !== \"div\") {\n console.warn(`\"divider\" patch should be used with <div>`)\n }\n },\n style: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"baseline\",\n gap: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener),\n color: (listener) => themeColor(listener, \"shift-9\", color.get(listener)),\n minHeight: \"1lh\",\n \"&::before\": {\n content: `\"\"`,\n flex:1,\n borderColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n borderWidth: \"1px\",\n borderBottomStyle: \"solid\",\n },\n \"&::after\": {\n content: `\"\"`,\n flex:1,\n borderColor: (listener) => themeColor(listener, \"shift-4\", color.get(listener)),\n borderWidth: \"1px\",\n borderBottomStyle: \"solid\",\n },\n },\n };\n}\n\nexport { divider };\n","import { type PartialElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\ntype Placement = \"left\" | \"right\" | \"top\" | \"bottom\";\r\n\r\nconst translateOut: Record<Placement, string> = {\r\n left: \"translateX(-100%)\",\r\n right: \"translateX(100%)\",\r\n top: \"translateY(-100%)\",\r\n bottom: \"translateY(100%)\",\r\n};\r\n\r\nconst marginMap: Record<Placement, string> = {\r\n left: \"0 auto 0 0\",\r\n right: \"0 0 0 auto\",\r\n top: \"0 0 auto 0\",\r\n bottom: \"auto 0 0 0\",\r\n};\r\n\r\nconst isVertical = (p: Placement) => p === \"left\" || p === \"right\";\r\n\r\nfunction drawer(props: {\r\n color?: ThemeColor;\r\n open?: ValueOrState<boolean>;\r\n placement?: Placement;\r\n size?: string;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", open = false, placement = \"right\", size } = props;\r\n const state = toState(open);\r\n const defaultSize = isVertical(placement) ? themeSpacing(80) : themeSpacing(64);\r\n const drawerSize = size ?? defaultSize;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"dialog\") {\r\n console.warn(`\"drawer\" patch must use dialog tag`);\r\n }\r\n },\r\n onClick: (e: MouseEvent, node) => {\r\n if (e.target !== node.domElement) return;\r\n state.set(false);\r\n },\r\n onTransitionEnd: (_e, node) => {\r\n const dlg = node.domElement as HTMLDialogElement;\r\n if (!state.get()) {\r\n dlg.close();\r\n document.body.style.overflow = \"\";\r\n }\r\n },\r\n _onMount: (node) => {\r\n const dlg = node.domElement as HTMLDialogElement;\r\n const update = (val: boolean) => {\r\n if (val) {\r\n dlg.showModal();\r\n document.body.style.overflow = \"hidden\";\r\n requestAnimationFrame(() => { dlg.style.transform = \"translate(0, 0)\"; });\r\n } else {\r\n dlg.style.transform = translateOut[placement];\r\n }\r\n };\r\n update(state.get());\r\n const release = state.addListener(update);\r\n // Release the `open` State listener and restore page scroll on removal\r\n // (an open drawer removed mid-transition would otherwise leak the\r\n // listener and leave document.body locked at overflow:hidden).\r\n node.addHook(\"Remove\", () => {\r\n release();\r\n document.body.style.overflow = \"\";\r\n });\r\n },\r\n style: {\r\n transform: translateOut[placement],\r\n transition: \"transform 0.25s ease\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-10\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n border: \"none\",\r\n padding: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n margin: marginMap[placement],\r\n width: isVertical(placement) ? drawerSize : \"100dvw\",\r\n height: isVertical(placement) ? \"100dvh\" : drawerSize,\r\n maxWidth: \"100dvw\",\r\n maxHeight: \"100dvh\",\r\n boxShadow: (listener) => `0 ${themeSpacing(4)} ${themeSpacing(12)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\r\n \"&::backdrop\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\r\n opacity: 0.75,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { drawer };\r\n","import { PartialElement, State, DomphyElement, toState, ValueOrState, merge } from \"@domphy/core\";\r\nimport { type Placement } from \"@floating-ui/dom\";\r\nimport { creatFloating } from \"../utils/floating.js\";\r\n\r\nfunction popover(props: {\r\n openOn: \"click\" | \"hover\";\r\n open?: ValueOrState<boolean>;\r\n placement?: ValueOrState<Placement>;\r\n content: DomphyElement;\r\n}): PartialElement {\r\n const {\r\n open = false,\r\n placement = \"bottom\",\r\n openOn = \"click\"\r\n } = props;\r\n\r\n\r\n let popoverId: string | null = null\r\n const openState = toState(open);\r\n const placeState = toState(placement);\r\n\r\n let { show, hide, anchorPartial } = creatFloating({ open: openState, placement: placeState, content: props.content })\r\n\r\n const popoverPartial: PartialElement = {\r\n role: \"dialog\",\r\n dataTone: \"shift-11\",\r\n onMouseEnter: () => openOn === \"hover\" && show(),\r\n onMouseLeave: () => openOn === \"hover\" && hide(),\r\n _onInsert: (node) => {\r\n let id = node.attributes.get(\"id\")\r\n popoverId = id || node.nodeId\r\n !id && node.attributes.set(\"id\", popoverId)\r\n },\r\n };\r\n\r\n props.content.$ ||= []\r\n props.content.$.push(popoverPartial)\r\n \r\n const triggerPartial: PartialElement = {\r\n ariaHaspopup: \"dialog\",\r\n ariaExpanded: (listener) => openState.get(listener),\r\n onMouseEnter: () => openOn === \"hover\" && show(),\r\n onMouseLeave: () => openOn === \"hover\" && hide(),\r\n onClick: () => {\r\n if (openOn === \"click\") {\r\n if (openState.get()) { hide() } else { show() }\r\n }\r\n },\r\n onFocus: () => show(),\r\n onBlur: (e, node) => {\r\n const related = (e as FocusEvent).relatedTarget as Node | null\r\n const root = node.getRoot().domElement as Element\r\n const floatingEl = popoverId ? root.querySelector(`#${CSS.escape(popoverId)}`) : null\r\n if (related && floatingEl?.contains(related)) return\r\n hide()\r\n },\r\n _onMount: (node) => popoverId && node.attributes.set(\"ariaControls\", popoverId)\r\n };\r\n merge(anchorPartial, triggerPartial);\r\n\r\n return anchorPartial;\r\n}\r\n\r\nexport { popover };\r\n","import type { DomphyElement, PartialElement, ElementNode } from \"@domphy/core\";\r\nimport { toState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\r\ntype ToastPosition = \"top-left\" | \"top-center\" | \"top-right\" | \"bottom-left\" | \"bottom-center\" | \"bottom-right\";\r\n\r\nfunction toast(props: {\r\n position?: ToastPosition;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { position = \"top-center\", color = \"neutral\" } = props;\r\n const state = toState(false);\r\n\r\n const isTop = position.startsWith(\"top\");\r\n const isCenter = position.endsWith(\"center\");\r\n const isRight = position.endsWith(\"right\");\r\n\r\n const overlayEle: DomphyElement<\"div\"> = {\r\n div: [],\r\n id: `domphy-toast-${position}`,\r\n style: {\r\n position: \"fixed\",\r\n display: \"flex\",\r\n flexDirection: isTop ? \"column\" : \"column-reverse\",\r\n alignItems: isCenter ? \"center\" : isRight ? \"end\" : \"start\",\r\n inset: 0,\r\n gap: themeSpacing(4),\r\n zIndex: 30,\r\n padding: themeSpacing(6),\r\n pointerEvents: \"none\",\r\n },\r\n }\r\n\r\n return {\n _portal: (rootNode) => {\n let overlay = rootNode.domElement!.querySelector(`#domphy-toast-${position}`);\r\n if (!overlay) {\r\n const overlayNode = rootNode.children!.insert(overlayEle) as ElementNode;\r\n overlay = overlayNode.domElement!;\r\n }\r\n return overlay;\r\n },\n role: \"status\",\n ariaAtomic: \"true\",\n // Toast is rendered as an overlay surface, so it uses the inverted branch.\n dataTone: \"shift-17\",\n style: {\n minWidth: themeSpacing(32),\n pointerEvents: \"auto\",\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-9\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n boxShadow: (listener) => `0 ${themeSpacing(2)} ${themeSpacing(9)} ${themeColor(listener, \"shift-4\", \"neutral\")}`,\n opacity: (listener) => Number(state.get(listener)),\n transform: (listener) => state.get(listener) ? \"translateY(0)\" : isTop ? \"translateY(-100%)\" : \"translateY(100%)\",\n transition: \"opacity 300ms ease, transform 300ms ease\",\n },\n _onMount: () => requestAnimationFrame(() => state.set(true)),\r\n _onBeforeRemove: (node, done) => {\r\n const onEnd = (e: Event) => {\r\n if ((e as TransitionEvent).propertyName === \"transform\") {\r\n node.domElement!.removeEventListener(\"transitionend\", onEnd)\r\n done()\r\n }\r\n }\r\n node.domElement!.addEventListener(\"transitionend\", onEnd)\r\n state.set(false)\r\n }\r\n };\r\n}\r\n\r\nexport { toast };\r\n","import { PartialElement, type DomphyElement, ValueOrState, merge, toState } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\r\nimport { type Placement } from \"@floating-ui/dom\";\r\nimport { creatFloating } from \"../utils/floating.js\";\r\nimport { popoverArrow } from \"./popoverArrow.js\";\r\n\r\n\r\nfunction tooltip(props: {\r\n open?: ValueOrState<boolean>;\r\n placement?: ValueOrState<Placement>;\r\n content?: ValueOrState<string>;\r\n} = {}): PartialElement {\r\n const {\r\n open = false,\r\n placement = \"top\",\r\n content = \"Tooltip Content\"\r\n } = props;\r\n\r\n const placeState = toState(placement)\r\n const contentState = toState(content)\r\n\r\n let tooltipId: string | null = null\r\n\r\n let contentElement: DomphyElement<\"span\"> = { span: (listener) => contentState.get(listener) }\r\n\r\n let { show, hide, anchorPartial } = creatFloating({ open, placement: placeState, content: contentElement })\r\n\r\n const tooltipPartial: PartialElement = {\r\n role: \"tooltip\",\r\n dataSize: \"decrease-1\",\r\n dataTone: \"shift-17\",\r\n _onInsert: (node) => {\r\n let id = node.attributes.get(\"id\")\r\n tooltipId = id || node.nodeId\r\n !id && node.attributes.set(\"id\", tooltipId)\r\n },\r\n style: {\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n borderRadius: (listener) => themeSpacing(themeDensity(listener) * 1),\r\n color: (listener) => themeColor(listener, \"shift-9\"),\r\n backgroundColor: (listener) => themeColor(listener),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n },\r\n $: [popoverArrow({ placement: placeState, bordered: false })]\r\n };\r\n contentElement.$ ||= []\r\n contentElement.$.push(tooltipPartial)\r\n\r\n const triggerPartial: PartialElement = {\r\n onMouseEnter: () => show(),\r\n onMouseLeave: () => hide(),\r\n onFocus: () => show(),\r\n onBlur: () => hide(),\r\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\r\n _onMount: (node) => tooltipId && node.attributes.set(\"ariaDescribedby\", tooltipId)\r\n };\r\n\r\n merge(anchorPartial, triggerPartial)\r\n\r\n return anchorPartial;\r\n}\r\n\r\nexport { tooltip };\r\n","import { ElementNode, PartialElement } from \"@domphy/core\";\r\n\r\ntype RectMap = Map<string, DOMRect>;\r\n\r\nfunction getItemId(node: ElementNode, index: number): string {\r\n if (node.key !== undefined && node.key !== null) {\r\n return String(node.key);\r\n }\r\n return `index-${index}`;\r\n}\r\n\r\nfunction transitionGroup(props: { duration?: number; delay?: number } = {}): PartialElement {\r\n const {\r\n duration = 300,\r\n delay = 0,\r\n } = props;\r\n\r\n let previousRects: RectMap = new Map();\r\n\r\n return {\r\n _onBeforeUpdate: (node) => {\r\n previousRects = new Map();\r\n node.children.items.forEach((item, index) => {\n if (!(item instanceof ElementNode)) return;\r\n const dom = item.domElement as HTMLElement | undefined;\r\n if (!dom) return;\r\n previousRects.set(getItemId(item, index), dom.getBoundingClientRect());\r\n });\r\n },\r\n _onUpdate: (node) => {\r\n node.children.items.forEach((item, index) => {\n if (!(item instanceof ElementNode)) return;\r\n const dom = item.domElement as HTMLElement | undefined;\r\n if (!dom) return;\r\n\r\n const key = getItemId(item, index);\r\n const prev = previousRects.get(key);\r\n if (!prev) return;\r\n\r\n const next = dom.getBoundingClientRect();\r\n const deltaX = prev.left - next.left;\r\n const deltaY = prev.top - next.top;\r\n if (Math.abs(deltaX) < 0.5 && Math.abs(deltaY) < 0.5) return;\r\n\r\n const previousTransition = dom.style.transition;\r\n const previousTransform = dom.style.transform;\r\n\r\n dom.style.transition = \"none\";\r\n dom.style.transform = `translate(${deltaX}px, ${deltaY}px)`;\r\n dom.getBoundingClientRect();\r\n\r\n requestAnimationFrame(() => {\r\n dom.style.transition = `transform ${duration}ms ease ${delay}ms`;\r\n dom.style.transform = \"translate(0px, 0px)\";\r\n });\r\n\r\n const cleanup = () => {\r\n dom.style.transition = previousTransition;\r\n dom.style.transform = previousTransform;\r\n dom.removeEventListener(\"transitionend\", onEnd);\r\n };\r\n\r\n const onEnd = (event: Event) => {\r\n const transitionEvent = event as TransitionEvent;\r\n if (transitionEvent.propertyName === \"transform\") {\r\n cleanup();\r\n }\r\n };\r\n\r\n dom.addEventListener(\"transitionend\", onEnd);\r\n setTimeout(cleanup, duration + delay + 34);\r\n });\r\n previousRects.clear();\r\n },\r\n };\r\n}\r\n\r\n\r\nexport { transitionGroup };\r\n","import { PartialElement, merge } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\n\r\nfunction tabs(props: {\r\n activeKey?: ValueOrState<number | string>;\r\n} = {}): PartialElement {\r\n\r\n let partial: PartialElement = {\r\n role: \"tablist\",\r\n _onSchedule: (node, element) => {\r\n let partial = {\r\n _context: {\r\n tabs: {\r\n activeKey: toState(props.activeKey || 0),\r\n }\r\n },\r\n }\r\n merge(element, partial)\r\n },\r\n }\r\n return partial;\r\n}\r\n\r\nexport { tabs };\r\n","import { PartialElement, ElementNode } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\r\n\r\nfunction tab(props: {\r\n accentColor?: ThemeColor;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const {\r\n accentColor = \"primary\",\r\n color = \"neutral\",\r\n } = props;\r\n let partial: PartialElement = {\r\n role: \"tab\",\r\n _onInsert: (node) => {\r\n\r\n if (node.tagName != \"button\") {\r\n console.warn(`\"tab\" patch must use button tag`);\r\n }\r\n\r\n let context = node.getContext(\"tabs\")\r\n if (!context) {\r\n console.warn(`\"tab\" patch must be used inside a \"tabs\"`);\r\n return;\r\n }\r\n let children = (node.parent?.children.items ?? []) as ElementNode[]\r\n children = children.filter(n => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"tab\")\r\n let key = node.key !== null && node.key !== undefined ? node.key : children.findIndex(n => n == node)\r\n\r\n let part: PartialElement = {\r\n id: \"tab\" + node.parent!.nodeId + key,\r\n \"ariaControls\": \"tabpanel\" + node.parent!.nodeId + key,\r\n \"ariaSelected\": (listener) => context.activeKey.get(listener) == key,\r\n onClick: () => context.activeKey.set(key),\r\n onKeyDown: (e: Event) => {\r\n const k = (e as KeyboardEvent).key;\r\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(k)) return;\r\n e.preventDefault();\r\n const tabs = (node.parent?.children.items ?? []).filter(\r\n n => n.type === \"ElementNode\" && (n as ElementNode).attributes.get(\"role\") === \"tab\"\r\n ) as ElementNode[];\r\n const idx = tabs.findIndex(n => n === node);\r\n let next = idx;\r\n if (k === \"ArrowRight\") next = (idx + 1) % tabs.length;\r\n else if (k === \"ArrowLeft\") next = (idx - 1 + tabs.length) % tabs.length;\r\n else if (k === \"Home\") next = 0;\r\n else if (k === \"End\") next = tabs.length - 1;\r\n const target = tabs[next];\r\n context.activeKey.set(target.key ?? next);\r\n (target.domElement as HTMLElement)?.focus();\r\n },\r\n }\r\n node.merge(part)\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 4),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-1\", color)}`,\r\n \"&:hover:not([disabled])\": {\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-2\", color)}`,\r\n },\r\n \"&[aria-selected=true]:not([disabled])\": {\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n },\r\n \"&:focus-visible\": {\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n\r\n },\r\n },\r\n }\r\n return partial\r\n}\r\n\r\n\r\nexport { tab };\r\n","import { PartialElement, ElementNode, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeDensity, themeColor } from \"@domphy/theme\";\r\n\r\nfunction tabPanel(): PartialElement {\r\n let partial: PartialElement = {\r\n role: \"tabpanel\",\r\n style: {\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n },\r\n _onInsert: (node) => {\r\n let context = node.getContext(\"tabs\")\r\n if (!context) {\r\n console.warn(`\"tabPanel\" patch must be used inside a \"tabs\"`);\r\n return;\r\n }\r\n let children = (node.parent?.children.items ?? []) as ElementNode[]\r\n children = children.filter(n => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"tabpanel\")\r\n let key = node.key !== null && node.key !== undefined ? node.key : children.findIndex(n => n == node)\r\n let part: PartialElement = {\r\n id: \"tabpanel\" + node.parent!.nodeId + key,\r\n \"ariaLabelledby\": \"tab\" + node.parent!.nodeId + key,\r\n \"hidden\": (listener) => context.activeKey.get(listener) != key,\r\n }\r\n node.merge(part)\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\n\r\n\r\nexport { tabPanel };\r\n","import { PartialElement, merge } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeDensity, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction menu(props: {\r\n activeKey?: ValueOrState<number | string>;\r\n selectable?: boolean;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", selectable = true } = props;\r\n\r\n let partial: PartialElement = {\r\n role: \"menu\",\r\n dataTone:\"shift-17\",\r\n _onSchedule: (node, element) => {\r\n let partial = {\r\n _context: {\r\n menu: {\r\n activeKey: toState(props.activeKey ?? null),\r\n selectable,\r\n },\r\n },\r\n };\r\n merge(element, partial);\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n paddingBlock: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { menu };\r\n","import { PartialElement, ElementNode } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeDensity, themeSize } from \"@domphy/theme\";\r\n\r\nfunction menuItem(props: {\r\n accentColor?: ThemeColor;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const {\r\n accentColor = \"primary\",\r\n color = \"neutral\",\r\n } = props;\r\n\r\n let partial: PartialElement = {\r\n role: \"menuitem\",\r\n _onInsert: (node) => {\r\n if (node.tagName != \"button\") {\r\n console.warn(`\"menuItem\" patch must use button tag`);\r\n }\r\n\r\n let context = node.getContext(\"menu\");\r\n if (!context) {\r\n console.warn(`\"menuItem\" patch must be used inside a \"menu\"`);\r\n return;\r\n }\r\n let children = (node.parent?.children.items ?? []) as ElementNode[];\r\n children = children.filter(n => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"menuitem\");\r\n // Strict key check: an explicit _key of 0 or \"\" must not fall back to index.\r\n let key = node.key !== null && node.key !== undefined ? node.key : children.findIndex(n => n == node);\r\n if (context.selectable) {\r\n node.attributes.set(\"ariaCurrent\", (listener) => context.activeKey.get(listener) == key || undefined)\r\n node.addEvent(\"click\", () => context.activeKey.set(key))\r\n }\r\n },\r\n onKeyDown:(e:KeyboardEvent,node)=>{\r\n const k = (e as KeyboardEvent).key;\r\n if (k === \"Enter\" || k === \" \") {\r\n e.preventDefault();\r\n (node.domElement as HTMLElement)?.click();\r\n return;\r\n }\r\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(k)) return;\r\n e.preventDefault();\r\n const items = (node.parent?.children.items ?? []).filter(\r\n n => n.type === \"ElementNode\" && (n as ElementNode).attributes.get(\"role\") === \"menuitem\"\r\n ) as ElementNode[];\r\n const idx = items.findIndex(n => n === node);\r\n let next = idx;\r\n if (k === \"ArrowDown\") next = (idx + 1) % items.length;\r\n else if (k === \"ArrowUp\") next = (idx - 1 + items.length) % items.length;\r\n else if (k === \"Home\") next = 0;\r\n else if (k === \"End\") next = items.length - 1;\r\n (items[next].domElement as HTMLElement)?.focus();\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: (listener) => themeSpacing(2),\r\n width: \"100%\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: (listener) => themeSpacing(6 + themeDensity(listener) * 2),\r\n paddingInline: (listener) => themeSpacing(themeDensity(listener) * 3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-9\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n \"&:hover:not([disabled]):not([aria-current=true])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\"),\r\n },\r\n // Menu uses the current/indicator band instead of the selected fill band.\r\n \"&[aria-current=true]\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", accentColor),\r\n color: (listener) => themeColor(listener, \"shift-10\"),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n outlineOffset: `-${themeSpacing(0.5)}`,\r\n },\r\n },\r\n };\r\n return partial;\r\n}\r\n\r\nexport { menuItem };\r\n","import { PartialElement, merge } from \"@domphy/core\";\r\nimport { FormState } from \"../classes/FormState.js\";\r\n\r\nfunction form(state: FormState): PartialElement {\r\n return {\r\n _onSchedule: (node, element) => {\r\n merge(element, { _context: { form: state } });\r\n },\r\n };\r\n}\r\n\r\nexport { form };\r\n","import { PartialElement, Listener } from \"@domphy/core\";\r\nimport { FieldValidator } from \"../classes/FieldState.js\";\r\nimport { FormState } from \"../classes/FormState.js\";\r\n\r\nfunction field(path: string, validator?: FieldValidator): PartialElement {\r\n return {\r\n _onInsert: (node) => {\r\n const state = node.getContext(\"form\") as FormState;\r\n if (!state) {\r\n console.warn(`\"field\" patch must be used inside a \"form\"`);\r\n return;\r\n }\r\n const f = state.setField(path, undefined, validator);\r\n const tag = node.tagName;\r\n const type = node.attributes.get(\"type\") as string | undefined;\r\n\r\n if (![\"input\", \"select\", \"textarea\"].includes(tag)) {\r\n console.warn(`\"field\" patch must use input, select, or textarea tag`);\r\n }\r\n\r\n const part: PartialElement<\"input\"> = {\r\n onBlur: () => f.setTouched(),\r\n ariaInvalid: (listener: Listener) => !!f.message(\"error\", listener) || undefined,\r\n dataStatus: (listener: Listener) => f.status(listener),\r\n };\r\n\r\n if (tag === \"input\" && type === \"checkbox\") {\r\n part.checked = f.value() as boolean;\r\n part.onChange = (e) => f.setValue((e.target as HTMLInputElement).checked);\r\n } else if (tag === \"input\" && type === \"radio\") {\r\n part.onChange = (e) => f.setValue((e.target as HTMLInputElement).value);\r\n } else if (tag === \"select\") {\r\n part.value = f.value() as string;\r\n part.onChange = (e) => f.setValue((e.target as HTMLSelectElement).value);\r\n } else if (tag === \"textarea\") {\r\n part.value = f.value() as string;\r\n part.onInput = (e) => f.setValue((e.target as HTMLTextAreaElement).value);\r\n } else {\r\n part.value = f.value() as string;\r\n part.onInput = (e) => f.setValue((e.target as HTMLInputElement).value);\r\n }\r\n\r\n node.merge(part);\r\n\r\n // NOTE: value/checked are intentionally set as static defaults (one-way: DOM → state).\r\n // Do NOT change them to reactive functions like `(listener) => f.value(listener)`.\r\n // Two-way reactive binding causes an infinite loop:\r\n // setValue → notify listener → update DOM value → trigger onInput → setValue → ...\r\n // Note: Domphy's `silent` flag in setValue is NOT a solution here —\r\n // it is only used for tree synchronization when external libs (e.g. SortableJS)\r\n // manipulate the DOM directly. It does not apply to form field binding.\r\n },\r\n };\r\n}\r\n\r\nexport { field };\r\n","import { Notifier, Handler } from \"@domphy/core\";\r\n\r\nexport type FieldStatus = \"error\" | \"warning\" | \"success\" | undefined;\r\n\r\nexport type FieldMessages = {\r\n error?: string;\r\n warning?: string;\r\n success?: string;\r\n};\r\n\r\nexport type FieldValidator = (value: unknown) => FieldMessages | null | Promise<FieldMessages | null>;\r\n\r\nfunction isPromiseLike(\r\n value: FieldMessages | null | Promise<FieldMessages | null>\r\n): value is Promise<FieldMessages | null> {\r\n return !!value && typeof (value as Promise<FieldMessages | null>).then === \"function\";\r\n}\r\n\r\nexport class FieldState {\r\n _notifier = new Notifier();\r\n _value: unknown;\r\n _initValue: unknown;\r\n _messages: FieldMessages = {};\r\n _touched = false;\r\n _validator: FieldValidator | undefined;\r\n _pending = false;\r\n _validationToken = 0;\r\n\r\n constructor(initValue: unknown, validator?: FieldValidator) {\r\n this._value = initValue;\r\n this._initValue = initValue;\r\n this._validator = validator;\r\n if (validator) this.validate();\r\n }\r\n\r\n value(listener?: Handler): unknown {\r\n if (listener) this._notifier.addListener(\"value\", listener);\r\n return this._value;\r\n }\r\n\r\n setValue(val: unknown): void {\r\n this._value = val;\r\n this._notifier.notify(\"value\", val);\r\n this._notifier.notify(\"dirty\", val !== this._initValue);\r\n this.validate();\r\n }\r\n\r\n dirty(listener?: Handler): boolean {\r\n if (listener) this._notifier.addListener(\"dirty\", listener);\r\n return this._value !== this._initValue;\r\n }\r\n\r\n touched(listener?: Handler): boolean {\r\n if (listener) this._notifier.addListener(\"touched\", listener);\r\n return this._touched;\r\n }\r\n\r\n setTouched(): void {\r\n if (!this._touched) {\r\n this._touched = true;\r\n this._notifier.notify(\"touched\", true);\r\n }\r\n }\r\n\r\n configure(initValue?: unknown, validator?: FieldValidator): void {\r\n let shouldValidate = false;\r\n\r\n if (\r\n initValue !== undefined &&\r\n this._value === undefined &&\r\n this._initValue === undefined\r\n ) {\r\n this._value = initValue;\r\n this._initValue = initValue;\r\n this._notifier.notify(\"value\", initValue);\r\n this._notifier.notify(\"dirty\", false);\r\n shouldValidate = true;\r\n }\r\n\r\n if (validator !== undefined && validator !== this._validator) {\r\n this._validator = validator;\r\n shouldValidate = true;\r\n }\r\n\r\n if (shouldValidate) this.validate();\r\n }\r\n\r\n message(type: keyof FieldMessages, listener?: Handler): string | undefined {\r\n if (listener) this._notifier.addListener(type, listener);\r\n return this._messages[type];\r\n }\r\n\r\n status(listener?: Handler): FieldStatus {\r\n if (listener) this._notifier.addListener(\"status\", listener);\r\n return resolveStatus(this._messages);\r\n }\r\n\r\n setMessages(next: FieldMessages): void {\r\n const prev = this._messages;\r\n this._messages = next;\r\n for (const type of [\"error\", \"warning\", \"success\"] as const) {\r\n if (prev[type] !== next[type]) this._notifier.notify(type, next[type]);\r\n }\r\n if (resolveStatus(prev) !== resolveStatus(next)) {\r\n this._notifier.notify(\"status\", resolveStatus(next));\r\n }\r\n }\r\n\r\n reset(): void {\r\n this._value = this._initValue;\r\n this._touched = false;\r\n this._notifier.notify(\"value\", this._value);\r\n this._notifier.notify(\"dirty\", false);\r\n this._notifier.notify(\"touched\", false);\r\n this.setMessages({});\r\n this.validate();\r\n }\r\n\r\n validate(): void {\r\n const token = ++this._validationToken;\r\n\r\n if (!this._validator) {\r\n this._pending = false;\r\n this.setMessages({});\r\n return;\r\n }\r\n\r\n try {\r\n const result = this._validator(this._value);\r\n\r\n if (isPromiseLike(result)) {\r\n this._pending = true;\r\n Promise.resolve(result)\r\n .then((msg) => {\r\n if (token !== this._validationToken) return;\r\n this._pending = false;\r\n this.setMessages(msg ?? {});\r\n })\r\n .catch((error) => {\r\n if (token !== this._validationToken) return;\r\n this._pending = false;\r\n console.error(error);\r\n });\r\n } else {\r\n this._pending = false;\r\n this.setMessages(result ?? {});\r\n }\r\n } catch (error) {\r\n if (token === this._validationToken) {\r\n this._pending = false;\r\n }\r\n console.error(error);\r\n }\r\n }\r\n\r\n _dispose(): void {\r\n this._validationToken += 1;\r\n this._pending = false;\r\n this._notifier._dispose();\r\n }\r\n}\r\n\r\nfunction resolveStatus(m: FieldMessages): FieldStatus {\r\n if (m.error) return \"error\";\r\n if (m.warning) return \"warning\";\r\n if (m.success) return \"success\";\r\n return undefined;\r\n}\r\n","import { FieldState, FieldValidator } from \"./FieldState.js\";\r\n\r\nexport class FormState {\r\n fields = new Map<string, FieldState>();\r\n\r\n setField(path: string, initValue?: unknown, validator?: FieldValidator): FieldState {\r\n let field = this.fields.get(path);\r\n\r\n if (!field) {\r\n field = new FieldState(initValue, validator);\r\n this.fields.set(path, field);\r\n } else {\r\n field.configure(initValue, validator);\r\n }\r\n\r\n return field;\r\n }\r\n\r\n getField(path: string): FieldState {\r\n return this.setField(path);\r\n }\r\n\r\n removeField(path: string): void {\r\n this.fields.get(path)?._dispose();\r\n this.fields.delete(path);\r\n }\r\n\r\n get valid(): boolean {\r\n for (const f of this.fields.values()) {\r\n if (f._pending || f._messages.error) return false;\r\n }\r\n return true;\r\n }\r\n\r\n reset(): void {\r\n for (const f of this.fields.values()) f.reset();\r\n }\r\n\r\n snapshot(): Record<string, unknown> {\r\n const result: Record<string, unknown> = {};\r\n for (const [path, f] of this.fields) setByPath(result, path, f._value);\r\n return result;\r\n }\r\n\r\n _dispose(): void {\r\n for (const f of this.fields.values()) f._dispose();\r\n this.fields.clear();\r\n }\r\n}\r\n\r\nfunction setByPath(obj: Record<string, unknown>, path: string, value: unknown): void {\r\n const segments = path.split(\".\");\r\n let cur: any = obj;\r\n for (let i = 0; i < segments.length - 1; i++) {\r\n const key = segments[i];\r\n if (cur[key] == null) cur[key] = isNaN(Number(segments[i + 1])) ? {} : [];\r\n cur = cur[key];\r\n }\r\n cur[segments[segments.length - 1]] = value;\r\n}\r\n"],"mappings":"qqCAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,UAAAE,GAAA,UAAAA,GAAA,OAAAC,ioBCAaC,GAAkB,CAC7B,UACA,aACA,gBACA,iBACA,SACA,WACA,YACA,mBACA,WACA,UACA,UACA,gBACA,gBACA,oBACA,SACA,cACA,QACA,aACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,UACA,UACA,UACA,aACA,UACA,YACA,YACA,aACA,UACA,SACA,eACA,mBACA,cACA,cACA,eACA,eACA,cACA,aACA,cACA,YACA,UACA,UACA,SACA,YACA,aACA,eACA,UACA,WACA,WACA,cACA,4BACA,WACA,YACA,WACA,eACA,YACA,WACA,YACA,eACA,WACA,iBACA,YACA,UACA,eACA,cACA,aACA,gBACA,gBACA,gBACA,cACA,kBACA,iBACA,iBACA,gBACA,eACA,sBACA,uBACA,qBACA,sBACA,mBACA,kBACA,oBACA,mBACA,iBACA,uBACA,qBACA,oBACA,YACA,YACF,EAEaC,GAAeD,GAAgB,OAAO,CAACE,EAAKC,IAAO,CAC9D,IAAMC,EAAMD,EAAG,MAAM,CAAC,EAAE,YAAY,EACpC,OAAAD,EAAIE,CAAG,EAAID,EACJD,CACT,EAAG,CAAC,CAAiF,ECvGxEG,GAAW,CACtB,IACA,OACA,UACA,UACA,QACA,QACA,IACA,OACA,aACA,KACA,SACA,SACA,UACA,OACA,OACA,MACA,WACA,OACA,WACA,KACA,MACA,UACA,MACA,SACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,OACA,QACA,MACA,WACA,SACA,KACA,WACA,SACA,SACA,IACA,QACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,OACA,QACA,SACA,OACA,SACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,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X,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,KAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,MAAS,CACP,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,OAAU,CACR,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,UAAa,CACX,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,QAAW,CACT,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,CACF,EACA,UAAW,CACT,UAAW,EACX,QAAS,EACT,MAAO,EACP,OAAQ,EACR,UAAW,EACX,QAAS,EACT,KAAM,EACN,QAAS,EACT,QAAS,CACX,EACA,UAAW,CAAC,UAAW,WAAY,OAAQ,UAAW,YAAa,YAAa,YAAa,WAAW,EACxG,UAAW,CAAC,IAAM,EAAG,IAAK,EAAG,GAAG,EAChC,SAAU,EACV,OAAQ,CAAC,CACX,EAEOC,GAAQD,GCxNTE,GAAYC,GAAY,K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","names":["global_exports","__export","dist_exports","src_exports","EventProperties","eventNameMap","acc","ev","key","HtmlTags","_chain","_microtask","cb","SELF_NOTIFY_CAP","Notifier","event","listener","release","listeners","args","top","inflight","idx","n","e","names","pending","chain","State","initialValue","name","newValue","merge","source","target","comma","space","adjacent","deepClone","value","old","val1","val2","addEvent","addHook","hashString","str","hash","i","toState","val","r","fn","partial","hookName","handler","hookProperty","current","attributes","eventName","eventProperty","node","seen","proto","clone","v","k","validate","element","asPartial","keys","isHTML","escapeHTML","getTagName","camelToKebab","selectorSplitter","selectors","splitted","parens","angulars","soFar","len","char","normalizeSelectorKey","selectorText","text","collectCSSRules","rules","map","rule","ensureDomStyle","styleParent","_a","domStyle","mergePartial","part","p","VoidTags","SvgTags","BooleanAttributes","PrefixCSS","CamelAttributes","ElementAttribute","parent","domElement","mutateAttrs","_b","prev","callback","AttributeList","attr","force","className","add","classes","newClass","list","updated","cls","oldClass","TextNode","textContent","newNode","tpl","domText","ElementList","ElementNode","index","dom","el","currentRef","aNode","bNode","a","b","aNext","bNext","inputs","updateDom","silent","_c","_d","oldItems","keyed","item","oldSet","claimed","input","isObj","tag","reused","cur","isPortal","at","extras","length","finalIndex","domNode","ref","root","child","done","doneCalled","onceDone","snapshot","aIndex","bIndex","itemA","itemB","fromIndex","toIndex","html","StyleProperty","parentRule","domRule","style","prefix","StyleRule","_StyleRule","StyleList","prop","styleStr","decl","nested","sheet","domSheet","css","err","obj","parentSelector","basic","getSelector","selector","splitKeys","currentSelector","newSelector","domRuleMap","domRuleList","wrongCount","fixOddEven","_ElementNode","domphyElement","_parent","tempPath","children","originalKey","rawElement","content","next","autoClass","reserved","hookKeys","keep","userClass","composed","childNode","called","once","RecordState","record","__spreadValues","l","dist_exports","__export","a","B","_","N","Y","j","G","h","Z","H","x","d","light","light_default","clone","v","escapeKey","k","themes","createDark","colorSteps","input","firstColor","validateTheme","partial","key","custom","deepMerge","target","source","_a","buildThemeCSS","name","styles","toneSteps","value","colorName","i","text","prop","getTheme","setTheme","dark","themeTokens","tokens","colorTones","themeVars","theme","themeCSS","themeApply","el","themeSpacing","n","themeName","object","node","ElementSizes","offsetSize","origin","size","resultSize","offset","contextSize","themeSize","index","ElementDensities","offsetDensity","density","resultDensity","contextDensity","themeDensity","TONE_STEPS","ElementTones","adjustTone","tone","level","newIndex","shiftTone","midpoint","offsetTone","originTone","contextTone","biasContext","context","direction","bias","themeColor","color","resultTone","colors","themeColorToken","src_exports","__export","FieldState","FormState","abbreviation","alert","avatar","badge","blockquote","breadcrumb","breadcrumbEllipsis","button","buttonSwitch","card","code","combobox","command","commandItem","commandSearch","descriptionList","details","dialog","divider","drawer","emphasis","field","figure","form","formGroup","heading","horizontalRule","icon","image","inputCheckbox","inputColor","inputDateTime","inputFile","inputNumber","inputOTP","inputRadio","inputRange","inputSearch","inputSwitch","inputText","keyboard","label","link","mark","menu","menuItem","orderedList","pagination","paragraph","popover","popoverArrow","preformated","progress","select","selectBox","selectItem","selectList","skeleton","small","spinner","splitter","splitterHandle","splitterPanel","strong","subscript","superscript","tab","tabPanel","table","tabs","tag","textarea","toast","toggle","toggleGroup","tooltip","transitionGroup","unorderedList","abbreviation","props","_a","_b","color","_e","accentColor","node","listener","Z","Y","H","card","props","_a","color","_e","listener","H","G","Y","splitter","props","direction","defaultSize","min","max","node","element","S","_e","splitterPanel","ctx","el","prop","release","size","splitterHandle","handle","isHorizontal","onMousedown","e","container","onMousemove","rect","raw","onMouseup","listener","Y","H","command","node","element","S","_e","commandSearch","props","color","accentColor","ctx","input","onInput","listener","Z","H","G","Y","commandItem","_a","_b","el","text","release","q","toggle","props","_a","_b","color","_e","accentColor","node","ctx","items","n","key","listener","val","arr","Z","H","Y","toggleGroup","props","_a","multiple","color","_e","H","listener","Z","Y","inputOTP","H","node","container","getInputs","onInput","e","inputs","target","idx","onKeydown","onPaste","_a","_b","_c","text","startIdx","char","i","lastFilled","alert","props","_a","color","_e","H","listener","G","Y","Z","avatar","props","_a","color","_e","H","listener","Z","Y","badge","props","_a","label","state","_e","color","l","H","Z","Y","breadcrumb","props","_a","separator","color","_e","node","listener","Z","H","Y","breadcrumbEllipsis","props","_a","color","_e","node","listener","Z","H","Y","xSvg","tag","props","_a","removable","color","_e","node","removeBtn","e","H","listener","Y","Z","min","max","round","floor","createCoords","v","oppositeSideMap","clamp","start","value","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","firstChar","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","direction","list","expandPaddingObject","padding","__spreadValues","getPaddingObject","rectToClientRect","rect","x","y","width","height","computeCoordsFromPlacement","_ref","placement","rtl","reference","floating","sideAxis","getSideAxis","alignmentAxis","getAlignmentAxis","alignLength","getAxisLength","side","getSide","isVertical","commonX","commonY","commonAlign","coords","getAlignment","detectOverflow","state","options","__async","_await$platform$isEle","x","y","platform","rects","elements","strategy","boundary","rootBoundary","elementContext","altBoundary","padding","evaluate","paddingObject","getPaddingObject","element","clippingClientRect","rectToClientRect","rect","offsetParent","offsetScale","elementClientRect","MAX_RESET_COUNT","computePosition","config","middleware","platformWithDetectOverflow","__spreadProps","__spreadValues","statefulPlacement","resetCount","middlewareData","i","currentMiddleware","name","fn","nextX","nextY","data","reset","flip","options","state","__async","_middlewareData$arrow","_middlewareData$flip","placement","middlewareData","rects","initialPlacement","platform","elements","_a","evaluate","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","detectOverflowOptions","__objRest","side","getSide","initialSideAxis","getSideAxis","isBasePlacement","rtl","fallbackPlacements","getOppositePlacement","getExpandedPlacements","hasFallbackAxisSideDirection","getOppositeAxisPlacements","placements","overflow","overflows","overflowsData","sides","getAlignmentSides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","d","resetPlacement","a","b","_overflowsData$filter2","currentSideAxis","acc","originSides","convertValueToCoords","state","options","__async","placement","platform","elements","rtl","side","getSide","alignment","getAlignment","isVertical","getSideAxis","mainAxisMulti","crossAxisMulti","rawValue","evaluate","mainAxis","crossAxis","alignmentAxis","offset","_middlewareData$offse","_middlewareData$arrow","x","y","middlewareData","diffCoords","__spreadProps","__spreadValues","shift","_a","checkMainAxis","checkCrossAxis","limiter","_ref","detectOverflowOptions","__objRest","coords","overflow","getOppositeAxis","mainAxisCoord","crossAxisCoord","minSide","maxSide","min","max","clamp","limitedCoords","hasWindow","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","_ref","value","isElement","isHTMLElement","isShadowRoot","isOverflowElement","element","overflow","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","_e","willChangeRe","containRe","isNotNone","isWebKitValue","isContainingBlock","elementOrCss","css","isWebKit","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","result","getNearestOverflowAncestor","parentNode","getOverflowAncestors","list","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","element","css","getComputedStyle","width","height","hasOffset","isHTMLElement","offsetWidth","offsetHeight","shouldFallback","round","unwrapElement","isElement","getScale","domElement","createCoords","rect","$","x","y","noOffsets","getVisualOffsets","win","getWindow","isWebKit","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","offsetParent","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","getFrameElement","iframeScale","iframeRect","left","top","rectToClientRect","getWindowScrollBarX","leftScroll","getNodeScroll","getDocumentElement","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","_ref","elements","strategy","topLayer","isTopLayer","offsets","isOffsetParentAnElement","getNodeName","isOverflowElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","max","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","doc","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","parentNode","getParentNode","isLastTraversableNode","getClippingElementAncestors","cache","cachedResult","result","getOverflowAncestors","el","currentContainingBlockComputedStyle","elementIsFixed","currentNode","computedStyle","currentNodeIsContaining","isContainingBlock","ancestor","getClippingRect","boundary","rootBoundary","clippingAncestors","firstRect","right","bottom","i","min","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","isTableElement","getContainingBlock","getElementRects","data","__async","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","platform","rectsAreEqual","a","b","observeMove","onMove","io","timeoutId","root","cleanup","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","floor","insetRight","insetBottom","insetLeft","options","isFirstUpdate","handleObserve","entries","ratio","__spreadProps","__spreadValues","_e","autoUpdate","reference","floating","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset","shift","flip","computePosition","reference","floating","options","cache","mergedOptions","__spreadValues","platform","platformWithCache","__spreadProps","creatFloating","props","open","placement","timer","cleanup","reference","floating","floatingNode","rootNode","mounted","openState","_e","ensureMounted","instantShow","autoUpdate","computePosition","offset","flip","shift","y","resolved","instantHide","show","hide","floatingPartial","listener","node","rNode","overlay","overlayEle","S","e","handleOutside","event","target","combobox","props","options","placement","color","open","multiple","state","_e","openState","show","hide","anchorPartial","creatFloating","popoverPartial","S","inputStyle","H","listener","Z","Y","inputElement","wrap","val","vals","items","opt","tag","_node","cur","filter","v","partial","node","G","popoverArrow","props","placement","color","sideOffset","H","bordered","place","_e","flipMap","getFlipped","listener","_a","start","pos","end","Z","Y","x","y","blockquote","props","_a","color","_e","node","listener","Z","Y","H","G","button","props","_a","color","_e","node","listener","Z","H","G","Y","inputCheckbox","props","_a","_b","color","_e","accentColor","node","listener","Z","H","Y","code","props","_a","color","_e","node","listener","Z","Y","H","details","props","_a","_b","duration","color","_e","accentColor","node","listener","Z","Y","H","G","descriptionList","props","_a","color","_e","node","H","listener","Z","Y","dialog","props","color","open","state","_e","node","e","r","dlg","update","val","focusable","release","listener","Z","Y","H","G","emphasis","props","_a","color","_e","node","listener","Z","Y","figure","props","_a","color","_e","node","H","listener","Y","Z","formGroup","props","_a","layout","color","_e","isVertical","node","listener","H","G","Z","Y","Headinghift","heading","props","_a","color","_e","node","listener","Y","H","offset","Z","horizontalRule","props","_a","color","_e","node","H","listener","Y","image","props","_a","color","_e","node","H","listener","Y","icon","props","_a","color","_e","node","H","listener","Z","Y","inputColor","props","_a","_b","color","_e","accentColor","node","element","listener","Z","H","G","Y","inputDateTime","props","_a","_b","mode","color","_e","accentColor","node","element","listener","Z","Y","H","G","inputFile","props","_a","_b","color","_e","accentColor","node","element","listener","Z","Y","H","G","inputSearch","props","_a","_b","color","_e","accentColor","node","element","listener","Z","Y","H","G","inputText","props","_a","_b","color","_e","accentColor","node","element","H","listener","G","Z","Y","inputRange","props","_a","_b","color","_e","accentColor","node","H","listener","Y","inputNumber","props","_a","_b","color","_e","accentColor","node","element","H","listener","G","Z","Y","keyboard","props","_a","color","_e","node","listener","Z","Y","H","label","props","_a","_b","color","_e","accentColor","node","H","listener","Z","Y","link","props","_a","_b","color","_e","accentColor","node","listener","Z","Y","H","mark","props","_a","accentColor","_e","node","listener","Z","Y","H","paragraph","props","_a","color","_e","node","listener","Z","Y","preformated","props","_a","color","_e","node","listener","Z","Y","H","G","progress","props","_a","_b","color","_e","accentColor","node","H","listener","Y","inputRadio","props","_a","_b","color","_e","accentColor","node","listener","Z","H","Y","select","props","color","accentColor","node","listener","Z","Y","H","G","l","svg","j","skeleton","props","_a","color","_e","keyframes","animationName","J","listener","Z","Y","H","keyframes","animationName","J","spinner","props","_a","color","_e","node","listener","Z","Y","H","selectList","props","_a","color","multiple","state","_e","inputs","listener","val","v","node","H","G","Z","Y","selectItem","props","accentColor","color","value","node","select","state","listener","val","v","Z","H","G","Y","selectBox","props","options","placement","color","open","multiple","state","_e","openState","show","hide","anchorPartial","creatFloating","popoverPartial","S","wrap","listener","val","vals","opt","tag","_node","cur","filter","v","H","partial","node","G","Y","Z","inputSwitch","props","_a","accentColor","_e","node","listener","Z","H","Y","buttonSwitch","props","_a","_b","checked","check","_e","color","accentColor","node","listener","Z","Y","H","small","props","_a","color","_e","node","listener","Z","Y","strong","props","_a","color","_e","node","listener","Z","Y","subscript","props","_a","color","_e","node","listener","Z","Y","superscript","props","_a","color","_e","node","listener","Z","Y","table","props","_a","color","_e","node","listener","Z","Y","H","G","l","textarea","props","_a","_b","color","_e","accentColor","autoResize","node","el","resize","listener","H","G","Z","Y","unorderedList","props","_a","color","_e","node","listener","Z","Y","H","orderedList","props","_a","color","_e","node","listener","Z","Y","H","getPages","current","total","_","i","pages","start","end","pagination","props","_a","color","accentColor","state","_e","btnBase","listener","H","G","Z","Y","activeStyle","__spreadProps","__spreadValues","node","content","page","items","isActive","divider","props","_a","color","_e","node","H","listener","Z","Y","translateOut","marginMap","isVertical","p","drawer","props","color","open","placement","size","state","_e","defaultSize","H","drawerSize","node","e","dlg","update","val","release","listener","Z","Y","G","popover","props","_a","open","placement","openOn","popoverId","openState","_e","placeState","show","hide","anchorPartial","creatFloating","popoverPartial","node","id","S","listener","e","related","root","floatingEl","toast","props","position","color","state","_e","isTop","isCenter","isRight","overlayEle","H","rootNode","overlay","listener","G","Z","Y","node","done","onEnd","e","tooltip","props","open","placement","content","placeState","_e","contentState","tooltipId","contentElement","listener","show","hide","anchorPartial","creatFloating","tooltipPartial","node","id","H","G","Y","Z","popoverArrow","S","e","getItemId","node","index","transitionGroup","props","duration","delay","previousRects","item","m","dom","key","prev","next","deltaX","deltaY","previousTransition","previousTransform","cleanup","onEnd","event","tabs","props","node","element","partial","_e","S","tab","props","accentColor","color","node","_a","_b","context","children","n","key","part","listener","e","_c","_d","k","tabs","idx","next","target","Z","H","G","Y","tabPanel","listener","H","G","node","_a","_b","context","children","n","key","part","menu","props","color","selectable","node","element","_a","partial","_e","S","listener","H","G","Z","Y","menuItem","props","accentColor","color","node","_a","_b","context","children","n","key","listener","e","_c","_d","k","items","idx","next","H","Z","G","Y","form","state","node","element","S","field","path","validator","node","state","f","tag","type","part","listener","e","isPromiseLike","value","FieldState","initValue","validator","k","listener","val","shouldValidate","type","resolveStatus","next","prev","token","result","msg","error","m","FormState","path","initValue","validator","field","FieldState","_a","f","result","setByPath","obj","value","segments","cur","i","key"]}