@domphy/ui 0.1.37 → 0.1.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core-theme-ui.global.js +2 -2
- package/dist/core-theme-ui.global.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -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\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 queueMicrotask(() => 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, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/\"/g, \""\")\r\n .replace(/'/g, \"'\");\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\" ? \"​\" : 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\nconst themes: Record<string, ThemeInput> = {\r\n light: JSON.parse(JSON.stringify(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] = structuredClone(light);\r\n deepMerge(themes[name], input);\r\n}\r\n\r\nfunction createDark(source: ThemeInput): ThemeInput {\r\n let dark = structuredClone(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\";\r\nimport { computePosition, autoUpdate, offset, flip, shift, type Placement } from \"@floating-ui/dom\";\r\n\r\nfunction creatFloating(props: {\r\n open?: ValueOrState<boolean>;\r\n placement: State<Placement>;\r\n content: DomphyElement;\r\n}) {\r\n const {\r\n open = false,\r\n placement,\r\n } = props;\r\n\r\n let timer: ReturnType<typeof setTimeout> | null = null;\r\n let cleanup: (() => void) | null = null;\r\n let reference: HTMLElement | null = null\r\n let floating: HTMLElement | null = null\r\n const openState = toState(open);\r\n\r\n const instantShow = () => {\r\n if (reference && floating) {\r\n cleanup && cleanup();\r\n cleanup = autoUpdate(reference, floating, () => {\r\n computePosition(reference as HTMLElement, floating as HTMLElement, {\r\n placement: placement.get() as Placement,\r\n middleware: [offset(12), flip(), shift()],\r\n strategy: \"fixed\"\r\n }).then(({ x, y, placement: resolved }) => {\r\n Object.assign((floating as HTMLElement).style, { left: `${x}px`, top: `${y}px` });\r\n placement.set(resolved)\r\n });\r\n });\r\n openState.set(true)\r\n }\r\n };\r\n const instantHide = () => { cleanup && cleanup(); cleanup = null; openState.set(false) }\r\n const show = () => { timer && clearTimeout(timer); timer = setTimeout(instantShow, 100) }\r\n const hide = () => { timer && clearTimeout(timer); timer = setTimeout(instantHide, 100) }\r\n\r\n const floatingPartial: PartialElement = {\r\n style: {\r\n position: \"fixed\",\r\n pointerEvents: \"auto\",\r\n visibility: (listener) => openState.get(listener) ? \"visible\" : \"hidden\",\r\n\r\n },\r\n _onMount: (node) => floating = node.domElement as HTMLElement,\r\n\r\n _portal: (rootNode) => {\r\n let overlay = rootNode.domElement!.querySelector(`#domphy-floating`);\r\n if (!overlay) {\r\n const overlayEle: DomphyElement<\"div\"> = {\r\n div: [],\r\n id: `domphy-floating`,\r\n style: { position: \"fixed\", inset: 0, zIndex: 20, pointerEvents: \"none\" },\r\n };\r\n const overlayNode = rootNode.children!.insert(overlayEle) as ElementNode;\r\n overlay = overlayNode.domElement!;\r\n }\r\n return overlay;\r\n },\r\n };\r\n\r\n merge(props.content, floatingPartial);\r\n\r\n const anchorPartial: PartialElement = {\r\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\r\n _onMount: (node) => {\r\n const root = node.getRoot()\r\n reference = node.domElement as HTMLElement\r\n\r\n const floatingNode = root.children!.insert(props.content) as ElementNode\r\n \r\n const handleOutside = (event: MouseEvent) => {\r\n if (!openState.get() || !reference || !floating) return;\r\n\r\n const target = event.target as Node;\r\n if (!reference.contains(target) && !floating.contains(target)) {\r\n hide()\r\n }\r\n }\r\n node.getRoot().domElement!.addEventListener(\"click\", handleOutside)\r\n \r\n node.addHook(\"BeforeRemove\", () => {\r\n if (timer) clearTimeout(timer);\r\n floatingNode && floatingNode.remove();\r\n node.getRoot().domElement!.removeEventListener(\"click\", handleOutside)\r\n });\r\n }\r\n };\r\n\r\n return { show, hide, anchorPartial };\r\n}\r\n\r\nexport { creatFloating };\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 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 \"&::file-selector-button\": {\n marginBlock: \"auto\",\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-10\", accentColor.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", accentColor.get(listener)),\n },\n \"&::-webkit-file-upload-button\": {\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-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", 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.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 \"&[disabled]::file-selector-button, &[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 \"&::-moz-range-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 \"&::-moz-progress-bar\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n borderRadius: themeSpacing(999),\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-17\",\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 merge(props.content, 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 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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KAAK,UAAU,eAAevC,EAAeuC,CAAE,CACnD,CAEA,MAAyBvC,EAAc,CACnC,KAAK,IAAIA,EAAK,KAAK,cAAcA,CAAG,CAAC,CACzC,CAEA,UAAiB,CACb,KAAK,UAAU,SAAS,CAC5B,CACJ,ECrCA,IAAA4L,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,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,CA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","names":["global_exports","__export","dist_exports","src_exports","EventProperties","eventNameMap","acc","ev","key","HtmlTags","_chain","Notifier","event","listener","release","listeners","args","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","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","l","V","W","g","U","X","F","d","_","P","S","h","light","light_default","themes","createDark","colorSteps","input","firstColor","validateTheme","partial","key","v","custom","deepMerge","target","source","_a","buildThemeCSS","name","styles","toneSteps","value","colorName","i","k","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","fe","accentColor","node","listener","_","U","P","card","props","_a","color","fe","listener","P","F","U","splitter","props","direction","defaultSize","min","max","node","element","b","fe","splitterPanel","ctx","el","prop","release","size","splitterHandle","handle","isHorizontal","onMousedown","e","container","onMousemove","rect","raw","onMouseup","listener","U","P","command","node","element","b","fe","commandSearch","props","color","accentColor","ctx","input","onInput","listener","_","P","F","U","commandItem","_a","_b","el","text","release","q","toggle","props","_a","_b","color","fe","accentColor","node","ctx","items","n","key","listener","val","arr","v","_","P","U","toggleGroup","props","_a","multiple","color","fe","P","listener","_","U","inputOTP","P","node","container","getInputs","onInput","e","inputs","target","idx","onKeydown","onPaste","_a","_b","_c","text","startIdx","char","i","lastFilled","alert","props","_a","color","fe","P","listener","F","U","_","avatar","props","_a","color","fe","P","listener","_","U","badge","props","_a","label","state","fe","color","l","P","_","U","breadcrumb","props","_a","separator","color","fe","node","listener","_","P","U","breadcrumbEllipsis","props","_a","color","fe","node","listener","_","P","U","xSvg","tag","props","_a","removable","color","fe","node","removeBtn","e","P","listener","U","_","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","openState","fe","instantShow","autoUpdate","computePosition","offset","flip","shift","x","y","resolved","instantHide","show","hide","floatingPartial","listener","node","rootNode","overlay","overlayEle","b","e","root","floatingNode","handleOutside","event","target","combobox","props","options","placement","color","open","multiple","state","fe","openState","show","hide","anchorPartial","creatFloating","popoverPartial","b","inputStyle","P","listener","_","U","inputElement","wrap","val","vals","items","opt","tag","_node","cur","filter","v","partial","node","F","popoverArrow","props","placement","color","sideOffset","P","bordered","place","fe","flipMap","getFlipped","listener","_a","start","pos","end","_","U","x","blockquote","props","_a","color","fe","node","listener","_","U","P","F","button","props","_a","color","fe","node","listener","_","P","F","U","inputCheckbox","props","_a","_b","color","fe","accentColor","node","listener","_","P","U","code","props","_a","color","fe","node","listener","_","U","P","details","props","_a","_b","duration","color","fe","accentColor","node","listener","_","U","P","F","descriptionList","props","_a","color","fe","node","P","listener","_","U","dialog","props","color","open","state","fe","node","e","r","_e","dlg","update","val","focusable","listener","_","U","P","F","emphasis","props","_a","color","fe","node","listener","_","U","figure","props","_a","color","fe","node","P","listener","U","_","formGroup","props","_a","layout","color","fe","isVertical","node","listener","P","F","_","U","Headinghift","heading","props","_a","color","fe","node","listener","U","P","offset","_","horizontalRule","props","_a","color","fe","node","P","listener","U","image","props","_a","color","fe","node","P","listener","U","icon","props","_a","color","fe","node","P","listener","_","U","inputColor","props","_a","_b","color","fe","accentColor","node","element","listener","_","P","F","U","inputDateTime","props","_a","_b","mode","color","fe","accentColor","node","element","listener","_","U","P","F","inputFile","props","_a","_b","color","fe","accentColor","node","element","listener","_","U","P","F","inputSearch","props","_a","_b","color","fe","accentColor","node","element","listener","_","U","P","F","inputText","props","_a","_b","color","fe","accentColor","node","element","P","listener","F","_","U","inputRange","props","_a","_b","color","fe","accentColor","node","P","listener","U","inputNumber","props","_a","_b","color","fe","accentColor","node","element","P","listener","F","_","U","keyboard","props","_a","color","fe","node","listener","_","U","P","label","props","_a","_b","color","fe","accentColor","node","P","listener","_","U","link","props","_a","_b","color","fe","accentColor","node","listener","_","U","P","mark","props","_a","accentColor","fe","node","listener","_","U","P","paragraph","props","_a","color","fe","node","listener","_","U","preformated","props","_a","color","fe","node","listener","_","U","P","F","progress","props","_a","_b","color","fe","accentColor","node","P","listener","U","inputRadio","props","_a","_b","color","fe","accentColor","node","listener","_","P","U","select","props","color","accentColor","node","listener","_","U","P","F","l","svg","X","skeleton","props","_a","color","fe","keyframes","animationName","F","listener","_","U","P","keyframes","animationName","F","spinner","props","_a","color","fe","node","listener","_","U","P","selectList","props","_a","color","multiple","state","fe","inputs","listener","val","v","node","P","F","_","U","selectItem","props","accentColor","color","value","node","select","state","listener","val","v","_","P","F","U","selectBox","props","options","placement","color","open","multiple","state","fe","openState","show","hide","anchorPartial","creatFloating","popoverPartial","b","wrap","listener","val","vals","opt","tag","_node","cur","filter","v","P","partial","node","F","U","_","inputSwitch","props","_a","accentColor","fe","node","listener","_","P","U","buttonSwitch","props","_a","_b","checked","check","fe","color","accentColor","node","listener","_","U","P","small","props","_a","color","fe","node","listener","_","U","strong","props","_a","color","fe","node","listener","_","U","subscript","props","_a","color","fe","node","listener","_","U","superscript","props","_a","color","fe","node","listener","_","U","table","props","_a","color","fe","node","listener","_","U","P","F","l","textarea","props","_a","_b","color","fe","accentColor","autoResize","node","el","resize","listener","P","F","_","U","unorderedList","props","_a","color","fe","node","listener","_","U","P","orderedList","props","_a","color","fe","node","listener","_","U","P","getPages","current","total","_","i","pages","start","end","pagination","props","_a","color","accentColor","state","fe","btnBase","listener","P","F","U","activeStyle","__spreadProps","__spreadValues","node","content","page","items","p","isActive","divider","props","_a","color","fe","node","P","listener","_","U","translateOut","marginMap","isVertical","p","drawer","props","color","open","placement","size","state","fe","defaultSize","P","drawerSize","node","e","_e","dlg","update","val","listener","_","U","F","popover","props","open","placement","openOn","popoverId","openState","fe","placeState","show","hide","anchorPartial","creatFloating","popoverPartial","node","id","b","listener","e","related","root","floatingEl","toast","props","position","color","state","fe","isTop","isCenter","isRight","overlayEle","P","rootNode","overlay","listener","F","_","U","node","done","onEnd","e","tooltip","props","open","placement","content","placeState","fe","contentState","tooltipId","contentElement","listener","show","hide","anchorPartial","creatFloating","tooltipPartial","node","id","P","F","U","_","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","fe","b","tab","props","accentColor","color","node","_a","context","children","n","key","part","listener","e","_b","_c","_d","k","tabs","idx","next","target","_","P","F","U","tabPanel","listener","P","F","node","_a","context","children","n","key","part","menu","props","color","selectable","node","element","_a","partial","fe","b","listener","P","F","_","U","menuItem","props","accentColor","color","node","_a","context","children","n","key","listener","e","_b","_c","_d","k","items","idx","next","_","P","F","U","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\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 queueMicrotask(() => 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, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/\"/g, \""\")\r\n .replace(/'/g, \"'\");\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\" ? \"​\" : 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\nconst themes: Record<string, ThemeInput> = {\r\n light: JSON.parse(JSON.stringify(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] = structuredClone(light);\r\n deepMerge(themes[name], input);\r\n}\r\n\r\nfunction createDark(source: ThemeInput): ThemeInput {\r\n let dark = structuredClone(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\";\r\nimport { computePosition, autoUpdate, offset, flip, shift, type Placement } from \"@floating-ui/dom\";\r\n\r\nfunction creatFloating(props: {\r\n open?: ValueOrState<boolean>;\r\n placement: State<Placement>;\r\n content: DomphyElement;\r\n}) {\r\n const {\r\n open = false,\r\n placement,\r\n } = props;\r\n\r\n let timer: ReturnType<typeof setTimeout> | null = null;\r\n let cleanup: (() => void) | null = null;\r\n let reference: HTMLElement | null = null\r\n let floating: HTMLElement | null = null\r\n const openState = toState(open);\r\n\r\n const instantShow = () => {\r\n if (reference && floating) {\r\n cleanup && cleanup();\r\n cleanup = autoUpdate(reference, floating, () => {\r\n computePosition(reference as HTMLElement, floating as HTMLElement, {\r\n placement: placement.get() as Placement,\r\n middleware: [offset(12), flip(), shift()],\r\n strategy: \"fixed\"\r\n }).then(({ x, y, placement: resolved }) => {\r\n Object.assign((floating as HTMLElement).style, { left: `${x}px`, top: `${y}px` });\r\n placement.set(resolved)\r\n });\r\n });\r\n openState.set(true)\r\n }\r\n };\r\n const instantHide = () => { cleanup && cleanup(); cleanup = null; openState.set(false) }\r\n const show = () => { timer && clearTimeout(timer); timer = setTimeout(instantShow, 100) }\r\n const hide = () => { timer && clearTimeout(timer); timer = setTimeout(instantHide, 100) }\r\n\r\n const floatingPartial: PartialElement = {\r\n style: {\r\n position: \"fixed\",\r\n pointerEvents: \"auto\",\r\n visibility: (listener) => openState.get(listener) ? \"visible\" : \"hidden\",\r\n\r\n },\r\n _onMount: (node) => floating = node.domElement as HTMLElement,\r\n\r\n _portal: (rootNode) => {\r\n let overlay = rootNode.domElement!.querySelector(`#domphy-floating`);\r\n if (!overlay) {\r\n const overlayEle: DomphyElement<\"div\"> = {\r\n div: [],\r\n id: `domphy-floating`,\r\n style: { position: \"fixed\", inset: 0, zIndex: 20, pointerEvents: \"none\" },\r\n };\r\n const overlayNode = rootNode.children!.insert(overlayEle) as ElementNode;\r\n overlay = overlayNode.domElement!;\r\n }\r\n return overlay;\r\n },\r\n };\r\n\r\n merge(props.content, floatingPartial);\r\n\r\n const anchorPartial: PartialElement = {\r\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\r\n _onMount: (node) => {\r\n const root = node.getRoot()\r\n reference = node.domElement as HTMLElement\r\n\r\n const floatingNode = root.children!.insert(props.content) as ElementNode\r\n \r\n const handleOutside = (event: MouseEvent) => {\r\n if (!openState.get() || !reference || !floating) return;\r\n\r\n const target = event.target as Node;\r\n if (!reference.contains(target) && !floating.contains(target)) {\r\n hide()\r\n }\r\n }\r\n node.getRoot().domElement!.addEventListener(\"click\", handleOutside)\r\n \r\n node.addHook(\"BeforeRemove\", () => {\r\n if (timer) clearTimeout(timer);\r\n floatingNode && floatingNode.remove();\r\n node.getRoot().domElement!.removeEventListener(\"click\", handleOutside)\r\n });\r\n }\r\n };\r\n\r\n return { show, hide, anchorPartial };\r\n}\r\n\r\nexport { creatFloating };\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 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 \"&::file-selector-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-10\", accentColor.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", accentColor.get(listener)),\n },\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-10\", color.get(listener)),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", 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]::file-selector-button, &[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 \"&::-moz-range-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 \"&::-moz-progress-bar\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-9\", accentColor.get(listener)),\n borderRadius: themeSpacing(999),\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-17\",\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 merge(props.content, 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 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,QACA,OACA,QACA,KACA,QACA,IACA,KACA,MACA,QACA,MACA,MACA,MACA,OACA,OACA,SACA,OACA,QACA,KACA,UACA,gBACA,mBACA,SACA,WACA,SACA,OACA,OACA,UACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,eACA,SACA,gBACA,IACA,QACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,UACA,UACA,WACA,WACA,iBACA,OACA,MACA,aACA,OACA,MACA,SACA,SACA,SACA,OACA,WACA,QACA,MACA,MACF,ECvKIC,EAAuB,CAAC,EAEfC,GAAN,KAAe,CAAf,aAAA,CACL,KAAQ,WAAkD,CAAC,EAC3D,KAAQ,SAAkE,IAAI,IAC9E,KAAQ,WAAa,EAAA,CAErB,UAAiB,CACf,GAAI,KAAK,WACP,QAAWC,KAAS,KAAK,WACvB,KAAK,WAAWA,CAAK,EAAE,MAAM,EAGjC,KAAK,WAAa,IACpB,CAEA,YAAYA,EAAeC,EAA+B,CACxD,GAAI,CAAC,KAAK,WAAY,MAAO,IAAM,CAAC,EAEpC,GAAI,OAAOD,GAAU,UAAY,OAAOC,GAAa,WACnD,MAAM,IAAI,MAAM,0DAA0D,EAGvE,KAAK,WAAWD,CAAK,IACxB,KAAK,WAAWA,CAAK,EAAI,IAAI,KAG/B,IAAME,EAAU,IAAM,KAAK,eAAeF,EAAOC,CAAQ,EAEzD,OAAI,KAAK,WAAWD,CAAK,EAAE,IAAIC,CAAQ,IAEvC,KAAK,WAAWD,CAAK,EAAE,IAAIC,CAAQ,EAC/B,OAAOA,EAAS,aAAgB,YAClCA,EAAS,YAAYC,CAAO,GAGvBA,CACT,CAEA,eAAeF,EAAeC,EAAyB,CACrD,GAAI,CAAC,KAAK,WAAY,OAEtB,IAAME,EAAY,KAAK,WAAWH,CAAK,EACnCG,GAAaA,EAAU,IAAIF,CAAQ,IACrCE,EAAU,OAAOF,CAAQ,EACrBE,EAAU,OAAS,GACrB,OAAO,KAAK,WAAWH,CAAK,EAGlC,CAEA,OAAOA,KAAkBI,EAAuB,CACzC,KAAK,YACL,KAAK,WAAWJ,CAAK,IAEtB,KAAK,YAAYA,CAAK,IAE1B,KAAK,SAAS,IAAIA,EAAO,CAAE,KAAAI,EAAM,MAAO,CAAC,GAAGN,CAAM,CAAE,CAAC,EAEhD,KAAK,aACR,KAAK,WAAa,GAClB,eAAe,IAAM,KAAK,UAAU,CAAC,IAEzC,CAEQ,YAAYE,EAAwB,CAC1C,IAAMK,EAAMP,EAAO,UAAU,CAAC,CAACQ,EAAGC,CAAC,IAAMD,IAAM,MAAQC,IAAMP,CAAK,EAClE,GAAIK,IAAQ,GAAI,MAAO,GAEvB,IAAMG,EAAQ,CAAC,GAAGV,EAAO,MAAMO,CAAG,EAAE,IAAI,CAAC,CAAC,CAAEE,CAAC,IAAMA,CAAC,EAAGP,CAAK,EAC5D,OAAA,QAAQ,MAAM;IAA6CQ,EAAM,KAAK,UAAK,CAAC,EAAE,EACvE,EACT,CAEQ,WAAkB,CACxB,KAAK,WAAa,GAClB,IAAMC,EAAU,KAAK,SACrB,KAAK,SAAW,IAAI,IAEpB,OAAW,CAACT,EAAO,CAAE,KAAAI,EAAM,MAAAM,CAAM,CAAC,IAAKD,EACrCX,EAASY,EACT,KAAK,OAAOV,EAAOI,CAAI,EAEzBN,EAAS,CAAC,CACZ,CAEQ,OAAOE,EAAeI,EAAuB,CACnD,GAAI,CAAC,KAAK,WAAY,OACtB,IAAMD,EAAY,KAAK,WAAWH,CAAK,EACvC,GAAKG,EAEL,CAAAL,EAAO,KAAK,CAAC,KAAME,CAAK,CAAC,EAEzB,QAAWC,IAAY,CAAC,GAAGE,CAAS,EAClC,GAAKA,EAAU,IAAIF,CAAQ,EAC3B,GAAI,CACFA,EAAS,GAAGG,CAAI,CAClB,OAASG,EAAG,CACV,QAAQ,MAAMA,CAAC,CACjB,CAGFT,EAAO,IAAI,CAAA,CACb,CACF,ECvGaa,GAAN,KAAe,CAMpB,YAAYC,EAA0BC,EAAe,OAAOD,EAAc,CAApC,KAAA,KAAAC,EALtC,KAAS,SAAW,GAGpB,KAAQ,UAA6B,IAAId,GAGvC,KAAK,aAAea,EACpB,KAAK,OAASA,CAChB,CAEA,IAAIX,EAAgC,CAClC,OAAIA,GAAU,KAAK,YAAYA,CAAQ,EAChC,KAAK,MACd,CAEA,IAAIa,EAAmB,CAChB,KAAK,YACV,KAAK,OAASA,EACd,KAAK,UAAU,OAAO,KAAK,KAAMA,CAAQ,EAC3C,CAEA,OAAc,CACZ,KAAK,IAAI,KAAK,YAAY,CAC5B,CAEA,YAAYb,EAAwC,CAClD,OAAK,KAAK,UACH,KAAK,UAAU,YAAY,KAAK,KAAMA,CAAQ,EADzB,IAAM,CAAE,CAEtC,CAEA,eAAeA,EAAkC,CAC1C,KAAK,WACV,KAAK,UAAU,eAAe,KAAK,KAAMA,CAAQ,CACnD,CAEA,UAAiB,CACX,KAAK,YACP,KAAK,UAAU,SAAS,EACxB,KAAK,UAAY,KAErB,CACF,EC3CO,SAASc,EAAMC,EAA8B,CAAC,EAAGC,EAA8B,CAAC,EAAwB,CAC3G,IAAMC,EAAQ,CAAC,YAAa,aAAc,YAAa,aAAc,aAAc,YAAY,EACzFC,EAAQ,CAAC,QAAS,MAAO,YAAa,gBAAiB,SAAS,EAChEC,EAAW,CAAC,SAAS,EACvB,OAAO,UAAU,SAAS,KAAKH,CAAM,IAAM,mBAAqB,OAAO,eAAeA,CAAM,IAAM,OAAO,YACzGA,EAASI,GAAUJ,CAAM,GAG7B,QAAWrB,KAAOqB,EAAQ,CAEtB,IAAMK,EAAQL,EAAOrB,CAAG,EACxB,GAAI,EAAuB0B,GAAU,MAAQA,IAAU,IAEvD,GAAI,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAK,EAC7C,OAAON,EAAOpB,CAAG,GAAM,SACvBoB,EAAOpB,CAAG,EAAImB,EAAMC,EAAOpB,CAAG,EAAG0B,CAAK,EAEtCN,EAAOpB,CAAG,EAAI0B,UAIdJ,EAAM,SAAStB,CAAG,EAClB,GAAI,OAAOoB,EAAOpB,CAAG,GAAM,YAAc,OAAO0B,GAAU,WAAY,CAClE,IAAIC,EAAMP,EAAOpB,CAAG,EACpBoB,EAAOpB,CAAG,EAAKK,GAAsB,CACjC,IAAIuB,EAAO,OAAOD,GAAQ,WAAaA,EAAItB,CAAQ,EAAIsB,EACnDE,EAAO,OAAOH,GAAU,WAAaA,EAAMrB,CAAQ,EAAIqB,EAC3D,MAAO,CAACE,EAAMC,CAAI,EAAE,OAAOlB,GAAKA,CAAC,EAAE,KAAK,IAAI,CAChD,CACJ,MACIS,EAAOpB,CAAG,EAAI,CAACoB,EAAOpB,CAAG,EAAG0B,CAAK,EAAE,OAAOf,GAAKA,CAAC,EAAE,KAAK,IAAI,UAGxDa,EAAS,SAASxB,CAAG,EAC5B,GAAI,OAAOoB,EAAOpB,CAAG,GAAM,YAAc,OAAO0B,GAAU,WAAY,CAClE,IAAIC,EAAMP,EAAOpB,CAAG,EACpBoB,EAAOpB,CAAG,EAAKK,GAAsB,CACjC,IAAIuB,EAAO,OAAOD,GAAQ,WAAaA,EAAItB,CAAQ,EAAIsB,EACnDE,EAAO,OAAOH,GAAU,WAAaA,EAAMrB,CAAQ,EAAIqB,EAC3D,MAAO,CAACE,EAAMC,CAAI,EAAE,OAAOlB,GAAKA,CAAC,EAAE,KAAK,EAAE,CAC9C,CACJ,MACIS,EAAOpB,CAAG,EAAI,CAACoB,EAAOpB,CAAG,EAAG0B,CAAK,EAAE,OAAOf,GAAKA,CAAC,EAAE,KAAK,EAAE,UAEtDY,EAAM,SAASvB,CAAG,EACzB,GAAI,OAAOoB,EAAOpB,CAAG,GAAM,YAAc,OAAO0B,GAAU,WAAY,CAClE,IAAIC,EAAMP,EAAOpB,CAAG,EACpBoB,EAAOpB,CAAG,EAAKK,GAAsB,CACjC,IAAIuB,EAAO,OAAOD,GAAQ,WAAaA,EAAItB,CAAQ,EAAIsB,EACnDE,EAAO,OAAOH,GAAU,WAAaA,EAAMrB,CAAQ,EAAIqB,EAC3D,MAAO,CAACE,EAAMC,CAAI,EAAE,OAAOlB,GAAKA,CAAC,EAAE,KAAK,GAAG,CAC/C,CACJ,MACIS,EAAOpB,CAAG,EAAI,CAACoB,EAAOpB,CAAG,EAAG0B,CAAK,EAAE,OAAOf,GAAKA,CAAC,EAAE,KAAK,GAAG,UAEvDX,EAAI,WAAW,IAAI,EAAG,CAC7B,IAAIiB,EAAOjB,EAAI,QAAQ,KAAM,EAAE,EAAE,YAAY,EAC7C8B,GAASV,EAAyBH,EAAMS,CAAK,CACjD,SAAW1B,EAAI,WAAW,KAAK,EAAG,CAC9B,IAAIiB,EAAOjB,EAAI,QAAQ,MAAO,EAAE,EAChC+B,GAAQX,EAAyBH,EAAMS,CAAK,CAChD,MACIN,EAAOpB,CAAG,EAAI0B,CAG1B,CACA,OAAON,CACX,CAEO,SAASY,GAAWC,EAAc,GAAY,CACjD,IAAIC,EAAO,WACX,QAASC,EAAI,EAAGA,EAAIF,EAAI,OAAQE,IAC5BD,GAAQD,EAAI,WAAWE,CAAC,EACxBD,EAAQA,EAAO,WAAgB,EAEnC,OAAO,OAAO,aAAa,GAAMA,EAAO,EAAG,EAAIA,EAAK,SAAS,EAAE,CACnE,CAEO,SAASE,EAAWC,EAAmBpB,EAAyB,CACnE,OAAQoB,aAAetB,IAAUsB,GAAA,MAAAA,EAAa,SAAYA,EAAkB,IAAItB,GAASsB,EAAKpB,CAAI,CACtG,CAEO,SAASqB,GAAKC,EAA0D,CAC3E,OAAOA,CACX,CClFO,SAASR,GAAiCS,EAAyBC,EAAaC,EAA2B,CAC9G,IAAMC,EAAe,MAAMF,CAAQ,GAC/BG,EAAUJ,EAAQG,CAAY,EAE9B,OAAOC,GAAY,WAClBJ,EAAgBG,CAAY,EAAI,IAAInC,IAAgB,CAChDoC,EAAqB,GAAGpC,CAAI,EAC5BkC,EAAqB,GAAGlC,CAAI,CACjC,EAECgC,EAAgBG,CAAY,EAAID,CAEzC,CAEO,SAASZ,GACZe,EACAC,EACAJ,EACI,CACJ,IAAMK,EAAgBlD,GAAaiD,CAAS,EAC5C,GAAI,CAACC,EACD,MAAM,MAAM,uBAAuBD,CAAS,GAAG,EAEnD,IAAMF,EAAWC,EAAmBE,CAAa,EAE7C,OAAOH,GAAW,WACjBC,EAAmBE,CAAa,EAAI,CAAC3C,EAA+B4C,IAAsB,CACvFJ,EAAQxC,EAAO4C,CAAI,EACnBN,EAAQtC,EAAO4C,CAAI,CACvB,EAECH,EAAmBE,CAAa,EAAIL,CAE7C,CAEO,SAASjB,GAAUC,EAAYuB,EAAO,IAAI,QAAgB,CAE7D,GADIvB,IAAU,MAAQ,OAAOA,GAAU,UACnC,OAAOA,GAAU,WAAY,OAAOA,EACxC,GAAIuB,EAAK,IAAIvB,CAAK,EAAG,OAAOuB,EAAK,IAAIvB,CAAK,EAE1C,IAAMwB,EAAQ,OAAO,eAAexB,CAAK,EACzC,GAAIwB,IAAU,OAAO,WAAa,CAAC,MAAM,QAAQxB,CAAK,EAAG,OAAOA,EAEhE,IAAIyB,EAEJ,GAAI,MAAM,QAAQzB,CAAK,EAAG,CACtByB,EAAQ,CAAC,EACTF,EAAK,IAAIvB,EAAOyB,CAAK,EACrB,QAAWC,KAAK1B,EAAOyB,EAAM,KAAK1B,GAAU2B,EAAGH,CAAI,CAAC,EACpD,OAAOE,CACX,CAEA,GAAIzB,aAAiB,KAAM,OAAO,IAAI,KAAKA,CAAK,EAChD,GAAIA,aAAiB,OAAQ,OAAO,IAAI,OAAOA,CAAK,EACpD,GAAIA,aAAiB,IAAK,CACtByB,EAAQ,IAAI,IACZF,EAAK,IAAIvB,EAAOyB,CAAK,EACrB,OAAW,CAACE,EAAGD,CAAC,IAAK1B,EAAOyB,EAAM,IAAI1B,GAAU4B,EAAGJ,CAAI,EAAGxB,GAAU2B,EAAGH,CAAI,CAAC,EAC5E,OAAOE,CACX,CACA,GAAIzB,aAAiB,IAAK,CACtByB,EAAQ,IAAI,IACZF,EAAK,IAAIvB,EAAOyB,CAAK,EACrB,QAAWC,KAAK1B,EAAOyB,EAAM,IAAI1B,GAAU2B,EAAGH,CAAI,CAAC,EACnD,OAAOE,CACX,CACA,GAAI,YAAY,OAAOzB,CAAK,EACxB,OAAO,IAAKA,EAAc,YAAYA,CAAK,EAE/C,GAAIA,aAAiB,YACjB,OAAOA,EAAM,MAAM,CAAC,EAGxByB,EAAQ,OAAO,OAAOD,CAAK,EAC3BD,EAAK,IAAIvB,EAAOyB,CAAK,EAErB,QAAWnD,KAAO,QAAQ,QAAQ0B,CAAK,EACnCyB,EAAMnD,CAAG,EAAIyB,GAAUC,EAAM1B,CAAG,EAAGiD,CAAI,EAG3C,OAAOE,CACX,CAEO,SAASG,GAASC,EAAyCC,EAAY,GAAgB,CAC1F,GAAI,OAAO,UAAU,SAAS,KAAKD,CAAO,IAAM,kBAC5C,MAAM,MAAM,UAAUA,CAAO,2BAA2B,EAE5D,IAAIE,EAAO,OAAO,KAAKF,CAAO,EAC9B,QAASpB,EAAI,EAAGA,EAAIsB,EAAK,OAAQtB,IAAK,CAClC,IAAInC,EAAMyD,EAAKtB,CAAC,EACZE,EAAMkB,EAAQvD,CAA2B,EAC7C,GAAImC,GAAK,GAAK,CAAClC,GAAS,SAASD,CAAG,GAAK,CAACA,EAAI,SAAS,GAAG,GAAK,CAACwD,EAC5D,MAAM,MAAM,OAAOxD,CAAG,6BAA6B,EAChD,GAAIA,GAAO,SAAWqC,GAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,kBACxE,MAAM,MAAM,0BAA0B,EACnC,GAAIrC,GAAO,IACduD,EAAQ,EAAG,QAAQH,GAAKE,GAASF,EAAqB,EAAI,CAAC,MACxD,CAAA,GAAIpD,EAAI,WAAW,KAAK,GAAK,OAAOqC,GAAO,WAC9C,MAAM,MAAM,QAAQrC,CAAG,WAAWqC,CAAG,uBAAuB,EACzD,GAAIrC,EAAI,WAAW,IAAI,GAAK,OAAOqC,GAAO,WAC7C,MAAM,MAAM,SAASrC,CAAG,WAAWqC,CAAG,uBAAuB,EAC1D,GAAIrC,GAAO,WAAa,OAAOqC,GAAQ,WAC1C,MAAM,MAAM,iDAAiD,EAC1D,GAAIrC,GAAO,YAAc,OAAO,UAAU,SAAS,KAAKqC,CAAG,IAAM,kBACpE,MAAM,MAAM,6BAA6B,EACtC,GAAIrC,GAAO,aAAe,OAAO,UAAU,SAAS,KAAKqC,CAAG,IAAM,kBACrE,MAAM,MAAM,8BAA8B,EACvC,GAAIrC,GAAO,QAAW,OAAOqC,GAAQ,UAAY,OAAOA,GAAQ,SACnE,MAAM,MAAM,mCAAmC,CAAA,CAEvD,CACA,MAAO,EACX,CAqBO,SAASqB,GAAOzB,EAAsB,CACzC,MAAO,iEAAiE,KAAKA,EAAI,KAAK,CAAC,CAC3F,CAEO,SAAS0B,GAAW1B,EAAqB,CAC5C,OAAOA,EACF,QAAQ,KAAM,OAAO,EACrB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,OAAO,CAC9B,CAgDO,SAAS2B,GAAWL,EAA6C,CACpE,OAAO,OAAO,KAAKA,CAAO,EAAE,KAAK5C,GAAKV,GAAS,SAASU,CAAC,CAAC,CAC9D,CAGO,SAASkD,GAAa5B,EAAqB,CAC9C,OAAOA,EAAI,QAAQ,qBAAsB,OAAO,EAAE,YAAY,CAClE,CAEO,SAAS6B,GAAiBC,EAAmB,CAChD,GAAIA,EAAU,QAAQ,GAAG,IAAM,EAC3B,MAAO,CAACA,CAAS,EAMrB,QAJIC,EAAW,CAAC,EACZC,EAAS,EACTC,EAAW,EACXC,EAAQ,GACHhC,EAAI,EAAGiC,EAAML,EAAU,OAAQ5B,EAAIiC,EAAKjC,IAAK,CAClD,IAAIkC,EAAON,EAAU5B,CAAC,EACtB,GAAIkC,IAAS,IACTJ,GAAU,UACHI,IAAS,IAChBJ,GAAU,UACHI,IAAS,IAChBH,GAAY,UACLG,IAAS,IAChBH,GAAY,UACLG,IAAS,KACZ,CAACJ,GAAU,CAACC,EAAU,CACtBF,EAAS,KAAKG,EAAM,KAAK,CAAC,EAC1BA,EAAQ,GACR,QACJ,CAEJA,GAASE,CACb,CACA,OAAAL,EAAS,KAAKG,EAAM,KAAK,CAAC,EACnBH,CACX,CAEO,SAASM,GAAeC,EAA6D,CA/O5F,IAAAC,EAgPI,IAAIC,EAAWF,EAAY,cAAc,eAAe,EAExD,OAAKE,IACDA,EAAW,SAAS,cAAc,OAAO,EACzCA,EAAS,GAAK,eACdF,EAAY,YAAYE,CAAQ,GAGhCA,EAAS,QAAQ,aAAe,UAChCD,EAAAC,EAAS,QAAT,MAAAD,EAAgB,WAAW,yCAA0C,CAAA,EACrEC,EAAS,QAAQ,WAAa,QAG3BA,CACX,CAEO,IAAMC,GAAgBlC,GAA4D,CAErF,GAAI,MAAM,QAAQA,EAAQ,CAAC,EAAG,CAC1B,IAAImC,EAAuB,CAAC,EAC5B,OAAAnC,EAAQ,EAAE,QAAQoC,GAAKzD,EAAMwD,EAAMD,GAAaE,CAAC,CAAC,CAAC,EACnD,OAAOpC,EAAQ,EACfrB,EAAMwD,EAAMnC,CAAO,EAEZmC,CACX,KACI,QAAOnC,CAEf,EC5QaqC,GAAW,CACtB,OACA,OACA,KACA,MACA,QACA,KACA,MACA,QACA,OACA,OACA,SACA,QACA,KACF,ECdaC,GAAU,CAAC,MAAO,SAAU,OAAQ,OAAQ,UACrD,OAAQ,WAAY,UAAW,IAAK,OACpC,MAAO,SAAU,iBAAkB,iBACnC,OAAQ,WAAY,OAAQ,SAAU,OACtC,QAAS,WAAY,QAAS,UAAW,SACzC,UAAW,mBAAoB,gBAC/B,iBAAkB,cAAe,gBACjC,UAAW,cAAe,WAAY,UACtC,UAAW,eAAe,ECRjBC,GAAoB,CAC/B,kBACA,QACA,YACA,WACA,UACA,UACA,kBACA,WACA,UACA,UACA,QACA,WACA,iBACA,SACA,QACA,YACA,OACA,WACA,QACA,SACA,UACA,aACA,OACA,cACA,WACA,WACA,WACA,SACA,WACA,WACA,YACA,gBACA,QACA,iBACA,YACA,aACA,QACA,WACA,WACA,SACA,sBACF,ECzCaC,EAAsC,CACjD,UAAW,CAAC,SAAU,IAAI,EAC1B,WAAY,CAAC,SAAU,IAAI,EAC3B,UAAW,CAAC,QAAQ,EACpB,WAAY,CAAC,SAAU,IAAI,EAC3B,cAAe,CAAC,SAAU,IAAI,EAC9B,SAAU,CAAC,SAAU,IAAI,EACzB,eAAgB,CAAC,SAAU,IAAI,EAC/B,WAAY,CAAC,SAAU,IAAI,EAC3B,UAAW,CAAC,SAAU,IAAI,EAC1B,MAAO,CAAC,SAAU,IAAI,EACtB,SAAU,CAAC,SAAU,IAAI,EACzB,WAAY,CAAC,SAAU,IAAI,EAC3B,UAAW,CAAC,SAAU,IAAI,EAC1B,QAAS,CAAC,QAAQ,EAClB,YAAa,CAAC,QAAQ,EACtB,UAAW,CAAC,QAAQ,EACpB,WAAY,CAAC,QAAQ,EACrB,YAAa,CAAC,QAAQ,EACtB,UAAW,CAAC,QAAQ,EACpB,WAAY,CAAC,SAAU,KAAK,EAC5B,OAAQ,CAAC,QAAQ,EACjB,eAAgB,CAAC,QAAQ,EACzB,SAAU,CAAC,QAAQ,EACnB,KAAM,CAAC,QAAQ,EACf,UAAW,CAAC,QAAQ,EACpB,eAAgB,CAAC,SAAU,IAAI,EAC/B,QAAS,CAAC,SAAU,IAAI,EACxB,YAAa,CAAC,SAAU,IAAI,EAC5B,oBAAqB,CAAC,IAAI,EAC1B,iBAAkB,CAAC,IAAI,EACvB,gBAAiB,CAAC,IAAI,EACtB,aAAc,CAAC,IAAI,EACnB,WAAY,CAAC,IAAI,EACjB,QAAS,CAAC,IAAI,EACd,kBAAmB,CAAC,QAAQ,EAC5B,gBAAiB,CAAC,QAAQ,EAC1B,mBAAoB,CAAC,QAAQ,EAC7B,iBAAkB,CAAC,QAAQ,EAC3B,cAAe,CAAC,QAAQ,EACxB,cAAe,CAAC,QAAQ,EACxB,aAAc,CAAC,QAAQ,EACvB,aAAc,CAAC,QAAQ,EACvB,WAAY,CAAC,QAAQ,EACrB,UAAW,CAAC,QAAQ,EACpB,QAAS,CAAC,KAAK,EACf,mBAAoB,CAAC,SAAU,IAAI,EACnC,YAAa,CAAC,IAAI,EAClB,OAAQ,CAAC,QAAQ,EACjB,iBAAkB,CAAC,QAAQ,EAC3B,eAAgB,CAAC,QAAQ,EACzB,mBAAoB,CAAC,QAAQ,EAC7B,kBAAmB,CAAC,QAAQ,CAC9B,ECtDaC,GAA4B,CACvC,UACA,sBACA,oBACA,gBACA,eACA,cACA,YACA,YACA,eACA,cACA,cACA,OACA,OACA,sBACA,mBACA,eACA,cACA,iBACA,mBACA,gBACA,mBACA,WACF,ECjBaC,GAAN,KAAuB,CAO5B,YAAYjE,EAAcS,EAAYyD,EAAa,CAFnD,KAAA,UAAY,IAAIhF,GAGd,KAAK,OAASgF,EACd,KAAK,UAAaJ,GAAwC,SAAS9D,CAAI,EACnEgE,GAAgB,SAAShE,CAAI,EAC/B,KAAK,KAAOA,EAEZ,KAAK,KAAO4C,GAAa5C,CAAI,EAE/B,KAAK,MAAQ,OACb,KAAK,IAAIS,CAAK,CAChB,CAEA,QAAe,CACb,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,OAAO,WAAY,OAC7C,IAAM0D,EAAa,KAAK,OAAO,WAEzBC,EAAc,CAAC,OAAO,EACxB,KAAK,UACH,KAAK,QAAU,IAAS,KAAK,OAAS,KACxCD,EAAW,gBAAgB,KAAK,IAAI,EAEpCA,EAAW,aAAa,KAAK,KAAM,KAAK,QAAU,GAAO,GAAK,KAAK,KAAK,EAEjE,KAAK,OAAS,KACvBA,EAAW,gBAAgB,KAAK,IAAI,EAC3BC,EAAY,SAAS,KAAK,IAAI,EACtCD,EAAmB,KAAK,IAAI,EAAI,KAAK,MAEtCA,EAAW,aAAa,KAAK,KAAM,KAAK,KAAK,CAEjD,CAEA,IAAI1D,EAA6B,CA7CnC,IAAA8C,EAAAc,EA8CI,IAAIC,EAAO,KAAK,MAEhB,GAAI7D,GAAS,KACX,KAAK,MAAQ,aACJ,OAAOA,GAAU,UAAY,qBAAqB,KAAKA,CAAK,EACrE,KAAK,MAAQiC,GAAWjC,CAAK,UACpB,OAAOA,GAAS,WAAY,CACrC,IAAIrB,EAAgB,IAAM,CACxB,GAAI,CAAC,KAAK,QAAU,KAAK,OAAO,UAAW,OAC3C,IAAIuE,EAAI,KAAK,MACb,KAAK,MAAQ,KAAK,UAAY,CAAA,CAASlD,EAAmB,EAAMA,EAAmB,EACnF,KAAK,OAAO,EACRkD,IAAM,KAAK,OAAO,KAAK,UAAU,OAAO,KAAK,KAAM,KAAK,KAAK,CACnE,EAEAvE,EAAS,YAAc,KAAK,OAC5BA,EAAS,MAAQ,UAASmE,EAAA,KAAK,SAAL,KAAA,OAAAA,EAAa,OAAO,KAAIc,EAAA,KAAK,SAAL,KAAA,OAAAA,EAAa,MAAM,cAAc,KAAK,IAAI,GAE5FjF,EAAS,YAAeC,GAAwB,CAC1C,KAAK,QACP,KAAK,OAAO,QAAQ,eAAgB,IAAM,CACxCA,EAAQ,EACRD,EAAW,IACb,CAAC,CAEL,EAEA,KAAK,MAAQ,KAAK,UAAY,CAAA,CAAQqB,EAAMrB,CAAQ,EAAKqB,EAAMrB,CAAQ,CACzE,MACE,KAAK,MAAQ,KAAK,UAAY,CAAA,CAAQqB,EAASA,EAGjD,KAAK,OAAO,EACR6D,IAAS,KAAK,OAAO,KAAK,UAAU,OAAO,KAAK,KAAM,KAAK,KAAK,CACtE,CAEA,YAAYC,EAAsC,CAChD,IAAM9C,EAAU8C,EAChB9C,EAAQ,YAAepC,GAAqB,CApFhD,IAAAkE,EAoFmD,OAAAA,EAAA,KAAK,SAAL,KAAA,OAAAA,EAAa,QAAQ,eAAgBlE,CAAAA,CAAAA,EACpF,KAAK,UAAU,YAAY,KAAK,KAAMoC,CAAO,CAC/C,CAEA,QAAe,CACT,KAAK,QAAU,KAAK,OAAO,YAC7B,KAAK,OAAO,WAAW,OAAO,KAAK,IAAI,EAEzC,KAAK,SAAS,CAChB,CAEA,UAAiB,CACf,KAAK,UAAU,SAAS,EACxB,KAAK,MAAQ,KACb,KAAK,OAAS,IAChB,CAEA,cAAuB,CACrB,GAAM,CAAE,KAAAzB,EAAM,MAAAS,CAAM,EAAI,KACxB,GAAI,KAAK,UACP,OAAOA,EAAQ,GAAGT,CAAI,GAAK,GACtB,CACL,IAAMoB,EAAM,MAAM,QAAQX,CAAK,EAAI,KAAK,UAAUA,CAAK,EAAIA,EAC3D,MAAO,GAAGT,CAAI,KAAK0C,GAAW,OAAOtB,CAAG,CAAC,CAAC,GAC5C,CACF,CACF,ECzGaoD,GAAN,KAAoB,CAIzB,YAAYN,EAAqB,CAHjC,KAAA,MAAiD,CAAC,EAIhD,KAAK,OAASA,CAChB,CAEA,cAAuB,CACrB,GAAI,CAAC,KAAK,MAAO,MAAO,GACxB,IAAMlD,EAAM,OAAO,OAAO,KAAK,KAAK,EACjC,IAAKyD,GAASA,EAAK,aAAa,CAAC,EACjC,KAAK,GAAG,EACX,OAAOzD,EAAM,IAAIA,CAAG,GAAK,EAC3B,CAEA,IAAIhB,EAAmB,CArBzB,IAAAuD,EAsBI,GAAK,KAAK,MACV,OAAOA,EAAA,KAAK,MAAMvD,CAAI,IAAf,KAAA,OAAAuD,EAAkB,KAC3B,CAEA,IAAIvD,EAAcS,EAA6B,CACzC,CAAC,KAAK,OAAS,CAAC,KAAK,SACrB,KAAK,MAAMT,CAAI,EACjB,KAAK,MAAMA,CAAI,EAAE,IAAIS,CAAK,EAE1B,KAAK,MAAMT,CAAI,EAAI,IAAIiE,GAAiBjE,EAAMS,EAAO,KAAK,MAAM,EAEpE,CAEA,YAAYT,EAAcuE,EAAkD,CACtE,KAAK,IAAIvE,CAAI,GACf,KAAK,MAAOA,CAAI,EAAE,YAAYuE,CAAQ,CAE1C,CAEA,IAAIvE,EAAuB,CACzB,OAAK,KAAK,MACH,OAAO,UAAU,eAAe,KAAK,KAAK,MAAOA,CAAI,EADpC,EAE1B,CAEA,OAAOA,EAAoB,CACpB,KAAK,QAEN,KAAK,MAAMA,CAAI,IACjB,KAAK,MAAMA,CAAI,EAAE,SAAS,EAC1B,OAAO,KAAK,MAAMA,CAAI,GAGpB,KAAK,QAAU,KAAK,OAAO,YAAc,KAAK,OAAO,sBAAsB,SAC7E,KAAK,OAAO,WAAW,gBAAgBA,CAAI,EAE/C,CAEA,UAAiB,CACf,GAAI,KAAK,MACP,QAAWjB,KAAO,KAAK,MACrB,KAAK,MAAMA,CAAG,EAAE,SAAS,EAG7B,KAAK,MAAQ,KACb,KAAK,OAAS,IAChB,CAEA,OAAOiB,EAAc0E,EAAuB,CAC1C,GACE,CAACZ,GAAkB,SAAS9D,CAA0C,EAEtE,MAAM,MAAM,GAAGA,CAAI,6BAA6B,EAE9C0E,IAAU,GACZ,KAAK,IAAI1E,EAAM,EAAI,EACV0E,IAAU,GACnB,KAAK,OAAO1E,CAAI,EAEhB,KAAK,IAAIA,CAAI,EAAI,KAAK,OAAOA,CAAI,EAAI,KAAK,IAAIA,EAAM,EAAI,CAE5D,CAEA,SAAS2E,EAAyB,CAChC,GAAI,CAACA,GAAa,OAAOA,GAAc,SAAU,OAEjD,IAAMC,EAAM,CAACC,EAAiBC,IAAqB,CACjD,IAAMC,GAAQF,GAAW,IAAI,MAAM,GAAG,EAAE,OAAQnF,GAAcA,CAAC,EAC/D,MAAA,CAACqF,EAAK,SAASD,CAAQ,GAAKC,EAAK,KAAKJ,CAAS,EACxCI,EAAK,KAAK,GAAG,CACtB,EAEIpD,EAAU,KAAK,IAAI,OAAO,EAE1B,OAAOA,GAAY,WACrB,KAAK,IAAI,QAAS,IAAMiD,EAAIjD,EAAQ,EAAGgD,CAAS,CAAC,EAEjD,KAAK,IAAI,QAASC,EAAIjD,EAASgD,CAAS,CAAC,CAE7C,CAEA,SAASA,EAA4B,CACnC,MAAI,CAACA,GAAa,OAAOA,GAAc,SAAiB,IACxC,KAAK,IAAI,OAAO,GAAK,IAChB,MAAM,GAAG,EAAE,OAAQjF,GAAcA,CAAC,EAC3C,SAASiF,CAAS,CAChC,CAEA,YAAYA,EAAyB,CAC/B,CAACA,GAAa,OAAOA,GAAc,WACvC,KAAK,SAASA,CAAS,EACnB,KAAK,YAAYA,CAAS,EAC1B,KAAK,SAASA,CAAS,EAC7B,CAEA,YAAYA,EAAyB,CACnC,GAAI,CAACA,GAAa,OAAOA,GAAc,SAAU,OAGjD,IAAMK,GAFU,KAAK,IAAI,OAAO,GAAK,IACN,MAAM,GAAG,EAAE,OAAQtF,GAAcA,CAAC,EAC5C,OAAQuF,GAAQA,IAAQN,CAAS,EACtDK,EAAQ,OAAS,EACb,KAAK,IAAI,QAASA,EAAQ,KAAK,GAAG,CAAC,EACnC,KAAK,OAAO,OAAO,CACzB,CAEA,aAAaE,EAAkBJ,EAAwB,CAEnD,CAACI,GACD,CAACJ,GACD,OAAOI,GAAa,UACpB,OAAOJ,GAAa,UAGlB,KAAK,SAASI,CAAQ,IACxB,KAAK,YAAYA,CAAQ,EACzB,KAAK,SAASJ,CAAQ,EAE1B,CACF,ECxIaK,GAAN,KAAe,CAMpB,YAAYC,EAA8BlB,EAAqB,CAL/D,KAAA,KAAO,WAML,KAAK,OAASA,EACd,KAAK,KAAOkB,IAAgB,GAAK,SAAW,OAAOA,CAAW,CAChE,CACA,gBAAiB,CACf,IAAIC,EACJ,GAAI5C,GAAO,KAAK,IAAI,EAAG,CACrB,IAAM6C,EAAM,SAAS,cAAc,UAAU,EAC7CA,EAAI,UAAY,KAAK,KAAK,KAAK,EAC/BD,EAAUC,EAAI,QAAQ,YAAc,SAAS,eAAe,EAAE,CAChE,MACED,EAAU,SAAS,eAAe,KAAK,IAAI,EAE7C,OAAA,KAAK,QAAUA,EACRA,CACT,CAEA,UAAiB,CACf,KAAK,QAAU,OACf,KAAK,KAAO,EACd,CAEA,cAAuB,CACrB,OAAO,KAAK,OAAS,SAAW,UAAY,KAAK,IACnD,CAEA,OAAOE,EAA2D,CAChE,IAAMF,EAAU,KAAK,eAAe,EACpCE,EAAQ,YAAYF,CAAO,CAC7B,CACF,EC/BaG,GAAN,KAAkB,CAKvB,YAAYtB,EAAqB,CAJjC,KAAA,MAAoB,CAAC,EAErB,KAAA,SAAmB,EAGjB,KAAK,MAAQA,CACf,CAEA,YAAY5B,EAAiD,CAC3D,OAAQ,OAAOA,GAAY,UAAYA,IAAY,KAC/C,IAAImD,EAAYnD,EAAS,KAAK,MAAO,KAAK,UAAU,EACpD,IAAI6C,GAAS7C,GAAW,KAAO,GAAK,OAAOA,CAAO,EAAG,KAAK,KAAK,CACrE,CAEA,gBAAgBP,EAAgB2D,EAAe,CAC7C,GAAI,CAAC,KAAK,OAAS,CAAC,KAAK,MAAM,WAAY,OAC3C,IAAMC,EAAM,KAAK,MAAM,WAEjBC,EAAK7D,aAAgB0D,EAAc1D,EAAK,WAAaA,EAAK,QAChE,GAAI6D,EAAI,CACN,IAAMC,EAAaF,EAAI,WAAWD,CAAK,GAAK,KACxCE,IAAOC,GACTF,EAAI,aAAaC,EAAIC,CAAU,CAEnC,CACF,CAEA,gBAAgBC,EAAiBC,EAAiB,CAChD,GAAI,CAAC,KAAK,OAAS,CAAC,KAAK,MAAM,WAAY,OAC3C,IAAM7B,EAAS,KAAK,MAAM,WAEpB8B,EAAIF,aAAiBL,EAAcK,EAAM,WAAaA,EAAM,QAC5DG,EAAIF,aAAiBN,EAAcM,EAAM,WAAaA,EAAM,QAClE,GAAI,CAACC,GAAK,CAACC,EAAG,OAEd,IAAMC,EAAQF,EAAE,YACVG,EAAQF,EAAE,YAEhB/B,EAAO,aAAa8B,EAAGG,CAAK,EAC5BjC,EAAO,aAAa+B,EAAGC,CAAK,CAC9B,CAEA,OAAOE,EAAwBC,EAAY,GAAMC,EAAS,GAAa,CAnDzE,IAAA/C,EAAAc,EAAAkC,EAAAC,EAqDI,IAAMC,EAAW,KAAK,MAAM,MAAM,EAG5BC,EAAQ,IAAI,IAClB,QAAWC,KAAQF,EACbE,aAAgBlB,GAAekB,EAAK,MAAQ,MAAQA,EAAK,MAAQ,QACnED,EAAM,IAAIC,EAAK,IAAKA,CAAI,EAIxB,CAACL,GAAU,KAAK,MAAM,cAAYjC,GAAAd,EAAA,KAAK,MAAM,SAAX,KAAA,OAAAA,EAAmB,eAAnB,MAAAc,EAAA,KAAAd,EAAkC,KAAK,MAAO6C,CAAAA,GAEpF,QAASlF,EAAI,EAAGA,EAAIkF,EAAO,OAAQlF,IAAK,CACtC,IAAM0F,EAAQR,EAAOlF,CAAC,EAChBnC,EACH,OAAO6H,GAAU,UAAYA,IAAU,KAASA,EAAc,KAAO,OAExE,GAAI7H,IAAQ,OAAW,CACrB,IAAM8H,EAASH,EAAM,IAAI3H,CAAG,EAC5B,GAAI8H,EAAQ,CACVH,EAAM,OAAO3H,CAAG,EAEhB,IAAM+H,EAAM,KAAK,MAAM,QAAQD,CAAM,EACrC,GAAIC,IAAQ5F,GAAK4F,GAAO,EAAG,CACzB,IAAMC,EAAWF,aAAkBpB,GAAe,CAAC,CAACoB,EAAO,QAC3D,KAAK,KAAKC,EAAK5F,EAAG6F,EAAW,GAAQV,EAAW,EAAI,CACtD,CACAQ,EAAO,OAAS,KAAK,MACrB,QACF,CACF,CAEA,KAAK,OAAOD,EAAO1F,EAAGmF,EAAW,EAAI,CACvC,CAEA,KAAO,KAAK,MAAM,OAASD,EAAO,QAChC,KAAK,OAAO,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,EAAGC,EAAW,EAAI,EAEhEK,EAAM,QAAS3E,GAAS,KAAK,OAAOA,EAAMsE,EAAW,EAAI,CAAC,EACrDC,IAAQE,GAAAD,EAAA,KAAK,MAAM,SAAX,KAAA,OAAAA,EAAmB,SAAnB,MAAAC,EAAA,KAAAD,EAA4B,KAAK,KAAA,CAChD,CAEA,OAAOK,EAAqBlB,EAAgBW,EAAY,GAAMC,EAAS,GAAiB,CA/F1F,IAAA/C,EAAAc,EAiGI,IAAI2C,EAAS,KAAK,MAAM,OAClBC,EAAc,OAAOvB,GAAU,UAAY,MAAMA,CAAK,GAAKA,EAAQ,GAAKA,EAAQsB,EAClFA,EACAtB,EACEiB,EAAO,KAAK,YAAYC,CAAK,EAGnC,GAFA,KAAK,MAAM,OAAOK,EAAY,EAAGN,CAAI,EAEjCA,aAAgBlB,EAAa,CAE/BkB,EAAK,OAAO,QAAUA,EAAK,OAAO,OAAOA,CAAI,EAE7C,IAAIxC,EAAa,KAAK,MAAM,WAC5B,GAAIkC,GAAalC,EAGf,GAAIwC,EAAK,QAAS,CAChB,IAAIxC,EAAawC,EAAK,QAAS,KAAK,MAAM,QAAQ,CAAC,EACnDxC,GAAcwC,EAAK,OAAOxC,CAAU,CACtC,KAAO,CACL,IAAI+C,EAAUP,EAAK,eAAe,EAC5BQ,GAAM5D,EAAAY,EAAW,WAAW8C,CAAU,IAAhC,KAAA1D,EAAqC,KACjDY,EAAW,aAAa+C,EAASC,CAAG,EACpC,IAAIC,EAAOjD,EAAW,YAAY,EAC5Bb,EAAc8D,aAAgB,WAAaA,EAAO,SAAS,KAC7D5D,EAAWH,GAAeC,CAAW,EACzCqD,EAAK,OAAO,OAAOnD,CAA4B,EAC/CmD,EAAK,OAAO,OAASA,EAAK,OAAO,MAAMA,CAAI,EAC3CA,EAAK,SAAS,MAAM,QAAQU,GAAS,CACnC,GAAIA,aAAiB5B,GAAe4B,EAAM,QAAS,CACjD,IAAI1B,EAAM0B,EAAM,QAASA,EAAM,QAAQ,CAAC,EACxC1B,GAAO0B,EAAM,OAAO1B,CAAG,CACzB,MACE0B,EAAM,OAAOH,CAAO,CAExB,CAAC,CACH,CAKJ,KAAO,CACL,IAAI/C,EAAa,KAAK,MAAM,WAC5B,GAAIkC,GAAalC,EAAY,CAC3B,IAAI+C,EAAUP,EAAK,eAAe,EAC5BQ,GAAM9C,EAAAF,EAAW,WAAW8C,CAAU,IAAhC,KAAA5C,EAAqC,KACjDF,EAAW,aAAa+C,EAASC,CAAG,CACtC,CACF,CACA,MAAA,CAACb,GAAU,KAAK,MAAM,YAAc,KAAK,MAAM,OAAO,QAAU,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,EAC5FK,CACT,CAEA,OAAOA,EAAgBN,EAAY,GAAMC,EAAS,GAAa,CAE7D,IAAMZ,EAAQ,KAAK,MAAM,QAAQiB,CAAI,EACrC,GAAI,EAAAjB,EAAQ,GAEZ,CAAA,GAAIiB,aAAgBlB,EAAa,CAC/B,IAAM6B,EAAO,IAAM,CA3JzB,IAAA/D,EAAAc,EA4JQ,IAAMuB,EAAKe,EAAK,WAChB,KAAK,MAAM,OAAOjB,EAAO,CAAC,EAC1BW,GAAaT,GAAMA,EAAG,OAAO,GAC7BvB,GAAAd,EAAAoD,EAAK,SAAL,KAAA,OAAApD,EAAa,SAAb,MAAAc,EAAA,KAAAd,EAAsBoD,CAAAA,EACtBA,EAAK,SAAS,CAChB,EACA,GAAIA,EAAK,OAAO,cAAgBA,EAAK,WAAY,CAC/C,IAAIY,EAAa,GACXC,EAAW,IAAM,CAAOD,IAAcA,EAAa,GAAMD,EAAK,EAAK,EACzEX,EAAK,OAAO,aAAaA,EAAMa,CAAQ,EAClCD,GAAYC,EAAS,CAC5B,MACEF,EAAK,CAGT,KAAO,CACL,IAAM1B,EAAKe,EAAK,QAChB,KAAK,MAAM,OAAOjB,EAAO,CAAC,EAC1BW,GAAaT,GAAMA,EAAG,OAAO,EAC7Be,EAAK,SAAS,CAChB,CAEA,CAACL,GAAU,KAAK,MAAM,YAAc,KAAK,MAAM,OAAO,QAAU,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,CAAA,CACrG,CAEA,MAAMD,EAAY,GAAMC,EAAS,GAAa,CAC5C,GAAI,KAAK,MAAM,SAAW,EAAG,OAC7B,IAAMmB,EAAW,KAAK,MAAM,MAAM,EAElC,QAAWd,KAAQc,EACjB,KAAK,OAAOd,EAAMN,EAAW,EAAI,EAEnC,CAACC,GAAU,KAAK,MAAM,YAAc,KAAK,MAAM,OAAO,QAAU,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,CACrG,CAEA,UAAiB,CACf,KAAK,MAAM,QAAQe,GAASA,EAAM,SAAS,CAAC,EAC5C,KAAK,MAAQ,CAAC,CAChB,CAEA,KAAKK,EAAgBC,EAAgBtB,EAAY,GAAMC,EAAS,GAAO,CACrE,GAAIoB,EAAS,GAAKC,EAAS,GACzBD,GAAU,KAAK,MAAM,QAAUC,GAAU,KAAK,MAAM,QACpDD,IAAWC,EAAQ,OAErB,IAAMC,EAAQ,KAAK,MAAMF,CAAM,EACzBG,EAAQ,KAAK,MAAMF,CAAM,EAE/B,KAAK,MAAMD,CAAM,EAAIG,EACrB,KAAK,MAAMF,CAAM,EAAIC,EAEjBvB,GAAW,KAAK,gBAAgBuB,EAAOC,CAAK,EAEhD,CAACvB,GAAU,KAAK,MAAM,YAAc,KAAK,MAAM,OAAO,QAAU,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,CACrG,CAEA,KAAKwB,EAAmBC,EAAiB1B,EAAY,GAAMC,EAAS,GAAa,CAC/E,GAAIwB,EAAY,GAAKA,GAAa,KAAK,MAAM,QAC3CC,EAAU,GAAKA,GAAW,KAAK,MAAM,QAAUD,IAAcC,EAAS,OAExE,IAAMpB,EAAO,KAAK,MAAMmB,CAAS,EAEjC,KAAK,MAAM,OAAOA,EAAW,CAAC,EAC9B,KAAK,MAAM,OAAOC,EAAS,EAAGpB,CAAI,EAE9BN,GAAW,KAAK,gBAAgBM,EAAMoB,CAAO,EAEjD,CAACzB,GAAU,KAAK,MAAM,YAAc,KAAK,MAAM,OAAO,QAAU,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,CACrG,CAEA,cAAuB,CACrB,IAAI0B,EAAO,GACX,QAAWrB,KAAQ,KAAK,MAAOqB,GAAQrB,EAAK,aAAa,EACzD,OAAOqB,CACT,CACF,ECjOaC,GAAN,KAAoB,CAMzB,YAAYjI,EAAcS,EAAmByH,EAAuB,CAHpE,KAAA,MAAoB,GAIlB,KAAK,KAAOlI,EACZ,KAAK,QAAU4C,GAAa5C,CAAI,EAChC,KAAK,WAAakI,EAClB,KAAK,IAAIzH,CAAK,CAChB,CAEA,YAAmB,CACjB,GAAI,CAAC,KAAK,WAAY,OACtB,IAAM0H,EAAU,KAAK,WAAW,QAEhC,GAAIA,GAAYA,EAAyB,MAAO,CAC9C,IAAIC,EAA8BD,EAAyB,MAC3DC,EAAM,YAAY,KAAK,QAAS,OAAO,KAAK,KAAK,CAAC,EAE9CrE,EAAU,KAAK,IAAI,GACrBA,EAAU,KAAK,IAAI,EAAE,QAASsE,GAAW,CACvCD,EAAM,YAAY,IAAIC,CAAM,IAAI,KAAK,OAAO,GAAI,OAAO,KAAK,KAAK,CAAC,CACpE,CAAC,CAEL,CACF,CACA,UAAiB,CACf,KAAK,MAAQ,GACb,KAAK,WAAa,IACpB,CAEA,IAAI5H,EAAyB,CAvC/B,IAAA8C,EAAAc,EAAAkC,EAAAC,EAyCI,GAAI,OAAO/F,GAAU,WAAY,CAC/B,IAAIrB,GAAY,IAAM,CA1C5B,IAAAmE,EA2CY,CAAC,KAAK,aAAcA,EAAA,KAAK,WAAW,aAAhB,MAAAA,EAA4B,YACpD,KAAK,MAAQ9C,EAAMrB,CAAQ,EAC3B,KAAK,WAAW,EAClB,GAEAA,EAAS,YAAeC,GAAwB,CAhDtD,IAAAkE,GAiDQA,EAAA,KAAK,WAAW,aAAhB,MAAAA,EAA4B,QAAQ,eAAgB,IAAM,CACxDlE,EAAQ,EACRD,EAAW,IACb,CAAA,CACF,EAEAA,EAAS,YAAc,KAAK,WAAY,KACxCA,EAAS,MAAQ,UAASiF,GAAAd,EAAA,KAAK,aAAL,KAAA,OAAAA,EAAiB,OAAjB,KAAA,OAAAc,EAAuB,OAAO,KAAImC,GAAAD,EAAA,KAAK,aAAL,KAAA,OAAAA,EAAiB,OAAjB,KAAA,OAAAC,EAAuB,MAAM,UAAU,KAAK,IAAI,GAC5G,KAAK,MAAQ/F,EAAMrB,CAAQ,CAC7B,MACE,KAAK,MAAQqB,EAGf,KAAK,WAAW,CAClB,CAEA,QAAe,CACb,GAAK,KAAK,WAEV,CAAA,GAAI,KAAK,WAAW,mBAAmB,aAAc,CACnD,IAAM+C,EAAW,KAAK,WAAW,QAAQ,MACzCA,EAAS,eAAe,KAAK,OAAO,EAEhCO,EAAU,KAAK,IAAI,GACrBA,EAAU,KAAK,IAAI,EAAE,QAASsE,GAAW,CACvC7E,EAAS,eAAe,IAAI6E,CAAM,IAAI,KAAK,OAAO,EAAE,CACtD,CAAC,CAEL,CACA,OAAO,KAAK,WAAW,WAAY,KAAK,IAAI,EAC5C,KAAK,SAAS,CAAA,CAChB,CAEA,SAAkB,CAChB,IAAIrH,EAAM,GAAG,KAAK,OAAO,KAAK,KAAK,KAAK,GACxC,OAAI+C,EAAU,KAAK,IAAI,GACrBA,EAAU,KAAK,IAAI,EAAE,QAASsE,GAAW,CACvCrH,GAAO,MAAMqH,CAAM,IAAI,KAAK,OAAO,KAAK,KAAK,KAAK,EACpD,CAAC,EAEIrH,CACT,CACF,ECvFasH,EAAN,MAAMC,EAAU,CAOrB,YAAYC,EAAsBtE,EAAiC,CALnE,KAAA,QAA4D,KAE5D,KAAA,WAAmD,CAAC,EAIlD,KAAK,aAAesE,EACpB,KAAK,UAAY,IAAIC,GAAU,IAAI,EACnC,KAAK,OAASvE,CAChB,CAEA,UAAiB,CAEf,GAAI,KAAK,WACP,QAAWwE,KAAQ,OAAO,OAAO,KAAK,UAAU,EAC9CA,EAAK,SAAS,EAId,KAAK,WACP,KAAK,UAAU,SAAS,EAG1B,KAAK,WAAa,KAClB,KAAK,UAAY,KACjB,KAAK,QAAU,KACf,KAAK,OAAS,IAChB,CAEA,IAAI,MAAO,CACT,IAAI3G,EAAO,KAAK,OAChB,KAAOA,aAAgBwG,IACrBxG,EAAOA,EAAK,OAEd,OAAOA,CACT,CAEA,IAAI,YAAiC,CACnC,IAAIqF,EAAY,KAAK,OACrB,KAAOA,GAAQA,aAAgBmB,IAC7BnB,EAAOA,EAAK,OAEd,OAAOA,CACT,CAEA,YAAYpH,EAAcoB,EAAgB,CACnC,KAAK,aACN,KAAK,WAAWpB,CAAI,EACtB,KAAK,WAAWA,CAAI,EAAE,IAAIoB,CAAG,EAE7B,KAAK,WAAWpB,CAAI,EAAI,IAAIiI,GAAcjI,EAAMoB,EAAK,IAAI,EAE7D,CAEA,YAAYpB,EAAoB,CACzB,KAAK,YACN,KAAK,WAAWA,CAAI,GACtB,KAAK,WAAWA,CAAI,EAAE,OAAO,CAEjC,CAEA,SAAkB,CAChB,GAAI,CAAC,KAAK,YAAc,CAAC,KAAK,UAAW,MAAO,GAChD,IAAM2I,EAAW,OAAO,OAAO,KAAK,UAAU,EAAE,IAAIC,GAAQA,EAAK,QAAQ,CAAC,EAAE,KAAK,GAAG,EAC9EC,EAAS,KAAK,UAAU,QAAQ,EACtC,MAAO,GAAG,KAAK,YAAY,MAAMF,CAAQ,IAAIE,CAAM,KACrD,CAEA,MAAMV,EAA2C,CAC3C,CAACA,GAAW,CAAC,KAAK,YACtB,KAAK,QAAUA,EACX,aAAcA,GAChB,KAAK,UAAU,MAAMA,EAAQ,QAAuB,EAExD,CAEA,QAAe,CAEb,GAAI,KAAK,SAAW,KAAK,QAAQ,iBAAkB,CACjD,IAAMW,EAAQ,KAAK,QAAQ,iBACrBC,EAAQD,EAAM,SACpB,QAAS5H,EAAI,EAAGA,EAAI6H,EAAM,OAAQ7H,IAChC,GAAI6H,EAAM7H,CAAC,IAAM,KAAK,QAAS,CAC7B4H,EAAM,WAAW5H,CAAC,EAClB,KACF,CAEJ,CACA,KAAK,SAAS,CAChB,CAEA,OAAO8H,EAA2C,CAChD,GAAI,CAAC,KAAK,YAAc,CAAC,KAAK,UAAW,OACzC,IAAML,EAAW,OAAO,OAAO,KAAK,UAAU,EAAE,IAAIC,GAAQA,EAAK,QAAQ,CAAC,EAAE,KAAK,GAAG,EACpF,GAAI,CACF,GAAK,KAAK,aAAa,WAAW,GAAG,GAO9B,GAAI,uCAAuC,KAAK,KAAK,YAAY,EAAG,CACzE,IAAMlD,EAAQsD,EAAS,WAAW,GAAG,KAAK,YAAY,MAAOA,EAAS,SAAS,MAAM,EAC/Eb,EAAUa,EAAS,SAAStD,CAAK,EACnC,aAAcyC,IAChB,KAAK,MAAMA,CAA0B,EACrC,KAAK,UAAU,OAAOA,CAA0B,EAEpD,SAAW,KAAK,aAAa,WAAW,YAAY,GAAK,KAAK,aAAa,WAAW,YAAY,EAAG,CACnG,IAAMc,EAAM,KAAK,QAAQ,EACnBvD,EAAQsD,EAAS,WAAWC,EAAKD,EAAS,SAAS,MAAM,EACzDb,EAAUa,EAAS,SAAStD,CAAK,EACvC,KAAK,MAAMyC,CAAO,CACpB,MAnBwC,CACtC,IAAMc,EAAM,GAAG,KAAK,YAAY,MAAMN,CAAQ,KACxCjD,EAAQsD,EAAS,WAAWC,EAAKD,EAAS,SAAS,MAAM,EACzDb,EAAUa,EAAS,SAAStD,CAAK,EACnCyC,GAAW,iBAAkBA,GAC/B,KAAK,MAAMA,CAAO,CAEtB,CAaF,OAASe,EAAK,CACZ,QAAQ,KAAK,yBAA0B,KAAK,aAAcA,CAAG,CAC/D,CACF,CACF,ECzHaT,GAAN,KAAgB,CAKrB,YAAYvE,EAAiC,CAH7C,KAAA,MAAqB,CAAC,EACtB,KAAA,SAAoC,KAGlC,KAAK,OAASA,CAChB,CAEA,IAAI,YAAiC,CACnC,IAAIkD,EAAY,KAAK,OACrB,KAAOA,GAAQA,aAAgBkB,GAC7BlB,EAAOA,EAAK,OAEd,OAAOA,CACT,CAEA,OAAO+B,EAA0BC,EAAyB,GAAU,CAClE,GAAI,CAAC,KAAK,OAAS,CAAC,KAAK,OAAQ,OACjC,IAAMC,EAA6B,CAAC,EAEpC,SAASC,EAAYC,EAAkBjF,EAAsB,CAC3D,OAAOiF,EAAS,WAAW,GAAG,EAC1B,GAAGjF,CAAI,GAAGiF,EAAS,MAAM,CAAC,CAAC,GAC3B,GAAGjF,CAAI,IAAIiF,CAAQ,EACzB,CAEA,QAAWA,KAAYJ,EAAK,CAC1B,IAAM1I,EAAQ0I,EAAII,CAAQ,EACtBC,EAAY3G,GAAiB0G,CAAQ,EACzC,QAASxK,KAAOyK,EAAW,CACzB,IAAMC,EAAkBH,EAAYvK,EAAKqK,CAAc,EACvD,GAAI,uCAAuC,KAAKrK,CAAG,GACjD,GAAI,OAAO0B,GAAU,UAAYA,GAAS,KAAM,CAC9C,IAAMiJ,EAAO,IAAIpB,EAAUvJ,EAAK,KAAK,MAAM,EAC3C2K,EAAK,UAAW,OAAOjJ,EAAO2I,CAAc,EAC5C,KAAK,MAAM,KAAKM,CAAI,CACtB,UACS3K,EAAI,WAAW,YAAY,EAAG,CACvC,IAAM2K,EAAO,IAAIpB,EAAUvJ,EAAK,KAAK,MAAM,EAC3C2K,EAAK,UAAW,OAAOjJ,EAAO,EAAE,EAChC,KAAK,MAAM,KAAKiJ,CAAI,CACtB,SAAW3K,EAAI,WAAW,YAAY,EAAG,CACvC,IAAM2K,EAAO,IAAIpB,EAAUvJ,EAAK,KAAK,MAAM,EAC3C,QAAWqD,KAAK3B,EAAOiJ,EAAK,YAAYtH,EAAG3B,EAAM2B,CAAC,CAAC,EACnD,KAAK,MAAM,KAAKsH,CAAI,CACtB,SAAW,OAAOjJ,GAAU,UAAYA,GAAS,KAAM,CACrD,IAAMiJ,EAAO,IAAIpB,EAAUmB,EAAiB,KAAK,MAAM,EACvD,KAAK,MAAM,KAAKC,CAAI,EACpB,OAAW,CAACtH,EAAGD,CAAC,IAAK,OAAO,QAAQ1B,CAAK,EACvC,GAAI,OAAO0B,GAAM,UAAYA,GAAK,KAAM,CACtC,IAAIwH,EAAcL,EAAYlH,EAAGqH,CAAe,EAC5CrH,EAAE,WAAW,GAAG,EAClB,KAAK,OAAOD,EAAGwH,CAAW,EAEhBD,EAAK,UAAW,WAAWC,CAAW,EAC9C,UAAW,OAAOxH,EAAGwH,CAAW,CAEtC,MACED,EAAK,YAAYtH,EAAGD,CAAC,CAG3B,MACEkH,EAAMtK,CAAG,EAAI0B,CAEjB,CACF,CAEA,GAAI,OAAO,KAAK4I,CAAK,EAAE,OAAQ,CAC7B,IAAMK,EAAO,IAAIpB,EAAUc,EAAgB,KAAK,MAAM,EACtD,QAAWrK,KAAOsK,EAAOK,EAAK,YAAY3K,EAAKsK,EAAMtK,CAAG,CAAC,EACzD,KAAK,MAAM,KAAK2K,CAAI,CACtB,CACF,CAEA,SAAkB,CAChB,OAAK,KAAK,MACH,KAAK,MAAM,IAAKA,GAASA,EAAK,QAAQ,CAAC,EAAE,KAAK,EAAE,EAD/B,EAE1B,CAEA,WAAWH,EAA6B,CACtC,GAAI,CAAC,KAAK,OAAS,CAAC,KAAK,OAAQ,OAAO,KACxC,IAAIG,EAAO,KAAK,MAAM,KAAMA,GAASA,EAAK,eAAiBH,CAAQ,EACnE,OAAKG,IACHA,EAAO,IAAIpB,EAAUiB,EAAU,KAAK,MAAM,EAC1C,KAAK,MAAM,KAAKG,CAAI,GAEfA,CACT,CAEA,MAAME,EAAgC,CACpC,GAAI,CAAC,KAAK,MAAO,OACjB,GAAI,CAACA,EAAa,MAAM,MAAM,8BAA8B,EAC5D,IAAIC,EAAa,EACXC,EAAcb,GAAgBA,EAAI,QAAQ,QAAS,QAAQ,EAAE,QAAQ,SAAU,MAAM,EAE3F,KAAK,MAAM,QAAQ,CAACS,EAAMxI,IAAM,CAC9B,IAAMwE,EAAQxE,EAAI2I,EACZ1B,EAAUyB,EAAYlE,CAAK,EAC5ByC,IACDuB,EAAK,aAAa,WAAW,GAAG,GAAKvB,aAAmB,kBAEjD,YAAaA,EADtBuB,EAAK,MAAMvB,CAAO,EAGT,iBAAkBA,EACvBA,EAAQ,eAAiB2B,EAAWJ,EAAK,YAAY,EACvDG,GAAc,EAEdH,EAAK,MAAMvB,CAAO,EAEX,aAAcA,GACvBuB,EAAK,MAAMvB,CAAuB,EAEtC,CAAC,CACH,CAEA,OAAOxC,EAAyC,CAC1CA,aAAe,kBACjB,KAAK,SAAWA,EAChB,KAAK,MAAM,QAAS+D,GAASA,EAAK,OAAO/D,EAAI,KAAM,CAAC,GAC3CA,aAAe,iBACxB,KAAK,MAAM,QAAS+D,GAASA,EAAK,OAAO/D,CAAG,CAAC,CAEjD,CAEA,UAAiB,CAEf,GAAI,KAAK,MACP,QAASzE,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,IACrC,KAAK,MAAMA,CAAC,EAAE,SAAS,EAI3B,KAAK,MAAQ,CAAC,EACd,KAAK,OAAS,KACd,KAAK,SAAW,IAClB,CACF,ECrIauE,EAAN,MAAMsE,EAAY,CAiBvB,YAAYC,EAA8BC,EAA8B,KAAMvE,EAAQ,EAAG,CAhBzF,KAAA,UAAY,GACZ,KAAA,KAAO,cACP,KAAA,OAA6B,KAG7B,KAAA,SAAW,IAAIF,GAAY,IAAI,EAC/B,KAAA,OAAS,IAAIiD,GAAU,IAAI,EAC3B,KAAA,WAAa,IAAIjE,GAAc,IAAI,EACnC,KAAA,WAAkC,KAClC,KAAA,OAAkB,CAAC,EACnB,KAAA,QAAoF,KACpF,KAAA,SAAiC,CAAC,EAClC,KAAA,UAAkC,CAAC,EACnC,KAAA,IAA+B,KAtBjC,IAAAjB,EAAAc,EA0BI2F,EAAgBxJ,GAAUwJ,CAAa,EACvC3H,GAAS2H,CAAa,EACtBA,EAAc,MAAQA,EAAc,OAAS,CAAC,EAC9C,KAAK,OAASC,EACd,KAAK,QAAUtH,GAAWqH,CAAa,EACvCA,EAAgBvG,GAAauG,CAAa,EAE1C,KAAK,KAAOzG,EAAAyG,EAAsB,OAAtB,KAAAzG,EAA8B,KAC1C,KAAK,SAAWyG,EAAc,UAAY,CAAC,EAC3C,KAAK,UAAYA,EAAc,WAAa,CAAC,EAE7C,IAAIE,EAAW,IAAG7F,EAAA,KAAK,SAAL,KAAA,OAAAA,EAAa,MAAM,IAAIqB,CAAK,GACxC1E,EAAM,KAAK,UAAUgJ,EAAc,OAAS,CAAC,EAAG,CAAC5H,EAAGD,IAAM,OAAOA,GAAM,WAAa+H,EAAW/H,CAAE,EACvG,KAAK,OAASpB,GAAWmJ,EAAWlJ,CAAG,EAEvC,KAAK,WAAY,SAAS,GAAG,KAAK,OAAO,IAAI,KAAK,MAAM,EAAE,EACtDgJ,EAAc,aAAaA,EAAc,YAAY,KAAMA,CAAa,EAE5E,KAAK,MAAMA,CAAa,EAExB,IAAMG,EAAYH,EAAsB,KAAK,OAAO,EAEpD,GAAIG,GAAY,MAAQA,GAAY,KAClC,GAAI,OAAOA,GAAa,WAAY,CAElC,IAAI/K,EAAgB,IAAM,CACxB,GAAI,KAAK,UAAW,OACpB,IAAIwH,EAAQuD,EAAS/K,CAAQ,EAC7B,KAAK,SAAU,OAAO,MAAM,QAAQwH,CAAK,EAAIA,EAAQ,CAACA,CAAK,CAAC,CAC9D,EAEAxH,EAAU,YAAc,KACxBA,EAAU,MAAQ,SAAS,KAAK,OAAO,IAAI,KAAK,MAAM,YACtDA,EAAU,YAAeC,GAAwB,KAAK,QAAQ,eAAgB,IAAM,CAClFA,EAAQ,EACRD,EAAW,IACb,CAAC,EACDA,GAAYA,EAAS,CACvB,MACE,KAAK,SAAU,OAAO,MAAM,QAAQ+K,CAAQ,EAAIA,EAAW,CAACA,CAAQ,CAAC,EAGzE,KAAK,OAAO,MAAQ,KAAK,OAAO,KAAK,IAAI,CAC3C,CAEA,gBAAiB,CAEf,IAAIpI,EAAO8B,GAAQ,SAAS,KAAK,OAAO,EACpC,SAAS,gBAFQ,6BAEsB,KAAK,OAAO,EACnD,SAAS,cAAc,KAAK,OAAO,EAIvC,GAFA,KAAK,WAAa9B,EAEd,KAAK,QACP,QAAWhD,KAAO,KAAK,QAAS,CAC9B,IAAM8C,EAAY9C,EACZ0C,EAAU,KAAK,QAAQI,CAAS,EAClCP,EAAWnC,GAAiBsC,EAAQtC,EAAO,IAAI,EACnD4C,EAAK,iBAAiBF,EAAWP,CAAE,EACnC,KAAK,QAAQ,eAAiB7B,GAAM,CAClCA,EAAE,WAAY,oBAAoBoC,EAAWP,CAAE,EAC/CA,EAAK,IACP,CAAC,CACH,CAGF,OAAI,KAAK,YACP,OAAO,OAAO,KAAK,WAAW,KAAM,EAAE,QAAQmD,GAAQA,EAAK,OAAO,CAAC,EAE9D1C,CACT,CAEA,UAAiB,CACf,KAAK,UAAY,GACb,KAAK,UAEP,KAAK,SAAS,SAAS,EAGrB,KAAK,SACP,KAAK,OAAO,MAAO,QAAS2H,GAASA,EAAK,OAAO,CAAC,EAClD,KAAK,OAAO,SAAS,GAGnB,KAAK,YACP,KAAK,WAAW,SAAS,EAG3B,KAAK,WAAa,KAClB,KAAK,OAAS,CAAC,EACf,KAAK,QAAU,KACf,KAAK,SAAW,CAAC,EACjB,KAAK,UAAY,CAAC,EAClB,KAAK,OAAS,IAChB,CACA,MAAMhG,EAAsB,CAC1BxD,EAAM,KAAK,SAAUwD,EAAK,QAAQ,EAClCxD,EAAM,KAAK,UAAWwD,EAAK,SAAS,EAEpC,IAAMlB,EAAO,OAAO,KAAKkB,CAAI,EAC7B,QAASxC,EAAI,EAAGA,EAAIsB,EAAK,OAAQtB,IAAK,CACpC,IAAMkJ,EAAc5H,EAAKtB,CAAC,EACpBT,EAASiD,EAAa0G,CAAW,EACnC,CAAC,IAAK,cAAe,OAAQ,WAAY,YAAa,QAAS,KAAK,OAAO,EAAE,SAASA,CAAW,IAE1F,CAAC,UAAW,YAAa,WAAY,kBAAmB,YAAa,kBAAmB,WAAW,EAAE,SAASA,CAAW,EAClI,KAAK,QAAQA,EAAY,UAAU,CAAC,EAAoB3J,CAAK,EACpD2J,EAAY,WAAW,IAAI,EACpC,KAAK,SAASA,EAAY,UAAU,CAAC,EAAE,YAAY,EAAgB3J,CAAK,EAC/D2J,GAAe,UACxB,KAAK,QAAU3J,EACN2J,GAAe,SAAW,OAAO3J,GAAU,SACpD,KAAK,WAAY,SAASA,CAAK,EAE/B,KAAK,WAAY,IAAI2J,EAAa3J,CAAK,EAE3C,CACIiD,EAAK,OACP,KAAK,OAAO,OAAOA,EAAK,OAAS,CAAC,EAAG,IAAI,GAAG,KAAK,OAAO,IAAI,KAAK,MAAM,EAAE,EAAE,CAG/E,CACA,SAAS1D,EAAiBuE,EAA2D,CAEnF,KAAK,QAAU,KAAK,SAAW,CAAC,EAEhC,IAAI5C,EAAU,KAAK,QAAQ3B,CAAI,EAC3B,OAAO2B,GAAW,WACpB,KAAK,QAAQ3B,CAAI,EAAI,CAACb,EAAc4C,IAAsB,CACxDJ,EAASxC,EAAO4C,CAAI,EACpBwC,EAASpF,EAAO4C,CAAI,CACtB,EAEA,KAAK,QAAQ/B,CAAI,EAAIuE,CAEzB,CAEA,QAAiCvE,EAASuE,EAA4B,CACpE,IAAM5C,EAAU,KAAK,OAAO3B,CAAI,EAE5B,OAAO2B,GAAY,WACrB,KAAK,OAAO3B,CAAI,GAAK,IAAIT,IAAgB,CACtCoC,EAAqB,GAAGpC,CAAI,EAC5BgF,EAAsB,GAAGhF,CAAI,CAChC,GAEA,KAAK,OAAOS,CAAI,EAAIuE,CAExB,CACA,SAAuB,CACrB,IAAI6C,EAAoB,KACxB,KAAOA,GAAQA,aAAgB2C,IAAe3C,EAAK,QACjDA,EAAOA,EAAK,OAEd,OAAOA,CACT,CAEA,WAAWpH,EAAmB,CAC5B,IAAI+B,EAA2B,KAC/B,KAAOA,IAAS,CAACA,EAAK,UAAY,CAAC,OAAO,UAAU,eAAe,KAAKA,EAAK,SAAU/B,CAAI,IACzF+B,EAAOA,EAAK,OAEd,OAAOA,GAAQA,EAAK,SAAWA,EAAK,SAAS/B,CAAI,EAAI,MACvD,CAEA,WAAWA,EAAcS,EAAY,CACnC,KAAK,SAAW,KAAK,UAAY,CAAC,EAClC,KAAK,SAAST,CAAI,EAAIS,CACxB,CAEA,YAAYT,EAAmB,CAC7B,OAAO,KAAK,UAAY,KAAK,UAAUA,CAAI,EAAI,MACjD,CAEA,YAAYjB,EAAa0B,EAAY,CACnC,KAAK,UAAY,KAAK,WAAa,CAAC,EACpC,KAAK,UAAU1B,CAAG,EAAI0B,CAExB,CAEA,aAAsB,CACpB,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,SAAU,MAAO,GAC3C,IAAIwI,EAAM,KAAK,OAAO,QAAQ,EAC9B,OAAAA,GAAO,KAAK,SAAS,MAAM,IAAI5B,GAASA,aAAiB0C,GAAc1C,EAAM,YAAY,EAAI,EAAE,EAAE,KAAK,EAAE,EACjG4B,CACT,CAEA,cAAuB,CACrB,GAAI,CAAC,KAAK,UAAY,CAAC,KAAK,WAAY,MAAO,GAC/C,IAAIoB,EAAU,KAAK,SAAS,aAAa,EACnCzI,EAAa,KAAK,WAAW,aAAa,EAChD,MAAO,IAAI,KAAK,OAAO,GAAGA,CAAU,IAAIyI,CAAO,KAAK,KAAK,OAAO,GAClE,CAEA,MAAMlG,EAAyBX,EAAmC,CAChE,GAAI,CAACW,EAAY,MAAM,IAAI,MAAM,0BAA0B,EAG3D,GAFA,KAAK,WAAaA,EAEd,KAAK,QACP,QAAWpF,KAAO,KAAK,QAAS,CAC9B,IAAM8C,EAAY9C,EACZ0C,EAAU,KAAK,QAAQI,CAAS,EAClCP,EAAWnC,GAAiBsC,EAAQtC,EAAO,IAAI,EACnDgF,EAAW,iBAAiBtC,EAAWP,CAAE,EACzC,KAAK,QAAQ,eAAiB7B,GAAM,CAClCA,EAAE,WAAY,oBAAoBoC,EAAWP,CAAE,EAC/CA,EAAK,IACP,CAAC,CACH,CAGE,KAAK,UACP,KAAK,SAAS,MAAM,QAAQ,CAAC+F,EAAOnG,IAAM,CACxC,IAAMoJ,EAAYnG,EAAW,WAAWjD,CAAC,EACrCoJ,aAAqB,MAAQjD,aAAiB0C,IAChD1C,EAAM,MAAMiD,EAA0B9G,CAAQ,CAElD,CAAC,EAGH,KAAK,OAAO,OAAS,KAAK,OAAO,MAAM,IAAI,CAC7C,CAEA,OAAOW,EAAmF,CACxF,IAAMkB,EAAU,KAAK,eAAe,EACpClB,EAAW,YAAYkB,CAAO,EAC9B,KAAK,OAAO,OAAS,KAAK,OAAO,MAAM,IAAI,EAC3C,IAAI7B,EAAW,KAAK,QAAQ,EAAE,OAAO,SACjC4D,EAAOjD,EAAW,YAAY,EAC5Bb,EAAc8D,aAAgB,WAAaA,EAAO,SAAS,KACjE,OAAA5D,IAAAA,EAAaH,GAAeC,CAAW,GACvC,KAAK,OAAO,OAAOE,CAA4B,EAC/C,KAAK,SAAS,MAAM,QAAQ6D,GAAS,CACnC,GAAIA,aAAiB0C,IAAe1C,EAAM,QAAS,CACjD,IAAI1B,EAAM0B,EAAM,QAAS,KAAK,QAAQ,CAAC,EACvC1B,GAAO0B,EAAM,OAAO1B,CAAG,CACzB,MACE0B,EAAM,OAAOhC,CAAO,CAExB,CAAC,EACMA,CACT,CAEA,QAAS,CA7QX,IAAA9B,EA8QQ,KAAK,OACP,KAAK,OAAO,SAAS,OAAO,IAAI,IAGhCA,EAAA,KAAK,aAAL,MAAAA,EAAiB,OAAA,EACjB,KAAK,SAAS,EAElB,CACF,EClRagH,GAAN,KAAuE,CAK1E,YAAYC,EAAW,CAJvB,KAAQ,UAAY,IAAItL,GAKpB,KAAK,cAAgBuL,GAAA,CAAA,EAAKD,CAAAA,EAC1B,KAAK,QAAUC,GAAA,CAAA,EAAKD,CAAAA,CACxB,CAEA,IAAuBzL,EAAQ2L,EAAoB,CAC/C,OAAIA,GAAG,KAAK,UAAU,YAAY3L,EAAe2L,CAAC,EAC3C,KAAK,QAAQ3L,CAAG,CAC3B,CAEA,IAAuBA,EAAQ0B,EAAmB,CAC9C,KAAK,QAAQ1B,CAAG,EAAI0B,EACpB,KAAK,UAAU,OAAO1B,CAAa,CACvC,CAEA,YAA+BA,EAAQuC,EAA0B,CAC7D,OAAO,KAAK,UAAU,YAAYvC,EAAeuC,CAAE,CACvD,CAEA,eAAkCvC,EAAQuC,EAAoB,CAC1D,KAAK,UAAU,eAAevC,EAAeuC,CAAE,CACnD,CAEA,MAAyBvC,EAAc,CACnC,KAAK,IAAIA,EAAK,KAAK,cAAcA,CAAG,CAAC,CACzC,CAEA,UAAiB,CACb,KAAK,UAAU,SAAS,CAC5B,CACJ,ECrCA,IAAA4L,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,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,GC3NTE,GAAqC,CACzC,MAAO,KAAK,MAAM,KAAK,UAAUD,EAAK,CAAC,EACvC,KAAME,GAAWF,EAAK,CACxB,EAEA,SAASG,GAAWC,EAA2B,CAC7C,IAAMC,EAAa,OAAO,KAAKD,EAAM,MAAM,EAAE,CAAC,EAC9C,OAAOC,EAAaD,EAAM,OAAOC,CAAU,EAAE,OAAS,CACxD,CAIA,SAASC,GAAcC,EAAoC,CACzD,QAASC,KAAOD,EACd,GAAI,CAAC,OAAO,KAAKP,EAAK,EAAE,SAASQ,CAAuB,EACtD,MAAM,IAAI,MAAM,gBAAgBA,CAAG,EAAE,EAGzC,GAAID,EAAQ,WAAa,CAAC,MAAM,QAAQA,EAAQ,SAAS,EACvD,MAAM,IAAI,MAAM,kCAAkC,EAEpD,GAAIA,EAAQ,YACN,CAAC,MAAM,QAAQA,EAAQ,SAAS,GAAKA,EAAQ,UAAU,KAAKE,GAAK,OAAOA,GAAM,QAAQ,GACxF,MAAM,IAAI,MAAM,mCAAmC,EAGvD,GAAI,WAAYF,EAAS,CACvB,IAAMG,EAASH,EAAQ,OACvB,GAAI,OAAOG,GAAW,UAAYA,IAAW,KAC3C,MAAM,IAAI,MAAM,4CAA4C,CAEhE,CACF,CAIA,SAASC,GAAUC,EAAaC,EAAmB,CAxCnD,IAAAC,EAyCE,QAAWN,KAAOK,EAEdA,EAAOL,CAAG,GACV,OAAOK,EAAOL,CAAG,GAAM,UACvB,CAAC,MAAM,QAAQK,EAAOL,CAAG,CAAC,IAE1BM,EAAAF,EAAAJ,CAAAA,IAAA,OAAAI,EAAAJ,CAAAA,EAAgB,CAAC,GACjBG,GAAUC,EAAOJ,CAAG,EAAGK,EAAOL,CAAG,CAAC,GAElCI,EAAOJ,CAAG,EAAIK,EAAOL,CAAG,CAG9B,CAIA,SAASO,GAAcC,EAAcZ,EAA2B,CAC9D,IAAMa,EAA0C,CAAC,EAC3CC,EAAYf,GAAWC,CAAK,EAElC,QAAWI,KAAOJ,EAAO,CACvB,IAAMe,EAAQf,EAAMI,CAAuB,EAE3C,GAAIA,IAAQ,SACV,QAAWY,KAAahB,EAAM,OAC5B,CAAC,GAAG,MAAMc,CAAS,EAAE,KAAK,CAAC,EAAE,QAAQG,GACnCJ,EAAO,KAAKG,CAAS,IAAIC,CAAC,EAAE,EAAIjB,EAAM,OAAOgB,CAAS,EAAEC,CAAC,CAC3D,UAEOb,IAAQ,YACjB,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQa,GAC3BJ,EAAO,cAAcI,CAAC,EAAE,EAAIjB,EAAM,UAAUiB,CAAC,CAC/C,MACK,CAAA,GAAIb,IAAQ,YACjB,SAEA,GAAI,OAAOW,GAAU,UAAYA,IAAU,KACzC,QAAWG,KAAKH,EACdF,EAAO,KAAKT,CAAG,IAAIc,EAAE,QAAQ,IAAK,GAAG,CAAC,EAAE,EAAKH,EAAiCG,CAAC,CAAA,CAIvF,CAEA,IAAIC,EAAO,GACX,QAAWC,KAAQP,EACjBM,GAAQ,KAAKC,CAAI,KAAKP,EAAOO,CAAI,CAAC;EAEpC,MAAO,gBAAgBR,CAAI;EAASO,CAAI,GAC1C,CAIO,SAASE,EAAST,EAA0B,CACjD,GAAI,CAACf,GAAOe,CAAI,EAAG,MAAM,MAAM,UAAUA,CAAI,aAAa,EAC1D,OAAOf,GAAOe,CAAI,CACpB,CAEO,SAASU,GAASV,EAAcZ,EAAkC,CACvEE,GAAcF,CAAK,EACdH,GAAOe,CAAI,IAAGf,GAAOe,CAAI,EAAI,gBAAgBhB,EAAK,GACvDW,GAAUV,GAAOe,CAAI,EAAGZ,CAAK,CAC/B,CAEA,SAASF,GAAWW,EAAgC,CAClD,IAAIc,EAAO,gBAAgBd,CAAM,EACjCc,EAAK,UAAY,UACjB,QAASX,KAAQW,EAAK,OACpBA,EAAK,OAAOX,CAAI,EAAE,QAAQ,EAC1BW,EAAK,UAAUX,CAAI,EAAIW,EAAK,OAAOX,CAAI,EAAE,OAAS,EAAIW,EAAK,UAAUX,CAAI,EAE3E,OAAOW,CACT,CAEO,SAASC,GAAYZ,EAAmC,CAC7D,IAAIZ,EAAQqB,EAAST,CAAI,EACnBE,EAAYf,GAAWC,CAAK,EAC9ByB,EAA8B,CAAC,EAEnC,QAAWrB,KAAOJ,EAAO,CACvB,IAAMe,EAAQf,EAAMI,CAAuB,EAE3C,GAAIA,IAAQ,SACV,QAAWQ,KAAQZ,EAAM,OAAQ,CAC/B,IAAI0B,EAAa,CAAC,EAClB,CAAC,GAAG,MAAMZ,CAAS,EAAE,KAAK,CAAC,EAAE,QAAQG,GAAKS,EAAWT,CAAC,EAAIjB,EAAM,OAAOY,CAAI,EAAEK,CAAC,CAAC,EAC/EQ,EAAOb,CAAI,EAAIc,CACjB,SACStB,IAAQ,YACjBqB,EAAO,UAAYzB,EAAM,kBAChBI,IAAQ,YACjBqB,EAAO,UAAYzB,EAAM,kBAEzByB,EAAOrB,CAAG,EAAI,CAAC,EACX,OAAOW,GAAU,UAAYA,IAAU,KACzC,QAAWG,KAAKH,EACdU,EAAOrB,CAAG,EAAEc,CAAC,EAAKH,EAAiCG,CAAC,CAI5D,CAEA,OAAOO,CACT,CAEO,SAASE,IAAuB,CACrC,IAAI3B,EAAQqB,EAAS,OAAO,EACtBP,EAAYf,GAAWC,CAAK,EAC9B4B,EAAQ,CAAC,EAEb,QAAWxB,KAAOJ,EAAO,CACvB,IAAM6B,EAAUzB,EACVW,EAAQf,EAAMI,CAAuB,EAE3C,GAAIA,IAAQ,SACV,QAAWQ,KAAQZ,EAAM,OAAQ,CAC/B,IAAI0B,EAAa,CAAC,EAClB,CAAC,GAAG,MAAMZ,CAAS,EAAE,KAAK,CAAC,EAAE,QAAQG,GAAKS,EAAWT,CAAC,EAAI,SAASL,CAAI,IAAIK,CAAC,GAAG,EAC/EW,EAAMhB,CAAI,EAAIc,CAChB,SACStB,IAAQ,YACjBwB,EAAM,UAAY,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,IAAIX,GAAK,kBAAkBA,CAAC,GAAG,MACjE,CAAA,GAAIb,IAAQ,YACjB,SAGA,GADAwB,EAAMC,CAAO,EAAI,CAAC,EACd,OAAOd,GAAU,UAAYA,IAAU,KACzC,QAAWG,KAAKH,EACba,EAAMC,CAAO,EAA6BX,CAAC,EAAI,SAASW,CAAiB,IAAIX,EAAE,QAAQ,IAAK,GAAG,CAAC,GAAA,CAIzG,CAEA,OAAOU,CACT,CAEO,SAASE,IAAmB,CACjC,OAAO,OAAO,QAAQjC,EAAM,EACzB,IAAI,CAAC,CAACe,EAAMZ,CAAK,IAAMW,GAAcC,EAAMZ,CAAK,CAAC,EACjD,KAAK;CAAI,CACd,CAEO,SAAS+B,GAAWC,EAA6B,CAxLxD,IAAAtB,EAyLE,GAAI,OAAO,UAAa,YACxB,GAAIsB,EAAI,CACNA,EAAG,YAAcF,GAAS,EAC1B,MACF,MACEE,GAAKtB,EAAA,SAAS,eAAe,eAAe,IAAvC,KAAAA,EACA,OAAO,OAAO,SAAS,cAAc,OAAO,EAAG,CAAE,GAAI,eAAgB,CAAC,EAC3EsB,EAAG,YAAcF,GAAS,EAC1B,SAAS,KAAK,YAAYE,CAAE,CAGhC,CAEO,SAASC,EAAaC,EAAW,CACtC,OAAOA,EAAI,EAAI,IACjB,CAEO,SAASC,GAAUC,EAAgC,CAExD,IAAIC,EADe,OAAOD,GAAU,WAAaA,EAAO,YAAcA,EAEtE,KAAOC,IAAS,CAACA,EAAK,YAAc,CAACA,EAAK,WAAW,IAAI,WAAW,IAClEA,EAAOA,EAAK,OAGd,IAAIF,EAAY,QAEhB,OAAIE,GAAQA,EAAK,YAAcA,EAAK,WAAW,IAAI,WAAW,IAC5DF,EAAYE,EAAK,WAAW,IAAI,WAAW,EAC3C,OAAOD,GAAU,YAAcC,EAAK,WAAW,YAAY,YAAaD,CAAM,GAEzED,CACT,CCrNA,IAAMG,GAAe,CAAC,SAAS,EAE/B,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQrB,GAAI,CAC7BqB,GAAa,KAAK,YAAYrB,CAAC,EAAE,EACjCqB,GAAa,KAAK,YAAYrB,CAAC,EAAE,CACrC,CAAC,EAID,SAASsB,GAAWC,EAAgBC,EAAoB,UAAmB,CAEvE,GAAI,CAACH,GAAa,SAASG,CAAK,EAC5B,MAAM,MAAM,cAAcA,CAAI,WAAW,EAE7C,IAAIC,EACJ,GAAID,GAAQ,UACRC,EAAaF,UACNC,GAAA,MAAAA,EAAM,WAAW,WAAA,EAAc,CACtC,IAAIE,EAAS,SAASF,EAAK,QAAQ,YAAa,EAAE,EAAG,EAAE,EACvDC,EAAaF,EAASG,CAC1B,SAAWF,GAAA,MAAAA,EAAM,WAAW,WAAA,EAAc,CACtC,IAAIE,EAAS,SAASF,EAAK,QAAQ,YAAa,EAAE,EAAG,EAAE,EACvDC,EAAaF,EAASG,CAC1B,MACID,EAAaF,EAEjB,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGE,CAAU,CAAC,CAC9C,CAEA,SAASE,GAAYR,EAA+C,CAEhE,GAAI,CAACA,EAAQ,MAAO,GAEpB,IAAIC,EADe,OAAOD,GAAU,WAAaA,EAAO,YAAcA,EAEtE,KAAOC,IAAS,CAACA,EAAK,YAAc,CAACA,EAAK,WAAW,IAAI,UAAU,IAC/DA,EAAOA,EAAK,OAGhB,IAAII,EAAO,EAEX,OAAIJ,GAAQA,EAAK,YAAcA,EAAK,WAAW,IAAI,UAAU,IACzDI,EAAOF,GAAWE,EAAMJ,EAAK,WAAW,IAAI,UAAU,CAAC,EACvD,OAAOD,GAAU,YAAcC,EAAK,WAAW,YAAY,WAAYD,CAAM,GAE1EK,CACX,CAGO,SAASI,EAAUT,EAAgCK,EAAoB,UAAmB,CAC7F,IAAIK,EAAQP,GAAWK,GAAYR,CAAM,EAAGK,CAAI,EAChD,OAAOd,GAAU,EAAE,UAAUmB,CAAK,CACtC,CCnDA,IAAMC,GAAmB,CAAC,SAAS,EAEnC,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ9B,GAAK,CAC9B8B,GAAiB,KAAK,YAAY9B,CAAC,EAAE,EACrC8B,GAAiB,KAAK,YAAY9B,CAAC,EAAE,CACzC,CAAC,EAID,SAAS+B,GAAcR,EAAgBS,EAA0B,UAAmB,CAEhF,GAAI,CAACF,GAAiB,SAASE,CAAQ,EACnC,MAAM,MAAM,iBAAiBA,CAAO,WAAW,EAEnD,IAAIC,EACJ,GAAID,GAAW,UACXC,EAAgBV,UACTS,GAAA,MAAAA,EAAS,WAAW,WAAA,EAAc,CACzC,IAAIN,EAAS,SAASM,EAAQ,QAAQ,YAAa,EAAE,EAAG,EAAE,EAC1DC,EAAgBV,EAASG,CAC7B,SAAWM,GAAA,MAAAA,EAAS,WAAW,WAAA,EAAc,CACzC,IAAIN,EAAS,SAASM,EAAQ,QAAQ,YAAa,EAAE,EAAG,EAAE,EAC1DC,EAAgBV,EAASG,CAC7B,MACIO,EAAgBV,EAEpB,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGU,CAAa,CAAC,CACjD,CAEA,SAASC,GAAef,EAA+C,CAEnE,GAAI,CAACA,EAAQ,MAAO,GAEpB,IAAIC,EADe,OAAOD,GAAU,WAAaA,EAAO,YAAcA,EAEtE,KAAOC,IAAS,CAACA,EAAK,YAAc,CAACA,EAAK,WAAW,IAAI,aAAa,IAClEA,EAAOA,EAAK,OAGhB,IAAIY,EAAU,EAEd,OAAIZ,GAAQA,EAAK,YAAcA,EAAK,WAAW,IAAI,aAAa,IAC5DY,EAAUD,GAAcC,EAASZ,EAAK,WAAW,IAAI,aAAa,CAAC,EACnE,OAAOD,GAAU,YAAcC,EAAK,WAAW,YAAY,cAAeD,CAAM,GAE7Ea,CACX,CAEO,SAASG,EAAahB,EAA+C,CACxE,IAAIU,EAAQK,GAAef,CAAM,EACjC,OAAOf,EAASe,EAASD,GAAUC,CAAM,EAAI,OAAO,EAAE,UAAUU,CAAK,CACzE,CCjDA,IAAMO,EAAazD,GAAM,OAAO,QAAQ,OAElC0D,GAAe,CAAC,UAAW,MAAM,EAEvC,CAAC,GAAG,MAAMD,CAAU,EAAE,KAAK,CAAC,EAAE,QAAQpC,GAAK,CACvCqC,GAAa,KAAK,YAAYrC,CAAC,EAAE,EACjCqC,GAAa,KAAK,YAAYrC,CAAC,EAAE,EACjCqC,GAAa,KAAK,SAASrC,CAAC,EAAE,CAClC,CAAC,EAID,SAASsC,GAAWC,EAAcC,EAAuB,CACrD,GAAID,EAAO,GAAKA,EAAOH,EAAa,EAAG,OAAOG,EAC9C,IAAIE,EAAWF,EAAOC,EACtB,OAAAC,EAAW,KAAK,IAAI,EAAG,KAAK,IAAIL,EAAa,EAAGK,CAAQ,CAAC,EAClDA,CACX,CAEA,SAASC,GAAUH,EAAcC,EAAuB,CACpD,GAAID,EAAO,GAAKA,EAAOH,EAAa,EAAG,OAAOG,EAC9C,IAAII,EAAW,KAAK,OAAOP,EAAa,GAAK,CAAC,EAC1CK,EAAWF,GAAQI,EAAWJ,EAAOC,EAAQD,EAAOC,EACxD,OAAAC,EAAWA,EAAW,GAAKA,EAAWL,EAAa,EAAI,CAAEK,EAAWA,EACpEA,EAAW,KAAK,IAAI,EAAG,KAAK,IAAIL,EAAa,EAAGK,CAAQ,CAAC,EAClDA,CACX,CAEA,SAASG,GAAWC,EAAoBN,EAAoB,UAAmB,CAE3E,GAAI,OAAOA,GAAQ,SAAU,OAAOA,EAEpC,GAAIA,GAAQ,UAAW,OAAOM,EAE9B,GAAI,CAACR,GAAa,SAASE,CAAK,EAC5B,MAAM,MAAM,cAAcA,CAAI,WAAW,EAG7C,GAAIA,EAAK,WAAW,WAAW,EAAG,CAC9B,IAAIb,EAAS,SAASa,EAAK,QAAQ,YAAa,EAAE,EAAG,EAAE,EACvD,OAAOD,GAAWO,EAAYnB,CAAM,CAExC,SAAWa,EAAK,WAAW,WAAW,EAAG,CACrC,IAAIb,EAAS,SAASa,EAAK,QAAQ,YAAa,EAAE,EAAG,EAAE,EACvD,OAAOD,GAAWO,EAAY,CAAEnB,CAAM,CAE1C,SAAWa,EAAK,WAAW,QAAQ,EAAG,CAClC,IAAIb,EAAS,SAASa,EAAK,QAAQ,SAAU,EAAE,EAAG,EAAE,EACpD,OAAOG,GAAUG,EAAYnB,CAAM,CAEvC,KACI,QAAOmB,CAEf,CAEA,SAASC,GAAY3B,EAA+C,CAEhE,GAAI,CAACA,EAAQ,MAAO,GAEpB,IAAIC,EADe,OAAOD,GAAU,WAAaA,EAAO,YAAcA,EAEtE,KAAOC,IAAS,CAACA,EAAK,YAAc,CAACA,EAAK,WAAW,IAAI,UAAU,IAC/DA,EAAOA,EAAK,OAGhB,IAAImB,EAAO,EAEX,OAAInB,GAAQA,EAAK,YAAcA,EAAK,WAAW,IAAI,UAAU,IACzDmB,EAAOK,GAAWL,EAAMnB,EAAK,WAAW,IAAI,UAAU,CAAC,EACvD,OAAOD,GAAU,YAAcC,EAAK,WAAW,YAAY,WAAYD,CAAM,GAE1EoB,CACX,CAOA,SAASQ,GAAYC,EAAiBC,EAAmBC,EAAsB,CAC3E,OAAIA,GAAQ,EAAUF,EAClBC,IAAc,WAAaD,IAAY,EAAUE,EACjDD,IAAc,UAAYD,IAAYZ,EAAa,EAAUA,EAAa,EAAIc,EAC3EF,CACX,CAEO,SAASG,EAAWhC,EAAuCoB,EAAoB,UAAWa,EAAgB,UAAmB,CAEhI,IAAID,EAAaC,GAAS,UAAY,UAAYA,EAElD,GAAI,CAACjC,EACD,OAAOT,GAAU,EAAEyC,CAAU,EAAEP,GAAW,EAAGL,CAAI,CAAC,EAGtD,IAAIc,EACJ,GAAId,GAAQ,OACRc,EAAajD,EAASc,GAAUC,CAAM,CAAC,EAAE,UAAUgC,CAAU,MAC1D,CACH,IAAIxC,EAAQP,EAASc,GAAUC,CAAM,CAAC,EAClC6B,EAAUD,GAAYD,GAAY3B,CAAM,EAAGR,EAAM,UAAWA,EAAM,QAAQ,EAC9E0C,EAAaT,GAAWI,EAAST,CAAI,CACzC,CACA,IAAIe,EAAS5C,GAAU,EAAEyC,CAAU,EACnC,GAAI,CAACG,EACD,MAAM,MAAM,UAAU,KAAK,UAAUH,CAAU,CAAC,yBAAyBjC,GAAUC,CAAM,CAAC,EAAE,EAIhG,OAFkBmC,EAAOD,CAAU,CAGvC,CAEO,SAASE,GAAgBpC,EAAuCoB,EAAoB,UAAWa,EAAgB,UAAmB,CAErI,IAAIrD,EAAYqD,GAAS,UAAY,UAAYA,EAC7CzD,EAAOwB,EAASD,GAAUC,CAAgC,EAAI,QAC9DX,EAASD,GAAYZ,CAAI,EAE7B,GAAI,CAACwB,EACD,OAAOX,EAAOT,CAAS,EAAE6C,GAAW,EAAGL,CAAI,CAAC,EAGhD,IAAIc,EACJ,GAAId,GAAQ,OACRc,EAAajD,EAAST,CAAI,EAAE,UAAUI,CAAS,MAC5C,CACH,IAAIY,EAAQP,EAAST,CAAI,EACrBqD,EAAUD,GAAYD,GAAY3B,CAAM,EAAGR,EAAM,UAAWA,EAAM,QAAQ,EAC9E0C,EAAaT,GAAWI,EAAST,CAAI,CACzC,CAEA,OAAO/B,EAAOT,CAAS,EAAEsD,CAAU,CACvC,CCtIA,IAAAG,GAAA,GAAAC,GAAAD,GAAA,gBAAAE,GAAA,cAAAC,GAAA,iBAAAC,GAAA,UAAAC,GAAA,WAAAC,GAAA,UAAAC,GAAA,eAAAC,GAAA,eAAAC,GAAA,uBAAAC,GAAA,WAAAC,GAAA,iBAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,aAAAC,GAAA,YAAAC,GAAA,gBAAAC,GAAA,kBAAAC,GAAA,oBAAAC,GAAA,YAAAC,GAAA,WAAAC,GAAA,YAAAC,GAAA,WAAAC,GAAA,aAAAC,GAAA,UAAAC,GAAA,WAAAC,GAAA,SAAAC,GAAA,cAAAC,GAAA,YAAAC,GAAA,mBAAAC,GAAA,SAAAC,GAAA,UAAAC,GAAA,kBAAAC,GAAA,eAAAC,GAAA,kBAAAC,GAAA,cAAAC,GAAA,gBAAAC,GAAA,aAAAC,GAAA,eAAAC,GAAA,eAAAC,GAAA,gBAAAC,GAAA,gBAAAC,GAAA,cAAAC,GAAA,aAAAC,GAAA,UAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,aAAAC,GAAA,gBAAAC,GAAA,eAAAC,GAAA,cAAAC,GAAA,YAAAC,GAAA,iBAAAC,GAAA,gBAAAC,GAAA,aAAAC,GAAA,WAAAC,GAAA,cAAAC,GAAA,eAAAC,GAAA,eAAAC,GAAA,aAAAC,GAAA,UAAAC,GAAA,YAAAC,GAAA,aAAAC,GAAA,mBAAAC,GAAA,kBAAAC,GAAA,WAAAC,GAAA,cAAAC,GAAA,gBAAAC,GAAA,QAAAC,GAAA,aAAAC,GAAA,UAAAC,GAAA,SAAAC,GAAA,QAAAC,GAAA,aAAAC,GAAA,UAAAC,GAAA,WAAAC,GAAA,gBAAAC,GAAA,YAAAC,GAAA,oBAAAC,GAAA,kBAAAC,KCGA,SAASC,GAAaC,EAAsF,CAAC,EAAmB,CAHhI,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,UAAYI,GAAS,CACbA,EAAK,SAAW,QAChB,QAAQ,KAAK,kDAAkD,CAEvE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,CAAQ,EAC1C,gBAAkBA,GAAaE,EAAWF,CAAQ,EAClD,MAAQA,GAAaE,EAAWF,EAAU,WAAYJ,EAAM,IAAII,CAAQ,CAAC,EACzE,mBAAoB,YACpB,oBAAqB,SACrB,oBAAsBA,GAAaE,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EACtF,oBAAqBG,EAAa,GAAI,EACtC,OAAQ,OACR,UAAW,CACP,MAAQH,GAAaE,EAAWF,EAAU,WAAYF,EAAY,IAAIE,CAAQ,CAAC,EAC/E,oBAAsBA,GAAaE,EAAWF,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAChG,CACJ,CACJ,CACJ,CCzBA,SAASI,GAAKC,EAA8C,CAAC,EAAmB,CAHhF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACvD,MAAO,CACH,MAAO,CACH,QAAS,OACT,oBAAqB,WACrB,kBAAmB,6EACnB,aAAeG,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACnE,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWF,EAAM,IAAIE,CAAQ,CAAC,EAClF,MAAQA,GAAaG,EAAWH,EAAU,WAAYF,EAAM,IAAIE,CAAQ,CAAC,EACzE,QAAUA,GAAa,aAAaG,EAAWH,EAAU,UAAWF,EAAM,IAAIE,CAAQ,CAAC,CAAC,GACxF,cAAe,OACf,SAAU,SACV,UAAW,CACP,SAAU,QACV,MAAO,OACP,OAAQ,OACR,QAAS,OACb,EACA,6BAA8B,CAC1B,SAAU,QACV,aAAeA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACpE,WAAY,MACZ,OAAQ,CACZ,EACA,QAAS,CACL,SAAU,OACV,cAAgBA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACpE,MAAQA,GAAaG,EAAWH,EAAU,UAAWF,EAAM,IAAIE,CAAQ,CAAC,EACxE,OAAQ,CACZ,EACA,YAAa,CACT,SAAU,QACV,UAAW,SACX,QAAUA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EAC9D,OAAQ,MACZ,EACA,UAAW,CACP,SAAU,UACV,QAAUA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EAC9D,MAAQA,GAAaG,EAAWH,EAAU,WAAYF,EAAM,IAAIE,CAAQ,CAAC,CAC7E,EACA,aAAc,CACV,SAAU,SACV,QAAS,OACT,IAAKC,EAAa,CAAC,EACnB,aAAeD,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACpE,UAAYA,GAAa,aAAaG,EAAWH,EAAU,UAAWF,EAAM,IAAIE,CAAQ,CAAC,CAAC,EAC9F,CACJ,CACJ,CACJ,CCrDA,SAASI,GAASC,EAKd,CAAC,EAAmB,CACpB,GAAM,CAAE,UAAAC,EAAY,aAAc,YAAAC,EAAc,GAAI,IAAAC,EAAM,GAAI,IAAAC,EAAM,EAAG,EAAIJ,EAC3E,MAAO,CACH,YAAa,CAACK,EAAMC,IAAY,CAC5BC,EAAMD,EAAS,CACX,SAAU,CACN,SAAU,CACN,UAAAL,EACA,KAAMO,EAAQN,CAAW,EACzB,IAAAC,EACA,IAAAC,CACJ,CACJ,CACJ,CAAC,CACL,EACA,MAAO,CACH,QAAS,OACT,cAAeH,IAAc,aAAe,MAAQ,SACpD,SAAU,QACd,CACJ,CACJ,CAEA,SAASQ,IAAgC,CACrC,MAAO,CACH,SAAWJ,GAAS,CAChB,IAAMK,EAAML,EAAK,WAAW,UAAU,EAChCM,EAAKN,EAAK,WACVO,EAAOF,EAAI,YAAc,aAAe,QAAU,SAExDC,EAAG,MAAMC,CAAI,EAAI,GAAGF,EAAI,KAAK,IAAI,CAAC,IAClCC,EAAG,MAAM,WAAa,IACtBA,EAAG,MAAM,SAAW,OAEpB,IAAME,EAAUH,EAAI,KAAK,YAAaI,GAAiB,CACnDH,EAAG,MAAMC,CAAI,EAAI,GAAGE,CAAI,GAC5B,CAAC,EACDT,EAAK,QAAQ,SAAUQ,CAAO,CAClC,CACJ,CACJ,CAEA,SAASE,IAAiC,CACtC,MAAO,CACH,SAAWV,GAAS,CAChB,IAAMK,EAAML,EAAK,WAAW,UAAU,EAChCW,EAASX,EAAK,WACdY,EAAeP,EAAI,YAAc,aAEvCM,EAAO,MAAM,OAASC,EAAe,aAAe,aAEpD,IAAMC,EAAeC,GAAkB,CACnCA,EAAE,eAAe,EACjB,IAAMC,EAAYJ,EAAO,cAEnBK,EAAeF,GAAkB,CACnC,IAAMG,EAAOF,EAAU,sBAAsB,EACvCG,EAAMN,GACJE,EAAE,QAAUG,EAAK,MAAQA,EAAK,MAAS,KACvCH,EAAE,QAAUG,EAAK,KAAOA,EAAK,OAAU,IAC/CZ,EAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAIa,EAAKb,EAAI,GAAG,EAAGA,EAAI,GAAG,CAAC,CAC1D,EAEMc,EAAY,IAAM,CACpB,SAAS,oBAAoB,YAAaH,CAAW,EACrD,SAAS,oBAAoB,UAAWG,CAAS,CACrD,EAEA,SAAS,iBAAiB,YAAaH,CAAW,EAClD,SAAS,iBAAiB,UAAWG,CAAS,CAClD,EAEAR,EAAO,iBAAiB,YAAaE,CAAW,EAChDb,EAAK,QAAQ,SAAU,IAAMW,EAAO,oBAAoB,YAAaE,CAAW,CAAC,CACrF,EACA,MAAO,CACH,WAAY,EACZ,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,gBAAkBO,GAAaC,EAAWD,EAAU,SAAS,EAC7D,UAAW,CACP,gBAAkBA,GAAaC,EAAWD,EAAU,SAAS,CACjE,EACA,WAAY,CACR,QAAS,KACT,aAAcE,EAAa,GAAG,EAC9B,gBAAkBF,GAAaC,EAAWD,EAAU,SAAS,CACjE,CACJ,CACJ,CACJ,CChGA,SAASG,IAA0B,CAC/B,MAAO,CACH,YAAa,CAACC,EAAMC,IAAY,CAC5BC,EAAMD,EAAS,CACX,SAAU,CACN,QAAS,CACL,MAAOE,EAAQ,EAAE,CACrB,CACJ,CACJ,CAAC,CACL,EACA,MAAO,CACH,QAAS,OACT,cAAe,SACf,SAAU,QACd,CACJ,CACJ,CAEA,SAASC,GAAcC,EAA0D,CAAC,EAAmB,CACjG,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EACvD,MAAO,CACH,UAAYL,GAAS,CACbA,EAAK,UAAY,SACjB,QAAQ,KAAK,0CAA0C,CAE/D,EACA,SAAWA,GAAS,CAChB,IAAMQ,EAAMR,EAAK,WAAW,SAAS,EAC/BS,EAAQT,EAAK,WACbU,EAAU,IAAMF,EAAI,MAAM,IAAIC,EAAM,KAAK,EAC/CA,EAAM,iBAAiB,QAASC,CAAO,EACvCV,EAAK,QAAQ,SAAU,IAAMS,EAAM,oBAAoB,QAASC,CAAO,CAAC,CAC5E,EACA,MAAO,CACH,WAAY,UACZ,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,cAAgBA,GAAaE,EAAaC,EAAaH,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaE,EAAaC,EAAaH,CAAQ,EAAI,CAAC,EACnE,OAAQ,OACR,aAAeA,GAAa,aAAaI,EAAWJ,EAAU,UAAWL,CAAK,CAAC,GAC/E,QAAS,OACT,MAAQK,GAAaI,EAAWJ,EAAU,WAAYL,CAAK,EAC3D,gBAAkBK,GAAaI,EAAWJ,EAAU,UAAWL,CAAK,EACpE,iBAAkB,CACd,MAAQK,GAAaI,EAAWJ,EAAU,SAAS,CACvD,EACA,kBAAmB,CACf,kBAAoBA,GAAaI,EAAWJ,EAAU,UAAWJ,CAAW,CAChF,CACJ,CACJ,CACJ,CAEA,SAASS,GAAYX,EAA0D,CAAC,EAAmB,CAC/F,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EACvD,MAAO,CACH,KAAM,SACN,SAAWL,GAAS,CA7D5B,IAAAiB,EAAAC,EA8DY,IAAMV,EAAMR,EAAK,WAAW,SAAS,EAC/BmB,EAAKnB,EAAK,WACVoB,GAAOF,GAAAD,EAAAE,EAAG,cAAH,YAAAF,EAAgB,gBAAhB,KAAAC,EAAiC,GACxCG,EAAUb,EAAI,MAAM,YAAac,GAAc,CACjDH,EAAG,OAASG,EAAE,OAAS,GAAK,CAACF,EAAK,SAASE,EAAE,YAAY,CAAC,CAC9D,CAAC,EACDtB,EAAK,QAAQ,SAAUqB,CAAO,CAClC,EACA,MAAO,CACH,OAAQ,UACR,QAAS,OACT,WAAY,SACZ,MAAO,OACP,SAAWV,GAAaC,EAAUD,EAAU,SAAS,EACrD,OAASA,GAAaE,EAAa,EAAIC,EAAaH,CAAQ,EAAI,CAAC,EACjE,cAAgBA,GAAaE,EAAaC,EAAaH,CAAQ,EAAI,CAAC,EACpE,OAAQ,OACR,QAAS,OACT,MAAQA,GAAaI,EAAWJ,EAAU,UAAWL,CAAK,EAC1D,gBAAkBK,GAAaI,EAAWJ,EAAU,UAAWL,CAAK,EACpE,0BAA2B,CACvB,gBAAkBK,GAAaI,EAAWJ,EAAU,UAAWL,CAAK,CACxE,EACA,kBAAmB,CACf,QAAUK,GAAa,GAAGE,EAAa,EAAG,CAAC,UAAUE,EAAWJ,EAAU,UAAWJ,CAAW,CAAC,GACjG,cAAe,IAAIM,EAAa,EAAG,CAAC,EACxC,CACJ,CACJ,CACJ,CCxFA,SAASU,GAAOC,EAGZ,CAAC,EAAmB,CANxB,IAAAC,EAAAC,EAOI,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EACzE,MAAO,CACH,KAAM,SACN,UAAYI,GAAS,CAX7B,IAAAL,EAYgBK,EAAK,UAAY,UACjB,QAAQ,KAAK,oCAAoC,EAErD,IAAMC,EAAMD,EAAK,WAAW,aAAa,EAGrCE,IAFaP,EAAAK,EAAK,SAAL,YAAAL,EAAa,SAAS,OAElB,OAAOQ,GAAKA,EAAE,OAAS,eAAiBA,EAAE,WAAW,IAAI,MAAM,IAAM,QAAQ,EAC5FC,EAAMJ,EAAK,MAAQ,OAAY,OAAOA,EAAK,GAAG,EAAI,OAAOE,EAAM,UAAUC,GAAKA,IAAMH,CAAI,CAAC,EAE/FA,EAAK,WAAW,IAAI,cAAgBK,GAAa,CAC7C,IAAMC,EAAML,EAAI,MAAM,IAAII,CAAQ,EAClC,OAAO,MAAM,QAAQC,CAAG,EAAIA,EAAI,SAASF,CAAG,EAAIE,IAAQF,CAC5D,CAAC,EAEDJ,EAAK,SAAS,QAAS,IAAM,CACzB,IAAMM,EAAML,EAAI,MAAM,IAAI,EAC1B,GAAIA,EAAI,SAAU,CACd,IAAMM,EAAM,MAAM,QAAQD,CAAG,EAAI,CAAC,GAAGA,CAAG,EAAI,CAAC,EAC7CL,EAAI,MAAM,IAAIM,EAAI,SAASH,CAAG,EAAIG,EAAI,OAAOC,GAAKA,IAAMJ,CAAG,EAAI,CAAC,GAAGG,EAAKH,CAAG,CAAC,CAChF,MACIH,EAAI,MAAM,IAAIK,IAAQF,EAAM,GAAKA,CAAG,CAE5C,CAAC,CACL,EACA,MAAO,CACH,OAAQ,UACR,SAAWC,GAAaI,EAAUJ,EAAU,SAAS,EACrD,OAAQK,EAAa,CAAC,EACtB,aAAcA,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,OAAQ,OACR,aAAcA,EAAa,CAAC,EAC5B,MAAQL,GAAaM,EAAWN,EAAU,UAAWR,EAAM,IAAIQ,CAAQ,CAAC,EACxE,gBAAkBA,GAAaM,EAAWN,EAAU,UAAWR,EAAM,IAAIQ,CAAQ,CAAC,EAClF,WAAW,8BACX,0BAA2B,CACvB,gBAAkBA,GAAaM,EAAWN,EAAU,UAAWR,EAAM,IAAIQ,CAAQ,CAAC,CACtF,EACA,uBAAwB,CACpB,gBAAkBA,GAAaM,EAAWN,EAAU,UAAWN,EAAY,IAAIM,CAAQ,CAAC,EACxF,MAAQA,GAAaM,EAAWN,EAAU,WAAYN,EAAY,IAAIM,CAAQ,CAAC,CACnF,EACA,kBAAmB,CACf,QAAUA,GAAa,GAAGK,EAAa,EAAG,CAAC,UAAUC,EAAWN,EAAU,UAAWN,EAAY,IAAIM,CAAQ,CAAC,CAAC,GAC/G,cAAe,IAAIK,EAAa,EAAG,CAAC,EACxC,EACA,cAAe,CACX,QAAS,GACT,OAAQ,aACZ,CACJ,CACJ,CACJ,CC7DA,SAASE,GAAYC,EAIjB,CAAC,EAAmB,CAPxB,IAAAC,EAQI,GAAM,CAAE,SAAAC,EAAW,GAAO,MAAAC,EAAQ,SAAU,EAAIH,EAChD,MAAO,CACH,KAAM,QACN,SAAU,CACN,YAAa,CACT,MAAOI,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAgBC,EAAW,CAAC,EAAI,EAAG,EAClD,SAAAA,CACJ,CACJ,EACA,MAAO,CACH,QAAS,OACT,aAAcG,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,IAAKA,EAAa,CAAC,EACnB,aAAcA,EAAa,CAAC,EAC5B,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWH,CAAK,EACpE,QAAUG,GAAa,aAAaE,EAAWF,EAAU,UAAWH,CAAK,CAAC,GAC1E,cAAe,MACnB,CACJ,CACJ,CC1BA,SAASM,IAA2B,CAChC,MAAO,CACH,MAAO,CACH,QAAS,OACT,WAAY,SACZ,IAAKC,EAAa,CAAC,EACnB,QAAQ,CACJ,SAASA,EAAa,CAAC,EAAI,YAC/B,CACJ,EACA,SAAWC,GAAS,CAChB,IAAMC,EAAYD,EAAK,WACjBE,EAAY,IAAM,MAAM,KAAKD,EAAU,iBAAiB,OAAO,CAAC,EAEhEE,EAAWC,GAAa,CAC1B,IAAMC,EAASH,EAAU,EACnBI,EAASF,EAAE,OACXG,EAAMF,EAAO,QAAQC,CAAM,EAC7BA,EAAO,OAASC,EAAMF,EAAO,OAAS,GACtCA,EAAOE,EAAM,CAAC,EAAE,MAAM,CAE9B,EAEMC,EAAaJ,GAAqB,CACpC,IAAMC,EAASH,EAAU,EACnBI,EAASF,EAAE,OACXG,EAAMF,EAAO,QAAQC,CAAM,EAC7BF,EAAE,MAAQ,aAAe,CAACE,EAAO,OAASC,EAAM,GAChDF,EAAOE,EAAM,CAAC,EAAE,MAAM,EAEtBH,EAAE,MAAQ,aAAeG,EAAM,GAAGF,EAAOE,EAAM,CAAC,EAAE,MAAM,EACxDH,EAAE,MAAQ,cAAgBG,EAAMF,EAAO,OAAS,GAAGA,EAAOE,EAAM,CAAC,EAAE,MAAM,CACjF,EAEME,EAAWL,GAAsB,CArCnD,IAAAM,EAAAC,EAAAC,EAsCgBR,EAAE,eAAe,EACjB,IAAMS,GAAOF,GAAAD,EAAAN,EAAE,gBAAF,YAAAM,EAAiB,QAAQ,UAAzB,KAAAC,EAAoC,GAC3CN,EAASH,EAAU,EACnBY,EAAWT,EAAO,QAAQD,EAAE,MAA0B,EAC5D,CAAC,GAAGS,CAAI,EAAE,QAAQ,CAACE,EAAMC,IAAM,CACvBX,EAAOS,EAAWE,CAAC,IAAGX,EAAOS,EAAWE,CAAC,EAAE,MAAQD,EAC3D,CAAC,EACD,IAAME,EAAa,KAAK,IAAIH,EAAWD,EAAK,OAAS,EAAGR,EAAO,OAAS,CAAC,GACzEO,EAAAP,EAAOY,CAAU,IAAjB,MAAAL,EAAoB,OACxB,EAEAX,EAAU,iBAAiB,QAASE,CAAO,EAC3CF,EAAU,iBAAiB,UAAWO,CAA0B,EAChEP,EAAU,iBAAiB,QAASQ,CAAwB,EAE5DT,EAAK,QAAQ,SAAU,IAAM,CACzBC,EAAU,oBAAoB,QAASE,CAAO,EAC9CF,EAAU,oBAAoB,UAAWO,CAA0B,EACnEP,EAAU,oBAAoB,QAASQ,CAAwB,CACnE,CAAC,CACL,CACJ,CACJ,CCxDA,SAASS,GAAMC,EAEX,CAAC,EAAmB,CANxB,IAAAC,EAOE,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACL,KAAM,QAEN,SAAU,UACV,MAAO,CACL,QAAS,OACT,WAAY,aACZ,IAAKG,EAAa,CAAC,EACnB,aAAeC,GAAaD,EAAaE,EAAaD,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaD,EAAaE,EAAaD,CAAQ,EAAI,CAAC,EACpE,UAAYA,GAAa,SAASD,EAAa,CAAC,CAAC,UAAUG,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAAC,GAC/G,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EAClF,MAAQA,GAAaE,EAAWF,EAAU,WAAYH,EAAM,IAAIG,CAAQ,CAAC,EACzE,SAAWA,GAAaG,EAAUH,EAAU,SAAS,CACvD,CACF,CACF,CCtBA,SAASI,GAAOC,EAEZ,CAAC,EAAmB,CALxB,IAAAC,EAMI,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,SAAU,UACV,MAAO,CACH,SAAU,WACV,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,SAAU,SACV,aAAc,MACd,WAAY,EACZ,MAAOG,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,MACZ,WAAY,OACZ,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EAClF,MAAQA,GAAaE,EAAWF,EAAU,WAAYH,EAAM,IAAIG,CAAQ,CAAC,EACzE,QAAS,CACL,SAAU,WACV,MAAO,EACP,MAAO,OACP,OAAQ,OACR,UAAW,OACf,CACJ,CACJ,CACJ,CC9BA,SAASG,GAAMC,EAGX,CAAC,EAAmB,CAPxB,IAAAC,EAQI,GAAM,CAAE,MAAAC,EAAQ,GAAI,EAAIF,EACpBG,EAAQC,EAAQF,CAAK,EACnBG,EAAQD,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,SAAU,OAAO,EACtD,MAAO,CACH,MAAO,CACH,SAAU,WACV,WAAY,CACR,QAAUK,GAAM,IAAIH,EAAM,IAAIG,CAAC,CAAC,IAChC,SAAU,WACV,IAAK,EACL,MAAO,EACP,UAAW,sBACX,cAAcC,EAAa,CAAC,EAC5B,SAASA,EAAa,CAAC,EACvB,QAAS,cACT,WAAY,SACZ,eAAe,SACf,SAAWD,GAAME,EAAUF,EAAG,YAAY,EAC1C,aAAcC,EAAa,GAAG,EAC9B,gBAAkBD,GAAMG,EAAWH,EAAG,UAAWD,EAAM,IAAIC,CAAC,CAAC,EAC7D,MAAQA,GAAMG,EAAWH,EAAG,UAAWD,EAAM,IAAIC,CAAC,CAAC,CACvD,CACJ,CACJ,CACJ,CC5BA,SAASI,GAAWC,EAGhB,CAAC,EAAmB,CAPxB,IAAAC,EAQI,GAAM,CAAE,UAAAC,EAAY,GAAI,EAAIF,EACtBG,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYI,GAAS,CACbA,EAAK,UAAY,OAAO,QAAQ,KAAK,qCAAqC,CAClF,EACA,UAAW,aACX,MAAO,CACH,QAAS,OACT,WAAY,SACZ,SAAU,OACV,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,IAAKE,EAAa,CAAC,EACnB,MAAQF,GAAaG,EAAWH,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EAClF,QAAS,CACL,QAAS,cACT,WAAY,SACZ,MAAQA,GAAaG,EAAWH,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAC5E,EACA,gCAAiC,CAC7B,QAAS,IAAIJ,CAAS,IACtB,MAAQI,GAAaG,EAAWH,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,mBAAoBE,EAAa,CAAC,CACtC,EACA,0BAA2B,CACvB,MAAQF,GAAaG,EAAWH,EAAU,WAAYH,EAAM,IAAIG,CAAQ,CAAC,EACzE,cAAe,MACnB,CACJ,CACJ,CACJ,CCpCA,SAASI,GAAmBC,EAExB,CAAC,EAAmB,CANxB,IAAAC,EAOI,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,UAAY,UACjB,QAAQ,KAAK,gDAAgD,CAErE,EACA,UAAW,wBACX,MAAO,CACH,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,cAAeE,EAAa,CAAC,EAC7B,OAAQ,OACR,WAAY,OACZ,OAAQ,UACR,MAAQF,GAAaG,EAAWH,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,aAAcE,EAAa,CAAC,EAC5B,UAAW,CACP,MAAQF,GAAaG,EAAWH,EAAU,WAAYH,EAAM,IAAIG,CAAQ,CAAC,EACzE,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CACtF,EACA,kBAAmB,CACf,QAAUA,GAAa,GAAGE,EAAa,EAAG,CAAC,UAAUC,EAAWH,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAAC,GACzG,cAAeE,EAAa,EAAG,CACnC,CACJ,CACJ,CACJ,CCjCA,IAAME,GAAO,yWAEb,SAASC,GAAIC,EAGT,CAAC,EAAmB,CATxB,IAAAC,EAUE,GAAM,CAAE,UAAAC,EAAU,EAAM,EAAIF,EACtBG,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACL,SAAU,UACV,QAAUI,GAAS,CAEjB,IAAMC,EAAmC,CACvC,KAAMR,GACN,QAAUS,GAAM,CAAGA,EAAY,gBAAgB,EAAGF,EAAK,OAAO,CAAE,EAChE,MAAO,CACL,QAAS,cACT,WAAY,SACZ,OAAQ,UACR,aAAcG,EAAa,CAAC,EAC5B,MAAOA,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,WAAY,EACZ,UAAW,CACT,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWN,EAAM,IAAIM,CAAQ,CAAC,CACpF,CACF,CACF,EAEAP,GAAaG,EAAK,SAAS,OAAOC,CAAS,CAE7C,EACA,MAAO,CACL,QAAS,cACT,WAAY,SACZ,WAAY,SACZ,WAAY,OACZ,OAAQE,EAAa,CAAC,EACtB,aAAc,MACd,aAAcA,EAAa,CAAC,EAC5B,mBAAoBA,EAAa,CAAC,EAClC,iBAAkBN,EAAYM,EAAa,CAAC,EAAIA,EAAa,CAAC,EAC9D,IAAKA,EAAa,CAAC,EACnB,SAAWC,GAAaE,EAAUF,EAAU,SAAS,EACrD,gBAAkBA,GAAaC,EAAWD,EAAU,UAAWN,EAAM,IAAIM,CAAQ,CAAC,EAClF,MAAQA,GAAaC,EAAWD,EAAU,UAAWN,EAAM,IAAIM,CAAQ,CAAC,EACxE,OAAQ,OACR,cAAe,OACf,QAAUA,GAAa,aAAaC,EAAWD,EAAU,UAAWN,EAAM,IAAIM,CAAQ,CAAC,CAAC,EAC1F,CACF,CACF,CChDA,IAAMG,GAAM,KAAK,IACXC,EAAM,KAAK,IACXC,GAAQ,KAAK,MACbC,GAAQ,KAAK,MACbC,EAAeC,IAAM,CACzB,EAAGA,EACH,EAAGA,CACL,GACMC,GAAkB,CACtB,KAAM,QACN,MAAO,OACP,OAAQ,MACR,IAAK,QACP,EACA,SAASC,GAAMC,EAAOC,EAAOC,EAAK,CAChC,OAAOT,EAAIO,EAAOR,GAAIS,EAAOC,CAAG,CAAC,CACnC,CACA,SAASC,GAASF,EAAOG,EAAO,CAC9B,OAAO,OAAOH,GAAU,WAAaA,EAAMG,CAAK,EAAIH,CACtD,CACA,SAASI,EAAQC,EAAW,CAC1B,OAAOA,EAAU,MAAM,GAAG,EAAE,CAAC,CAC/B,CACA,SAASC,GAAaD,EAAW,CAC/B,OAAOA,EAAU,MAAM,GAAG,EAAE,CAAC,CAC/B,CACA,SAASE,GAAgBC,EAAM,CAC7B,OAAOA,IAAS,IAAM,IAAM,GAC9B,CACA,SAASC,GAAcD,EAAM,CAC3B,OAAOA,IAAS,IAAM,SAAW,OACnC,CACA,SAASE,EAAYL,EAAW,CAC9B,IAAMM,EAAYN,EAAU,CAAC,EAC7B,OAAOM,IAAc,KAAOA,IAAc,IAAM,IAAM,GACxD,CACA,SAASC,GAAiBP,EAAW,CACnC,OAAOE,GAAgBG,EAAYL,CAAS,CAAC,CAC/C,CACA,SAASQ,GAAkBR,EAAWS,EAAOC,EAAK,CAC5CA,IAAQ,SACVA,EAAM,IAER,IAAMC,EAAYV,GAAaD,CAAS,EAClCY,EAAgBL,GAAiBP,CAAS,EAC1Ca,EAAST,GAAcQ,CAAa,EACtCE,EAAoBF,IAAkB,IAAMD,KAAeD,EAAM,MAAQ,SAAW,QAAU,OAASC,IAAc,QAAU,SAAW,MAC9I,OAAIF,EAAM,UAAUI,CAAM,EAAIJ,EAAM,SAASI,CAAM,IACjDC,EAAoBC,GAAqBD,CAAiB,GAErD,CAACA,EAAmBC,GAAqBD,CAAiB,CAAC,CACpE,CACA,SAASE,GAAsBhB,EAAW,CACxC,IAAMiB,EAAoBF,GAAqBf,CAAS,EACxD,MAAO,CAACkB,GAA8BlB,CAAS,EAAGiB,EAAmBC,GAA8BD,CAAiB,CAAC,CACvH,CACA,SAASC,GAA8BlB,EAAW,CAChD,OAAOA,EAAU,SAAS,OAAO,EAAIA,EAAU,QAAQ,QAAS,KAAK,EAAIA,EAAU,QAAQ,MAAO,OAAO,CAC3G,CACA,IAAMmB,GAAc,CAAC,OAAQ,OAAO,EAC9BC,GAAc,CAAC,QAAS,MAAM,EAC9BC,GAAc,CAAC,MAAO,QAAQ,EAC9BC,GAAc,CAAC,SAAU,KAAK,EACpC,SAASC,GAAYC,EAAMC,EAASf,EAAK,CACvC,OAAQc,EAAM,CACZ,IAAK,MACL,IAAK,SACH,OAAId,EAAYe,EAAUL,GAAcD,GACjCM,EAAUN,GAAcC,GACjC,IAAK,OACL,IAAK,QACH,OAAOK,EAAUJ,GAAcC,GACjC,QACE,MAAO,CAAC,CACZ,CACF,CACA,SAASI,GAA0B1B,EAAW2B,EAAeC,EAAWlB,EAAK,CAC3E,IAAMC,EAAYV,GAAaD,CAAS,EACpC6B,EAAON,GAAYxB,EAAQC,CAAS,EAAG4B,IAAc,QAASlB,CAAG,EACrE,OAAIC,IACFkB,EAAOA,EAAK,IAAIL,GAAQA,EAAO,IAAMb,CAAS,EAC1CgB,IACFE,EAAOA,EAAK,OAAOA,EAAK,IAAIX,EAA6B,CAAC,IAGvDW,CACT,CACA,SAASd,GAAqBf,EAAW,CACvC,IAAMwB,EAAOzB,EAAQC,CAAS,EAC9B,OAAOR,GAAgBgC,CAAI,EAAIxB,EAAU,MAAMwB,EAAK,MAAM,CAC5D,CACA,SAASM,GAAoBC,EAAS,CACpC,OAAOC,EAAA,CACL,IAAK,EACL,MAAO,EACP,OAAQ,EACR,KAAM,GACHD,EAEP,CACA,SAASE,GAAiBF,EAAS,CACjC,OAAO,OAAOA,GAAY,SAAWD,GAAoBC,CAAO,EAAI,CAClE,IAAKA,EACL,MAAOA,EACP,OAAQA,EACR,KAAMA,CACR,CACF,CACA,SAASG,GAAiBC,EAAM,CAC9B,GAAM,CACJ,EAAAC,EACA,EAAAC,EACA,MAAAC,EACA,OAAAC,CACF,EAAIJ,EACJ,MAAO,CACL,MAAAG,EACA,OAAAC,EACA,IAAKF,EACL,KAAMD,EACN,MAAOA,EAAIE,EACX,OAAQD,EAAIE,EACZ,EAAAH,EACA,EAAAC,CACF,CACF,CClIA,SAASG,GAA2BC,EAAMC,EAAWC,EAAK,CACxD,GAAI,CACF,UAAAC,EACA,SAAAC,CACF,EAAIJ,EACEK,EAAWC,EAAYL,CAAS,EAChCM,EAAgBC,GAAiBP,CAAS,EAC1CQ,EAAcC,GAAcH,CAAa,EACzCI,EAAOC,EAAQX,CAAS,EACxBY,EAAaR,IAAa,IAC1BS,EAAUX,EAAU,EAAIA,EAAU,MAAQ,EAAIC,EAAS,MAAQ,EAC/DW,EAAUZ,EAAU,EAAIA,EAAU,OAAS,EAAIC,EAAS,OAAS,EACjEY,EAAcb,EAAUM,CAAW,EAAI,EAAIL,EAASK,CAAW,EAAI,EACrEQ,EACJ,OAAQN,EAAM,CACZ,IAAK,MACHM,EAAS,CACP,EAAGH,EACH,EAAGX,EAAU,EAAIC,EAAS,MAC5B,EACA,MACF,IAAK,SACHa,EAAS,CACP,EAAGH,EACH,EAAGX,EAAU,EAAIA,EAAU,MAC7B,EACA,MACF,IAAK,QACHc,EAAS,CACP,EAAGd,EAAU,EAAIA,EAAU,MAC3B,EAAGY,CACL,EACA,MACF,IAAK,OACHE,EAAS,CACP,EAAGd,EAAU,EAAIC,EAAS,MAC1B,EAAGW,CACL,EACA,MACF,QACEE,EAAS,CACP,EAAGd,EAAU,EACb,EAAGA,EAAU,CACf,CACJ,CACA,OAAQe,GAAajB,CAAS,EAAG,CAC/B,IAAK,QACHgB,EAAOV,CAAa,GAAKS,GAAed,GAAOW,EAAa,GAAK,GACjE,MACF,IAAK,MACHI,EAAOV,CAAa,GAAKS,GAAed,GAAOW,EAAa,GAAK,GACjE,KACJ,CACA,OAAOI,CACT,CAUA,SAAeE,GAAeC,EAAOC,EAAS,QAAAC,EAAA,sBAC5C,IAAIC,EACAF,IAAY,SACdA,EAAU,CAAC,GAEb,GAAM,CACJ,EAAAG,EACA,EAAAC,EACA,SAAAC,EACA,MAAAC,EACA,SAAAC,EACA,SAAAC,CACF,EAAIT,EACE,CACJ,SAAAU,EAAW,oBACX,aAAAC,EAAe,WACf,eAAAC,EAAiB,WACjB,YAAAC,EAAc,GACd,QAAAC,EAAU,CACZ,EAAIC,GAASd,EAASD,CAAK,EACrBgB,EAAgBC,GAAiBH,CAAO,EAExCI,EAAUV,EAASK,EADND,IAAmB,WAAa,YAAc,WACbA,CAAc,EAC5DO,EAAqBC,GAAiB,MAAMd,EAAS,gBAAgB,CACzE,SAAWH,EAAwB,MAAOG,EAAS,WAAa,KAAO,OAASA,EAAS,UAAUY,CAAO,IAAO,MAAOf,EAAgCe,EAAUA,EAAQ,iBAAmB,MAAOZ,EAAS,oBAAsB,KAAO,OAASA,EAAS,mBAAmBE,EAAS,QAAQ,GAChS,SAAAE,EACA,aAAAC,EACA,SAAAF,CACF,CAAC,CAAC,EACIY,EAAOT,IAAmB,WAAa,CAC3C,EAAAR,EACA,EAAAC,EACA,MAAOE,EAAM,SAAS,MACtB,OAAQA,EAAM,SAAS,MACzB,EAAIA,EAAM,UACJe,EAAe,MAAOhB,EAAS,iBAAmB,KAAO,OAASA,EAAS,gBAAgBE,EAAS,QAAQ,EAC5Ge,GAAe,MAAOjB,EAAS,WAAa,KAAO,OAASA,EAAS,UAAUgB,CAAY,IAAO,MAAOhB,EAAS,UAAY,KAAO,OAASA,EAAS,SAASgB,CAAY,IAAO,CACvL,EAAG,EACH,EAAG,CACL,EAAI,CACF,EAAG,EACH,EAAG,CACL,EACME,EAAoBJ,GAAiBd,EAAS,sDAAwD,MAAMA,EAAS,sDAAsD,CAC/K,SAAAE,EACA,KAAAa,EACA,aAAAC,EACA,SAAAb,CACF,CAAC,EAAIY,CAAI,EACT,MAAO,CACL,KAAMF,EAAmB,IAAMK,EAAkB,IAAMR,EAAc,KAAOO,EAAY,EACxF,QAASC,EAAkB,OAASL,EAAmB,OAASH,EAAc,QAAUO,EAAY,EACpG,MAAOJ,EAAmB,KAAOK,EAAkB,KAAOR,EAAc,MAAQO,EAAY,EAC5F,OAAQC,EAAkB,MAAQL,EAAmB,MAAQH,EAAc,OAASO,EAAY,CAClG,CACF,GAGA,IAAME,GAAkB,GASlBC,GAAkB,CAAO3C,EAAWC,EAAU2C,IAAWzB,EAAA,sBAC7D,GAAM,CACJ,UAAArB,EAAY,SACZ,SAAA4B,EAAW,WACX,WAAAmB,EAAa,CAAC,EACd,SAAAtB,CACF,EAAIqB,EACEE,EAA6BvB,EAAS,eAAiBA,EAAWwB,EAAAC,EAAA,GACnEzB,GADmE,CAEtE,eAAAP,EACF,GACMjB,EAAM,MAAOwB,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMtB,CAAQ,EACxEuB,EAAQ,MAAMD,EAAS,gBAAgB,CACzC,UAAAvB,EACA,SAAAC,EACA,SAAAyB,CACF,CAAC,EACG,CACF,EAAAL,EACA,EAAAC,CACF,EAAI1B,GAA2B4B,EAAO1B,EAAWC,CAAG,EAChDkD,EAAoBnD,EACpBoD,EAAa,EACXC,EAAiB,CAAC,EACxB,QAASC,EAAI,EAAGA,EAAIP,EAAW,OAAQO,IAAK,CAC1C,IAAMC,EAAoBR,EAAWO,CAAC,EACtC,GAAI,CAACC,EACH,SAEF,GAAM,CACJ,KAAAC,EACA,GAAAC,CACF,EAAIF,EACE,CACJ,EAAGG,EACH,EAAGC,EACH,KAAAC,EACA,MAAAC,CACF,EAAI,MAAMJ,EAAG,CACX,EAAAlC,EACA,EAAAC,EACA,iBAAkBxB,EAClB,UAAWmD,EACX,SAAAvB,EACA,eAAAyB,EACA,MAAA3B,EACA,SAAUsB,EACV,SAAU,CACR,UAAA9C,EACA,SAAAC,CACF,CACF,CAAC,EACDoB,EAAImC,GAAS,KAAOA,EAAQnC,EAC5BC,EAAImC,GAAS,KAAOA,EAAQnC,EAC5B6B,EAAeG,CAAI,EAAIN,IAAA,GAClBG,EAAeG,CAAI,GACnBI,GAEDC,GAAST,EAAaR,KACxBQ,IACI,OAAOS,GAAU,WACfA,EAAM,YACRV,EAAoBU,EAAM,WAExBA,EAAM,QACRnC,EAAQmC,EAAM,QAAU,GAAO,MAAMpC,EAAS,gBAAgB,CAC5D,UAAAvB,EACA,SAAAC,EACA,SAAAyB,CACF,CAAC,EAAIiC,EAAM,OAEZ,CACC,EAAAtC,EACA,EAAAC,CACF,EAAI1B,GAA2B4B,EAAOyB,EAAmBlD,CAAG,GAE9DqD,EAAI,GAER,CACA,MAAO,CACL,EAAA/B,EACA,EAAAC,EACA,UAAW2B,EACX,SAAAvB,EACA,eAAAyB,CACF,CACF,GAiMA,IAAMS,GAAO,SAAUC,EAAS,CAC9B,OAAIA,IAAY,SACdA,EAAU,CAAC,GAEN,CACL,KAAM,OACN,QAAAA,EACM,GAAGC,EAAO,QAAAC,EAAA,sBACd,IAAIC,EAAuBC,EAC3B,GAAM,CACJ,UAAAC,EACA,eAAAC,EACA,MAAAC,EACA,iBAAAC,EACA,SAAAC,EACA,SAAAC,CACF,EAAIT,EASAU,GAAAC,GAASZ,EAASC,CAAK,EAPzB,UAAUY,EAAgB,GAC1B,UAAWC,EAAiB,GAC5B,mBAAoBC,EACpB,iBAAAC,EAAmB,UACnB,0BAAAC,EAA4B,OAC5B,cAAAC,EAAgB,EApbxB,EAsbUP,GADCQ,EAAAC,GACDT,GADC,CANH,WACA,YACA,qBACA,mBACA,4BACA,kBAQF,IAAKR,EAAwBG,EAAe,QAAU,MAAQH,EAAsB,gBAClF,MAAO,CAAC,EAEV,IAAMkB,EAAOC,EAAQjB,CAAS,EACxBkB,EAAkBC,EAAYhB,CAAgB,EAC9CiB,EAAkBH,EAAQd,CAAgB,IAAMA,EAChDkB,EAAM,MAAOjB,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMC,EAAS,QAAQ,EAC/EiB,EAAqBZ,IAAgCU,GAAmB,CAACP,EAAgB,CAACU,GAAqBpB,CAAgB,CAAC,EAAIqB,GAAsBrB,CAAgB,GAC1KsB,EAA+Bb,IAA8B,OAC/D,CAACF,GAA+Be,GAClCH,EAAmB,KAAK,GAAGI,GAA0BvB,EAAkBU,EAAeD,EAA2BS,CAAG,CAAC,EAEvH,IAAMM,GAAa,CAACxB,EAAkB,GAAGmB,CAAkB,EACrDM,GAAW,MAAMxB,EAAS,eAAeR,EAAOkB,CAAqB,EACrEe,GAAY,CAAC,EACfC,KAAkB/B,EAAuBE,EAAe,OAAS,KAAO,OAASF,EAAqB,YAAc,CAAC,EAIzH,GAHIS,GACFqB,GAAU,KAAKD,GAASZ,CAAI,CAAC,EAE3BP,EAAgB,CAClB,IAAMsB,EAAQC,GAAkBhC,EAAWE,EAAOmB,CAAG,EACrDQ,GAAU,KAAKD,GAASG,EAAM,CAAC,CAAC,EAAGH,GAASG,EAAM,CAAC,CAAC,CAAC,CACvD,CAOA,GANAD,GAAgB,CAAC,GAAGA,GAAe,CACjC,UAAA9B,EACA,UAAA6B,EACF,CAAC,EAGG,CAACA,GAAU,MAAMb,GAAQA,GAAQ,CAAC,EAAG,CACvC,IAAIiB,GAAuBC,GAC3B,IAAMC,KAAeF,GAAwBhC,EAAe,OAAS,KAAO,OAASgC,GAAsB,QAAU,GAAK,EACpHG,GAAgBT,GAAWQ,CAAS,EAC1C,GAAIC,KAEE,EAD4B3B,IAAmB,YAAcS,IAAoBC,EAAYiB,EAAa,EAAI,KAIlHN,GAAc,MAAMO,GAAKlB,EAAYkB,EAAE,SAAS,IAAMnB,EAAkBmB,EAAE,UAAU,CAAC,EAAI,EAAI,EAAI,GAE/F,MAAO,CACL,KAAM,CACJ,MAAOF,EACP,UAAWL,EACb,EACA,MAAO,CACL,UAAWM,EACb,CACF,EAMJ,IAAIE,IAAkBJ,GAAwBJ,GAAc,OAAOO,GAAKA,EAAE,UAAU,CAAC,GAAK,CAAC,EAAE,KAAK,CAACE,EAAGC,IAAMD,EAAE,UAAU,CAAC,EAAIC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,IAAM,KAAO,OAASN,GAAsB,UAG1L,GAAI,CAACI,GACH,OAAQ3B,EAAkB,CACxB,IAAK,UACH,CACE,IAAI8B,GACJ,IAAMzC,GAAayC,GAAyBX,GAAc,OAAOO,GAAK,CACpE,GAAIZ,EAA8B,CAChC,IAAMiB,EAAkBvB,EAAYkB,EAAE,SAAS,EAC/C,OAAOK,IAAoBxB,GAG3BwB,IAAoB,GACtB,CACA,MAAO,EACT,CAAC,EAAE,IAAIL,GAAK,CAACA,EAAE,UAAWA,EAAE,UAAU,OAAOT,GAAYA,EAAW,CAAC,EAAE,OAAO,CAACe,EAAKf,KAAae,EAAMf,GAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAACW,EAAGC,IAAMD,EAAE,CAAC,EAAIC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAM,KAAO,OAASC,GAAuB,CAAC,EAC7LzC,IACFsC,GAAiBtC,GAEnB,KACF,CACF,IAAK,mBACHsC,GAAiBnC,EACjB,KACJ,CAEF,GAAIH,IAAcsC,GAChB,MAAO,CACL,MAAO,CACL,UAAWA,EACb,CACF,CAEJ,CACA,MAAO,CAAC,CACV,GACF,CACF,EA2MA,IAAMM,GAA2B,IAAI,IAAI,CAAC,OAAQ,KAAK,CAAC,EAKxD,SAAeC,GAAqBC,EAAOC,EAAS,QAAAC,EAAA,sBAClD,GAAM,CACJ,UAAAC,EACA,SAAAC,EACA,SAAAC,CACF,EAAIL,EACEM,EAAM,MAAOF,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMC,EAAS,QAAQ,EAC/EE,EAAOC,EAAQL,CAAS,EACxBM,EAAYC,GAAaP,CAAS,EAClCQ,EAAaC,EAAYT,CAAS,IAAM,IACxCU,EAAgBf,GAAY,IAAIS,CAAI,EAAI,GAAK,EAC7CO,EAAiBR,GAAOK,EAAa,GAAK,EAC1CI,EAAWC,GAASf,EAASD,CAAK,EAGpC,CACF,SAAAiB,EACA,UAAAC,EACA,cAAAC,CACF,EAAI,OAAOJ,GAAa,SAAW,CACjC,SAAUA,EACV,UAAW,EACX,cAAe,IACjB,EAAI,CACF,SAAUA,EAAS,UAAY,EAC/B,UAAWA,EAAS,WAAa,EACjC,cAAeA,EAAS,aAC1B,EACA,OAAIN,GAAa,OAAOU,GAAkB,WACxCD,EAAYT,IAAc,MAAQU,EAAgB,GAAKA,GAElDR,EAAa,CAClB,EAAGO,EAAYJ,EACf,EAAGG,EAAWJ,CAChB,EAAI,CACF,EAAGI,EAAWJ,EACd,EAAGK,EAAYJ,CACjB,CACF,GASA,IAAMM,GAAS,SAAUnB,EAAS,CAChC,OAAIA,IAAY,SACdA,EAAU,GAEL,CACL,KAAM,SACN,QAAAA,EACM,GAAGD,EAAO,QAAAE,EAAA,sBACd,IAAImB,EAAuBC,EAC3B,GAAM,CACJ,EAAAC,EACA,EAAAC,EACA,UAAArB,EACA,eAAAsB,CACF,EAAIzB,EACE0B,EAAa,MAAM3B,GAAqBC,EAAOC,CAAO,EAI5D,OAAIE,MAAgBkB,EAAwBI,EAAe,SAAW,KAAO,OAASJ,EAAsB,aAAeC,EAAwBG,EAAe,QAAU,MAAQH,EAAsB,gBACjM,CAAC,EAEH,CACL,EAAGC,EAAIG,EAAW,EAClB,EAAGF,EAAIE,EAAW,EAClB,KAAMC,EAAAC,EAAA,GACDF,GADC,CAEJ,UAAAvB,CACF,EACF,CACF,GACF,CACF,EAOM0B,GAAQ,SAAU5B,EAAS,CAC/B,OAAIA,IAAY,SACdA,EAAU,CAAC,GAEN,CACL,KAAM,QACN,QAAAA,EACM,GAAGD,EAAO,QAAAE,EAAA,sBACd,GAAM,CACJ,EAAAqB,EACA,EAAAC,EACA,UAAArB,EACA,SAAAC,CACF,EAAIJ,EAiBA8B,EAAAd,GAASf,EAASD,CAAK,EAfzB,UAAU+B,EAAgB,GAC1B,UAAWC,EAAiB,GAC5B,QAAAC,EAAU,CACR,GAAIC,GAAQ,CACV,GAAI,CACF,EAAAX,EACA,EAAAC,CACF,EAAIU,EACJ,MAAO,CACL,EAAAX,EACA,EAAAC,CACF,CACF,CACF,CA31BR,EA61BUM,EADCK,EAAAC,GACDN,EADC,CAdH,WACA,YACA,YAcIO,EAAS,CACb,EAAAd,EACA,EAAAC,CACF,EACMc,EAAW,MAAMlC,EAAS,eAAeJ,EAAOmC,CAAqB,EACrEjB,EAAYN,EAAYJ,EAAQL,CAAS,CAAC,EAC1Cc,EAAWsB,GAAgBrB,CAAS,EACtCsB,EAAgBH,EAAOpB,CAAQ,EAC/BwB,EAAiBJ,EAAOnB,CAAS,EACrC,GAAIa,EAAe,CACjB,IAAMW,EAAUzB,IAAa,IAAM,MAAQ,OACrC0B,EAAU1B,IAAa,IAAM,SAAW,QACxC2B,EAAMJ,EAAgBF,EAASI,CAAO,EACtCG,EAAML,EAAgBF,EAASK,CAAO,EAC5CH,EAAgBM,GAAMF,EAAKJ,EAAeK,CAAG,CAC/C,CACA,GAAIb,EAAgB,CAClB,IAAMU,EAAUxB,IAAc,IAAM,MAAQ,OACtCyB,EAAUzB,IAAc,IAAM,SAAW,QACzC0B,EAAMH,EAAiBH,EAASI,CAAO,EACvCG,EAAMJ,EAAiBH,EAASK,CAAO,EAC7CF,EAAiBK,GAAMF,EAAKH,EAAgBI,CAAG,CACjD,CACA,IAAME,EAAgBd,EAAQ,GAAGN,EAAAC,EAAA,GAC5B5B,GAD4B,CAE/B,CAACiB,CAAQ,EAAGuB,EACZ,CAACtB,CAAS,EAAGuB,CACf,EAAC,EACD,OAAOd,EAAAC,EAAA,GACFmB,GADE,CAEL,KAAM,CACJ,EAAGA,EAAc,EAAIxB,EACrB,EAAGwB,EAAc,EAAIvB,EACrB,QAAS,CACP,CAACP,CAAQ,EAAGc,EACZ,CAACb,CAAS,EAAGc,CACf,CACF,CACF,EACF,GACF,CACF,ECv4BA,SAASgB,IAAY,CACnB,OAAO,OAAO,QAAW,WAC3B,CACA,SAASC,GAAYC,EAAM,CACzB,OAAIC,GAAOD,CAAI,GACLA,EAAK,UAAY,IAAI,YAAY,EAKpC,WACT,CACA,SAASE,EAAUF,EAAM,CACvB,IAAIG,EACJ,OAAQH,GAAQ,OAASG,EAAsBH,EAAK,gBAAkB,KAAO,OAASG,EAAoB,cAAgB,MAC5H,CACA,SAASC,EAAmBJ,EAAM,CAChC,IAAIK,EACJ,OAAQA,GAAQJ,GAAOD,CAAI,EAAIA,EAAK,cAAgBA,EAAK,WAAa,OAAO,WAAa,KAAO,OAASK,EAAK,eACjH,CACA,SAASJ,GAAOK,EAAO,CACrB,OAAKR,GAAU,EAGRQ,aAAiB,MAAQA,aAAiBJ,EAAUI,CAAK,EAAE,KAFzD,EAGX,CACA,SAASC,EAAUD,EAAO,CACxB,OAAKR,GAAU,EAGRQ,aAAiB,SAAWA,aAAiBJ,EAAUI,CAAK,EAAE,QAF5D,EAGX,CACA,SAASE,EAAcF,EAAO,CAC5B,OAAKR,GAAU,EAGRQ,aAAiB,aAAeA,aAAiBJ,EAAUI,CAAK,EAAE,YAFhE,EAGX,CACA,SAASG,GAAaH,EAAO,CAC3B,MAAI,CAACR,GAAU,GAAK,OAAO,YAAe,YACjC,GAEFQ,aAAiB,YAAcA,aAAiBJ,EAAUI,CAAK,EAAE,UAC1E,CACA,SAASI,GAAkBC,EAAS,CAClC,GAAM,CACJ,SAAAC,EACA,UAAAC,EACA,UAAAC,EACA,QAAAC,CACF,EAAIC,EAAiBL,CAAO,EAC5B,MAAO,kCAAkC,KAAKC,EAAWE,EAAYD,CAAS,GAAKE,IAAY,UAAYA,IAAY,UACzH,CACA,SAASE,GAAeN,EAAS,CAC/B,MAAO,kBAAkB,KAAKZ,GAAYY,CAAO,CAAC,CACpD,CACA,SAASO,GAAWP,EAAS,CAC3B,GAAI,CACF,GAAIA,EAAQ,QAAQ,eAAe,EACjC,MAAO,EAEX,OAASQ,EAAI,CAEb,CACA,GAAI,CACF,OAAOR,EAAQ,QAAQ,QAAQ,CACjC,OAASQ,EAAI,CACX,MAAO,EACT,CACF,CACA,IAAMC,GAAe,sDACfC,GAAY,8BACZC,GAAYhB,GAAS,CAAC,CAACA,GAASA,IAAU,OAC5CiB,GACJ,SAASC,GAAkBC,EAAc,CACvC,IAAMC,EAAMnB,EAAUkB,CAAY,EAAIT,EAAiBS,CAAY,EAAIA,EAIvE,OAAOH,GAAUI,EAAI,SAAS,GAAKJ,GAAUI,EAAI,SAAS,GAAKJ,GAAUI,EAAI,KAAK,GAAKJ,GAAUI,EAAI,MAAM,GAAKJ,GAAUI,EAAI,WAAW,GAAK,CAACC,GAAS,IAAML,GAAUI,EAAI,cAAc,GAAKJ,GAAUI,EAAI,MAAM,IAAMN,GAAa,KAAKM,EAAI,YAAc,EAAE,GAAKL,GAAU,KAAKK,EAAI,SAAW,EAAE,CACtS,CACA,SAASE,GAAmBjB,EAAS,CACnC,IAAIkB,EAAcC,EAAcnB,CAAO,EACvC,KAAOH,EAAcqB,CAAW,GAAK,CAACE,GAAsBF,CAAW,GAAG,CACxE,GAAIL,GAAkBK,CAAW,EAC/B,OAAOA,EACF,GAAIX,GAAWW,CAAW,EAC/B,OAAO,KAETA,EAAcC,EAAcD,CAAW,CACzC,CACA,OAAO,IACT,CACA,SAASF,IAAW,CAClB,OAAIJ,IAAiB,OACnBA,GAAgB,OAAO,KAAQ,aAAe,IAAI,UAAY,IAAI,SAAS,0BAA2B,MAAM,GAEvGA,EACT,CACA,SAASQ,GAAsB/B,EAAM,CACnC,MAAO,0BAA0B,KAAKD,GAAYC,CAAI,CAAC,CACzD,CACA,SAASgB,EAAiBL,EAAS,CACjC,OAAOT,EAAUS,CAAO,EAAE,iBAAiBA,CAAO,CACpD,CACA,SAASqB,GAAcrB,EAAS,CAC9B,OAAIJ,EAAUI,CAAO,EACZ,CACL,WAAYA,EAAQ,WACpB,UAAWA,EAAQ,SACrB,EAEK,CACL,WAAYA,EAAQ,QACpB,UAAWA,EAAQ,OACrB,CACF,CACA,SAASmB,EAAc9B,EAAM,CAC3B,GAAID,GAAYC,CAAI,IAAM,OACxB,OAAOA,EAET,IAAMiC,EAENjC,EAAK,cAELA,EAAK,YAELS,GAAaT,CAAI,GAAKA,EAAK,MAE3BI,EAAmBJ,CAAI,EACvB,OAAOS,GAAawB,CAAM,EAAIA,EAAO,KAAOA,CAC9C,CACA,SAASC,GAA2BlC,EAAM,CACxC,IAAMmC,EAAaL,EAAc9B,CAAI,EACrC,OAAI+B,GAAsBI,CAAU,EAC3BnC,EAAK,cAAgBA,EAAK,cAAc,KAAOA,EAAK,KAEzDQ,EAAc2B,CAAU,GAAKzB,GAAkByB,CAAU,EACpDA,EAEFD,GAA2BC,CAAU,CAC9C,CACA,SAASC,GAAqBpC,EAAMqC,EAAMC,EAAiB,CACzD,IAAIC,EACAF,IAAS,SACXA,EAAO,CAAC,GAENC,IAAoB,SACtBA,EAAkB,IAEpB,IAAME,EAAqBN,GAA2BlC,CAAI,EACpDyC,EAASD,MAAyBD,EAAuBvC,EAAK,gBAAkB,KAAO,OAASuC,EAAqB,MACrHG,EAAMxC,EAAUsC,CAAkB,EACxC,GAAIC,EAAQ,CACV,IAAME,EAAeC,GAAgBF,CAAG,EACxC,OAAOL,EAAK,OAAOK,EAAKA,EAAI,gBAAkB,CAAC,EAAGhC,GAAkB8B,CAAkB,EAAIA,EAAqB,CAAC,EAAGG,GAAgBL,EAAkBF,GAAqBO,CAAY,EAAI,CAAC,CAAC,CAC9L,KACE,QAAON,EAAK,OAAOG,EAAoBJ,GAAqBI,EAAoB,CAAC,EAAGF,CAAe,CAAC,CAExG,CACA,SAASM,GAAgBF,EAAK,CAC5B,OAAOA,EAAI,QAAU,OAAO,eAAeA,EAAI,MAAM,EAAIA,EAAI,aAAe,IAC9E,CC7JA,SAASG,GAAiBC,EAAS,CACjC,IAAMC,EAAMC,EAAmBF,CAAO,EAGlCG,EAAQ,WAAWF,EAAI,KAAK,GAAK,EACjCG,EAAS,WAAWH,EAAI,MAAM,GAAK,EACjCI,EAAYC,EAAcN,CAAO,EACjCO,EAAcF,EAAYL,EAAQ,YAAcG,EAChDK,EAAeH,EAAYL,EAAQ,aAAeI,EAClDK,EAAiBC,GAAMP,CAAK,IAAMI,GAAeG,GAAMN,CAAM,IAAMI,EACzE,OAAIC,IACFN,EAAQI,EACRH,EAASI,GAEJ,CACL,MAAAL,EACA,OAAAC,EACA,EAAGK,CACL,CACF,CAEA,SAASE,GAAcX,EAAS,CAC9B,OAAQY,EAAUZ,CAAO,EAA6BA,EAAzBA,EAAQ,cACvC,CAEA,SAASa,GAASb,EAAS,CACzB,IAAMc,EAAaH,GAAcX,CAAO,EACxC,GAAI,CAACM,EAAcQ,CAAU,EAC3B,OAAOC,EAAa,CAAC,EAEvB,IAAMC,EAAOF,EAAW,sBAAsB,EACxC,CACJ,MAAAX,EACA,OAAAC,EACA,EAAAa,CACF,EAAIlB,GAAiBe,CAAU,EAC3BI,GAAKD,EAAIP,GAAMM,EAAK,KAAK,EAAIA,EAAK,OAASb,EAC3CgB,GAAKF,EAAIP,GAAMM,EAAK,MAAM,EAAIA,EAAK,QAAUZ,EAIjD,OAAI,CAACc,GAAK,CAAC,OAAO,SAASA,CAAC,KAC1BA,EAAI,IAEF,CAACC,GAAK,CAAC,OAAO,SAASA,CAAC,KAC1BA,EAAI,GAEC,CACL,EAAAD,EACA,EAAAC,CACF,CACF,CAEA,IAAMC,GAAyBL,EAAa,CAAC,EAC7C,SAASM,GAAiBrB,EAAS,CACjC,IAAMsB,EAAMC,EAAUvB,CAAO,EAC7B,MAAI,CAACwB,GAAS,GAAK,CAACF,EAAI,eACfF,GAEF,CACL,EAAGE,EAAI,eAAe,WACtB,EAAGA,EAAI,eAAe,SACxB,CACF,CACA,SAASG,GAAuBzB,EAAS0B,EAASC,EAAsB,CAItE,OAHID,IAAY,SACdA,EAAU,IAER,CAACC,GAAwBD,GAAWC,IAAyBJ,EAAUvB,CAAO,EACzE,GAEF0B,CACT,CAEA,SAASE,GAAsB5B,EAAS6B,EAAcC,EAAiBC,EAAc,CAC/EF,IAAiB,SACnBA,EAAe,IAEbC,IAAoB,SACtBA,EAAkB,IAEpB,IAAME,EAAahC,EAAQ,sBAAsB,EAC3Cc,EAAaH,GAAcX,CAAO,EACpCiC,EAAQlB,EAAa,CAAC,EACtBc,IACEE,EACEnB,EAAUmB,CAAY,IACxBE,EAAQpB,GAASkB,CAAY,GAG/BE,EAAQpB,GAASb,CAAO,GAG5B,IAAMkC,EAAgBT,GAAuBX,EAAYgB,EAAiBC,CAAY,EAAIV,GAAiBP,CAAU,EAAIC,EAAa,CAAC,EACnIG,GAAKc,EAAW,KAAOE,EAAc,GAAKD,EAAM,EAChDd,GAAKa,EAAW,IAAME,EAAc,GAAKD,EAAM,EAC/C9B,EAAQ6B,EAAW,MAAQC,EAAM,EACjC7B,EAAS4B,EAAW,OAASC,EAAM,EACvC,GAAInB,EAAY,CACd,IAAMQ,EAAMC,EAAUT,CAAU,EAC1BqB,EAAYJ,GAAgBnB,EAAUmB,CAAY,EAAIR,EAAUQ,CAAY,EAAIA,EAClFK,EAAad,EACbe,EAAgBC,GAAgBF,CAAU,EAC9C,KAAOC,GAAiBN,GAAgBI,IAAcC,GAAY,CAChE,IAAMG,EAAc1B,GAASwB,CAAa,EACpCG,EAAaH,EAAc,sBAAsB,EACjDpC,EAAMC,EAAmBmC,CAAa,EACtCI,EAAOD,EAAW,MAAQH,EAAc,WAAa,WAAWpC,EAAI,WAAW,GAAKsC,EAAY,EAChGG,EAAMF,EAAW,KAAOH,EAAc,UAAY,WAAWpC,EAAI,UAAU,GAAKsC,EAAY,EAClGrB,GAAKqB,EAAY,EACjBpB,GAAKoB,EAAY,EACjBpC,GAASoC,EAAY,EACrBnC,GAAUmC,EAAY,EACtBrB,GAAKuB,EACLtB,GAAKuB,EACLN,EAAab,EAAUc,CAAa,EACpCA,EAAgBC,GAAgBF,CAAU,CAC5C,CACF,CACA,OAAOO,GAAiB,CACtB,MAAAxC,EACA,OAAAC,EACA,EAAAc,EACA,EAAAC,CACF,CAAC,CACH,CAIA,SAASyB,GAAoB5C,EAASgB,EAAM,CAC1C,IAAM6B,EAAaC,GAAc9C,CAAO,EAAE,WAC1C,OAAKgB,EAGEA,EAAK,KAAO6B,EAFVjB,GAAsBmB,EAAmB/C,CAAO,CAAC,EAAE,KAAO6C,CAGrE,CAEA,SAASG,GAAcC,EAAiBC,EAAQ,CAC9C,IAAMC,EAAWF,EAAgB,sBAAsB,EACjD/B,EAAIiC,EAAS,KAAOD,EAAO,WAAaN,GAAoBK,EAAiBE,CAAQ,EACrFhC,EAAIgC,EAAS,IAAMD,EAAO,UAChC,MAAO,CACL,EAAAhC,EACA,EAAAC,CACF,CACF,CAEA,SAASiC,GAAsDC,EAAM,CACnE,GAAI,CACF,SAAAC,EACA,KAAAtC,EACA,aAAAe,EACA,SAAAwB,CACF,EAAIF,EACE3B,EAAU6B,IAAa,QACvBN,EAAkBF,EAAmBhB,CAAY,EACjDyB,EAAWF,EAAWG,GAAWH,EAAS,QAAQ,EAAI,GAC5D,GAAIvB,IAAiBkB,GAAmBO,GAAY9B,EAClD,OAAOV,EAET,IAAIkC,EAAS,CACX,WAAY,EACZ,UAAW,CACb,EACIjB,EAAQlB,EAAa,CAAC,EACpB2C,EAAU3C,EAAa,CAAC,EACxB4C,EAA0BrD,EAAcyB,CAAY,EAC1D,IAAI4B,GAA2B,CAACA,GAA2B,CAACjC,MACtDkC,GAAY7B,CAAY,IAAM,QAAU8B,GAAkBZ,CAAe,KAC3EC,EAASJ,GAAcf,CAAY,GAEjC4B,GAAyB,CAC3B,IAAMG,EAAalC,GAAsBG,CAAY,EACrDE,EAAQpB,GAASkB,CAAY,EAC7B2B,EAAQ,EAAII,EAAW,EAAI/B,EAAa,WACxC2B,EAAQ,EAAII,EAAW,EAAI/B,EAAa,SAC1C,CAEF,IAAMgC,EAAad,GAAmB,CAACU,GAA2B,CAACjC,EAAUsB,GAAcC,EAAiBC,CAAM,EAAInC,EAAa,CAAC,EACpI,MAAO,CACL,MAAOC,EAAK,MAAQiB,EAAM,EAC1B,OAAQjB,EAAK,OAASiB,EAAM,EAC5B,EAAGjB,EAAK,EAAIiB,EAAM,EAAIiB,EAAO,WAAajB,EAAM,EAAIyB,EAAQ,EAAIK,EAAW,EAC3E,EAAG/C,EAAK,EAAIiB,EAAM,EAAIiB,EAAO,UAAYjB,EAAM,EAAIyB,EAAQ,EAAIK,EAAW,CAC5E,CACF,CAEA,SAASC,GAAehE,EAAS,CAC/B,OAAO,MAAM,KAAKA,EAAQ,eAAe,CAAC,CAC5C,CAIA,SAASiE,GAAgBjE,EAAS,CAChC,IAAMkE,EAAOnB,EAAmB/C,CAAO,EACjCkD,EAASJ,GAAc9C,CAAO,EAC9BmE,EAAOnE,EAAQ,cAAc,KAC7BG,EAAQiE,EAAIF,EAAK,YAAaA,EAAK,YAAaC,EAAK,YAAaA,EAAK,WAAW,EAClF/D,EAASgE,EAAIF,EAAK,aAAcA,EAAK,aAAcC,EAAK,aAAcA,EAAK,YAAY,EACzFjD,EAAI,CAACgC,EAAO,WAAaN,GAAoB5C,CAAO,EAClDmB,EAAI,CAAC+B,EAAO,UAClB,OAAIhD,EAAmBiE,CAAI,EAAE,YAAc,QACzCjD,GAAKkD,EAAIF,EAAK,YAAaC,EAAK,WAAW,EAAIhE,GAE1C,CACL,MAAAA,EACA,OAAAC,EACA,EAAAc,EACA,EAAAC,CACF,CACF,CAKA,IAAMkD,GAAgB,GACtB,SAASC,GAAgBtE,EAASuD,EAAU,CAC1C,IAAMjC,EAAMC,EAAUvB,CAAO,EACvBkE,EAAOnB,EAAmB/C,CAAO,EACjCuE,EAAiBjD,EAAI,eACvBnB,EAAQ+D,EAAK,YACb9D,EAAS8D,EAAK,aACdhD,EAAI,EACJC,EAAI,EACR,GAAIoD,EAAgB,CAClBpE,EAAQoE,EAAe,MACvBnE,EAASmE,EAAe,OACxB,IAAMC,EAAsBhD,GAAS,GACjC,CAACgD,GAAuBA,GAAuBjB,IAAa,WAC9DrC,EAAIqD,EAAe,WACnBpD,EAAIoD,EAAe,UAEvB,CACA,IAAME,EAAmB7B,GAAoBsB,CAAI,EAIjD,GAAIO,GAAoB,EAAG,CACzB,IAAMC,EAAMR,EAAK,cACXC,EAAOO,EAAI,KACXC,EAAa,iBAAiBR,CAAI,EAClCS,EAAmBF,EAAI,aAAe,cAAe,WAAWC,EAAW,UAAU,EAAI,WAAWA,EAAW,WAAW,GAAK,EAC/HE,EAA+B,KAAK,IAAIX,EAAK,YAAcC,EAAK,YAAcS,CAAgB,EAChGC,GAAgCR,KAClClE,GAAS0E,EAEb,MAAWJ,GAAoBJ,KAG7BlE,GAASsE,GAEX,MAAO,CACL,MAAAtE,EACA,OAAAC,EACA,EAAAc,EACA,EAAAC,CACF,CACF,CAGA,SAAS2D,GAA2B9E,EAASuD,EAAU,CACrD,IAAMvB,EAAaJ,GAAsB5B,EAAS,GAAMuD,IAAa,OAAO,EACtEb,EAAMV,EAAW,IAAMhC,EAAQ,UAC/ByC,EAAOT,EAAW,KAAOhC,EAAQ,WACjCiC,EAAQ3B,EAAcN,CAAO,EAAIa,GAASb,CAAO,EAAIe,EAAa,CAAC,EACnEZ,EAAQH,EAAQ,YAAciC,EAAM,EACpC7B,EAASJ,EAAQ,aAAeiC,EAAM,EACtCf,EAAIuB,EAAOR,EAAM,EACjBd,EAAIuB,EAAMT,EAAM,EACtB,MAAO,CACL,MAAA9B,EACA,OAAAC,EACA,EAAAc,EACA,EAAAC,CACF,CACF,CACA,SAAS4D,GAAkC/E,EAASgF,EAAkBzB,EAAU,CAC9E,IAAIvC,EACJ,GAAIgE,IAAqB,WACvBhE,EAAOsD,GAAgBtE,EAASuD,CAAQ,UAC/ByB,IAAqB,WAC9BhE,EAAOiD,GAAgBlB,EAAmB/C,CAAO,CAAC,UACzCY,EAAUoE,CAAgB,EACnChE,EAAO8D,GAA2BE,EAAkBzB,CAAQ,MACvD,CACL,IAAMrB,EAAgBb,GAAiBrB,CAAO,EAC9CgB,EAAO,CACL,EAAGgE,EAAiB,EAAI9C,EAAc,EACtC,EAAG8C,EAAiB,EAAI9C,EAAc,EACtC,MAAO8C,EAAiB,MACxB,OAAQA,EAAiB,MAC3B,CACF,CACA,OAAOrC,GAAiB3B,CAAI,CAC9B,CACA,SAASiE,GAAyBjF,EAASkF,EAAU,CACnD,IAAMC,EAAaC,EAAcpF,CAAO,EACxC,OAAImF,IAAeD,GAAY,CAACtE,EAAUuE,CAAU,GAAKE,GAAsBF,CAAU,EAChF,GAEFjF,EAAmBiF,CAAU,EAAE,WAAa,SAAWF,GAAyBE,EAAYD,CAAQ,CAC7G,CAKA,SAASI,GAA4BtF,EAASuF,EAAO,CACnD,IAAMC,EAAeD,EAAM,IAAIvF,CAAO,EACtC,GAAIwF,EACF,OAAOA,EAET,IAAIC,EAASC,GAAqB1F,EAAS,CAAC,EAAG,EAAK,EAAE,OAAO2F,GAAM/E,EAAU+E,CAAE,GAAK/B,GAAY+B,CAAE,IAAM,MAAM,EAC1GC,EAAsC,KACpCC,EAAiB3F,EAAmBF,CAAO,EAAE,WAAa,QAC5D8F,EAAcD,EAAiBT,EAAcpF,CAAO,EAAIA,EAG5D,KAAOY,EAAUkF,CAAW,GAAK,CAACT,GAAsBS,CAAW,GAAG,CACpE,IAAMC,EAAgB7F,EAAmB4F,CAAW,EAC9CE,EAA0BC,GAAkBH,CAAW,EACzD,CAACE,GAA2BD,EAAc,WAAa,UACzDH,EAAsC,OAEVC,EAAiB,CAACG,GAA2B,CAACJ,EAAsC,CAACI,GAA2BD,EAAc,WAAa,UAAY,CAAC,CAACH,IAAwCA,EAAoC,WAAa,YAAcA,EAAoC,WAAa,UAAY/B,GAAkBiC,CAAW,GAAK,CAACE,GAA2Bf,GAAyBjF,EAAS8F,CAAW,GAGpcL,EAASA,EAAO,OAAOS,GAAYA,IAAaJ,CAAW,EAG3DF,EAAsCG,EAExCD,EAAcV,EAAcU,CAAW,CACzC,CACA,OAAAP,EAAM,IAAIvF,EAASyF,CAAM,EAClBA,CACT,CAIA,SAASU,GAAgB9C,EAAM,CAC7B,GAAI,CACF,QAAArD,EACA,SAAAoG,EACA,aAAAC,EACA,SAAA9C,CACF,EAAIF,EAEEiD,EAAoB,CAAC,GADMF,IAAa,oBAAsB3C,GAAWzD,CAAO,EAAI,CAAC,EAAIsF,GAA4BtF,EAAS,KAAK,EAAE,EAAI,CAAC,EAAE,OAAOoG,CAAQ,EACzGC,CAAY,EAC9DE,EAAYxB,GAAkC/E,EAASsG,EAAkB,CAAC,EAAG/C,CAAQ,EACvFb,EAAM6D,EAAU,IAChBC,EAAQD,EAAU,MAClBE,EAASF,EAAU,OACnB9D,EAAO8D,EAAU,KACrB,QAASG,EAAI,EAAGA,EAAIJ,EAAkB,OAAQI,IAAK,CACjD,IAAM1F,EAAO+D,GAAkC/E,EAASsG,EAAkBI,CAAC,EAAGnD,CAAQ,EACtFb,EAAM0B,EAAIpD,EAAK,IAAK0B,CAAG,EACvB8D,EAAQG,GAAI3F,EAAK,MAAOwF,CAAK,EAC7BC,EAASE,GAAI3F,EAAK,OAAQyF,CAAM,EAChChE,EAAO2B,EAAIpD,EAAK,KAAMyB,CAAI,CAC5B,CACA,MAAO,CACL,MAAO+D,EAAQ/D,EACf,OAAQgE,EAAS/D,EACjB,EAAGD,EACH,EAAGC,CACL,CACF,CAEA,SAASkE,GAAc5G,EAAS,CAC9B,GAAM,CACJ,MAAAG,EACA,OAAAC,CACF,EAAIL,GAAiBC,CAAO,EAC5B,MAAO,CACL,MAAAG,EACA,OAAAC,CACF,CACF,CAEA,SAASyG,GAA8B7G,EAAS+B,EAAcwB,EAAU,CACtE,IAAMI,EAA0BrD,EAAcyB,CAAY,EACpDkB,EAAkBF,EAAmBhB,CAAY,EACjDL,EAAU6B,IAAa,QACvBvC,EAAOY,GAAsB5B,EAAS,GAAM0B,EAASK,CAAY,EACnEmB,EAAS,CACX,WAAY,EACZ,UAAW,CACb,EACMQ,EAAU3C,EAAa,CAAC,EAI9B,SAAS+F,GAA4B,CACnCpD,EAAQ,EAAId,GAAoBK,CAAe,CACjD,CACA,GAAIU,GAA2B,CAACA,GAA2B,CAACjC,EAI1D,IAHIkC,GAAY7B,CAAY,IAAM,QAAU8B,GAAkBZ,CAAe,KAC3EC,EAASJ,GAAcf,CAAY,GAEjC4B,EAAyB,CAC3B,IAAMG,EAAalC,GAAsBG,EAAc,GAAML,EAASK,CAAY,EAClF2B,EAAQ,EAAII,EAAW,EAAI/B,EAAa,WACxC2B,EAAQ,EAAII,EAAW,EAAI/B,EAAa,SAC1C,MAAWkB,GACT6D,EAA0B,EAG1BpF,GAAW,CAACiC,GAA2BV,GACzC6D,EAA0B,EAE5B,IAAM/C,EAAad,GAAmB,CAACU,GAA2B,CAACjC,EAAUsB,GAAcC,EAAiBC,CAAM,EAAInC,EAAa,CAAC,EAC9HG,EAAIF,EAAK,KAAOkC,EAAO,WAAaQ,EAAQ,EAAIK,EAAW,EAC3D5C,EAAIH,EAAK,IAAMkC,EAAO,UAAYQ,EAAQ,EAAIK,EAAW,EAC/D,MAAO,CACL,EAAA7C,EACA,EAAAC,EACA,MAAOH,EAAK,MACZ,OAAQA,EAAK,MACf,CACF,CAEA,SAAS+F,GAAmB/G,EAAS,CACnC,OAAOE,EAAmBF,CAAO,EAAE,WAAa,QAClD,CAEA,SAASgH,GAAoBhH,EAASiH,EAAU,CAC9C,GAAI,CAAC3G,EAAcN,CAAO,GAAKE,EAAmBF,CAAO,EAAE,WAAa,QACtE,OAAO,KAET,GAAIiH,EACF,OAAOA,EAASjH,CAAO,EAEzB,IAAIkH,EAAkBlH,EAAQ,aAM9B,OAAI+C,EAAmB/C,CAAO,IAAMkH,IAClCA,EAAkBA,EAAgB,cAAc,MAE3CA,CACT,CAIA,SAASC,GAAgBnH,EAASiH,EAAU,CAC1C,IAAM3F,EAAMC,EAAUvB,CAAO,EAC7B,GAAIyD,GAAWzD,CAAO,EACpB,OAAOsB,EAET,GAAI,CAAChB,EAAcN,CAAO,EAAG,CAC3B,IAAIoH,EAAkBhC,EAAcpF,CAAO,EAC3C,KAAOoH,GAAmB,CAAC/B,GAAsB+B,CAAe,GAAG,CACjE,GAAIxG,EAAUwG,CAAe,GAAK,CAACL,GAAmBK,CAAe,EACnE,OAAOA,EAETA,EAAkBhC,EAAcgC,CAAe,CACjD,CACA,OAAO9F,CACT,CACA,IAAIS,EAAeiF,GAAoBhH,EAASiH,CAAQ,EACxD,KAAOlF,GAAgBsF,GAAetF,CAAY,GAAKgF,GAAmBhF,CAAY,GACpFA,EAAeiF,GAAoBjF,EAAckF,CAAQ,EAE3D,OAAIlF,GAAgBsD,GAAsBtD,CAAY,GAAKgF,GAAmBhF,CAAY,GAAK,CAACkE,GAAkBlE,CAAY,EACrHT,EAEFS,GAAgBuF,GAAmBtH,CAAO,GAAKsB,CACxD,CAEA,IAAMiG,GAAkB,SAAgBC,EAAM,QAAAC,EAAA,sBAC5C,IAAMC,EAAoB,KAAK,iBAAmBP,GAC5CQ,EAAkB,KAAK,cACvBC,EAAqB,MAAMD,EAAgBH,EAAK,QAAQ,EAC9D,MAAO,CACL,UAAWX,GAA8BW,EAAK,UAAW,MAAME,EAAkBF,EAAK,QAAQ,EAAGA,EAAK,QAAQ,EAC9G,SAAU,CACR,EAAG,EACH,EAAG,EACH,MAAOI,EAAmB,MAC1B,OAAQA,EAAmB,MAC7B,CACF,CACF,IAEA,SAASC,GAAM7H,EAAS,CACtB,OAAOE,EAAmBF,CAAO,EAAE,YAAc,KACnD,CAEA,IAAM8H,GAAW,CACf,sDAAA1E,GACA,mBAAAL,EACA,gBAAAoD,GACA,gBAAAgB,GACA,gBAAAI,GACA,eAAAvD,GACA,cAAA4C,GACA,SAAA/F,GACA,UAAAD,EACA,MAAAiH,EACF,EAEA,SAASE,GAAcC,EAAGC,EAAG,CAC3B,OAAOD,EAAE,IAAMC,EAAE,GAAKD,EAAE,IAAMC,EAAE,GAAKD,EAAE,QAAUC,EAAE,OAASD,EAAE,SAAWC,EAAE,MAC7E,CAGA,SAASC,GAAYlI,EAASmI,EAAQ,CACpC,IAAIC,EAAK,KACLC,EACEC,EAAOvF,EAAmB/C,CAAO,EACvC,SAASuI,GAAU,CACjB,IAAIC,EACJ,aAAaH,CAAS,GACrBG,EAAMJ,IAAO,MAAQI,EAAI,WAAW,EACrCJ,EAAK,IACP,CACA,SAASK,EAAQC,EAAMC,EAAW,CAC5BD,IAAS,SACXA,EAAO,IAELC,IAAc,SAChBA,EAAY,GAEdJ,EAAQ,EACR,IAAMK,EAA2B5I,EAAQ,sBAAsB,EACzD,CACJ,KAAAyC,EACA,IAAAC,EACA,MAAAvC,EACA,OAAAC,CACF,EAAIwI,EAIJ,GAHKF,GACHP,EAAO,EAEL,CAAChI,GAAS,CAACC,EACb,OAEF,IAAMyI,EAAWC,GAAMpG,CAAG,EACpBqG,EAAaD,GAAMR,EAAK,aAAe7F,EAAOtC,EAAM,EACpD6I,EAAcF,GAAMR,EAAK,cAAgB5F,EAAMtC,EAAO,EACtD6I,EAAYH,GAAMrG,CAAI,EAEtByG,EAAU,CACd,WAFiB,CAACL,EAAW,MAAQ,CAACE,EAAa,MAAQ,CAACC,EAAc,MAAQ,CAACC,EAAY,KAG/F,UAAW7E,EAAI,EAAGuC,GAAI,EAAGgC,CAAS,CAAC,GAAK,CAC1C,EACIQ,EAAgB,GACpB,SAASC,EAAcC,EAAS,CAC9B,IAAMC,EAAQD,EAAQ,CAAC,EAAE,kBACzB,GAAIC,IAAUX,EAAW,CACvB,GAAI,CAACQ,EACH,OAAOV,EAAQ,EAEZa,EAOHb,EAAQ,GAAOa,CAAK,EAJpBjB,EAAY,WAAW,IAAM,CAC3BI,EAAQ,GAAO,IAAI,CACrB,EAAG,GAAI,CAIX,CACIa,IAAU,GAAK,CAACvB,GAAca,EAA0B5I,EAAQ,sBAAsB,CAAC,GAQzFyI,EAAQ,EAEVU,EAAgB,EAClB,CAIA,GAAI,CACFf,EAAK,IAAI,qBAAqBgB,EAAeG,EAAAC,EAAA,GACxCN,GADwC,CAG3C,KAAMZ,EAAK,aACb,EAAC,CACH,OAASmB,EAAI,CACXrB,EAAK,IAAI,qBAAqBgB,EAAeF,CAAO,CACtD,CACAd,EAAG,QAAQpI,CAAO,CACpB,CACA,OAAAyI,EAAQ,EAAI,EACLF,CACT,CAUA,SAASmB,GAAWC,EAAWC,EAAUC,EAAQX,EAAS,CACpDA,IAAY,SACdA,EAAU,CAAC,GAEb,GAAM,CACJ,eAAAY,EAAiB,GACjB,eAAAC,EAAiB,GACjB,cAAAC,EAAgB,OAAO,gBAAmB,WAC1C,YAAAC,EAAc,OAAO,sBAAyB,WAC9C,eAAAC,EAAiB,EACnB,EAAIhB,EACEiB,EAAcxJ,GAAcgJ,CAAS,EACrCS,EAAYN,GAAkBC,EAAiB,CAAC,GAAII,EAAczE,GAAqByE,CAAW,EAAI,CAAC,EAAI,GAAIP,EAAWlE,GAAqBkE,CAAQ,EAAI,CAAC,CAAE,EAAI,CAAC,EACzKQ,EAAU,QAAQlE,GAAY,CAC5B4D,GAAkB5D,EAAS,iBAAiB,SAAU2D,EAAQ,CAC5D,QAAS,EACX,CAAC,EACDE,GAAkB7D,EAAS,iBAAiB,SAAU2D,CAAM,CAC9D,CAAC,EACD,IAAMQ,EAAYF,GAAeF,EAAc/B,GAAYiC,EAAaN,CAAM,EAAI,KAC9ES,EAAiB,GACjBC,EAAiB,KACjBP,IACFO,EAAiB,IAAI,eAAelH,GAAQ,CAC1C,GAAI,CAACmH,CAAU,EAAInH,EACfmH,GAAcA,EAAW,SAAWL,GAAeI,GAAkBX,IAGvEW,EAAe,UAAUX,CAAQ,EACjC,qBAAqBU,CAAc,EACnCA,EAAiB,sBAAsB,IAAM,CAC3C,IAAIG,GACHA,EAAkBF,IAAmB,MAAQE,EAAgB,QAAQb,CAAQ,CAChF,CAAC,GAEHC,EAAO,CACT,CAAC,EACGM,GAAe,CAACD,GAClBK,EAAe,QAAQJ,CAAW,EAEhCP,GACFW,EAAe,QAAQX,CAAQ,GAGnC,IAAIc,EACAC,EAAcT,EAAiBtI,GAAsB+H,CAAS,EAAI,KAClEO,GACFU,EAAU,EAEZ,SAASA,GAAY,CACnB,IAAMC,EAAcjJ,GAAsB+H,CAAS,EAC/CgB,GAAe,CAAC5C,GAAc4C,EAAaE,CAAW,GACxDhB,EAAO,EAETc,EAAcE,EACdH,EAAU,sBAAsBE,CAAS,CAC3C,CACA,OAAAf,EAAO,EACA,IAAM,CACX,IAAIiB,EACJV,EAAU,QAAQlE,GAAY,CAC5B4D,GAAkB5D,EAAS,oBAAoB,SAAU2D,CAAM,EAC/DE,GAAkB7D,EAAS,oBAAoB,SAAU2D,CAAM,CACjE,CAAC,EACDQ,GAAa,MAAQA,EAAU,GAC9BS,EAAmBP,IAAmB,MAAQO,EAAiB,WAAW,EAC3EP,EAAiB,KACbL,GACF,qBAAqBQ,CAAO,CAEhC,CACF,CAmBA,IAAMK,GAASA,GAef,IAAMC,GAAQA,GAQRC,GAAOA,GAwCb,IAAMC,GAAkB,CAACC,EAAWC,EAAUC,IAAY,CAIxD,IAAMC,EAAQ,IAAI,IACZC,EAAgBC,EAAA,CACpB,SAAAC,IACGJ,GAECK,EAAoBC,EAAAH,EAAA,GACrBD,EAAc,UADO,CAExB,GAAID,CACN,GACA,OAAOJ,GAAkBC,EAAWC,EAAUO,EAAAH,EAAA,GACzCD,GADyC,CAE5C,SAAUG,CACZ,EAAC,CACH,ECvwBA,SAASE,EAAcC,EAIpB,CACC,GAAM,CACF,KAAAC,EAAO,GACP,UAAAC,CACJ,EAAIF,EAEAG,EAA8C,KAC9CC,EAA+B,KAC/BC,EAAgC,KAChCC,EAA+B,KAC7BC,EAAYC,EAAQP,CAAI,EAExBQ,EAAc,IAAM,CAClBJ,GAAaC,IACbF,GAAWA,EAAQ,EACnBA,EAAUM,GAAWL,EAAWC,EAAU,IAAM,CAC5CK,GAAgBN,EAA0BC,EAAyB,CAC/D,UAAWJ,EAAU,IAAI,EACzB,WAAY,CAACU,GAAO,EAAE,EAAGC,GAAK,EAAGC,GAAM,CAAC,EACxC,SAAU,OACd,CAAC,EAAE,KAAK,CAAC,CAAE,EAAAC,EAAG,EAAAC,EAAG,UAAWC,CAAS,IAAM,CACvC,OAAO,OAAQX,EAAyB,MAAO,CAAE,KAAM,GAAGS,CAAC,KAAM,IAAK,GAAGC,CAAC,IAAK,CAAC,EAChFd,EAAU,IAAIe,CAAQ,CAC1B,CAAC,CACL,CAAC,EACDV,EAAU,IAAI,EAAI,EAE1B,EACMW,EAAc,IAAM,CAAEd,GAAWA,EAAQ,EAAGA,EAAU,KAAMG,EAAU,IAAI,EAAK,CAAE,EACjFY,EAAO,IAAM,CAAEhB,GAAS,aAAaA,CAAK,EAAGA,EAAQ,WAAWM,EAAa,GAAG,CAAE,EAClFW,EAAO,IAAM,CAAEjB,GAAS,aAAaA,CAAK,EAAGA,EAAQ,WAAWe,EAAa,GAAG,CAAE,EAElFG,EAAkC,CACpC,MAAO,CACH,SAAU,QACV,cAAe,OACf,WAAaC,GAAaf,EAAU,IAAIe,CAAQ,EAAI,UAAY,QAEpE,EACA,SAAWC,GAASjB,EAAWiB,EAAK,WAEpC,QAAUC,GAAa,CACnB,IAAIC,EAAUD,EAAS,WAAY,cAAc,kBAAkB,EACnE,GAAI,CAACC,EAAS,CACV,IAAMC,EAAmC,CACrC,IAAK,CAAC,EACN,GAAI,kBACJ,MAAO,CAAE,SAAU,QAAS,MAAO,EAAG,OAAQ,GAAI,cAAe,MAAO,CAC5E,EAEAD,EADoBD,EAAS,SAAU,OAAOE,CAAU,EAClC,UAC1B,CACA,OAAOD,CACX,CACJ,EAEA,OAAAE,EAAM3B,EAAM,QAASqB,CAAe,EA4B7B,CAAE,KAAAF,EAAM,KAAAC,EAAM,cA1BiB,CAClC,UAAYQ,GAAOA,EAAoB,MAAQ,UAAYR,EAAK,EAChE,SAAWG,GAAS,CAChB,IAAMM,EAAON,EAAK,QAAQ,EAC1BlB,EAAYkB,EAAK,WAEjB,IAAMO,EAAeD,EAAK,SAAU,OAAO7B,EAAM,OAAO,EAElD+B,EAAiBC,GAAsB,CACzC,GAAI,CAACzB,EAAU,IAAI,GAAK,CAACF,GAAa,CAACC,EAAU,OAEjD,IAAM2B,EAASD,EAAM,OACjB,CAAC3B,EAAU,SAAS4B,CAAM,GAAK,CAAC3B,EAAS,SAAS2B,CAAM,GACxDb,EAAK,CAEb,EACAG,EAAK,QAAQ,EAAE,WAAY,iBAAiB,QAASQ,CAAa,EAElER,EAAK,QAAQ,eAAgB,IAAM,CAC3BpB,GAAO,aAAaA,CAAK,EAC7B2B,GAAgBA,EAAa,OAAO,EACpCP,EAAK,QAAQ,EAAE,WAAY,oBAAoB,QAASQ,CAAa,CACzE,CAAC,CACL,CACJ,CAEmC,CACvC,CCtFA,SAASG,GAASC,EASC,CACf,GAAM,CACF,QAAAC,EAAU,CAAC,EACX,UAAAC,EAAY,SACZ,MAAAC,EAAQ,UACR,KAAAC,EAAO,GACP,SAAAC,EAAW,EACf,EAAIL,EAEEM,EAAQC,EAAQP,EAAM,KAAK,EAC7BQ,EAAYD,EAAQH,CAAI,EACxB,CAAE,KAAAK,EAAM,KAAAC,EAAM,cAAAC,CAAc,EAAIC,EAAc,CAAE,KAAMJ,EAAW,UAAWD,EAAQL,CAAS,EAAG,QAASF,EAAM,OAAQ,CAAC,EAEtHa,EAAiC,CACnC,QAAS,IAAM,CAACR,GAAYK,EAAK,CACrC,EAEAI,EAAMd,EAAM,QAASa,CAAc,EAEnC,IAAME,EAA0B,CAC5B,OAAQ,OACR,QAAS,OACT,QAAS,EACT,OAAQ,EACR,KAAM,EACN,OAAQC,EAAa,CAAC,EACtB,kBAAmBA,EAAa,CAAC,EACjC,SAAWC,GAAkBC,EAAUD,EAAU,SAAS,EAC1D,MAAQA,GAAkBE,EAAWF,EAAU,UAAWd,CAAK,EAC/D,gBAAkBc,GAAkBE,EAAWF,EAAU,UAAWd,CAAK,CAC7E,EAEIiB,EACApB,EAAM,OACNc,EAAMd,EAAM,MAAO,CAAE,QAAS,IAAMS,EAAK,EAAG,MAAOM,EAAY,KAAM,gBAAiB,CAAC,EACvFK,EAAepB,EAAM,OAErBoB,EAAe,CACX,MAAO,KACP,QAAS,IAAMX,EAAK,EACpB,MAAQQ,IAAoBX,EAAM,IAAIW,CAAQ,EAAU,IACxD,MAAOF,EACP,KAAM,gBACV,EAGJ,IAAMM,EAA6B,CAC/B,IAAMJ,GAAa,CACf,IAAMK,EAAMhB,EAAM,IAAIW,CAAQ,EACxBM,EAAO,MAAM,QAAQD,CAAG,EAAIA,EAAM,CAACA,CAAG,EAEtCE,EADOvB,EAAQ,OAAOwB,GAAOF,EAAK,SAASE,EAAI,KAAK,CAAC,EACvB,IAAIA,IAC7B,CACH,KAAMA,EAAI,MACV,EAAG,CAACC,GAAI,CAAE,MAAAvB,EAAO,UAAW,EAAK,CAAC,CAAC,EACnC,KAAMsB,EAAI,MACV,UAAYE,GAAU,CACtB,IAAMC,EAAMtB,EAAM,IAAI,EAEhBuB,IADU,MAAM,QAAQD,CAAG,EAAIA,EAAM,CAACA,CAAG,GACxB,OAAOE,IAAKA,KAAML,EAAI,KAAK,EAClDpB,EAAWC,EAAM,IAAIuB,EAAa,EAAIvB,EAAM,IAAIuB,GAAO,CAAC,CAAQ,CACpE,CACA,EACH,EACD,OAAAL,EAAM,KAAKJ,CAAY,EAChBI,CACX,EACA,MAAO,CACH,QAAS,OACT,SAAU,OACV,IAAKR,EAAa,CAAC,CACvB,CACJ,EAEIe,EAA0B,CAC1B,UAAYC,GAAS,CACbA,EAAK,SAAW,OAChB,QAAQ,KAAK,6CAA6C,CAElE,EACA,QAAUA,GAASA,EAAK,SAAS,OAAOX,CAAI,EAC5C,MAAO,CACH,SAAUL,EAAa,EAAE,EACzB,cAAe,OACf,QAAUC,GAAa,aAAaE,EAAWF,EAAU,UAAW,SAAS,CAAC,GAC9E,aAAeA,GAAaD,EAAaiB,EAAahB,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaD,EAAaiB,EAAahB,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaD,EAAaiB,EAAahB,CAAQ,EAAI,CAAC,EACnE,SAAWA,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWd,CAAK,EAC1D,gBAAkBc,GAAaE,EAAWF,EAAU,UAAWd,CAAK,CACxE,CACJ,EAEA,OAAAW,EAAMH,EAAeoB,CAAO,EACrBpB,CACX,CC3GA,SAASuB,GAAaC,EAMlB,CAAC,EAAmB,CACpB,GAAI,CACA,UAAAC,EAAY,aACZ,MAAAC,EAAQ,UACR,WAAAC,EAAaC,EAAa,CAAC,EAC3B,SAAAC,EAAW,EACf,EAAIL,EAEAM,EAAQC,EAAQN,CAAS,EAEvBO,EAAwC,CAC1C,IAAO,SACP,OAAU,MACV,KAAQ,QACR,MAAS,OACT,YAAa,aACb,UAAW,eACX,eAAgB,UAChB,aAAc,YACd,aAAc,YACd,WAAY,cACZ,cAAe,WACf,YAAa,YACjB,EAEMC,EAAcC,GAAe,CAnCvC,IAAAC,EAmC0C,OAAAA,EAAAH,EAAQF,EAAM,IAAII,CAAQ,CAAC,IAA3B,KAAAC,EAAgCH,EAAQ,YAAY,GACpFI,EAASC,GAAgBA,EAAI,SAAS,OAAO,EAAIV,EAAaU,EAAI,SAAS,KAAK,EAAI,OAAS,MAC7FC,EAAOD,GAAgBA,EAAI,SAAS,KAAK,EAAIV,EAAaU,EAAI,SAAS,OAAO,EAAI,OAAS,MAEjG,MAAO,CACH,MAAO,CACH,SAAWH,GAAaK,EAAUL,CAAQ,EAC1C,gBAAkBA,GAAaM,EAAWN,CAAQ,EAClD,MAAQA,GAAaM,EAAWN,EAAU,UAAWR,CAAK,EAC1D,SAAU,WACV,WAAY,CACR,QAAS,KACT,SAAU,WACV,MAAOE,EAAa,GAAG,EACvB,OAAQA,EAAa,GAAG,EACxB,gBAAkBM,GAAaM,EAAWN,EAAU,UAAWR,CAAK,EACpE,YAAaG,EAAW,MAAQ,MAChC,YAAcK,GAAaM,EAAWN,EAAU,UAAWR,CAAK,EAChE,eAAiBQ,GAAa,CAC1B,IAAMG,EAAMJ,EAAWC,CAAQ,EAE/B,OAAOG,EAAI,SAAS,KAAK,GAAKA,EAAI,SAAS,OAAO,EAAI,QAAU,MACpE,EACA,kBAAoBH,GAAa,CAC7B,IAAMG,EAAMJ,EAAWC,CAAQ,EAE/B,OAAOG,EAAI,SAAS,QAAQ,GAAKA,EAAI,SAAS,MAAM,EAAI,QAAU,MACtE,EACA,gBAAkBH,GAAa,CAC3B,IAAMG,EAAMJ,EAAWC,CAAQ,EAC/B,OAAOG,EAAI,SAAS,KAAK,GAAKA,EAAI,SAAS,MAAM,EAAI,QAAU,MACnE,EACA,iBAAmBH,GAAa,CAC5B,IAAMG,EAAMJ,EAAWC,CAAQ,EAC/B,OAAOG,EAAI,SAAS,QAAQ,GAAKA,EAAI,SAAS,OAAO,EAAI,QAAU,MACvE,EACA,IAAMH,GAAa,CACf,IAAMG,EAAMJ,EAAWC,CAAQ,EAC/B,OAAOG,EAAI,SAAS,KAAK,EAAI,EAAIA,EAAI,SAAS,QAAQ,EAAI,OAASD,EAAMC,CAAG,CAChF,EACA,MAAQH,GAAa,CACjB,IAAMG,EAAMJ,EAAWC,CAAQ,EAC/B,OAAOG,EAAI,SAAS,OAAO,EAAI,EAAIA,EAAI,SAAS,MAAM,EAAI,OAASC,EAAID,CAAG,CAC9E,EACA,OAASH,GAAa,CAClB,IAAMG,EAAMJ,EAAWC,CAAQ,EAC/B,OAAOG,EAAI,SAAS,QAAQ,EAAI,EAAIA,EAAI,SAAS,KAAK,EAAI,OAASC,EAAID,CAAG,CAC9E,EACA,KAAOH,GAAa,CAChB,IAAMG,EAAMJ,EAAWC,CAAQ,EAC/B,OAAOG,EAAI,SAAS,MAAM,EAAI,EAAIA,EAAI,SAAS,OAAO,EAAI,OAASD,EAAMC,CAAG,CAChF,EACA,UAAYH,GAAa,CACrB,IAAMG,EAAMJ,EAAWC,CAAQ,EACzBO,EAAIJ,EAAI,SAAS,OAAO,GAAMA,EAAI,SAAS,KAAK,GAAK,CAACA,EAAI,SAAS,MAAM,EAAK,MAAQ,OACtF,EAAIA,EAAI,SAAS,QAAQ,GAAMA,EAAI,SAAS,KAAK,GAAK,CAACA,EAAI,SAAS,KAAK,EAAK,MAAQ,OAC5F,MAAO,aAAaI,CAAC,IAAI,CAAC,iBAC9B,CACJ,CACJ,CACJ,CACJ,CC7FA,SAASC,GAAWC,EAA8C,CAAC,EAAmB,CAHtF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,cAChB,QAAQ,KAAK,sDAAsD,CAE3E,EACA,SAAU,UACV,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EAClF,UAAYA,GAAa,SAASG,EAAa,CAAC,CAAC,UAAUD,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAAC,GAC/G,OAAQ,OACR,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACpE,OAAQ,CACZ,CACJ,CACJ,CCpBA,SAASK,GAAOC,EAA8C,CAAC,EAAmB,CAHlF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,UAChB,QAAQ,KAAK,8CAA8C,CAEnE,EACA,MAAO,CACH,WAAY,OACZ,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EAErD,aAAeA,GAAaE,EAAaC,EAAaH,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaE,EAAaC,EAAaH,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaE,EAAaC,EAAaH,CAAQ,EAAI,CAAC,EACnE,MAAO,cACP,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,IAAMA,GAAaE,EAAaC,EAAaH,CAAQ,EAAI,CAAC,EAC1D,WAAY,OACZ,WAAY,UACZ,WAAY,UACZ,OAAQ,OACR,cAAe,OACf,aAAc,MACd,QAAUA,GAAa,aAAaI,EAAWJ,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAAC,GACxF,MAAQA,GAAaI,EAAWJ,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,gBAAkBA,GAAaI,EAAWJ,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EAClF,gDAAiD,CAC7C,MAAQA,GAAaI,EAAWJ,EAAU,WAAYH,EAAM,IAAIG,CAAQ,CAAC,EACzE,gBAAkBA,GAAaI,EAAWJ,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CACtF,EACA,kBAAmB,CACf,UAAYA,GAAa,eAAeE,EAAa,EAAG,CAAC,IAAIE,EAAWJ,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAAC,EACrH,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,gBAAkBA,GAAaI,EAAWJ,EAAU,UAAW,SAAS,EACxE,QAAUA,GAAa,aAAaI,EAAWJ,EAAU,UAAW,SAAS,CAAC,GAC9E,MAAQA,GAAaI,EAAWJ,EAAU,UAAW,SAAS,CAClE,EACA,oBAAqB,CACjB,QAAS,GACT,OAAQ,OACR,cAAe,MACnB,CACJ,CACJ,CACJ,CCnDA,SAASK,GAAcC,EAAsF,CAAC,EAAmB,CAHjI,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,KAAM,WACN,UAAYI,GAAS,CACbA,EAAK,UAAY,SACjB,QAAQ,KAAK,oDAAoD,CAEzE,EACA,MAAO,CACH,WAAY,OACZ,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,QAAS,cACT,SAAU,WACV,MAAOE,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,eAAgB,SAChB,WAAY,SACZ,WAAY,8CACZ,OAAQ,EACR,QAAS,EACT,YAAa,CACT,QAAS,KACT,QAAS,QACT,aAAcA,EAAa,CAAC,EAC5B,WAAY,EACZ,OAAQ,UACR,OAAQ,OACR,cAAe,OACf,QAAUF,GAAa,aAAaG,EAAWH,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CAAC,GACxF,MAAQA,GAAaG,EAAWH,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EACxE,MAAOE,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,CAC1B,EACA,kBAAmB,CACf,gBAAkBF,GAAaG,EAAWH,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CACtF,EACA,oBAAqB,CACjB,QAAUA,GAAa,aAAaG,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAAC,GAC9F,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAC5F,EACA,0CAA2C,CACvC,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAC5F,EACA,mBAAoB,CAChB,QAAS,KACT,QAAS,QACT,SAAU,WACV,IAAK,MACL,iBAAkB,MAClB,MAAO,MACP,OAAQ,MACR,OAASA,GAAa,GAAGE,EAAa,EAAG,CAAC,UAAUC,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAAC,GAC9G,UAAW,EACX,kBAAmB,EACnB,UAAW,eACf,EACA,0BAA2B,CACvB,QAAUA,GAAa,aAAaG,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAAC,GAC9F,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAC5F,EACA,yBAA0B,CACtB,QAAS,KACT,SAAU,WACV,MAAO,MACP,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAC5F,EACA,+CAAgD,CAC5C,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAC5F,EACA,kBAAmB,CACf,aAAcE,EAAa,GAAG,EAC9B,QAAUF,GAAa,GAAGE,EAAa,EAAG,CAAC,UAAUC,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAAC,EACnH,EACA,cAAe,CACX,OAAQ,aACZ,EACA,0CAA2C,CACvC,QAAS,OACT,gBAAkBA,GAAaG,EAAWH,EAAU,UAAW,SAAS,EACxE,cAAe,MACnB,CACJ,CACJ,CACJ,CCtFA,SAASI,GAAKC,EAA8C,CAAC,EAAmB,CAHhF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,SAAU,UACV,UAAYG,GAAS,CACbA,EAAK,SAAW,QAChB,QAAQ,KAAK,0CAA0C,CAE/D,EACA,MAAO,CACH,QAAS,cACT,WAAY,SACZ,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EAClF,OAAQG,EAAa,CAAC,EACtB,cAAeA,EAAa,GAAG,EAC/B,aAAcA,EAAa,CAAC,CAChC,CACJ,CACJ,CCrBA,SAASC,GACLC,EAAyG,CAAC,EAC5F,CALlB,IAAAC,EAAAC,EAMI,GAAM,CAAE,SAAAC,EAAW,GAAI,EAAIH,EACrBI,EAAQC,GAAQJ,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDK,EAAcD,GAAQH,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,UAAYK,GAAS,CACbA,EAAK,SAAW,WAChB,QAAQ,KAAK,gDAAgD,CAErE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EACxE,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EAElF,SAAU,SACV,cAAe,CACZ,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EACnF,MAAQA,GAAaE,EAAWF,EAAU,WAAYJ,EAAM,IAAII,CAAQ,CAAC,EACvE,SAAWA,GAAaC,EAAUD,EAAU,SAAS,EACrD,UAAW,OACX,QAAS,OACX,eAAe,gBACb,WAAY,SACZ,IAAKG,EAAa,CAAC,EACnB,OAAQ,UACR,WAAY,OACZ,WAAY,IACZ,cAAgBH,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACtE,OAAQG,EAAa,EAAE,CACzB,EACA,sCAAuC,CACnC,QAAS,MACb,EACA,sBAAuB,CACnB,QAAS,IACb,EACA,qBAAsB,CAClB,QAAS,KACT,MAAOA,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,WAAY,EACZ,UAAW,IAAIA,EAAa,EAAG,CAAC,GAChC,gBAAkBH,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CAAC,GACjH,aAAeA,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CAAC,GAC9G,UAAW,gBACX,WAAY,aAAaL,CAAQ,SACrC,EACA,2BAA4B,CACxB,UAAW,iBACf,EACA,oBAAqB,CACjB,gBAAkBK,GAAaE,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CACtF,EACA,4BAA6B,CACzB,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,cAAe,IAAIG,EAAa,EAAG,CAAC,GACpC,QAAUH,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAAC,EACnH,EACA,oBAAqB,CACjB,UAAW,MACX,QAAS,EACT,SAAU,SACV,cAAgBA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACpE,WAAY,EACZ,cAAe,EACf,WAAY,cAAcL,CAAQ,oBAAoBA,CAAQ,oBAAoBA,CAAQ,SAC9F,EACA,0BAA2B,CACvB,UAAWQ,EAAa,GAAG,EAC3B,QAAS,EACT,WAAaH,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACjE,cAAgBA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,CACxE,CACJ,CACJ,CACJ,CC/EA,SAASK,GAAgBC,EAA8C,CAAC,EAAmB,CAH3F,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,MAChB,QAAQ,KAAK,mDAAmD,CAExE,EACA,MAAO,CACH,QAAS,OACT,oBAAqB,UAAUC,EAAa,EAAE,CAAC,qBAC/C,UAAWA,EAAa,CAAC,EACzB,OAAQ,EACR,OAAQ,CACJ,OAAQ,EACR,WAAY,IACZ,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,WAAYJ,EAAM,IAAII,CAAQ,CAAC,CAC7E,EACA,OAAQ,CACJ,OAAQ,EACR,SAAWA,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CAC5E,CACJ,CACJ,CACJ,CC3BA,SAASG,GAAOC,EAA8D,CAAC,EAAmB,CAC9F,GAAM,CAAE,MAAAC,EAAQ,UAAW,KAAAC,EAAO,EAAM,EAAIF,EACtCG,EAAQC,EAAQF,CAAI,EAC1B,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,UAChB,QAAQ,KAAK,8CAA8C,CAEnE,EACA,QAAS,CAACC,EAAeD,IAAS,CAC9B,GAAIC,EAAE,SAAWD,EAAK,WAAY,OAClC,IAAME,EAAIF,EAAK,WAAY,sBAAsB,EAE7CC,EAAE,SAAWC,EAAE,MACfD,EAAE,SAAWC,EAAE,OACfD,EAAE,SAAWC,EAAE,KACfD,EAAE,SAAWC,EAAE,QACNJ,EAAM,IAAI,EAAK,CAChC,EACA,gBAAiB,CAACK,EAAIH,IAAS,CAC3B,IAAMI,EAAMJ,EAAK,WACbI,EAAI,MAAM,UAAY,MACtBA,EAAI,MAAM,EACV,SAAS,KAAK,MAAM,SAAW,GAEvC,EACA,SAAWJ,GAAS,CAChB,IAAMI,EAAMJ,EAAK,WACXK,EAAUC,GAAiB,CACzBA,GACAF,EAAI,UAAU,EACd,SAAS,KAAK,MAAM,SAAW,SAC/B,sBAAsB,IAAM,CACxBA,EAAI,MAAM,QAAU,IACpB,IAAMG,EAAYH,EAAI,cAClB,0EACJ,EACAG,GAAA,MAAAA,EAAW,OACf,CAAC,GAEDH,EAAI,MAAM,QAAU,GAE5B,EACAC,EAAOP,EAAM,IAAI,CAAC,EAClBA,EAAM,YAAYO,CAAM,CAC5B,EACA,MAAO,CACH,QAAS,IACT,WAAY,qBACZ,SAAWG,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,WAAYZ,CAAK,EAC3D,gBAAkBY,GAAaE,EAAWF,EAAU,UAAWZ,CAAK,EACpE,OAAQ,OACR,QAAUY,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EAC9D,UAAYA,GAAa,KAAKG,EAAa,CAAC,CAAC,IAAIA,EAAa,EAAE,CAAC,IAAID,EAAWF,EAAU,UAAW,SAAS,CAAC,GAC/G,cAAe,CACX,gBAAkBA,GAAaE,EAAWF,EAAU,UAAW,SAAS,EACxE,QAAS,GACb,CACJ,CACJ,CACJ,CC7DA,SAASK,GAASC,EAA8C,CAAC,EAAmB,CAHpF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,MAChB,QAAQ,KAAK,4CAA4C,CAEjE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,UAAW,SACX,MAAQA,GAAaE,EAAWF,EAAU,WAAYH,EAAM,IAAIG,CAAQ,CAAC,CAC7E,CACJ,CACJ,CCfA,SAASG,GAAOC,EAA8C,CAAC,EAAmB,CAHlF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,UAChB,QAAQ,KAAK,8CAA8C,CAEnE,EACA,MAAO,CACH,QAAS,OACT,cAAe,SACf,IAAKC,EAAa,CAAC,EACnB,aAAc,EACd,UAAWA,EAAa,CAAC,EACzB,aAAcA,EAAa,CAAC,EAC5B,MAAQC,GAAaC,EAAWD,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EACxE,kCAAmC,CAC/B,QAAS,QACT,SAAU,OACV,aAAcD,EAAa,CAAC,CAChC,EACA,eAAgB,CACZ,SAAWC,GAAaE,EAAUF,EAAU,YAAY,EACxD,MAAQA,GAAaC,EAAWD,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EACxE,WAAY,IAChB,CACJ,CACJ,CACJ,CC7BA,SAASG,GAAUC,EAAkF,CAAC,EAAmB,CAHzH,IAAAC,EAII,GAAM,CAAE,OAAAC,EAAS,YAAa,EAAIF,EAC5BG,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEjDI,EAAaH,IAAW,WAE9B,MAAO,CACH,UAAYI,GAAS,CACbA,EAAK,SAAW,YAChB,QAAQ,KAAK,yCAAyC,CAE9D,EACA,MAAO,CACH,OAAQ,EACR,cAAgBC,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACnE,OAAQ,OACR,aAAeA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACnE,SAAWA,GAAaG,EAAUH,EAAU,SAAS,EACrD,gBAAkBA,GAAaI,EAAWJ,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EAClF,QAAS,OACT,oBAAqBF,EAAa,iBAAmB,6BACrD,UAAWG,EAAa,CAAC,EACzB,OAAQA,EAAa,CAAC,EACtB,WAAY,QACZ,aAAc,CACV,WAAY,SACZ,OAAQ,EACR,SAAWD,GAAaG,EAAUH,EAAU,SAAS,EACrD,WAAY,IACZ,aAAeA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACnE,aAAeA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACnE,MAAQA,GAAaI,EAAWJ,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EACxE,gBAAkBA,GAAaI,EAAWJ,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CACtF,EACA,YAAa,CACT,WAAY,IACZ,UAAW,QACX,OAAQ,EACR,aAAeA,GAAaF,EAAa,MAAQG,EAAaC,EAAaF,CAAQ,EAAI,CAAC,CAC5F,EACA,8CAA+C,CAC3C,QAASF,EAAa,OAAS,QACnC,EACA,6BAA8B,CAC1B,WAAYA,EAAa,IAAM,IAC/B,SAAU,EACV,MAAO,OACP,UAAW,YACf,EACA,QAAS,CACL,WAAYA,EAAa,IAAM,IAC/B,SAAU,EACV,OAAQ,EACR,iBAAkB,QAAQG,EAAa,CAAC,CAAC,SACzC,SAAWD,GAAaG,EAAUH,EAAU,YAAY,EACxD,MAAQA,GAAaI,EAAWJ,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CAC5E,CACJ,CACJ,CACJ,CC5DA,IAAMK,GAAsC,CACxC,GAAI,aACJ,GAAI,UACJ,GAAI,aACJ,GAAI,aACJ,GAAI,aACJ,GAAI,YACR,EAEA,SAASC,GAAQC,EAA8C,CAAC,EAAmB,CAZnF,IAAAC,EAaI,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACZ,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EAAE,SAASA,EAAK,OAAO,GAC3D,QAAQ,KAAK,2DAA2D,CAEhF,EACA,MAAO,CACH,MAAQC,GAAaC,EAAWD,EAAU,WAAYH,EAAM,IAAIG,CAAQ,CAAC,EACzE,UAAW,EACX,aAAcE,EAAa,CAAC,EAC5B,SAAWF,GAAa,CACpB,IAAMG,EAASV,GAAYO,EAAS,YAAY,OAAO,GAAK,UAC5D,OAAOI,EAAUJ,EAAUG,CAAM,CACrC,CACJ,CACJ,CACJ,CC5BA,SAASE,GAAeC,EAA8C,CAAC,EAAmB,CAH1F,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,MAChB,QAAQ,KAAK,kDAAkD,CAEvE,EACA,MAAO,CACH,OAAQ,EACR,OAAQ,MACR,aAAc,EACd,UAAWC,EAAa,CAAC,EACzB,aAAcA,EAAa,CAAC,EAC5B,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CACtF,CACJ,CACJ,CClBA,SAASE,GAAMC,EAA8C,CAAC,EAAmB,CAHjF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,SAAU,UACV,UAAYG,GAAS,CACbA,EAAK,SAAW,OAChB,QAAQ,KAAK,0CAA0C,CAE/D,EACA,MAAO,CACH,QAAS,QACT,MAAO,OACP,SAAU,OACV,OAAQ,OACR,UAAW,QACX,aAAcC,EAAa,CAAC,EAC5B,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CACtF,CACJ,CACJ,CCnBA,SAASE,GAAKC,EAA8C,CAAC,EAAmB,CAJhF,IAAAC,EAKI,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,QAChB,QAAQ,KAAK,4CAA4C,CAEjE,EACA,MAAO,CACH,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,UAAW,SACX,YAAa,SACb,cAAe,SACf,MAAOC,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,WAAY,IACZ,SAAWC,GAAaC,EAAUD,CAAQ,EAC1C,gBAAiB,cACjB,MAAQA,GAAaE,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CAC5E,CACJ,CACJ,CCxBA,SAASG,GAAWC,EAAsF,CAAC,EAAmB,CAH9H,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,KAAM,QACN,YAAa,CAACI,EAAMC,IAAY,CACxBD,EAAK,SAAW,SAChB,QAAQ,KAAK,iDAAiD,EAEjEC,EAAgB,KAAO,OAC5B,EACA,MAAO,CACH,WAAY,OACZ,OAAQ,OACR,OAAQ,UACR,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,aAAeA,GAAaE,EAAaC,EAAaH,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaE,EAAaC,EAAaH,CAAQ,EAAI,CAAC,EACpE,UAAYA,GAAaE,EAAa,EAAIC,EAAaH,CAAQ,EAAI,CAAC,EACpE,WAAaA,GAAaE,EAAa,EAAIC,EAAaH,CAAQ,EAAI,CAAC,EACrE,gBAAiB,cACjB,kCAAmC,CAC/B,OAAQ,EACR,QAAS,CACb,EACA,0BAA2B,CACvB,aAAeA,GAAaE,EAAaC,EAAaH,CAAQ,EAAI,CAAC,CACvE,EACA,2CAA4C,CAC5C,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,gBAAkBA,GAAaI,EAAWJ,EAAU,UAAW,SAAS,EACxE,QAAUA,GAAa,aAAaI,EAAWJ,EAAU,UAAW,SAAS,CAAC,EAClF,CACJ,CACJ,CACJ,CCrCA,SAASK,GACLC,EAAgH,CAAC,EACnG,CAPlB,IAAAC,EAAAC,EAQI,GAAM,CAAE,KAAAC,EAAO,gBAAiB,EAAIH,EAC9BI,EAAQC,GAAQJ,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDK,EAAcD,GAAQH,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,KAAMC,EACN,YAAa,CAACI,EAAMC,IAAY,CACxBD,EAAK,SAAW,SAChB,QAAQ,KAAK,oDAAoD,EAEpEC,EAAgB,KAAOL,CAC5B,EACA,MAAO,CACH,WAAY,UACZ,SAAWM,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,UACZ,MAAQA,GAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,EACxE,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,EAClF,OAAQ,OACR,cAAe,OACf,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,CAAC,GACxF,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACpE,OAASA,GAAaG,EAAa,EAAIC,EAAaJ,CAAQ,EAAI,CAAC,EACjE,uCAAwC,CACpC,OAAQ,UACR,QAAS,GACb,EACA,iEAAkE,CAC9D,QAAUA,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWH,EAAY,IAAIG,CAAQ,CAAC,CAAC,EACnH,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,MAAQA,GAAaE,EAAWF,EAAU,UAAW,SAAS,EAC9D,gBAAkBA,GAAaE,EAAWF,EAAU,UAAW,SAAS,EACxE,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAW,SAAS,CAAC,EAClF,EACA,YAAa,CACT,QAAUA,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAW,OAAO,CAAC,EACjG,CACJ,CACJ,CACJ,CChDA,SAASK,GAAUC,EAAsF,CAAC,EAAmB,CAH7H,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,KAAM,OACN,YAAa,CAACI,EAAMC,IAAY,CACxBD,EAAK,SAAW,SAChB,QAAQ,KAAK,gDAAgD,EAEhEC,EAAgB,KAAO,MAC5B,EACA,MAAO,CACH,QAAS,cACT,WAAY,SACZ,WAAY,UACZ,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,UACZ,MAAQA,GAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,EACxE,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,EAClF,OAAQ,OACR,cAAe,OACf,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,CAAC,GACxF,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,OAASA,GAAaG,EAAa,EAAIC,EAAaJ,CAAQ,EAAI,CAAC,EACjE,cAAgBA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACpE,0BAA2B,CACvB,UAAYA,GAAaG,EAAaC,EAAaJ,CAAQ,CAAC,EAC5D,WAAY,UACZ,SAAU,UACV,OAAQ,OACR,aAAcG,EAAa,CAAC,EAC5B,OAAQA,EAAa,CAAC,EACtB,cAAeA,EAAa,CAAC,EAC7B,OAAQ,UACR,MAAQH,GAAaE,EAAWF,EAAU,WAAYH,EAAY,IAAIG,CAAQ,CAAC,EAC/E,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWH,EAAY,IAAIG,CAAQ,CAAC,CAC5F,EACA,gCAAiC,CAC7B,UAAYA,GAAaG,EAAaC,EAAaJ,CAAQ,CAAC,EAC5D,WAAY,UACZ,SAAU,UACV,OAAQ,OACR,aAAcG,EAAa,CAAC,EAC5B,OAAQA,EAAa,CAAC,EACtB,cAAeA,EAAa,CAAC,EAC7B,OAAQ,UACR,MAAQH,GAAaE,EAAWF,EAAU,WAAYL,EAAM,IAAIK,CAAQ,CAAC,EACzE,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,CACtF,EACA,iEAAkE,CAC9D,QAAUA,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWH,EAAY,IAAIG,CAAQ,CAAC,CAAC,EACnH,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,MAAQA,GAAaE,EAAWF,EAAU,UAAW,SAAS,EAC9D,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAW,SAAS,CAAC,GAC9E,gBAAkBA,GAAaE,EAAWF,EAAU,UAAW,SAAS,CAC5E,EACA,6EAA8E,CAC1E,OAAQ,cACR,MAAQA,GAAaE,EAAWF,EAAU,UAAW,SAAS,EAC9D,gBAAkBA,GAAaE,EAAWF,EAAU,UAAW,SAAS,CAC5E,CACJ,CACJ,CACJ,CCnEA,SAASK,GAAYC,EAAsF,CAAC,EAAmB,CAH/H,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,KAAM,SACN,YAAa,CAACI,EAAMC,IAAY,CACxBD,EAAK,SAAW,SAChB,QAAQ,KAAK,kDAAkD,EAElEC,EAAgB,KAAO,QAC5B,EACA,MAAO,CACH,WAAY,UACZ,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,UACZ,MAAQA,GAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,EACxE,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,EAClF,OAAQ,OACR,cAAe,OACf,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,CAAC,GACxF,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,SAAUG,EAAa,EAAE,EACzB,cAAgBH,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,iBAAkB,CACd,MAAQA,GAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,CAC5E,EACA,+BAAgC,CAC5B,QAAS,MACb,EACA,kCAAmC,CAC/B,OAAQ,SACZ,EACA,iEAAkE,CAC9D,QAAUA,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWH,EAAY,IAAIG,CAAQ,CAAC,CAAC,EACnH,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,MAAQA,GAAaE,EAAWF,EAAU,UAAW,SAAS,EAC9D,gBAAkBA,GAAaE,EAAWF,EAAU,UAAW,SAAS,EACxE,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAW,SAAS,CAAC,EAClF,CACJ,CACJ,CACJ,CC9CA,SAASK,GAAUC,EAAsF,CAAC,EAAmB,CAH7H,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,KAAM,OACN,YAAa,CAACI,EAAMC,IAAY,CACxBD,EAAK,SAAW,SAChB,QAAQ,KAAK,8DAA8D,EAE9EC,EAAgB,KAAO,MAC5B,EACA,MAAO,CACH,WAAY,UACZ,WAAY,UACZ,SAAUC,EAAa,EAAE,EACzB,cAAgBC,GAAaD,EAAaE,EAAaD,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaD,EAAaE,EAAaD,CAAQ,EAAI,CAAC,EACnE,aAAeA,GAAaD,EAAaE,EAAaD,CAAQ,EAAI,CAAC,EACnE,SAAWA,GAAaE,EAAUF,EAAU,SAAS,EACrD,OAAQ,OACR,cAAe,OACf,QAAUA,GAAa,aAAaG,EAAWH,EAAU,UAAWN,EAAM,IAAIM,CAAQ,CAAC,CAAC,GACxF,MAAQA,GAAaG,EAAWH,EAAU,UAAWN,EAAM,IAAIM,CAAQ,CAAC,EACxE,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWN,EAAM,IAAIM,CAAQ,CAAC,EAClF,iBAAkB,CACd,MAAQA,GAAaG,EAAWH,EAAU,SAAS,CACvD,EACA,4BAA6B,CACzB,MAAQA,GAAaG,EAAWH,EAAU,UAAU,CACxD,EACA,iEAAkE,CAE9D,QAAUA,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUI,EAAWH,EAAU,UAAWJ,EAAY,IAAII,CAAQ,CAAC,CAAC,EACnH,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,gBAAkBA,GAAaG,EAAWH,EAAU,UAAW,SAAS,EACxE,QAAUA,GAAa,aAAaG,EAAWH,EAAU,UAAW,SAAS,CAAC,GAC9E,MAAQA,GAAaG,EAAWH,EAAU,UAAW,SAAS,CAClE,EACA,oCAAqC,CACjC,QAAUA,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUI,EAAWH,EAAU,UAAW,OAAO,CAAC,EACjG,EACA,uBAAwB,CACpB,QAAUA,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUI,EAAWH,EAAU,UAAW,OAAO,CAAC,EACjG,EACA,yBAA0B,CACtB,QAAUA,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUI,EAAWH,EAAU,UAAW,SAAS,CAAC,EACnG,CACJ,CACJ,CACJ,CCrDA,SAASI,GAAWC,EAAsF,CAAC,EAAmB,CAH9H,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,KAAM,QACN,UAAYI,GAAS,CACbA,EAAK,SAAW,SAChB,QAAQ,KAAK,iDAAiD,CAEtE,EACA,MAAO,CACH,WAAY,OACZ,MAAO,OACP,OAAQ,EACR,QAAS,EACT,OAAQC,EAAa,CAAC,EACtB,WAAY,cACZ,OAAQ,UACR,mCAAoC,CAChC,OAAQA,EAAa,GAAG,EACxB,aAAcA,EAAa,GAAG,EAC9B,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,CACtF,EACA,sBAAuB,CACnB,OAAQD,EAAa,GAAG,EACxB,aAAcA,EAAa,GAAG,EAC9B,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,CACtF,EACA,0BAA2B,CACvB,WAAY,OACZ,MAAOD,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,aAAcA,EAAa,GAAG,EAC9B,OAAQ,OACR,UAAW,SAASA,EAAa,GAAG,CAAC,MAAMA,EAAa,CAAC,CAAC,SAC1D,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWH,EAAY,IAAIG,CAAQ,CAAC,CAC5F,EACA,gDAAiD,CAC7C,gBAAkBA,GAAaC,EAAWD,EAAU,WAAYH,EAAY,IAAIG,CAAQ,CAAC,CAC7F,EACA,kBAAmB,CACf,QAAUA,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUE,EAAWD,EAAU,UAAWH,EAAY,IAAIG,CAAQ,CAAC,CAAC,GAC/G,cAAeD,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,CAChC,EACA,cAAe,CACX,QAAS,GACT,OAAQ,aACZ,CACJ,CACJ,CACJ,CCpDA,SAASG,GAAYC,EAAsF,CAAC,EAAmB,CAH/H,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,KAAM,SACN,YAAa,CAACI,EAAMC,IAAY,CACxBD,EAAK,SAAW,SAChB,QAAQ,KAAK,kDAAkD,EAElEC,EAAgB,KAAO,QAC5B,EACA,MAAO,CACH,WAAY,UACZ,WAAY,UACZ,SAAUC,EAAa,EAAE,EACzB,mBAAqBC,GAAaD,EAAaE,EAAaD,CAAQ,EAAI,CAAC,EACzE,iBAAmBA,GAAaD,EAAaE,EAAaD,CAAQ,EAAI,GAAG,EACzE,aAAeA,GAAaD,EAAaE,EAAaD,CAAQ,EAAI,CAAC,EACnE,aAAeA,GAAaD,EAAaE,EAAaD,CAAQ,EAAI,CAAC,EACnE,SAAWA,GAAaE,EAAUF,EAAU,SAAS,EACrD,OAAQ,OACR,cAAe,OACf,QAAUA,GAAa,aAAaG,EAAWH,EAAU,UAAWN,EAAM,IAAIM,CAAQ,CAAC,CAAC,GACxF,MAAQA,GAAaG,EAAWH,EAAU,UAAWN,EAAM,IAAIM,CAAQ,CAAC,EACxE,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWN,EAAM,IAAIM,CAAQ,CAAC,EAClF,6DAA8D,CAC1D,QAAS,CACb,EACA,iEAAkE,CAC9D,QAAUA,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUI,EAAWH,EAAU,UAAWJ,EAAY,IAAII,CAAQ,CAAC,CAAC,EACnH,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,gBAAkBA,GAAaG,EAAWH,EAAU,UAAW,SAAS,EACxE,QAAUA,GAAa,aAAaG,EAAWH,EAAU,UAAW,SAAS,CAAC,GAC9E,MAAQA,GAAaG,EAAWH,EAAU,UAAW,SAAS,CAClE,CACJ,CACJ,CACJ,CCzCA,SAASI,GAASC,EAA8C,CAAC,EAAmB,CAHpF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,OAChB,QAAQ,KAAK,6CAA6C,CAElE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EAClF,aAAcG,EAAa,EAAG,EAC9B,cAAeA,EAAa,GAAG,EAC/B,aAAcA,EAAa,CAAC,EAC5B,QAAUH,GAAa,aAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAAC,EAC5F,CACJ,CACJ,CCnBA,SAASI,GAAMC,EAAsF,CAAC,EAAmB,CAHzH,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,UAAYI,GAAS,CACbA,EAAK,SAAW,SAChB,QAAQ,KAAK,4CAA4C,CAEjE,EACA,MAAO,CACH,QAAS,cACT,WAAY,SACZ,IAAKC,EAAa,CAAC,EACnB,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,EACxE,OAAQ,UACR,iBAAkB,CACd,MAAQA,GAAaE,EAAWF,EAAU,WAAYH,EAAY,IAAIG,CAAQ,CAAC,CACnF,EACA,wBAAyB,CACrB,QAAS,GACT,OAAQ,cACR,MAAQA,GAAaE,EAAWF,EAAU,UAAW,SAAS,CAClE,CACJ,CACJ,CACJ,CC3BA,SAASG,GAAKC,EAAsF,CAAC,EAAmB,CAHxH,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,YAAa,aAAa,EAC3E,MAAO,CACH,UAAYI,GAAS,CACbA,EAAK,SAAW,KAChB,QAAQ,KAAK,uCAAuC,CAE5D,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,gBAAkBA,GAAaE,EAAWF,CAAQ,EAClD,MAAQA,GAAaE,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EACxE,eAAgB,OAChB,YAAa,CACT,MAAQA,GAAaE,EAAWF,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAClF,EACA,0BAA2B,CACvB,MAAQA,GAAaE,EAAWF,EAAU,WAAYJ,EAAM,IAAII,CAAQ,CAAC,EACzE,eAAgB,WACpB,EACA,kBAAmB,CACf,aAAcG,EAAa,CAAC,EAC5B,cAAcA,EAAa,CAAC,EAC5B,QAAUH,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAAC,EACnH,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,MAAQA,GAAaE,EAAWF,EAAU,UAAW,SAAS,CAClE,CACJ,CACJ,CACJ,CCjCA,SAASI,GAAKC,EAAoD,CAAC,EAAmB,CAHtF,IAAAC,EAII,IAAMC,EAAcC,GAAQF,EAAAD,EAAM,cAAN,KAAAC,EAAqB,YAAa,aAAa,EAE3E,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,QAChB,QAAQ,KAAK,0CAA0C,CAE/D,EACA,SAAU,UACV,MAAO,CACH,QAAS,cACT,WAAY,SACZ,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAY,IAAIG,CAAQ,CAAC,EAC9E,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWH,EAAY,IAAIG,CAAQ,CAAC,EACxF,OAAQG,EAAa,CAAC,EACtB,aAAcA,EAAa,CAAC,EAC5B,cAAeA,EAAa,GAAG,CACnC,CACJ,CACJ,CCrBA,SAASC,GAAUC,EAA8C,CAAC,EAAmB,CAHrF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,KAChB,QAAQ,KAAK,4CAA4C,CAEjE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAYE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACvE,WAAW,IACX,UAAW,EACX,aAAc,CAClB,CACJ,CACJ,CCjBA,SAASG,GAAYC,EAA8C,CAAC,EAAmB,CAHvF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,SAAU,UACV,UAAYG,GAAS,CACbA,EAAK,SAAW,OAChB,QAAQ,KAAK,gDAAgD,CAErE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EAClF,OAAQ,OACR,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,CACvE,CACJ,CACJ,CCpBA,SAASK,GAASC,EAAsF,CAAC,EAAmB,CAH5H,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,UAAYI,GAAS,CACbA,EAAK,SAAW,YAChB,QAAQ,KAAK,kDAAkD,CAEvE,EACA,MAAO,CACH,WAAY,OACZ,MAAO,OACP,OAAQC,EAAa,CAAC,EACtB,OAAQ,EACR,aAAcA,EAAa,GAAG,EAC9B,SAAU,SACV,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,EAClF,0BAA2B,CACvB,gBAAkBA,GAAaC,EAAWD,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,EAClF,aAAcD,EAAa,GAAG,CAClC,EACA,4BAA6B,CACzB,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWH,EAAY,IAAIG,CAAQ,CAAC,EACxF,aAAcD,EAAa,GAAG,EAC9B,WAAY,kBAChB,EACA,uBAAwB,CACpB,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWH,EAAY,IAAIG,CAAQ,CAAC,EACxF,aAAcD,EAAa,GAAG,CAClC,CACJ,CACJ,CACJ,CCjCA,SAASG,GAAWC,EAAsF,CAAC,EAAmB,CAH9H,IAAAC,EAAAC,EAII,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,KAAM,QACN,UAAYI,GAAS,CACjB,GAAIA,EAAK,SAAW,QAAS,CACzB,QAAQ,KAAK,gEAAgE,EAC7E,MACJ,CACJ,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,OACZ,QAAS,cACT,SAAU,WACV,MAAOE,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,eAAgB,SAChB,WAAY,SACZ,WAAY,8CACZ,OAAQ,EACR,QAAS,EACT,YAAa,CACT,QAAS,KACT,QAAS,QACT,aAAc,MACd,WAAY,EACZ,OAAQ,UACR,OAAQ,OACR,cAAe,OACf,QAAUF,GAAa,aAAaG,EAAWH,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CAAC,GACxF,MAAQA,GAAaG,EAAWH,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EACxE,MAAOE,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,CAC1B,EACA,kBAAmB,CACf,gBAAkBF,GAAaG,EAAWH,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,CACtF,EACA,oBAAqB,CACjB,QAAUA,GAAa,aAAaG,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAAC,EAClG,EACA,mBAAoB,CAChB,QAAS,KACT,SAAU,WACV,MAAO,MACP,aAAc,MACd,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAC5F,EACA,0CAA2C,CACvC,gBAAkBA,GAAaG,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAC5F,EACA,kBAAmB,CACf,aAAc,MACd,QAAUA,GAAa,GAAGE,EAAa,EAAG,CAAC,UAAUC,EAAWH,EAAU,UAAWF,EAAY,IAAIE,CAAQ,CAAC,CAAC,EACnH,EACA,cAAe,CACX,OAAQ,aACZ,EACA,0CAA2C,CACvC,QAAS,OACT,gBAAkBA,GAAaG,EAAWH,EAAU,UAAW,SAAS,EACxE,cAAe,MACnB,CACJ,CACJ,CACJ,CCnEA,SAASI,GACLC,EAA0D,CAAC,EAC7C,CACd,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,UAChB,QAAQ,KAAK,8CAA8C,CAEnE,EACA,MAAO,CACH,WAAY,OACZ,WAAY,UACZ,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,UACZ,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,CAAK,EAC1D,gBAAkBG,GAAaE,EAAWF,EAAU,UAAWH,CAAK,EACpE,OAAQ,OACR,cAAe,OACf,QAAUG,GAAa,aAAaE,EAAWF,EAAU,UAAWH,CAAK,CAAC,GAC1E,aAAeG,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,YAAcA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EAClE,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,gBAAiBK,GAAc,CAC/B,IAAMC,EAAM,6FAA6FC,GAAgBF,EAAG,SAAS,CAAC,0FACtI,MAAO,2BAA2B,mBAAmBC,CAAG,CAAC,IAC3D,EACE,iBAAkB,YAClB,mBAAoB,SAASH,EAAa,CAAC,CAAC,UAC5C,eAAgB,GAAGA,EAAa,GAAG,CAAC,IAAIA,EAAa,GAAG,CAAC,GACzD,oBAAqB,CACjB,OAASH,GAAaG,EAAa,EAAIC,EAAaJ,CAAQ,EAAI,CAAC,CACrE,EACA,gDAAiD,CAC7C,QAAUA,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWF,CAAW,CAAC,EACrG,EACA,kBAAmB,CACf,QAAUE,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWF,CAAW,CAAC,EACrG,EACA,aAAc,CACV,MAAQE,GAAaE,EAAWF,EAAU,WAAYH,CAAK,CAC/D,EACA,qBAAsB,CAClB,MAAQG,GAAaE,EAAWF,EAAU,UAAW,SAAS,CAClE,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,MAAQA,GAAaE,EAAWF,EAAU,UAAW,SAAS,EAC9D,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAW,SAAS,CAAC,GAC9E,gBAAkBA,GAAaE,EAAWF,EAAU,UAAW,SAAS,CAC5E,CACJ,CACJ,CACJ,CCxDA,SAASQ,GAASC,EAEd,CAAC,EAAmB,CALxB,IAAAC,EAME,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEjDG,EAAY,CAChB,UAAW,CAAE,QAAS,CAAE,EACxB,MAAO,CAAE,QAAS,EAAG,CACvB,EACMC,EAAgBC,GAAW,KAAK,UAAUF,CAAS,CAAC,EAC1D,MAAO,CACL,WAAY,OACZ,SAAU,UACV,MAAO,CACL,SAAWG,GAAaC,EAAUD,CAAQ,EAC1C,MAAQA,GAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,EACxE,OAAQG,EAAa,CAAC,EACtB,QAAS,QACT,aAAcA,EAAa,CAAC,EAC5B,gBAAkBH,GAAaE,EAAWF,EAAU,UAAWL,EAAM,IAAIK,CAAQ,CAAC,EAClF,UAAW,GAAGF,CAAa,6BAC3B,CAAC,cAAcA,CAAa,EAAE,EAAGD,CACnC,CACF,CACF,CCvBA,IAAMO,GAAY,CAAE,GAAI,CAAE,UAAW,gBAAiB,CAAE,EAClDC,GAAgBC,GAAW,KAAK,UAAUF,EAAS,CAAC,EAE1D,SAASG,GAAQC,EAEb,CAAC,EAAmB,CATxB,IAAAC,EAUE,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACL,KAAM,SACN,UAAW,UACX,UAAYG,GAAS,CACfA,EAAK,SAAW,QAClB,QAAQ,KAAK,mCAAmC,CAEpD,EACA,MAAO,CACL,SAAWC,GAAaC,EAAUD,CAAQ,EAC1C,gBAAkBA,GAAaE,EAAWF,CAAQ,EAClD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,QAAS,eACT,OAAQ,EACR,WAAY,EACZ,MAAOG,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,aAAc,MACd,OAASH,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAAC,GACxG,eAAiBA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACjF,UAAW,aACX,QAAS,EACT,UAAW,GAAGR,EAAa,wBAC3B,CAAC,cAAcA,EAAa,EAAE,EAAGD,EACnC,CAEF,CACF,CCnCA,SAASa,GAAWC,EAKhB,CAAC,EAAmB,CATxB,IAAAC,EAUI,GAAM,CAAE,MAAAC,EAAQ,UAAW,SAAAC,EAAW,EAAM,EAAIH,EAC1CI,EAAQC,GAAQJ,EAAAD,EAAM,QAAN,KAAAC,EAAgBE,EAAW,CAAC,EAAI,IAAK,EAErDG,EAA+B,CACjC,IAAMC,GAAa,CACf,IAAMC,EAAMJ,EAAM,IAAIG,CAAQ,EAE9B,OADa,MAAM,QAAQC,CAAG,EAAIA,EAAM,CAACA,CAAG,GAChC,IAAKC,IAAO,CAAE,MAAO,KAAM,KAAMT,EAAM,KAAM,MAAOS,GAAK,EAAG,EAAE,CAC9E,EACA,OAAQ,EACZ,EAyBA,MAvB8B,CAC1B,SAAS,WACT,SAAU,CACN,OAAQ,CACJ,MAAOL,EACP,SAAAD,CACJ,CACJ,EACA,QAAUO,GAAS,CACXA,EAAK,SAAW,OAChB,QAAQ,KAAK,uCAAuC,EAExDA,EAAK,SAAS,OAAOJ,CAAM,CAC/B,EACA,MAAO,CACH,QAAS,OACT,cAAe,SACf,aAAeC,GAAaI,EAAaC,EAAaL,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaI,EAAaC,EAAaL,CAAQ,EAAI,CAAC,EACpE,SAAWA,GAAaM,EAAUN,EAAU,SAAS,EACrD,gBAAkBA,GAAaO,EAAWP,EAAU,UAAWL,CAAK,CACxE,CACJ,CAEJ,CC3CA,SAASa,GAAWC,EAIhB,CAAC,EAAmB,CACtB,GAAM,CACJ,YAAAC,EAAc,UACd,MAAAC,EAAQ,UACR,MAAAC,EAAQ,IACV,EAAIH,EAiDJ,MA/C8B,CAC5B,KAAM,SACN,QAAUI,GAAS,CACbA,EAAK,SAAW,OAClB,QAAQ,KAAK,qCAAqC,EAEpD,IAAIC,EAASD,EAAK,WAAW,QAAQ,EACrC,GAAIC,EAAQ,CACV,IAAIC,EAAQD,EAAO,MACnBD,EAAK,WAAW,IAAI,eAAiBG,GAAa,CAChD,IAAIC,EAAMF,EAAM,IAAIC,CAAQ,EAC5B,OAAOF,EAAO,SAAWG,EAAI,SAASL,CAAK,EAAIK,GAAOL,CACxD,CAAC,EACDC,EAAK,SAAS,QAAS,IAAM,CAC3B,IAAII,EAAMF,EAAM,IAAI,EAChBD,EAAO,SACTG,EAAI,SAASL,CAAK,EAAIG,EAAM,IAAIE,EAAI,OAAQC,GAAuBA,IAAMN,CAAK,CAAC,EAAIG,EAAM,IAAIE,EAAI,OAAO,CAACL,CAAK,CAAC,CAAC,EAEhHK,GAAOL,GAASG,EAAM,IAAIH,CAAK,CAEnC,CAAC,CACH,CACF,EACA,MAAO,CACL,OAAQ,UACR,QAAS,OACT,WAAY,SACZ,SAAWI,GAAaG,EAAUH,EAAU,SAAS,EACrD,OAASA,GAAaI,EAAa,EAAIC,EAAaL,CAAQ,EAAI,CAAC,EACjE,cAAgBA,GAAaI,EAAaC,EAAaL,CAAQ,EAAI,CAAC,EACpE,OAAQ,OACR,QAAS,OACT,MAAQA,GAAaM,EAAWN,EAAU,UAAWL,CAAK,EAC1D,gBAAkBK,GAAaM,EAAWN,EAAU,UAAWL,CAAK,EACpE,oDAAqD,CACnD,gBAAkBK,GAAaM,EAAWN,EAAU,UAAWL,CAAK,CACtE,EACA,wBAAyB,CACvB,gBAAkBK,GAAaM,EAAWN,EAAU,UAAWN,CAAW,EAC1E,MAAQM,GAAaM,EAAWN,EAAU,UAAU,CACtD,EACA,kBAAmB,CACjB,QAAUA,GAAa,GAAGI,EAAa,EAAG,CAAC,UAAUE,EAAWN,EAAU,UAAWN,CAAW,CAAC,GACjG,cAAe,IAAIU,EAAa,EAAG,CAAC,EACtC,CACF,CACF,CAEF,CCxDA,SAASG,GAAUC,EAQA,CACf,GAAM,CACF,QAAAC,EAAU,CAAC,EACX,UAAAC,EAAY,SACZ,MAAAC,EAAQ,UACR,KAAAC,EAAO,GACP,SAAAC,EAAW,EACf,EAAIL,EAEEM,EAAQC,EAAQP,EAAM,KAAK,EAC7BQ,EAAYD,EAAQH,CAAI,EACxB,CAAE,KAAAK,EAAM,KAAAC,EAAM,cAAAC,CAAc,EAAIC,EAAc,CAAE,KAAMJ,EAAW,UAAWD,EAAQL,CAAS,EAAG,QAASF,EAAM,OAAQ,CAAC,EAEtHa,EAAiC,CACnC,QAAS,IAAM,CAACR,GAAYK,EAAK,CACrC,EAEAI,EAAMd,EAAM,QAASa,CAAc,EAEnC,IAAME,EAA6B,CAC/B,IAAMC,GAAa,CACf,IAAMC,EAAMX,EAAM,IAAIU,CAAQ,EACxBE,EAAO,MAAM,QAAQD,CAAG,EAAIA,EAAM,CAACA,CAAG,EAE5C,OADahB,EAAQ,OAAOkB,GAAOD,EAAK,SAASC,EAAI,KAAK,CAAC,EAC/C,IAAIA,IAAQ,CACpB,KAAMA,EAAI,MACV,EAAG,CAACC,GAAI,CAAE,MAAAjB,EAAO,UAAWE,CAAS,CAAC,CAAC,EACvC,KAAMc,EAAI,MACV,UAAYE,GAAU,CAClB,IAAMC,EAAMhB,EAAM,IAAI,EAEhBiB,GADU,MAAM,QAAQD,CAAG,EAAIA,EAAM,CAACA,CAAG,GACxB,OAAOE,GAAKA,IAAML,EAAI,KAAK,EAClDd,EAAWC,EAAM,IAAIiB,CAAa,EAAIjB,EAAM,IAAIiB,EAAO,CAAC,CAAQ,CACpE,CACJ,EAAE,CACN,EACA,MAAO,CACH,QAAS,OACT,SAAU,OACV,IAAKE,EAAa,CAAC,EACnB,KAAM,CACV,CACJ,EAEIC,EAA0B,CAC1B,UAAYC,GAAS,CACbA,EAAK,SAAW,OAChB,QAAQ,KAAK,oCAAoC,CAEzD,EACA,QAAUA,GAASA,EAAK,SAAS,OAAOZ,CAAI,EAC5C,QAAS,IAAMP,EAAU,IAAI,EAAIE,EAAK,EAAID,EAAK,EAC/C,MAAO,CACH,OAAQ,UACR,QAAS,OACT,WAAY,SACZ,UAAYO,GAAaS,EAAa,EAAIG,EAAaZ,CAAQ,EAAI,CAAC,EACpE,SAAUS,EAAa,EAAE,EACzB,cAAe,OACf,QAAUT,GAAa,aAAaa,EAAWb,EAAU,UAAW,SAAS,CAAC,GAC9E,cAAgBA,GAAaS,EAAaG,EAAaZ,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaS,EAAaG,EAAaZ,CAAQ,EAAI,CAAC,EACnE,SAAWA,GAAac,EAAUd,EAAU,SAAS,EACrD,MAAQA,GAAaa,EAAWb,EAAU,UAAWb,CAAK,EAC1D,gBAAkBa,GAAaa,EAAWb,EAAU,UAAWb,CAAK,CACxE,CACJ,EAEA,OAAAW,EAAMH,EAAee,CAAO,EACrBf,CACX,CCjFA,SAASoB,GAAYC,EAAoD,CAAC,EAAmB,CAH7F,IAAAC,EAII,IAAMC,EAAcC,GAAQF,EAAAD,EAAM,cAAN,KAAAC,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,SAAU,UACV,KAAM,WACN,YAAcG,GAAS,CACnB,GAAIA,EAAK,SAAW,QAAS,CACzB,QAAQ,KAAK,kDAAkD,EAC/D,MACJ,CACJ,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,OACZ,SAAU,WACV,QAAS,cACT,MAAOE,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,OAAQ,UACR,OAAQ,IACR,aAAcA,EAAa,CAAC,EAC5B,YAAa,CACT,YAAa,CACT,gBAAkBF,GAAaG,EAAWH,EAAU,aAAcH,EAAY,IAAIG,CAAQ,CAAC,CAC/F,EACA,WAAY,CACR,KAAM,eAAeE,EAAa,GAAG,CAAC,GAC1C,CACJ,EACA,WAAY,CACR,QAAS,KACT,YAAa,MACb,SAAU,WACV,MAAOA,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,aAAcA,EAAa,GAAG,EAC9B,KAAMA,EAAa,EAAG,EACtB,IAAK,MACL,UAAW,mBACX,WAAY,YACZ,gBAAkBF,GAAaG,EAAWH,EAAU,YAAY,CACpE,EACA,YAAa,CACT,QAAS,KACT,MAAO,OACP,aAAcE,EAAa,GAAG,EAC9B,QAAS,eACT,SAAWF,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,EACZ,gBAAkBA,GAAaG,EAAWH,CAAQ,CACtD,EACA,cAAe,CACX,QAAS,GACT,OAAQ,aACZ,CACJ,CACJ,CACJ,CC1DA,SAASI,GAAaC,EAIlB,CAAC,EAAmB,CAPxB,IAAAC,EAAAC,EAQI,GAAM,CAAE,QAAAC,EAAU,EAAM,EAAIH,EAEtBI,EAAQC,EAAQF,CAAO,EACvBG,EAAQD,GAAQJ,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDM,EAAcF,GAAQH,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EAEzE,MAAO,CACH,YAAcM,GAAS,CACfA,EAAK,SAAW,UAChB,QAAQ,KAAK,oDAAoD,CAEzE,EACA,KAAM,SACN,YAAcC,GAAaL,EAAM,IAAIK,CAAQ,EAC7C,SAAU,UACV,QAAS,IAAML,EAAM,IAAI,CAACA,EAAM,IAAI,CAAC,EACrC,MAAO,CACH,SAAU,WACV,QAAS,cACT,WAAY,SACZ,SAAWK,GAAaC,EAAUD,CAAQ,EAC1C,OAAQ,OACR,aAAc,MACd,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAAC,GACxF,SAAUG,EAAa,EAAE,EACzB,UAAWA,EAAa,CAAC,EACzB,aAAcA,EAAa,GAAG,EAC9B,YAAaA,EAAa,CAAC,EAC3B,aAAcA,EAAa,CAAC,EAC5B,WAAY,wCACZ,gBAAkBH,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EAClF,mBAAoB,CAChB,QAAS,KACT,SAAU,WACV,QAAS,cACT,WAAY,SACZ,KAAMG,EAAa,EAAG,EACtB,IAAK,MACL,UAAW,mBACX,WAAY,YACZ,MAAOA,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,aAAcA,EAAa,GAAG,EAC9B,MAAQH,GAAaE,EAAWF,EAAU,SAAS,EACnD,gBAAkBA,GAAaE,EAAWF,EAAU,aAAcH,EAAM,IAAIG,CAAQ,CAAC,CACzF,EACA,uBAAwB,CACpB,gBAAkBA,GAAaE,EAAWF,EAAU,aAAcF,EAAY,IAAIE,CAAQ,CAAC,EAC3F,QAAS,OACT,MAAQA,GAAaE,EAAWF,EAAU,YAAY,EACtD,YAAaG,EAAa,CAAC,EAC3B,aAAcA,EAAa,CAAC,CAChC,EACA,sCAAuC,CACnC,KAAM,eAAeA,EAAa,GAAG,CAAC,GAC1C,EACA,cAAe,CACX,QAAS,GACT,OAAQ,aACZ,CACJ,CACJ,CACJ,CCnEA,SAASC,GAAMC,EAA6C,CAAC,EAAmB,CAHhF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,SAAS,aACT,UAAYG,GAAS,CACbA,EAAK,SAAW,SAChB,QAAQ,KAAK,4CAA4C,CAEjE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAC5E,CACJ,CACJ,CCfA,SAASG,GAAOC,EAA8C,CAAC,EAAmB,CAHlF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,UAChB,QAAQ,KAAK,8CAA8C,CAEnE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,IACZ,MAAQA,GAAaE,EAAWF,EAAU,WAAYH,EAAM,IAAIG,CAAQ,CAAC,EACzE,gBAAkBA,GAAaE,EAAWF,CAAQ,CACtD,CACJ,CACJ,CChBA,SAASG,GAAUC,EAA8C,CAAC,EAAmB,CAHrF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,OAChB,QAAQ,KAAK,8CAA8C,CAEnE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,YAAY,EACxD,cAAe,MACf,WAAY,EACZ,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAC5E,CACJ,CACJ,CChBA,SAASG,GAAYC,EAA8C,CAAC,EAAmB,CAHvF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,OAChB,QAAQ,KAAK,gDAAgD,CAErE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,YAAY,EACxD,cAAe,QACf,WAAY,EACZ,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAC5E,CACJ,CACJ,CChBA,SAASG,GAAMC,EAA8C,CAAC,EAAmB,CAHjF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,SAChB,QAAQ,KAAK,4CAA4C,CAEjE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,MAAO,OACP,eAAgB,WAChB,YAAa,CACT,YAAa,QACjB,EACA,mBAAoB,CAChB,UAAW,OACX,WAAY,IACZ,cAAgBA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,MAAQA,GAAaE,EAAWF,EAAU,WAAYH,EAAM,IAAIG,CAAQ,CAAC,EACzE,gBAAkBA,GAAaE,EAAWF,EAAU,SAAS,CACjE,EACA,OAAQ,CACJ,UAAW,OACX,cAAgBA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,UAAYA,GAAa,iBAAiBE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,CAAC,GAC9F,SAAWA,GAAaC,EAAUD,EAAU,SAAS,CACzD,EACA,yBAA0B,CACtB,UAAW,OACX,WAAY,IACZ,cAAgBA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaG,EAAaC,EAAaJ,CAAQ,EAAI,CAAC,EACnE,MAAQK,GAAMH,EAAWG,EAAG,WAAYR,EAAM,IAAIQ,CAAC,CAAC,EACpD,gBAAkBA,GAAMH,EAAWG,EAAG,SAAS,EAC/C,UAAYA,GAAM,kBAAkBH,EAAWG,EAAG,UAAWR,EAAM,IAAIQ,CAAC,CAAC,CAAC,EAC9E,EACA,OAAQ,CACJ,gBAAkBL,GAAaE,EAAWF,EAAU,SAAS,CACjE,EAEA,mBAAoB,CAChB,gBAAkBA,GAAaE,EAAWF,EAAU,SAAS,EAAI,YACrE,CACJ,CACJ,CACJ,CCnDA,SAASM,GACLC,EAA4G,CAAC,EAC/F,CALlB,IAAAC,EAAAC,EAMI,IAAMC,EAAQC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EACjDI,EAAcD,GAAQF,EAAAF,EAAM,cAAN,KAAAE,EAAqB,UAAW,aAAa,EACnE,CAAE,WAAAI,EAAa,EAAM,EAAIN,EAE/B,MAAO,CACH,UAAYO,GAAS,CACbA,EAAK,SAAW,YAChB,QAAQ,KAAK,kDAAkD,CAEvE,EACA,SAAWA,GAAS,CAChB,GAAID,EAAY,CACZ,IAAME,EAAKD,EAAK,WAChBC,EAAG,MAAM,SAAW,SACpB,IAAMC,EAAS,IAAM,CACjBD,EAAG,MAAM,OAAS,OAClBA,EAAG,MAAM,OAASA,EAAG,aAAe,IACxC,EACAA,EAAG,iBAAiB,QAASC,CAAM,EACnCA,EAAO,CACX,CACJ,EACA,MAAO,CACH,WAAY,UACZ,WAAY,UACZ,OAAQ,WACR,cAAgBC,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,GAAG,EACrE,OAAO,OACP,aAAeA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,GAAG,EACrE,SAAWA,GAAaG,EAAUH,EAAU,SAAS,EACrD,MAAQA,GAAaI,EAAWJ,EAAU,UAAWP,EAAM,IAAIO,CAAQ,CAAC,EACxE,cAAe,OACf,QAAUA,GAAa,aAAaI,EAAWJ,EAAU,UAAWP,EAAM,IAAIO,CAAQ,CAAC,CAAC,GACxF,gBAAkBA,GAAaI,EAAWJ,EAAU,UAAWP,EAAM,IAAIO,CAAQ,CAAC,EAClF,iBAAkB,CACd,MAAQA,GAAaI,EAAWJ,EAAU,SAAS,CACvD,EACA,gDAAiD,CAC7C,QAAUA,GAAa,GAAGC,EAAa,EAAG,CAAC,UAAUG,EAAWJ,EAAU,UAAWL,EAAY,IAAIK,CAAQ,CAAC,CAAC,EACnH,EACA,kBAAmB,CACf,QAAUA,GAAa,GAAGC,EAAa,EAAG,CAAC,UAAUG,EAAWJ,EAAU,UAAWL,EAAY,IAAIK,CAAQ,CAAC,CAAC,EACnH,EACA,YAAa,CACT,QAAUA,GAAa,GAAGC,EAAa,EAAG,CAAC,UAAUG,EAAWJ,EAAU,UAAW,OAAO,CAAC,EACjG,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,MAAQA,GAAaI,EAAWJ,EAAU,UAAW,SAAS,EAC9D,QAAUA,GAAa,aAAaI,EAAWJ,EAAU,UAAW,SAAS,CAAC,GAC9E,gBAAkBA,GAAaI,EAAWJ,EAAU,UAAW,SAAS,CAC5E,CACJ,CACJ,CACJ,CC3DA,SAASK,GAAcC,EAA8C,CAAC,EAAmB,CAHzF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,MAChB,QAAQ,KAAK,iDAAiD,CAEtE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,gBAAkBA,GAAaE,EAAWF,CAAQ,EAClD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,UAAW,EACX,aAAc,EACd,YAAaG,EAAa,CAAC,EAC3B,cAAe,OACf,kBAAmB,SACvB,CACJ,CACJ,CCpBA,SAASC,GAAYC,EAA8C,CAAC,EAAmB,CAHvF,IAAAC,EAII,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,MAChB,QAAQ,KAAK,+CAA+C,CAEpE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,gBAAkBA,GAAaE,EAAWF,CAAQ,EAClD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,EAAM,IAAIG,CAAQ,CAAC,EACxE,UAAW,EACX,aAAc,EACd,YAAaG,EAAa,CAAC,EAC3B,cAAe,UACf,kBAAmB,SACvB,CACJ,CACJ,CCpBA,SAASC,GAASC,EAAiBC,EAAmC,CACpE,GAAIA,GAAS,EAAG,OAAO,MAAM,KAAK,CAAE,OAAQA,CAAM,EAAG,CAACC,EAAGC,IAAMA,EAAI,CAAC,EACpE,IAAMC,EAA4B,CAAC,CAAC,EAChCJ,EAAU,GAAGI,EAAM,KAAK,KAAK,EACjC,IAAMC,EAAQ,KAAK,IAAI,EAAGL,EAAU,CAAC,EAC/BM,EAAM,KAAK,IAAIL,EAAQ,EAAGD,EAAU,CAAC,EAC3C,QAASG,EAAIE,EAAOF,GAAKG,EAAKH,IAAKC,EAAM,KAAKD,CAAC,EAC/C,OAAIH,EAAUC,EAAQ,GAAGG,EAAM,KAAK,KAAK,EACzCA,EAAM,KAAKH,CAAK,EACTG,CACT,CAEA,SAASG,GAAWC,EAKD,CApBnB,IAAAC,EAqBE,GAAM,CAAE,MAAAR,EAAO,MAAAS,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIH,EACxDI,EAAQC,GAAQJ,EAAAD,EAAM,QAAN,KAAAC,EAAe,CAAC,EAEhCK,EAAU,CACd,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,SAAWC,GAAkBC,EAAa,EAAIC,EAAaF,CAAQ,EAAI,CAAC,EACxE,OAASA,GAAkBC,EAAa,EAAIC,EAAaF,CAAQ,EAAI,CAAC,EACtE,cAAgBA,GAAkBC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACzE,aAAeA,GAAkBC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACxE,OAAQ,OACR,OAAQ,UACR,SAAWA,GAAkBb,EAAUa,EAAU,SAAS,EAC1D,gBAAiB,cACjB,MAAQA,GAAkBG,EAAWH,EAAU,UAAWL,CAAK,EAC/D,0BAA2B,CACzB,gBAAkBK,GAAkBG,EAAWH,EAAU,UAAWL,CAAK,CAC3E,EACA,cAAe,CACb,QAAS,GACT,OAAQ,aACV,CACF,EAEMS,EAAcC,EAAAC,EAAA,GACfP,GADe,CAElB,gBAAkBC,GAAkBG,EAAWH,EAAU,UAAWJ,CAAW,EAC/E,MAAQI,GAAkBG,EAAWH,EAAU,WAAYJ,CAAW,EACtE,WAAY,MACZ,OAAQ,UACR,0BAA2B,CACzB,gBAAkBI,GAAkBG,EAAWH,EAAU,UAAWJ,CAAW,CACjF,CACF,GAEA,MAAO,CACL,UAAYW,GAAS,CACfA,EAAK,UAAY,OAAO,QAAQ,KAAK,qCAAqC,CAChF,EACA,QAAUA,GAAS,CACjB,IAAMC,EAAgC,CACpC,IAAMR,GAAa,CACjB,IAAMS,EAAOZ,EAAM,IAAIG,CAAQ,EACzBU,EAAyB,CAAC,EAGhCA,EAAM,KAAK,CACT,OAAQ,SACR,KAAM,SACN,UAAW,gBACX,SAAUD,GAAQ,EAClB,QAAS,IAAMA,EAAO,GAAKZ,EAAM,IAAIY,EAAO,CAAC,EAC7C,MAAOV,CACT,CAAC,EAGD,QAAWY,KAAK3B,GAASyB,EAAMvB,CAAK,EAClC,GAAIyB,IAAM,MACRD,EAAM,KAAK,CAAE,KAAM,SAAK,MAAO,CAAE,QAAS,cAAe,WAAY,SAAU,cAAgBV,GAAkBC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EAAG,MAAQA,GAAkBG,EAAWH,EAAU,UAAWL,CAAK,CAAE,CAAE,CAAC,MAC1N,CACL,IAAMiB,EAAWD,IAAMF,EACvBC,EAAM,KAAK,CACT,OAAQ,OAAOC,CAAC,EAChB,KAAM,SACN,UAAW,QAAQA,CAAC,GACpB,YAAaC,EAAW,OAAS,OACjC,SAAUA,EACV,QAAS,IAAMf,EAAM,IAAIc,CAAC,EAC1B,MAAOC,EAAWR,EAAcL,CAClC,CAAC,CACH,CAIF,OAAAW,EAAM,KAAK,CACT,OAAQ,SACR,KAAM,SACN,UAAW,YACX,SAAUD,GAAQvB,EAClB,QAAS,IAAMuB,EAAOvB,GAASW,EAAM,IAAIY,EAAO,CAAC,EACjD,MAAOV,CACT,CAAC,EAEMW,CACT,EACA,MAAO,CACL,QAAS,OACT,WAAY,SACZ,IAAKT,EAAa,CAAC,CACrB,CACF,EACAM,EAAK,SAAS,OAAOC,CAAO,CAC9B,EACA,MAAO,CACL,QAAS,aACX,CACF,CACF,CCnHA,SAASK,GAAQC,EAEb,CAAC,EAAmB,CANxB,IAAAC,EAOI,IAAMC,EAAQC,GAAQF,EAAAD,EAAM,QAAN,KAAAC,EAAe,UAAW,OAAO,EAEvD,MAAO,CACH,KAAM,YACN,UAAYG,GAAS,CACbA,EAAK,UAAY,OACjB,QAAQ,KAAK,2CAA2C,CAEhE,EACA,MAAO,CACH,QAAS,OACT,eAAgB,SAChB,WAAY,WACZ,IAAKC,EAAa,CAAC,EACnB,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,gBAAkBA,GAAaE,EAAWF,CAAQ,EAClD,MAAQA,GAAaE,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EACxE,UAAW,MACX,YAAa,CACT,QAAS,KACT,KAAK,EACL,YAAcA,GAAaE,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EAC9E,YAAa,MACb,kBAAmB,OACvB,EACA,WAAY,CACR,QAAS,KACT,KAAK,EACL,YAAcA,GAAaE,EAAWF,EAAU,UAAWJ,EAAM,IAAII,CAAQ,CAAC,EAC9E,YAAa,MACb,kBAAmB,OACvB,CACJ,CACJ,CACJ,CCpCA,IAAMG,GAA0C,CAC5C,KAAQ,oBACR,MAAQ,mBACR,IAAQ,oBACR,OAAQ,kBACZ,EAEMC,GAAuC,CACzC,KAAQ,aACR,MAAQ,aACR,IAAQ,aACR,OAAQ,YACZ,EAEMC,GAAcC,GAAiBA,IAAM,QAAUA,IAAM,QAE3D,SAASC,GAAOC,EAKZ,CAAC,EAAmB,CACpB,GAAM,CAAE,MAAAC,EAAQ,UAAW,KAAAC,EAAO,GAAO,UAAAC,EAAY,QAAS,KAAAC,CAAK,EAAIJ,EACjEK,EAAQC,EAAQJ,CAAI,EACpBK,EAAcV,GAAWM,CAAS,EAAIK,EAAa,EAAE,EAAIA,EAAa,EAAE,EACxEC,EAAaL,GAAA,KAAAA,EAAQG,EAE3B,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,UAAY,UACjB,QAAQ,KAAK,oCAAoC,CAEzD,EACA,QAAS,CAACC,EAAeD,IAAS,CAC1BC,EAAE,SAAWD,EAAK,YACtBL,EAAM,IAAI,EAAK,CACnB,EACA,gBAAiB,CAACO,EAAIF,IAAS,CAC3B,IAAMG,EAAMH,EAAK,WACZL,EAAM,IAAI,IACXQ,EAAI,MAAM,EACV,SAAS,KAAK,MAAM,SAAW,GAEvC,EACA,SAAWH,GAAS,CAChB,IAAMG,EAAMH,EAAK,WACXI,EAAUC,GAAiB,CACzBA,GACAF,EAAI,UAAU,EACd,SAAS,KAAK,MAAM,SAAW,SAC/B,sBAAsB,IAAM,CAAEA,EAAI,MAAM,UAAY,iBAAmB,CAAC,GAExEA,EAAI,MAAM,UAAYlB,GAAaQ,CAAS,CAEpD,EACAW,EAAOT,EAAM,IAAI,CAAC,EAClBA,EAAM,YAAYS,CAAM,CAC5B,EACA,MAAO,CACH,UAAWnB,GAAaQ,CAAS,EACjC,WAAY,uBACZ,SAAWa,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,WAAYf,CAAK,EAC3D,gBAAkBe,GAAaE,EAAWF,EAAU,UAAWf,CAAK,EACpE,OAAQ,OACR,QAAUe,GAAaR,EAAaW,EAAaH,CAAQ,EAAI,CAAC,EAC9D,OAAQpB,GAAUO,CAAS,EAC3B,MAAQN,GAAWM,CAAS,EAAIM,EAAa,SAC7C,OAAQZ,GAAWM,CAAS,EAAI,SAAaM,EAC7C,SAAU,SACV,UAAW,SACX,UAAYO,GAAa,KAAKR,EAAa,CAAC,CAAC,IAAIA,EAAa,EAAE,CAAC,IAAIU,EAAWF,EAAU,UAAW,SAAS,CAAC,GAC/G,cAAe,CACX,gBAAkBA,GAAaE,EAAWF,EAAU,UAAW,SAAS,EACxE,QAAS,GACb,CACJ,CACJ,CACJ,CC/EA,SAASI,GAAQC,EAKE,CACf,GAAM,CACF,KAAAC,EAAO,GACP,UAAAC,EAAY,SACZ,OAAAC,EAAS,OACb,EAAIH,EAGAI,EAA2B,KACzBC,EAAYC,EAAQL,CAAI,EACxBM,EAAaD,EAAQJ,CAAS,EAEhC,CAAE,KAAAM,EAAM,KAAAC,EAAM,cAAAC,CAAc,EAAIC,EAAc,CAAE,KAAMN,EAAW,UAAWE,EAAY,QAASP,EAAM,OAAQ,CAAC,EAE9GY,EAAiC,CACnC,KAAM,SACN,SAAU,WACV,aAAc,IAAMT,IAAW,SAAWK,EAAK,EAC/C,aAAc,IAAML,IAAW,SAAWM,EAAK,EAC/C,UAAYI,GAAS,CACjB,IAAIC,EAAKD,EAAK,WAAW,IAAI,IAAI,EACjCT,EAAYU,GAAMD,EAAK,OACvB,CAACC,GAAMD,EAAK,WAAW,IAAI,KAAMT,CAAS,CAC9C,CACJ,EAEA,OAAAW,EAAMf,EAAM,QAASY,CAAc,EAsBnCG,EAAML,EApBiC,CACnC,aAAc,SACd,aAAeM,GAAaX,EAAU,IAAIW,CAAQ,EAClD,aAAc,IAAMb,IAAW,SAAWK,EAAK,EAC/C,aAAc,IAAML,IAAW,SAAWM,EAAK,EAC/C,QAAS,IAAM,CACPN,IAAW,UACPE,EAAU,IAAI,EAAKI,EAAK,EAAWD,EAAK,EAEpD,EACA,QAAS,IAAMA,EAAK,EACpB,OAAQ,CAACS,EAAGJ,IAAS,CACjB,IAAMK,EAAWD,EAAiB,cAC5BE,EAAON,EAAK,QAAQ,EAAE,WACtBO,EAAahB,EAAYe,EAAK,cAAc,IAAI,IAAI,OAAOf,CAAS,CAAC,EAAE,EAAI,KAC7Ec,IAAWE,GAAA,MAAAA,EAAY,SAASF,KACpCT,EAAK,CACT,EACA,SAAWI,GAAST,GAAaS,EAAK,WAAW,IAAI,eAAgBT,CAAS,CAClF,CACmC,EAE5BM,CACX,CCtDA,SAASW,GAAMC,EAGX,CAAC,EAAmB,CACtB,GAAM,CAAE,SAAAC,EAAW,aAAc,MAAAC,EAAQ,SAAU,EAAIF,EACjDG,EAAQC,EAAQ,EAAK,EAErBC,EAAQJ,EAAS,WAAW,KAAK,EACjCK,EAAWL,EAAS,SAAS,QAAQ,EACrCM,EAAUN,EAAS,SAAS,OAAO,EAEnCO,EAAmC,CACvC,IAAK,CAAC,EACN,GAAI,gBAAgBP,CAAQ,GAC5B,MAAO,CACL,SAAU,QACV,QAAS,OACT,cAAeI,EAAQ,SAAW,iBAClC,WAAYC,EAAW,SAAWC,EAAU,MAAQ,QACpD,MAAO,EACP,IAAKE,EAAa,CAAC,EACnB,OAAQ,GACR,QAASA,EAAa,CAAC,EACvB,cAAe,MACjB,CACF,EAEA,MAAO,CACL,QAAUC,GAAa,CACrB,IAAIC,EAAUD,EAAS,WAAY,cAAc,iBAAiBT,CAAQ,EAAE,EAC5E,OAAKU,IAEHA,EADoBD,EAAS,SAAU,OAAOF,CAAU,EAClC,YAEjBG,CACT,EACA,KAAM,SACN,WAAY,OAEZ,SAAU,WACV,MAAO,CACL,SAAUF,EAAa,EAAE,EACzB,cAAe,OACf,aAAeG,GAAaH,EAAaI,EAAaD,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaH,EAAaI,EAAaD,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaH,EAAaI,EAAaD,CAAQ,EAAI,CAAC,EACnE,SAAWA,GAAaE,EAAUF,EAAU,SAAS,EACrD,MAAQA,GAAaG,EAAWH,EAAU,UAAWV,CAAK,EAC1D,gBAAkBU,GAAaG,EAAWH,EAAU,UAAWV,CAAK,EACpE,UAAYU,GAAa,KAAKH,EAAa,CAAC,CAAC,IAAIA,EAAa,CAAC,CAAC,IAAIM,EAAWH,EAAU,UAAW,SAAS,CAAC,GAC9G,QAAUA,GAAa,OAAOT,EAAM,IAAIS,CAAQ,CAAC,EACjD,UAAYA,GAAaT,EAAM,IAAIS,CAAQ,EAAI,gBAAkBP,EAAQ,oBAAsB,mBAC/F,WAAY,0CACd,EACA,SAAU,IAAM,sBAAsB,IAAMF,EAAM,IAAI,EAAI,CAAC,EAC3D,gBAAiB,CAACa,EAAMC,IAAS,CAC/B,IAAMC,EAASC,GAAa,CACrBA,EAAsB,eAAiB,cAC1CH,EAAK,WAAY,oBAAoB,gBAAiBE,CAAK,EAC3DD,EAAK,EAET,EACAD,EAAK,WAAY,iBAAiB,gBAAiBE,CAAK,EACxDf,EAAM,IAAI,EAAK,CACjB,CACF,CACF,CCjEA,SAASiB,GAAQC,EAIb,CAAC,EAAmB,CACpB,GAAM,CACF,KAAAC,EAAO,GACP,UAAAC,EAAY,MACZ,QAAAC,EAAU,iBACd,EAAIH,EAEEI,EAAaC,EAAQH,CAAS,EAC9BI,EAAeD,EAAQF,CAAO,EAEhCI,EAA2B,KAE3BC,EAAwC,CAAE,KAAOC,GAAaH,EAAa,IAAIG,CAAQ,CAAE,EAEzF,CAAE,KAAAC,EAAM,KAAAC,EAAM,cAAAC,CAAc,EAAIC,EAAc,CAAE,KAAAZ,EAAM,UAAWG,EAAY,QAASI,CAAe,CAAC,EAEpGM,EAAiC,CACnC,KAAM,UACN,SAAU,aACV,SAAU,WACV,UAAYC,GAAS,CACjB,IAAIC,EAAKD,EAAK,WAAW,IAAI,IAAI,EACjCR,EAAYS,GAAMD,EAAK,OACvB,CAACC,GAAMD,EAAK,WAAW,IAAI,KAAMR,CAAS,CAC9C,EACA,MAAO,CACH,aAAeE,GAAaQ,EAAaC,EAAaT,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaQ,EAAaC,EAAaT,CAAQ,EAAI,CAAC,EACpE,aAAeA,GAAaQ,EAAaC,EAAaT,CAAQ,EAAI,CAAC,EACnE,MAAQA,GAAaU,EAAWV,EAAU,SAAS,EACnD,gBAAkBA,GAAaU,EAAWV,CAAQ,EAClD,SAAWA,GAAaW,EAAUX,EAAU,SAAS,CACzD,EACA,EAAG,CAACY,GAAa,CAAE,UAAWjB,EAAY,SAAU,EAAM,CAAC,CAAC,CAChE,EACA,OAAAI,EAAe,IAAfA,EAAe,EAAM,CAAC,GACtBA,EAAe,EAAE,KAAKM,CAAc,EAWpCQ,EAAMV,EATiC,CACnC,aAAc,IAAMF,EAAK,EACzB,aAAc,IAAMC,EAAK,EACzB,QAAS,IAAMD,EAAK,EACpB,OAAQ,IAAMC,EAAK,EACnB,UAAYY,GAAOA,EAAoB,MAAQ,UAAYZ,EAAK,EAChE,SAAWI,GAASR,GAAaQ,EAAK,WAAW,IAAI,kBAAmBR,CAAS,CACrF,CAEmC,EAE5BK,CACX,CCzDA,SAASY,GAAUC,EAAmBC,EAAuB,CACzD,OAAID,EAAK,MAAQ,QAAaA,EAAK,MAAQ,KAChC,OAAOA,EAAK,GAAG,EAEnB,SAASC,CAAK,EACzB,CAEA,SAASC,GAAgBC,EAA+C,CAAC,EAAmB,CACxF,GAAM,CACF,SAAAC,EAAW,IACX,MAAAC,EAAQ,CACZ,EAAIF,EAEAG,EAAyB,IAAI,IAEjC,MAAO,CACH,gBAAkBN,GAAS,CACvBM,EAAgB,IAAI,IACpBN,EAAK,SAAS,MAAM,QAAQ,CAACO,EAAMN,IAAU,CACzC,GAAI,EAAEM,aAAgBC,GAAc,OACpC,IAAMC,EAAMF,EAAK,WACZE,GACLH,EAAc,IAAIP,GAAUQ,EAAMN,CAAK,EAAGQ,EAAI,sBAAsB,CAAC,CACzE,CAAC,CACL,EACA,UAAYT,GAAS,CACjBA,EAAK,SAAS,MAAM,QAAQ,CAACO,EAAMN,IAAU,CACzC,GAAI,EAAEM,aAAgBC,GAAc,OACpC,IAAMC,EAAMF,EAAK,WACjB,GAAI,CAACE,EAAK,OAEV,IAAMC,EAAMX,GAAUQ,EAAMN,CAAK,EAC3BU,EAAOL,EAAc,IAAII,CAAG,EAClC,GAAI,CAACC,EAAM,OAEX,IAAMC,EAAOH,EAAI,sBAAsB,EACjCI,EAASF,EAAK,KAAOC,EAAK,KAC1BE,EAASH,EAAK,IAAMC,EAAK,IAC/B,GAAI,KAAK,IAAIC,CAAM,EAAI,IAAO,KAAK,IAAIC,CAAM,EAAI,GAAK,OAEtD,IAAMC,EAAqBN,EAAI,MAAM,WAC/BO,EAAoBP,EAAI,MAAM,UAEpCA,EAAI,MAAM,WAAa,OACvBA,EAAI,MAAM,UAAY,aAAaI,CAAM,OAAOC,CAAM,MACtDL,EAAI,sBAAsB,EAE1B,sBAAsB,IAAM,CACxBA,EAAI,MAAM,WAAa,aAAaL,CAAQ,WAAWC,CAAK,KAC5DI,EAAI,MAAM,UAAY,qBAC1B,CAAC,EAED,IAAMQ,EAAU,IAAM,CAClBR,EAAI,MAAM,WAAaM,EACvBN,EAAI,MAAM,UAAYO,EACtBP,EAAI,oBAAoB,gBAAiBS,CAAK,CAClD,EAEMA,EAASC,GAAiB,CACJA,EACJ,eAAiB,aACjCF,EAAQ,CAEhB,EAEAR,EAAI,iBAAiB,gBAAiBS,CAAK,EAC3C,WAAWD,EAASb,EAAWC,EAAQ,EAAE,CAC7C,CAAC,EACDC,EAAc,MAAM,CACxB,CACJ,CACJ,CCxEA,SAASc,GAAKC,EAEV,CAAC,EAAmB,CAetB,MAb8B,CAC5B,KAAM,UACN,YAAa,CAACC,EAAMC,IAAY,CAC9B,IAAIC,EAAU,CACZ,SAAU,CACR,KAAM,CACJ,UAAWC,EAAQJ,EAAM,WAAa,CAAC,CACzC,CACF,CACF,EACAK,EAAMH,EAASC,CAAO,CACxB,CACF,CAEF,CClBA,SAASG,GAAIC,EAGT,CAAC,EAAmB,CACtB,GAAM,CACJ,YAAAC,EAAc,UACd,MAAAC,EAAQ,SACV,EAAIF,EA6DJ,MA5D8B,CAC5B,KAAM,MACN,UAAYG,GAAS,CAbzB,IAAAC,EAeUD,EAAK,SAAW,UAClB,QAAQ,KAAK,iCAAiC,EAGhD,IAAIE,EAAUF,EAAK,WAAW,MAAM,EAChCG,GAAWF,EAAAD,EAAK,SAAL,YAAAC,EAAa,SAAS,MACrCE,EAAWA,EAAS,OAAOC,GAAKA,EAAE,MAAQ,eAAiBA,EAAE,WAAW,IAAI,MAAM,GAAK,KAAK,EAC5F,IAAIC,EAAML,EAAK,KAAOG,EAAS,UAAUC,GAAKA,GAAKJ,CAAI,EAEnDM,EAAuB,CACzB,GAAI,MAAQN,EAAK,OAAQ,OAASK,EAClC,aAAgB,WAAaL,EAAK,OAAQ,OAASK,EACnD,aAAiBE,GAAaL,EAAQ,UAAU,IAAIK,CAAQ,GAAKF,EACjE,QAAS,IAAMH,EAAQ,UAAU,IAAIG,CAAG,EACxC,UAAYG,GAAa,CA7BjC,IAAAP,EAAAQ,EAAAC,EAAAC,EA8BU,IAAMC,EAAKJ,EAAoB,IAC/B,GAAI,CAAC,CAAC,YAAa,aAAc,OAAQ,KAAK,EAAE,SAASI,CAAC,EAAG,OAC7DJ,EAAE,eAAe,EACjB,IAAMK,IAAQJ,GAAAR,EAAAD,EAAK,SAAL,YAAAC,EAAa,SAAS,QAAtB,KAAAQ,EAA+B,CAAC,GAAG,OAC/CL,GAAKA,EAAE,OAAS,eAAkBA,EAAkB,WAAW,IAAI,MAAM,IAAM,KACjF,EACMU,EAAMD,EAAK,UAAUT,GAAKA,IAAMJ,CAAI,EACtCe,EAAOD,EACPF,IAAM,aAAcG,GAAQD,EAAM,GAAKD,EAAK,OACvCD,IAAM,YAAaG,GAAQD,EAAM,EAAID,EAAK,QAAUA,EAAK,OACzDD,IAAM,OAAQG,EAAO,EACrBH,IAAM,QAAOG,EAAOF,EAAK,OAAS,GAC3C,IAAMG,EAASH,EAAKE,CAAI,EACxBb,EAAQ,UAAU,KAAIQ,EAAAM,EAAO,MAAP,KAAAN,EAAcK,CAAI,GACvCJ,EAAAK,EAAO,aAAP,MAAAL,EAAmC,OACtC,CACF,EACAX,EAAK,MAAMM,CAAI,CACjB,EACA,MAAO,CACL,OAAQ,UACR,SAAWC,GAAaU,EAAUV,EAAU,SAAS,EACrD,OAASA,GAAaW,EAAa,EAAIC,EAAaZ,CAAQ,EAAI,CAAC,EACjE,cAAgBA,GAAaW,EAAaC,EAAaZ,CAAQ,EAAI,CAAC,EACpE,OAAQ,OACR,QAAS,OACT,MAAQA,GAAaa,EAAWb,EAAU,SAAS,EACnD,gBAAkBA,GAAaa,EAAWb,EAAU,SAAS,EAC7D,UAAYA,GAAa,YAAYW,EAAa,EAAG,CAAC,QAAQE,EAAWb,EAAU,UAAWR,CAAK,CAAC,GACpG,0BAA2B,CACzB,UAAYQ,GAAa,YAAYW,EAAa,EAAG,CAAC,QAAQE,EAAWb,EAAU,UAAWR,CAAK,CAAC,EACtG,EACA,wCAAyC,CACvC,UAAYQ,GAAa,YAAYW,EAAa,EAAG,CAAC,QAAQE,EAAWb,EAAU,UAAWT,CAAW,CAAC,EAC5G,EACA,kBAAmB,CACjB,UAAYS,GAAa,YAAYW,EAAa,EAAG,CAAC,QAAQE,EAAWb,EAAU,UAAWT,CAAW,CAAC,EAE5G,CACF,CACF,CAEF,CCrEA,SAASuB,IAA2B,CAoBlC,MAnB8B,CAC5B,KAAM,WACN,MAAO,CACL,aAAeC,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,CACtE,EACA,UAAYG,GAAS,CAVzB,IAAAC,EAWM,IAAIC,EAAUF,EAAK,WAAW,MAAM,EAChCG,GAAWF,EAAAD,EAAK,SAAL,YAAAC,EAAa,SAAS,MACrCE,EAAWA,EAAS,OAAOC,GAAKA,EAAE,MAAQ,eAAiBA,EAAE,WAAW,IAAI,MAAM,GAAK,UAAU,EACjG,IAAIC,EAAML,EAAK,KAAOG,EAAS,UAAUC,GAAKA,GAAKJ,CAAI,EACnDM,EAAuB,CACzB,GAAI,WAAaN,EAAK,OAAQ,OAASK,EACvC,eAAkB,MAAQL,EAAK,OAAQ,OAASK,EAChD,OAAWR,GAAaK,EAAQ,UAAU,IAAIL,CAAQ,GAAKQ,CAC7D,EACAL,EAAK,MAAMM,CAAI,CACjB,CACF,CAEF,CCpBA,SAASC,GAAKC,EAIV,CAAC,EAAmB,CACtB,GAAM,CAAE,MAAAC,EAAQ,UAAW,WAAAC,EAAa,EAAK,EAAIF,EAyBjD,MAvB8B,CAC5B,KAAM,OACN,SAAS,WACT,YAAa,CAACG,EAAMC,IAAY,CAdpC,IAAAC,EAeM,IAAIC,EAAU,CACZ,SAAU,CACR,KAAM,CACJ,UAAWC,GAAQF,EAAAL,EAAM,YAAN,KAAAK,EAAmB,IAAI,EAC1C,WAAAH,CACF,CACF,CACF,EACAM,EAAMJ,EAASE,CAAO,CACxB,EACA,MAAO,CACL,QAAS,OACT,cAAe,SACf,aAAeG,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACnE,cAAgBA,GAAaC,EAAaC,EAAaF,CAAQ,EAAI,CAAC,EACpE,SAAWA,GAAaG,EAAUH,EAAU,SAAS,EACrD,gBAAkBA,GAAaI,EAAWJ,EAAU,UAAWR,CAAK,CACtE,CACF,CAEF,CChCA,SAASa,GAASC,EAGd,CAAC,EAAmB,CACtB,GAAM,CACJ,YAAAC,EAAc,UACd,MAAAC,EAAQ,SACV,EAAIF,EAgEJ,MA9D8B,CAC5B,KAAM,WACN,UAAYG,GAAS,CAdzB,IAAAC,EAeUD,EAAK,SAAW,UAClB,QAAQ,KAAK,sCAAsC,EAGrD,IAAIE,EAAUF,EAAK,WAAW,MAAM,EAChCG,GAAWF,EAAAD,EAAK,SAAL,YAAAC,EAAa,SAAS,MACrCE,EAAWA,EAAS,OAAOC,GAAKA,EAAE,MAAQ,eAAiBA,EAAE,WAAW,IAAI,MAAM,GAAK,UAAU,EACjG,IAAIC,EAAML,EAAK,KAAOG,EAAS,UAAUC,GAAKA,GAAKJ,CAAI,EACnDE,EAAQ,aACVF,EAAK,WAAW,IAAI,cAAgBM,GAAaJ,EAAQ,UAAU,IAAII,CAAQ,GAAKD,GAAO,MAAS,EACpGL,EAAK,SAAS,QAAS,IAAME,EAAQ,UAAU,IAAIG,CAAG,CAAC,EAE3D,EACA,UAAU,CAACE,EAAgBP,IAAO,CA5BtC,IAAAC,EAAAO,EAAAC,EAAAC,EA6BQ,IAAMC,EAAKJ,EAAoB,IAC/B,GAAII,IAAM,SAAWA,IAAM,IAAK,CAC9BJ,EAAE,eAAe,GAChBN,EAAAD,EAAK,aAAL,MAAAC,EAAiC,QAClC,MACF,CACA,GAAI,CAAC,CAAC,YAAa,UAAW,OAAQ,KAAK,EAAE,SAASU,CAAC,EAAG,OAC1DJ,EAAE,eAAe,EACjB,IAAMK,IAASH,GAAAD,EAAAR,EAAK,SAAL,YAAAQ,EAAa,SAAS,QAAtB,KAAAC,EAA+B,CAAC,GAAG,OAChDL,GAAKA,EAAE,OAAS,eAAkBA,EAAkB,WAAW,IAAI,MAAM,IAAM,UACjF,EACMS,EAAMD,EAAM,UAAUR,GAAKA,IAAMJ,CAAI,EACvCc,EAAOD,EACPF,IAAM,YAAaG,GAAQD,EAAM,GAAKD,EAAM,OACvCD,IAAM,UAAWG,GAAQD,EAAM,EAAID,EAAM,QAAUA,EAAM,OACzDD,IAAM,OAAQG,EAAO,EACrBH,IAAM,QAAOG,EAAOF,EAAM,OAAS,IAC3CF,EAAAE,EAAME,CAAI,EAAE,aAAZ,MAAAJ,EAAwC,OAC3C,EACF,MAAO,CACL,OAAQ,UACR,QAAS,OACT,WAAY,SACZ,MAAO,OACP,SAAWJ,GAAaS,EAAUT,EAAU,SAAS,EACrD,OAASA,GAAaU,EAAa,EAAIC,EAAaX,CAAQ,EAAI,CAAC,EACjE,cAAgBA,GAAaU,EAAaC,EAAaX,CAAQ,EAAI,CAAC,EACpE,OAAQ,OACR,QAAS,OACT,MAAQA,GAAaY,EAAWZ,EAAU,SAAS,EACnD,gBAAkBA,GAAaY,EAAWZ,EAAU,SAAS,EAC7D,mDAAoD,CAClD,gBAAkBA,GAAaY,EAAWZ,EAAU,SAAS,CAC/D,EAEA,uBAAwB,CACtB,gBAAkBA,GAAaY,EAAWZ,EAAU,UAAWR,CAAW,EAC1E,MAAQQ,GAAaY,EAAWZ,EAAU,UAAU,CACtD,EACA,kBAAmB,CACjB,QAAUA,GAAa,GAAGU,EAAa,EAAG,CAAC,UAAUE,EAAWZ,EAAU,UAAWR,CAAW,CAAC,GACjG,cAAe,IAAIkB,EAAa,EAAG,CAAC,EACtC,CACF,CACF,CAEF,CCxEA,SAASG,GAAKC,EAAkC,CAC9C,MAAO,CACL,YAAa,CAACC,EAAMC,IAAY,CAC9BC,EAAMD,EAAS,CAAE,SAAU,CAAE,KAAMF,CAAM,CAAE,CAAC,CAC9C,CACF,CACF,CCLA,SAASI,GAAMC,EAAcC,EAA4C,CACvE,MAAO,CACL,UAAYC,GAAS,CAEnB,IAAMC,EADQD,EAAK,WAAW,MAAM,EACpB,SAASF,EAAM,OAAWC,CAAS,EAC7CG,EAAMF,EAAK,QACXG,EAAOH,EAAK,WAAW,IAAI,MAAM,EAElC,CAAC,QAAS,SAAU,UAAU,EAAE,SAASE,CAAG,GAC/C,QAAQ,KAAK,uDAAuD,EAGtE,IAAME,EAAgC,CACpC,OAAQ,IAAMH,EAAE,WAAW,EAC3B,YAAcI,GAAuB,CAAC,CAACJ,EAAE,QAAQ,QAASI,CAAQ,GAAK,OACvE,WAAaA,GAAuBJ,EAAE,OAAOI,CAAQ,CACvD,EAEIH,IAAQ,SAAWC,IAAS,YAC9BC,EAAK,QAAUH,EAAE,MAAM,EACvBG,EAAK,SAAYE,GAAML,EAAE,SAAUK,EAAE,OAA4B,OAAO,GAC/DJ,IAAQ,SAAWC,IAAS,QACrCC,EAAK,SAAYE,GAAML,EAAE,SAAUK,EAAE,OAA4B,KAAK,EAC7DJ,IAAQ,UACjBE,EAAK,MAAQH,EAAE,MAAM,EACrBG,EAAK,SAAYE,GAAML,EAAE,SAAUK,EAAE,OAA6B,KAAK,GAC9DJ,IAAQ,YACjBE,EAAK,MAAQH,EAAE,MAAM,EACrBG,EAAK,QAAWE,GAAML,EAAE,SAAUK,EAAE,OAA+B,KAAK,IAExEF,EAAK,MAAQH,EAAE,MAAM,EACrBG,EAAK,QAAWE,GAAML,EAAE,SAAUK,EAAE,OAA4B,KAAK,GAGvEN,EAAK,MAAMI,CAAI,CASjB,CACF,CACF,CCrCA,SAASG,GACPC,EACwC,CACxC,MAAO,CAAC,CAACA,GAAS,OAAQA,EAAwC,MAAS,UAC7E,CAEO,IAAMC,GAAN,KAAiB,CAUtB,YAAYC,EAAoBC,EAA4B,CAT5D,eAAY,IAAIC,GAGhB,eAA2B,CAAC,EAC5B,cAAW,GAEX,cAAW,GACX,sBAAmB,EAGjB,KAAK,OAASF,EACd,KAAK,WAAaA,EAClB,KAAK,WAAaC,EACdA,GAAW,KAAK,SAAS,CAC/B,CAEA,MAAME,EAA6B,CACjC,OAAIA,GAAU,KAAK,UAAU,YAAY,QAASA,CAAQ,EACnD,KAAK,MACd,CAEA,SAASC,EAAoB,CAC3B,KAAK,OAASA,EACd,KAAK,UAAU,OAAO,QAASA,CAAG,EAClC,KAAK,UAAU,OAAO,QAASA,IAAQ,KAAK,UAAU,EACtD,KAAK,SAAS,CAChB,CAEA,MAAMD,EAA6B,CACjC,OAAIA,GAAU,KAAK,UAAU,YAAY,QAASA,CAAQ,EACnD,KAAK,SAAW,KAAK,UAC9B,CAEA,QAAQA,EAA6B,CACnC,OAAIA,GAAU,KAAK,UAAU,YAAY,UAAWA,CAAQ,EACrD,KAAK,QACd,CAEA,YAAmB,CACZ,KAAK,WACR,KAAK,SAAW,GAChB,KAAK,UAAU,OAAO,UAAW,EAAI,EAEzC,CAEA,UAAUH,EAAqBC,EAAkC,CAC/D,IAAII,EAAiB,GAGnBL,IAAc,QACd,KAAK,SAAW,QAChB,KAAK,aAAe,SAEpB,KAAK,OAASA,EACd,KAAK,WAAaA,EAClB,KAAK,UAAU,OAAO,QAASA,CAAS,EACxC,KAAK,UAAU,OAAO,QAAS,EAAK,EACpCK,EAAiB,IAGfJ,IAAc,QAAaA,IAAc,KAAK,aAChD,KAAK,WAAaA,EAClBI,EAAiB,IAGfA,GAAgB,KAAK,SAAS,CACpC,CAEA,QAAQC,EAA2BH,EAAwC,CACzE,OAAIA,GAAU,KAAK,UAAU,YAAYG,EAAMH,CAAQ,EAChD,KAAK,UAAUG,CAAI,CAC5B,CAEA,OAAOH,EAAiC,CACtC,OAAIA,GAAU,KAAK,UAAU,YAAY,SAAUA,CAAQ,EACpDI,GAAc,KAAK,SAAS,CACrC,CAEA,YAAYC,EAA2B,CACrC,IAAMC,EAAO,KAAK,UAClB,KAAK,UAAYD,EACjB,QAAWF,IAAQ,CAAC,QAAS,UAAW,SAAS,EAC3CG,EAAKH,CAAI,IAAME,EAAKF,CAAI,GAAG,KAAK,UAAU,OAAOA,EAAME,EAAKF,CAAI,CAAC,EAEnEC,GAAcE,CAAI,IAAMF,GAAcC,CAAI,GAC5C,KAAK,UAAU,OAAO,SAAUD,GAAcC,CAAI,CAAC,CAEvD,CAEA,OAAc,CACZ,KAAK,OAAS,KAAK,WACnB,KAAK,SAAW,GAChB,KAAK,UAAU,OAAO,QAAS,KAAK,MAAM,EAC1C,KAAK,UAAU,OAAO,QAAS,EAAK,EACpC,KAAK,UAAU,OAAO,UAAW,EAAK,EACtC,KAAK,YAAY,CAAC,CAAC,EACnB,KAAK,SAAS,CAChB,CAEA,UAAiB,CACf,IAAME,EAAQ,EAAE,KAAK,iBAErB,GAAI,CAAC,KAAK,WAAY,CACpB,KAAK,SAAW,GAChB,KAAK,YAAY,CAAC,CAAC,EACnB,MACF,CAEA,GAAI,CACF,IAAMC,EAAS,KAAK,WAAW,KAAK,MAAM,EAEtCd,GAAcc,CAAM,GACtB,KAAK,SAAW,GAChB,QAAQ,QAAQA,CAAM,EACnB,KAAMC,GAAQ,CACTF,IAAU,KAAK,mBACnB,KAAK,SAAW,GAChB,KAAK,YAAYE,GAAA,KAAAA,EAAO,CAAC,CAAC,EAC5B,CAAC,EACA,MAAOC,GAAU,CACZH,IAAU,KAAK,mBACnB,KAAK,SAAW,GAChB,QAAQ,MAAMG,CAAK,EACrB,CAAC,IAEH,KAAK,SAAW,GAChB,KAAK,YAAYF,GAAA,KAAAA,EAAU,CAAC,CAAC,EAEjC,OAASE,EAAO,CACVH,IAAU,KAAK,mBACjB,KAAK,SAAW,IAElB,QAAQ,MAAMG,CAAK,CACrB,CACF,CAEA,UAAiB,CACf,KAAK,kBAAoB,EACzB,KAAK,SAAW,GAChB,KAAK,UAAU,SAAS,CAC1B,CACF,EAEA,SAASN,GAAcO,EAA+B,CACpD,GAAIA,EAAE,MAAO,MAAO,QACpB,GAAIA,EAAE,QAAS,MAAO,UACtB,GAAIA,EAAE,QAAS,MAAO,SAExB,CCrKO,IAAMC,GAAN,KAAgB,CAAhB,cACL,YAAS,IAAI,IAEb,SAASC,EAAcC,EAAqBC,EAAwC,CAClF,IAAIC,EAAQ,KAAK,OAAO,IAAIH,CAAI,EAEhC,OAAKG,EAIHA,EAAM,UAAUF,EAAWC,CAAS,GAHpCC,EAAQ,IAAIC,GAAWH,EAAWC,CAAS,EAC3C,KAAK,OAAO,IAAIF,EAAMG,CAAK,GAKtBA,CACT,CAEA,SAASH,EAA0B,CACjC,OAAO,KAAK,SAASA,CAAI,CAC3B,CAEA,YAAYA,EAAoB,CAtBlC,IAAAK,GAuBIA,EAAA,KAAK,OAAO,IAAIL,CAAI,IAApB,MAAAK,EAAuB,WACvB,KAAK,OAAO,OAAOL,CAAI,CACzB,CAEA,IAAI,OAAiB,CACnB,QAAWM,KAAK,KAAK,OAAO,OAAO,EACjC,GAAIA,EAAE,UAAYA,EAAE,UAAU,MAAO,MAAO,GAE9C,MAAO,EACT,CAEA,OAAc,CACZ,QAAWA,KAAK,KAAK,OAAO,OAAO,EAAGA,EAAE,MAAM,CAChD,CAEA,UAAoC,CAClC,IAAMC,EAAkC,CAAC,EACzC,OAAW,CAACP,EAAMM,CAAC,IAAK,KAAK,OAAQE,GAAUD,EAAQP,EAAMM,EAAE,MAAM,EACrE,OAAOC,CACT,CAEA,UAAiB,CACf,QAAWD,KAAK,KAAK,OAAO,OAAO,EAAGA,EAAE,SAAS,EACjD,KAAK,OAAO,MAAM,CACpB,CACF,EAEA,SAASE,GAAUC,EAA8BT,EAAcU,EAAsB,CACnF,IAAMC,EAAWX,EAAK,MAAM,GAAG,EAC3BY,EAAWH,EACf,QAASI,EAAI,EAAGA,EAAIF,EAAS,OAAS,EAAGE,IAAK,CAC5C,IAAMC,EAAMH,EAASE,CAAC,EAClBD,EAAIE,CAAG,GAAK,OAAMF,EAAIE,CAAG,EAAI,MAAM,OAAOH,EAASE,EAAI,CAAC,CAAC,CAAC,EAAI,CAAC,EAAI,CAAC,GACxED,EAAMA,EAAIE,CAAG,CACf,CACAF,EAAID,EAASA,EAAS,OAAS,CAAC,CAAC,EAAID,CACvC","names":["global_exports","__export","dist_exports","src_exports","EventProperties","eventNameMap","acc","ev","key","HtmlTags","_chain","Notifier","event","listener","release","listeners","args","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","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","l","V","W","g","U","X","F","d","_","P","S","h","light","light_default","themes","createDark","colorSteps","input","firstColor","validateTheme","partial","key","v","custom","deepMerge","target","source","_a","buildThemeCSS","name","styles","toneSteps","value","colorName","i","k","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","fe","accentColor","node","listener","_","U","P","card","props","_a","color","fe","listener","P","F","U","splitter","props","direction","defaultSize","min","max","node","element","b","fe","splitterPanel","ctx","el","prop","release","size","splitterHandle","handle","isHorizontal","onMousedown","e","container","onMousemove","rect","raw","onMouseup","listener","U","P","command","node","element","b","fe","commandSearch","props","color","accentColor","ctx","input","onInput","listener","_","P","F","U","commandItem","_a","_b","el","text","release","q","toggle","props","_a","_b","color","fe","accentColor","node","ctx","items","n","key","listener","val","arr","v","_","P","U","toggleGroup","props","_a","multiple","color","fe","P","listener","_","U","inputOTP","P","node","container","getInputs","onInput","e","inputs","target","idx","onKeydown","onPaste","_a","_b","_c","text","startIdx","char","i","lastFilled","alert","props","_a","color","fe","P","listener","F","U","_","avatar","props","_a","color","fe","P","listener","_","U","badge","props","_a","label","state","fe","color","l","P","_","U","breadcrumb","props","_a","separator","color","fe","node","listener","_","P","U","breadcrumbEllipsis","props","_a","color","fe","node","listener","_","P","U","xSvg","tag","props","_a","removable","color","fe","node","removeBtn","e","P","listener","U","_","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","openState","fe","instantShow","autoUpdate","computePosition","offset","flip","shift","x","y","resolved","instantHide","show","hide","floatingPartial","listener","node","rootNode","overlay","overlayEle","b","e","root","floatingNode","handleOutside","event","target","combobox","props","options","placement","color","open","multiple","state","fe","openState","show","hide","anchorPartial","creatFloating","popoverPartial","b","inputStyle","P","listener","_","U","inputElement","wrap","val","vals","items","opt","tag","_node","cur","filter","v","partial","node","F","popoverArrow","props","placement","color","sideOffset","P","bordered","place","fe","flipMap","getFlipped","listener","_a","start","pos","end","_","U","x","blockquote","props","_a","color","fe","node","listener","_","U","P","F","button","props","_a","color","fe","node","listener","_","P","F","U","inputCheckbox","props","_a","_b","color","fe","accentColor","node","listener","_","P","U","code","props","_a","color","fe","node","listener","_","U","P","details","props","_a","_b","duration","color","fe","accentColor","node","listener","_","U","P","F","descriptionList","props","_a","color","fe","node","P","listener","_","U","dialog","props","color","open","state","fe","node","e","r","_e","dlg","update","val","focusable","listener","_","U","P","F","emphasis","props","_a","color","fe","node","listener","_","U","figure","props","_a","color","fe","node","P","listener","U","_","formGroup","props","_a","layout","color","fe","isVertical","node","listener","P","F","_","U","Headinghift","heading","props","_a","color","fe","node","listener","U","P","offset","_","horizontalRule","props","_a","color","fe","node","P","listener","U","image","props","_a","color","fe","node","P","listener","U","icon","props","_a","color","fe","node","P","listener","_","U","inputColor","props","_a","_b","color","fe","accentColor","node","element","listener","_","P","F","U","inputDateTime","props","_a","_b","mode","color","fe","accentColor","node","element","listener","_","U","P","F","inputFile","props","_a","_b","color","fe","accentColor","node","element","listener","_","U","P","F","inputSearch","props","_a","_b","color","fe","accentColor","node","element","listener","_","U","P","F","inputText","props","_a","_b","color","fe","accentColor","node","element","P","listener","F","_","U","inputRange","props","_a","_b","color","fe","accentColor","node","P","listener","U","inputNumber","props","_a","_b","color","fe","accentColor","node","element","P","listener","F","_","U","keyboard","props","_a","color","fe","node","listener","_","U","P","label","props","_a","_b","color","fe","accentColor","node","P","listener","_","U","link","props","_a","_b","color","fe","accentColor","node","listener","_","U","P","mark","props","_a","accentColor","fe","node","listener","_","U","P","paragraph","props","_a","color","fe","node","listener","_","U","preformated","props","_a","color","fe","node","listener","_","U","P","F","progress","props","_a","_b","color","fe","accentColor","node","P","listener","U","inputRadio","props","_a","_b","color","fe","accentColor","node","listener","_","P","U","select","props","color","accentColor","node","listener","_","U","P","F","l","svg","X","skeleton","props","_a","color","fe","keyframes","animationName","F","listener","_","U","P","keyframes","animationName","F","spinner","props","_a","color","fe","node","listener","_","U","P","selectList","props","_a","color","multiple","state","fe","inputs","listener","val","v","node","P","F","_","U","selectItem","props","accentColor","color","value","node","select","state","listener","val","v","_","P","F","U","selectBox","props","options","placement","color","open","multiple","state","fe","openState","show","hide","anchorPartial","creatFloating","popoverPartial","b","wrap","listener","val","vals","opt","tag","_node","cur","filter","v","P","partial","node","F","U","_","inputSwitch","props","_a","accentColor","fe","node","listener","_","P","U","buttonSwitch","props","_a","_b","checked","check","fe","color","accentColor","node","listener","_","U","P","small","props","_a","color","fe","node","listener","_","U","strong","props","_a","color","fe","node","listener","_","U","subscript","props","_a","color","fe","node","listener","_","U","superscript","props","_a","color","fe","node","listener","_","U","table","props","_a","color","fe","node","listener","_","U","P","F","l","textarea","props","_a","_b","color","fe","accentColor","autoResize","node","el","resize","listener","P","F","_","U","unorderedList","props","_a","color","fe","node","listener","_","U","P","orderedList","props","_a","color","fe","node","listener","_","U","P","getPages","current","total","_","i","pages","start","end","pagination","props","_a","color","accentColor","state","fe","btnBase","listener","P","F","U","activeStyle","__spreadProps","__spreadValues","node","content","page","items","p","isActive","divider","props","_a","color","fe","node","P","listener","_","U","translateOut","marginMap","isVertical","p","drawer","props","color","open","placement","size","state","fe","defaultSize","P","drawerSize","node","e","_e","dlg","update","val","listener","_","U","F","popover","props","open","placement","openOn","popoverId","openState","fe","placeState","show","hide","anchorPartial","creatFloating","popoverPartial","node","id","b","listener","e","related","root","floatingEl","toast","props","position","color","state","fe","isTop","isCenter","isRight","overlayEle","P","rootNode","overlay","listener","F","_","U","node","done","onEnd","e","tooltip","props","open","placement","content","placeState","fe","contentState","tooltipId","contentElement","listener","show","hide","anchorPartial","creatFloating","tooltipPartial","node","id","P","F","U","_","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","fe","b","tab","props","accentColor","color","node","_a","context","children","n","key","part","listener","e","_b","_c","_d","k","tabs","idx","next","target","_","P","F","U","tabPanel","listener","P","F","node","_a","context","children","n","key","part","menu","props","color","selectable","node","element","_a","partial","fe","b","listener","P","F","_","U","menuItem","props","accentColor","color","node","_a","context","children","n","key","listener","e","_b","_c","_d","k","items","idx","next","_","P","F","U","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"]}
|