@domphy/ui 0.1.1 → 0.1.3
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/README.md +34 -29
- package/dist/core-theme-ui.global.js +3 -3
- 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 +46 -46
|
@@ -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/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","../../theme/src/light.ts","../../theme/src/theme.ts","../../theme/src/size.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.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.7.4/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.7.5/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\"\nexport * as theme from \"@domphy/theme\"\nexport * as ui from \"./index.js\"\n","export const EventProperties = [\n \"onAbort\",\n \"onAuxClick\",\n \"onBeforeMatch\",\n \"onBeforeToggle\",\n \"onBlur\",\n \"onCancel\",\n \"onCanPlay\",\n \"onCanPlayThrough\",\n \"onChange\",\n \"onClick\",\n \"onClose\",\n \"onContextLost\",\n \"onContextMenu\",\n \"onContextRestored\",\n \"onCopy\",\n \"onCueChange\",\n \"onCut\",\n \"onDblClick\",\n \"onDrag\",\n \"onDragEnd\",\n \"onDragEnter\",\n \"onDragLeave\",\n \"onDragOver\",\n \"onDragStart\",\n \"onDrop\",\n \"onDurationChange\",\n \"onEmptied\",\n \"onEnded\",\n \"onError\",\n \"onFocus\",\n \"onFormData\",\n \"onInput\",\n \"onInvalid\",\n \"onKeyDown\",\n \"onKeyPress\",\n \"onKeyUp\",\n \"onLoad\",\n \"onLoadedData\",\n \"onLoadedMetadata\",\n \"onLoadStart\",\n \"onMouseDown\",\n \"onMouseEnter\",\n \"onMouseLeave\",\n \"onMouseMove\",\n \"onMouseOut\",\n \"onMouseOver\",\n \"onMouseUp\",\n \"onPaste\",\n \"onPause\",\n \"onPlay\",\n \"onPlaying\",\n \"onProgress\",\n \"onRateChange\",\n \"onReset\",\n \"onResize\",\n \"onScroll\",\n \"onScrollEnd\",\n \"onSecurityPolicyViolation\",\n \"onSeeked\",\n \"onSeeking\",\n \"onSelect\",\n \"onSlotChange\",\n \"onStalled\",\n \"onSubmit\",\n \"onSuspend\",\n \"onTimeUpdate\",\n \"onToggle\",\n \"onVolumeChange\",\n \"onWaiting\",\n \"onWheel\",\n \"onTouchStart\",\n \"onTouchMove\",\n \"onTouchEnd\",\n \"onTouchCancel\",\n \"onPointerDown\",\n \"onPointerMove\",\n \"onPointerUp\",\n \"onPointerCancel\",\n \"onPointerEnter\",\n \"onPointerLeave\",\n \"onPointerOver\",\n \"onPointerOut\",\n \"onGotPointerCapture\",\n \"onLostPointerCapture\",\n \"onCompositionStart\",\n \"onCompositionUpdate\",\n \"onCompositionEnd\",\n \"onTransitionEnd\",\n \"onTransitionStart\",\n \"onAnimationStart\",\n \"onAnimationEnd\",\n \"onAnimationIteration\",\n \"onFullscreenChange\",\n \"onFullscreenError\",\n \"onFocusIn\",\n \"onFocusOut\",\n] as const\n\nexport const eventNameMap = EventProperties.reduce((acc, ev) => {\n const key = ev.slice(2).toLowerCase() as keyof HTMLElementEventMap\n acc[key] = ev;\n return acc;\n}, {} as Partial<Record<keyof HTMLElementEventMap, (typeof EventProperties)[number]>>);\n","export const HtmlTags = [\n \"a\",\n \"abbr\",\n \"address\",\n \"article\",\n \"aside\",\n \"audio\",\n \"b\",\n \"base\",\n \"blockquote\",\n \"br\",\n \"button\",\n \"canvas\",\n \"caption\",\n \"cite\",\n \"code\",\n \"col\",\n \"colgroup\",\n \"data\",\n \"datalist\",\n \"dd\",\n \"del\",\n \"details\",\n \"dfn\",\n \"dialog\",\n \"div\",\n \"dl\",\n \"dt\",\n \"em\",\n \"fieldset\",\n \"figcaption\",\n \"figure\",\n \"footer\",\n \"form\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"header\",\n \"hgroup\",\n \"i\",\n \"iframe\",\n \"img\",\n \"input\",\n \"ins\",\n \"kbd\",\n \"label\",\n \"legend\",\n \"li\",\n \"main\",\n \"map\",\n \"mark\",\n \"meta\",\n \"meter\",\n \"nav\",\n \"noscript\",\n \"object\",\n \"ol\",\n \"optgroup\",\n \"option\",\n \"output\",\n \"p\",\n \"param\",\n \"picture\",\n \"pre\",\n \"progress\",\n \"q\",\n \"rp\",\n \"rt\",\n \"ruby\",\n \"s\",\n \"samp\",\n \"section\",\n \"select\",\n \"slot\",\n \"small\",\n \"source\",\n \"span\",\n \"strong\",\n \"sub\",\n \"summary\",\n \"sup\",\n \"table\",\n \"tbody\",\n \"td\",\n \"template\",\n \"textarea\",\n \"tfoot\",\n \"th\",\n \"thead\",\n \"time\",\n \"title\",\n \"tr\",\n \"track\",\n \"u\",\n \"ul\",\n \"var\",\n \"video\",\n \"wbr\",\n \"bdi\",\n \"bdo\",\n \"math\",\n \"menu\",\n \"search\",\n \"area\",\n \"embed\",\n \"hr\",\n \"animate\",\n \"animateMotion\",\n \"animateTransform\",\n \"circle\",\n \"clipPath\",\n \"cursor\",\n \"defs\",\n \"desc\",\n \"ellipse\",\n \"feBlend\",\n \"feColorMatrix\",\n \"feComponentTransfer\",\n \"feComposite\",\n \"feConvolveMatrix\",\n \"feDiffuseLighting\",\n \"feDisplacementMap\",\n \"feDistantLight\",\n \"feDropShadow\",\n \"feFlood\",\n \"feFuncA\",\n \"feFuncB\",\n \"feFuncG\",\n \"feFuncR\",\n \"feGaussianBlur\",\n \"feImage\",\n \"feMerge\",\n \"feMergeNode\",\n \"feMorphology\",\n \"feOffset\",\n \"fePointLight\",\n \"feSpecularLighting\",\n \"feSpotLight\",\n \"feTile\",\n \"feTurbulence\",\n \"filter\",\n \"foreignObject\",\n \"g\",\n \"image\",\n \"line\",\n \"linearGradient\",\n \"marker\",\n \"mask\",\n \"metadata\",\n \"mpath\",\n \"path\",\n \"pattern\",\n \"polygon\",\n \"polyline\",\n \"prefetch\",\n \"radialGradient\",\n \"rect\",\n \"set\",\n \"solidColor\",\n \"stop\",\n \"svg\",\n \"switch\",\n \"symbol\",\n \"tbreak\",\n \"text\",\n \"textPath\",\n \"tspan\",\n \"use\",\n \"view\",\n];","import { Handler } from \"../types.js\"\r\n\r\nexport class Notifier {\r\n private _listeners: Record<string, Set<Handler>> | null = {};\r\n\r\n _dispose(): void {\r\n if (this._listeners) {\r\n for (const event in this._listeners) {\r\n this._listeners[event].clear();\r\n }\r\n }\r\n\r\n this._listeners = null;\r\n }\r\n addListener(event: string, listener: Handler): () => void {\r\n if (!this._listeners) return () => { };\r\n\r\n if (typeof event !== \"string\" || typeof listener !== \"function\") {\r\n throw new Error(\"Event name must be a string, listener must be a function\");\r\n }\r\n\r\n if (!this._listeners[event]) {\r\n this._listeners[event] = new Set();\r\n }\r\n\r\n const release = () => this.removeListener(event, listener);\r\n\r\n if (!this._listeners[event].has(listener)) {\r\n this._listeners[event].add(listener);\r\n if (typeof listener.onSubscribe === \"function\") {\r\n listener.onSubscribe(release);\r\n }\r\n }\r\n\r\n return release;\r\n }\r\n\r\n removeListener(event: string, listener: Handler): void {\r\n if (!this._listeners) return;\r\n\r\n const listeners = this._listeners[event];\r\n if (listeners && listeners.has(listener)) {\r\n listeners.delete(listener);\r\n if (listeners.size === 0) {\r\n delete this._listeners[event];\r\n }\r\n }\r\n }\r\n\r\n notify(event: string, ...args: unknown[]): void {\r\n if (!this._listeners) return;\r\n const listeners = this._listeners[event];\r\n if (listeners) {\r\n for (const listener of [...listeners]) {\r\n try {\r\n listener(...args);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n }\r\n}","import { Notifier } from \"./Notifier.js\";\nimport { Handler } from \"../types.js\"\n\nexport type ValueListener<T> = ((_value: T) => void) & Handler\nexport type ValueOrState<T> = T | State<T>\nexport class State<T> {\n private _value: T;\n readonly initialValue: T;\n private _notifier: Notifier | null = new Notifier();\n\n constructor(initialValue: T) {\n this.initialValue = initialValue;\n this._value = initialValue;\n }\n\n get(listener?: ValueListener<T>): T {\n if (listener) this.onChange(listener);\n return this._value;\n }\n\n set(newValue: T): void {\n if (!this._notifier) return;\n this._value = newValue;\n this._notifier.notify(\"change\", newValue);\n }\n\n reset(): void {\n this.set(this.initialValue);\n }\n\n onChange(listener: ValueListener<T>): () => void {\n if (!this._notifier) return () => { };\n return this._notifier.addListener(\"change\", listener);\n }\n\n _dispose(): void {\n if (this._notifier) {\n this._notifier._dispose();\n this._notifier = null;\n }\n }\n}","import { DomphyElement, HookMap, EventName, Handler } from \"./types.js\";\r\nimport { State } from \"./classes/State.js\"\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 toState<T>(val: T | State<T>): State<T> {\r\n return val instanceof State ? val : new State<T>(val);\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}","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) {\r\n if (selectors.indexOf('@') === 0) {\r\n return [selectors];\r\n }\r\n var splitted = [];\r\n var parens = 0;\r\n var angulars = 0;\r\n var soFar = '';\r\n for (var i = 0, len = selectors.length; i < len; i++) {\r\n var char = selectors[i];\r\n if (char === '(') {\r\n parens += 1;\r\n } else if (char === ')') {\r\n parens -= 1;\r\n } else if (char === '[') {\r\n angulars += 1;\r\n } else if (char === ']') {\r\n angulars -= 1;\r\n } else if (char === ',') {\r\n if (!parens && !angulars) {\r\n splitted.push(soFar.trim());\r\n soFar = '';\r\n continue;\r\n }\r\n }\r\n soFar += char;\r\n }\r\n splitted.push(soFar.trim());\r\n return splitted;\r\n};\r\n\r\nexport const mergePartial = (partial: PartialElement | DomphyElement): typeof partial => {\r\n\r\n if (Array.isArray(partial.$)) {\r\n let part: typeof partial = {}\r\n partial.$.forEach(p => merge(part, mergePartial(p)))\r\n delete partial.$\r\n merge(part, partial) // native win\r\n\r\n return part\r\n } else {\r\n return partial\r\n }\r\n}","export const VoidTags = [\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"source\",\n \"track\",\n \"wbr\",\n] as const;\n\nexport type VoidTagName = (typeof VoidTags)[number];\n\n","export const BooleanAttributes = [\n \"allowFullScreen\",\n \"async\",\n \"autoFocus\",\n \"autoPlay\",\n \"checked\",\n \"compact\",\n \"contentEditable\",\n \"controls\",\n \"declare\",\n \"default\",\n \"defer\",\n \"disabled\",\n \"formNoValidate\",\n \"hidden\",\n \"isMap\",\n \"itemScope\",\n \"loop\",\n \"multiple\",\n \"muted\",\n \"noHref\",\n \"noShade\",\n \"noValidate\",\n \"open\",\n \"playsInline\",\n \"readonly\",\n \"required\",\n \"reversed\",\n \"scoped\",\n \"selected\",\n \"sortable\",\n \"trueSpeed\",\n \"typeMustMatch\",\n \"wmode\",\n \"autoCapitalize\",\n \"translate\",\n \"spellCheck\",\n \"inert\",\n \"download\",\n \"noModule\",\n \"paused\",\n \"autoPictureInPicture\",\n] as const;","//browserslist query \"> 0.1%, not dead\"\nexport const PrefixCSS: Record<string, string[]> = {\n transform: [\"webkit\", \"ms\"],\n transition: [\"webkit\", \"ms\"],\n animation: [\"webkit\"],\n userSelect: [\"webkit\", \"ms\"],\n flexDirection: [\"webkit\", \"ms\"],\n flexWrap: [\"webkit\", \"ms\"],\n justifyContent: [\"webkit\", \"ms\"],\n alignItems: [\"webkit\", \"ms\"],\n alignSelf: [\"webkit\", \"ms\"],\n order: [\"webkit\", \"ms\"],\n flexGrow: [\"webkit\", \"ms\"],\n flexShrink: [\"webkit\", \"ms\"],\n flexBasis: [\"webkit\", \"ms\"],\n columns: [\"webkit\"],\n columnCount: [\"webkit\"],\n columnGap: [\"webkit\"],\n columnRule: [\"webkit\"],\n columnWidth: [\"webkit\"],\n boxSizing: [\"webkit\"],\n appearance: [\"webkit\", \"moz\"],\n filter: [\"webkit\"],\n backdropFilter: [\"webkit\"],\n clipPath: [\"webkit\"],\n mask: [\"webkit\"],\n maskImage: [\"webkit\"],\n textSizeAdjust: [\"webkit\", \"ms\"],\n hyphens: [\"webkit\", \"ms\"],\n writingMode: [\"webkit\", \"ms\"],\n gridTemplateColumns: [\"ms\"],\n gridTemplateRows: [\"ms\"],\n gridAutoColumns: [\"ms\"],\n gridAutoRows: [\"ms\"],\n gridColumn: [\"ms\"],\n gridRow: [\"ms\"],\n marginInlineStart: [\"webkit\"],\n marginInlineEnd: [\"webkit\"],\n paddingInlineStart: [\"webkit\"],\n paddingInlineEnd: [\"webkit\"],\n minInlineSize: [\"webkit\"],\n maxInlineSize: [\"webkit\"],\n minBlockSize: [\"webkit\"],\n maxBlockSize: [\"webkit\"],\n inlineSize: [\"webkit\"],\n blockSize: [\"webkit\"],\n tabSize: [\"moz\"],\n overscrollBehavior: [\"webkit\", \"ms\"],\n touchAction: [\"ms\"],\n resize: [\"webkit\"],\n printColorAdjust: [\"webkit\"],\n backgroundClip: [\"webkit\"],\n boxDecorationBreak: [\"webkit\"],\n overflowScrolling: [\"webkit\"],\n};\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\"\n\nexport class ElementAttribute {\n readonly name: string;\n readonly isBoolean: boolean;\n value: any;\n parent: ElementNode;\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 if (value == null) {\n this.value = null;\n this.render();\n return;\n }\n 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 (!listener) return;\n this.value = this.isBoolean ? Boolean((value as Function)()) : (value as Function)();\n this.render();\n };\n\n listener.elementNode = this.parent!;\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 }\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.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}","import type { ElementNode } from \"./ElementNode.js\";\nimport { ElementAttribute } from \"./ElementAttribute.js\";\nimport { BooleanAttributes } from \"../constants.js\";\nimport { Notifier } from \"./Notifier.js\"\nimport { AttributeValue } from \"../types.js\"\n\nexport class AttributeList {\n _notifier = new Notifier()\n\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\n if (this.items[name]) {\n this.items[name].set(value);\n this.parent.domElement && this._notifier.notify(name, this.items[name].value)\n } else {\n this.items[name] = new ElementAttribute(name, value, this.parent);\n }\n }\n\n onChange(name: string, callback: (value: string | number) => void): void {\n if (this.has(name) && this.parent?.domElement) {\n const handler = callback as any\n handler.onSubscribe = (release: () => void) => this.parent?.addHook(\"BeforeRemove\", release);\n this._notifier.addListener(name, handler)\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\n if (this.items) {\n for (const key in this.items) {\n this.items[key]._dispose();\n }\n }\n this._notifier._dispose()\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}","import { ElementNode } from \"./ElementNode.js\";\nimport { isHTML } from \"../helpers.js\";\n\nexport class TextNode {\n type = \"TextNode\"\n parent: ElementNode;\n text: string;\n domText?: ChildNode;\n\n constructor(textContent: string | number, parent: ElementNode) {\n this.parent = parent;\n this.text = textContent === \"\" ? \"\\u200B\" : String(textContent);\n }\n _createDOMNode() {\n let newNode: ChildNode;\n if (isHTML(this.text)) {\n const tpl = document.createElement(\"template\");\n tpl.innerHTML = this.text.trim();\n newNode = tpl.content.firstChild || document.createTextNode(\"\");\n } else {\n newNode = document.createTextNode(this.text);\n }\n this.domText = newNode;\n return newNode;\n }\n\n _dispose(): void {\n this.domText = undefined;\n this.text = \"\";\n }\n\n generateHTML(): string {\n return this.text === \"\\u200B\" ? \"​\" : this.text;\n }\n\n render(domText: ChildNode | DocumentFragment | HTMLElement): void {\n const newNode = this._createDOMNode();\n domText.appendChild(newNode);\n }\n}","import { TextNode } from \"./TextNode.js\";\nimport { ElementNode } from \"./ElementNode.js\";\nimport type { DomphyElement } from \"../types.js\";\n\ntype ElementInput = DomphyElement | null | undefined | number | string\ntype NodeItem = ElementNode | TextNode;\n\nexport class ElementList {\n items: NodeItem[] = [];\n owner: ElementNode;\n\n constructor(parent: ElementNode) {\n this.owner = parent;\n }\n\n _createNode(element: ElementInput | DomphyElement, index = 0): NodeItem {\n return (typeof element === \"object\" && element !== null)\n ? new ElementNode(element, this.owner, index)\n : new TextNode(element == null ? \"\" : String(element), this.owner);\n }\n\n _moveDomElement(node: NodeItem, index: number) {\n if (!this.owner || !this.owner.domElement) return;\n const dom = this.owner.domElement;\n\n const el = node instanceof ElementNode ? node.domElement : node.domText;\n if (el) {\n const currentRef = dom.childNodes[index] || null;\n if (el !== currentRef) {\n dom.insertBefore(el, currentRef);\n }\n }\n }\n\n _swapDomElement(aNode: NodeItem, bNode: NodeItem) {\n if (!this.owner || !this.owner.domElement) return;\n const parent = this.owner.domElement;\n\n const a = aNode instanceof ElementNode ? aNode.domElement : aNode.domText;\n const b = bNode instanceof ElementNode ? bNode.domElement : bNode.domText;\n if (!a || !b) return;\n\n const aNext = a.nextSibling;\n const bNext = b.nextSibling;\n\n parent.insertBefore(a, bNext);\n parent.insertBefore(b, aNext);\n }\n\n update(inputs: ElementInput[], updateDom = true, silent = false): void {\n\n const oldItems = this.items.slice(); // snapshot for cleanup\n\n // keyed lookup from old list\n const keyed = new Map<string | number, NodeItem>();\n for (const item of oldItems) {\n if (item instanceof ElementNode && item.key !== null && item.key !== undefined) {\n keyed.set(item.key, item);\n }\n }\n\n if (!silent && this.owner.domElement) this.owner._hooks?.BeforeUpdate?.(this.owner, inputs);\n // build target order using existing ops (mutating this.items)\n for (let i = 0; i < inputs.length; i++) {\n const input = inputs[i];\n const key =\n (typeof input === \"object\" && input !== null) ? (input as any)._key : undefined;\n\n if (key !== undefined) {\n const reused = keyed.get(key);\n if (reused) {\n keyed.delete(key);\n\n const cur = this.items.indexOf(reused);\n if (cur !== i && cur >= 0) {\n const isPortal = reused instanceof ElementNode && !!reused._portal;\n this.move(cur, i, isPortal ? false : updateDom, true);\n }\n reused.parent = this.owner as any;\n continue;\n }\n }\n\n this.insert(input, i, updateDom, true);\n }\n\n while (this.items.length > inputs.length) {\n this.remove(this.items[this.items.length - 1], updateDom, true);\n }\n keyed.forEach((node) => this.remove(node, updateDom, true));\n if (!silent) this.owner._hooks?.Update?.(this.owner);\n }\n\n insert(input: ElementInput, index?: number, updateDom = true, silent = false): NodeItem {\n\n let length = this.items.length;\n const finalIndex = (typeof index !== \"number\" || isNaN(index) || index < 0 || index > length)\n ? length\n : index;\n const item = this._createNode(input, finalIndex);\n this.items.splice(finalIndex, 0, item);\n\n if (item instanceof ElementNode) {\n //Parent always insert/mount before children\n item._hooks.Insert && item._hooks.Insert(item)\n\n let domElement = this.owner.domElement;\n if (updateDom && domElement) {\n\n\n if (item._portal) {\n let domElement = item._portal!(this.owner.getRoot())\n domElement && item.render(domElement)\n } else {\n let domNode = item._createDOMNode();\n const ref = domElement.childNodes[finalIndex] ?? null;\n domElement.insertBefore(domNode, ref);\n let root = domElement.getRootNode()\n const styleParent = root instanceof ShadowRoot ? root : document.head\n let domStyle = styleParent.querySelector(\"#domphy-style\") as HTMLStyleElement;\n item.styles.render(domStyle as HTMLStyleElement)\n item._hooks.Mount && item._hooks.Mount(item)\n item.children.items.forEach(child => {\n if (child instanceof ElementNode && child._portal) {\n let dom = child._portal!(child.getRoot())\n dom && child.render(dom)\n } else {\n child.render(domNode)\n }\n })\n }\n }\n\n\n\n } else {\n let domElement = this.owner.domElement;\n if (updateDom && domElement) {\n let domNode = item._createDOMNode();\n const ref = domElement.childNodes[finalIndex] ?? null;\n domElement.insertBefore(domNode, ref);\n }\n }\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\n return item;\n }\n\n remove(item: NodeItem, updateDom = true, silent = false): void {\n\n const index = this.items.indexOf(item);\n if (index < 0) return;\n\n if (item instanceof ElementNode) {\n const done = () => {\n const el = item.domElement\n this.items.splice(index, 1);\n updateDom && el && el.remove()\n item._hooks?.Remove?.(item)\n item._dispose();\n }\n if (item._hooks && item._hooks.BeforeRemove && item.domElement) {\n item._hooks.BeforeRemove(item, done)\n } else {\n done()\n }\n\n } else {\n const el = item.domText\n this.items.splice(index, 1);\n updateDom && el && el.remove()\n item._dispose();\n }\n\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\n }\n\n clear(updateDom = true, silent = false): void {\n if (this.items.length === 0) return;\n const snapshot = this.items.slice();\n\n for (const item of snapshot) {\n this.remove(item, updateDom, true);\n }\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\n }\n\n _dispose(): void {\n this.items = [];\n }\n\n swap(aIndex: number, bIndex: number, updateDom = true, silent = false) {\n if (aIndex < 0 || bIndex < 0 ||\n aIndex >= this.items.length || bIndex >= this.items.length ||\n aIndex === bIndex) return;\n\n const itemA = this.items[aIndex];\n const itemB = this.items[bIndex];\n\n this.items[aIndex] = itemB;\n this.items[bIndex] = itemA;\n\n if (updateDom) this._swapDomElement(itemA, itemB);\n\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\n }\n\n move(fromIndex: number, toIndex: number, updateDom = true, silent = false): void {\n if (fromIndex < 0 || fromIndex >= this.items.length ||\n toIndex < 0 || toIndex >= this.items.length || fromIndex === toIndex) return;\n\n const item = this.items[fromIndex];\n\n this.items.splice(fromIndex, 1);\n this.items.splice(toIndex, 0, item);\n\n if (updateDom) this._moveDomElement(item, toIndex);\n\n !silent && this.owner.domElement && this.owner._hooks.Update && this.owner._hooks.Update(this.owner)\n }\n\n generateHTML(): string {\n let html = \"\";\n for (const item of this.items) html += item.generateHTML();\n return html;\n }\n}","import type { StyleRule } from \"./StyleRule.js\";\nimport type { StyleValue } from \"../types.js\";\nimport { camelToKebab } from \"../helpers.js\";\nimport { PrefixCSS } from \"../constants.js\";\n\nexport class StyleProperty {\n name: string;\n cssName: string;\n value: StyleValue = \"\";\n parentRule: StyleRule;\n\n constructor(name: string, value: StyleValue, parentRule: StyleRule) {\n this.name = name;\n this.cssName = camelToKebab(name);\n this.parentRule = parentRule;\n this.set(value);\n }\n\n _domUpdate(): void {\n if (!this.parentRule) return;\n const domRule = this.parentRule.domRule;\n\n if (domRule && (domRule as CSSStyleRule).style) {\n let style: CSSStyleDeclaration = (domRule as CSSStyleRule).style;\n style.setProperty(this.cssName, String(this.value));\n\n if (PrefixCSS[this.name]) {\n PrefixCSS[this.name].forEach((prefix) => {\n style.setProperty(`-${prefix}-${this.cssName}`, String(this.value));\n });\n }\n }\n }\n _dispose(): void {\n this.value = \"\";\n this.parentRule = null as any;\n }\n\n set(value: StyleValue): void {\n\n if (typeof value === \"function\") {\n let Listener: any = () => {\n if (!Listener) return;\n this.value = value(Listener);\n this._domUpdate();\n }\n\n Listener.onSubscribe = (release: () => void) => {\n this.parentRule.parentNode?.addHook(\"BeforeRemove\", () => {\n release();\n Listener = null;\n });\n };\n\n Listener.elementNode = this.parentRule!.root;\n this.value = value(Listener);\n } else {\n this.value = value;\n }\n\n this._domUpdate();\n }\n\n remove(): void {\n if (!this.parentRule) return;\n\n if (this.parentRule.domRule instanceof CSSStyleRule) {\n const domStyle = this.parentRule.domRule.style;\n domStyle.removeProperty(this.cssName);\n\n if (PrefixCSS[this.name]) {\n PrefixCSS[this.name].forEach((prefix) => {\n domStyle.removeProperty(`-${prefix}-${this.cssName}`);\n });\n }\n }\n delete this.parentRule.styleBlock![this.name];\n this._dispose();\n }\n\n cssText(): string {\n let str = `${this.cssName}: ${this.value}`;\n if (PrefixCSS[this.name]) {\n PrefixCSS[this.name].forEach((prefix) => {\n str += `; -${prefix}-${this.cssName}: ${this.value}`;\n });\n }\n return str;\n }\n}","import { ElementNode } from \"./ElementNode.js\";\nimport { StyleProperty } from \"./StyleProperty.js\";\nimport { StyleList } from \"./StyleList.js\";\n\nexport class StyleRule {\n selectorText: string;\n domRule: CSSRule | CSSMediaRule | CSSKeyframesRule | null = null;\n styleList: StyleList | null;\n styleBlock: Record<string, StyleProperty> | null = {};\n parent: StyleRule | ElementNode | null;\n\n constructor(selectorText: string, parent: StyleRule | ElementNode) {\n this.selectorText = selectorText;\n this.styleList = new StyleList(this);\n this.parent = parent;\n }\n\n _dispose(): void {\n\n if (this.styleBlock) {\n for (const prop of Object.values(this.styleBlock)) {\n prop._dispose();\n }\n }\n\n if (this.styleList) {\n this.styleList._dispose();\n }\n\n this.styleBlock = null;\n this.styleList = null;\n this.domRule = null;\n this.parent = null;\n }\n\n get root() {\n let node = this.parent;\n while (node instanceof StyleRule) {\n node = node.parent;\n }\n return node;\n }\n\n get parentNode(): ElementNode | null {\n let root: any = this.parent;\n while (root && root instanceof StyleRule) {\n root = root.parent;\n }\n return root as ElementNode;\n }\n \n insertStyle(name: string, val: any): void {\n if (!this.styleBlock) return;\n if (this.styleBlock[name]) {\n this.styleBlock[name].set(val);\n } else {\n this.styleBlock[name] = new StyleProperty(name, val, this);\n }\n }\n\n removeStyle(name: string): void {\n if (!this.styleBlock) return;\n if (this.styleBlock[name]) {\n this.styleBlock[name].remove();\n }\n }\n\n cssText(): string {\n if (!this.styleBlock || !this.styleList) return \"\";\n const styleStr = Object.values(this.styleBlock).map(decl => decl.cssText()).join(\";\");\n const nested = this.styleList.cssText();\n return `${this.selectorText} { ${styleStr} ${nested} } `;\n }\n\n mount(domRule: CSSRule | CSSKeyframesRule): void {\n if (!domRule || !this.styleList) return;\n this.domRule = domRule;\n if (\"cssRules\" in domRule) {\n this.styleList.mount(domRule.cssRules as CSSRuleList);\n }\n }\n\n remove(): void {\n\n if (this.domRule && this.domRule.parentStyleSheet) {\n const sheet = this.domRule.parentStyleSheet;\n const rules = sheet.cssRules;\n for (let i = 0; i < rules.length; i++) {\n if (rules[i] === this.domRule) {\n sheet.deleteRule(i);\n break;\n }\n }\n }\n this._dispose();\n }\n\n render(domSheet: CSSStyleSheet | CSSGroupingRule) {\n if (!this.styleBlock || !this.styleList) return;\n const styleStr = Object.values(this.styleBlock).map(decl => decl.cssText()).join(\";\");\n try {\n if (!this.selectorText.startsWith(\"@\")) {\n const css = `${this.selectorText} { ${styleStr} }`;\n const index = domSheet.insertRule(css, domSheet.cssRules.length);\n const domRule = domSheet.cssRules[index];\n if (domRule && \"selectorText\" in domRule) {\n this.mount(domRule);\n }\n } else if (/^@(media|supports|container|layer)\\b/.test(this.selectorText)) {\n const index = domSheet.insertRule(`${this.selectorText} {}`, domSheet.cssRules.length);\n const domRule = domSheet.cssRules[index];\n if (\"cssRules\" in domRule) {\n this.mount(domRule as CSSGroupingRule);\n this.styleList.render(domRule as CSSGroupingRule);\n }\n } else if (this.selectorText.startsWith(\"@keyframes\") || this.selectorText.startsWith(\"@font-face\")) {\n const css = this.cssText();\n const index = domSheet.insertRule(css, domSheet.cssRules.length);\n const domRule = domSheet.cssRules[index];\n this.mount(domRule);\n }\n } catch (err) {\n console.warn(\"Failed to insert rule:\", this.selectorText, err);\n }\n }\n}","import { ElementNode } from \"./ElementNode.js\";\nimport { selectorSplitter } from \"../helpers.js\";\nimport { StyleRule } from \"./StyleRule.js\";\n\nexport class StyleList {\n parent: StyleRule | ElementNode | null;\n items: StyleRule[] = [];\n domStyle: HTMLStyleElement | null = null;\n\n constructor(parent: StyleRule | ElementNode) {\n this.parent = parent;\n }\n\n get parentNode(): ElementNode | null {\n let root: any = this.parent;\n while (root && root instanceof StyleRule) {\n root = root.parent;\n }\n return root as ElementNode;\n }\n\n addCSS(obj: Record<string, any>, parentSelector: string = \"\"): void {\n if (!this.items || !this.parent) return;\n const basic: Record<string, any> = {};\n\n function getSelector(selector: string, prev: string): string {\n return selector.startsWith(\"&\")\n ? `${prev}${selector.slice(1)}`\n : `${prev} ${selector}`;\n }\n\n for (const selector in obj) {\n const value = obj[selector];\n let splitKeys = selectorSplitter(selector);\n for (let key of splitKeys) {\n const currentSelector = getSelector(key, parentSelector);\n if (/^@(container|layer|supports|media)\\b/.test(key)) {\n if (typeof value === \"object\" && value != null) {\n const rule = new StyleRule(key, this.parent);\n rule.styleList!.addCSS(value, parentSelector);\n this.items.push(rule);\n }\n } else if (key.startsWith(\"@keyframes\")) {\n const rule = new StyleRule(key, this.parent);\n rule.styleList!.addCSS(value, \"\");\n this.items.push(rule);\n } else if (key.startsWith(\"@font-face\")) {\n const rule = new StyleRule(key, this.parent);\n for (const k in value) rule.insertStyle(k, value[k]);\n this.items.push(rule);\n } else if (typeof value === \"object\" && value != null) {\n const rule = new StyleRule(currentSelector, this.parent);\n this.items.push(rule);\n for (const [k, v] of Object.entries(value)) {\n if (typeof v === \"object\" && v != null) {\n let newSelector = getSelector(k, currentSelector);\n if (k.startsWith(\"&\")) {\n this.addCSS(v, newSelector);\n } else {\n const r = rule.styleList!.insertRule(newSelector);\n r.styleList!.addCSS(v, newSelector);\n }\n } else {\n rule.insertStyle(k, v);\n }\n }\n } else {\n basic[key] = value;\n }\n }\n }\n\n if (Object.keys(basic).length) {\n const rule = new StyleRule(parentSelector, this.parent);\n for (const key in basic) rule.insertStyle(key, basic[key]);\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;\n const domRule = domRuleList[index];\n if (!domRule) return;\n if (rule.selectorText.startsWith(\"@\") && domRule instanceof CSSKeyframesRule) {\n rule.mount(domRule);\n } else if (\"keyText\" in domRule) {\n rule.mount(domRule);\n } else if (\"selectorText\" in domRule) {\n if (domRule.selectorText !== fixOddEven(rule.selectorText)) {\n wrongCount += 1;\n } else {\n rule.mount(domRule);\n }\n } else if (\"cssRules\" in domRule) {\n rule.mount(domRule as CSSMediaRule);\n }\n });\n }\n\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\";\nimport { AttributeList } from \"./AttributeList.js\";\nimport { ElementList } from \"./ElementList.js\";\nimport { StyleList } from \"./StyleList.js\";\nimport { validate, mergePartial, getTagName, deepClone } from \"../helpers.js\";\nimport { merge, hashString } from \"../utils.js\";\n\nexport class ElementNode {\n type = \"ElementNode\"\n parent: ElementNode | null = null;\n _portal?: (root: ElementNode) => HTMLElement;\n tagName: TagName;\n children = new ElementList(this);\n styles = new StyleList(this);\n attributes = new AttributeList(this);\n domElement?: HTMLElement | null = null;\n _hooks: HookMap = {};\n _events?: { [K in EventName]?: (event: Event, node: ElementNode) => void } | null = null;\n _context?: Record<string, any> = {};\n _metadata?: Record<string, any> = {};\n key?: string | number | null = null;\n nodeId: string\n\n constructor(domphyElement: DomphyElement, _parent: ElementNode | null = null, index = 0) {\n domphyElement = deepClone(domphyElement)\n validate(domphyElement)\n domphyElement.style = domphyElement.style || {}\n this.parent = _parent;\n this.tagName = getTagName(domphyElement) as TagName;\n domphyElement = mergePartial(domphyElement) as DomphyElement\n\n this.key = (domphyElement as any)._key ?? null;\n this._context = domphyElement._context || {}\n this._metadata = domphyElement._metadata || {}\n\n let tempPath = `${this.parent?.getPath()}.${index}`\n const str = JSON.stringify(domphyElement.style || {}, (k, v) => typeof v === \"function\" ? tempPath : v,);\n this.nodeId = hashString(tempPath + str)\n\n this.attributes!.addClass(`${this.tagName}_${this.nodeId}`);\n\n if (domphyElement._onSchedule) domphyElement._onSchedule(this, domphyElement)\n\n this.merge(domphyElement)\n\n const children = (domphyElement as any)[this.tagName];\n\n if (children != null && children != undefined) {\n if (typeof children === \"function\") {\n let listener: any = () => {\n let input = children(listener)\n this.children!.update(Array.isArray(input) ? input : [input])\n }\n listener!.elementNode = this;\n listener!.onSubscribe = (release: () => void) => this.addHook(\"BeforeRemove\", () => {\n release()\n listener = null\n });\n listener && listener();\n } else {\n this.children!.update(Array.isArray(children) ? children : [children])\n }\n }\n this._hooks.Init && this._hooks.Init(this)\n }\n\n _createDOMNode() {\n const svgNamespace = \"http://www.w3.org/2000/svg\"\n const svgTags = [\"svg\", \"circle\", \"path\", \"rect\", \"ellipse\",\n \"line\", \"polyline\", \"polygon\", \"g\", \"defs\",\n \"use\", \"symbol\", \"linearGradient\", \"radialGradient\",\n \"stop\", \"clipPath\", \"mask\", \"filter\", \"text\",\n \"tspan\", \"textPath\", \"image\", \"pattern\", \"marker\",\n \"animate\", \"animateTransform\", \"animateMotion\",\n \"feGaussianBlur\", \"feComposite\", \"feColorMatrix\",\n \"feMerge\", \"feMergeNode\", \"feOffset\", \"feFlood\",\n \"feBlend\", \"foreignObject\"]\n\n let node = svgTags.includes(this.tagName)\n ? document.createElementNS(svgNamespace, this.tagName)\n : document.createElement(this.tagName)\n\n this.domElement = node as HTMLElement\n\n if (this._events) {\n for (const key in this._events) {\n const eventName = key as EventName;\n const handler = this._events[eventName] as (event: Event, node: ElementNode) => void;\n let fn: any = (event: Event) => handler(event, this)\n node.addEventListener(eventName, fn)\n this.addHook(\"BeforeRemove\", (n) => {\n n.domElement!.removeEventListener(eventName, fn)\n fn = null\n })\n }\n }\n\n if (this.attributes) {\n Object.values(this.attributes.items!).forEach(attr => attr.render())\n }\n return node\n }\n\n _dispose(): void {\n\n if (this.children) {\n this.children._dispose();\n }\n\n if (this.styles) {\n this.styles.items!.forEach((rule) => rule.remove());\n this.styles._dispose();\n }\n\n if (this.attributes) {\n this.attributes._dispose();\n }\n\n this.domElement = null;\n this._hooks = {};\n this._events = null;\n this._context = {};\n this._metadata = {};\n this.parent = null;\n }\n get pathId(): string {\n return hashString(this.getPath())\n }\n merge(part: PartialElement) {\n merge(this._context, part._context)\n merge(this._metadata, part._metadata)\n\n const keys = Object.keys(part)\n for (let i = 0; i < keys.length; i++) {\n const originalKey = keys[i];\n const value = (part as any)[originalKey];\n if ([\"$\", \"_onSchedule\", \"_key\", \"_context\", \"_metadata\", \"style\", this.tagName].includes(originalKey)) {\n continue\n } else if ([\"_onInit\", \"_onInsert\", \"_onMount\", \"_onBeforeUpdate\", \"_onUpdate\", \"_onBeforeRemove\", \"_onRemove\"].includes(originalKey)) {\n this.addHook(originalKey.substring(3) as keyof HookMap, value);\n } else if (originalKey.startsWith(\"on\")) {\n this.addEvent(originalKey.substring(2).toLowerCase() as EventName, value);\n } else if (originalKey == \"_portal\") {\n this._portal = value\n } else if (originalKey == \"class\" && typeof value === \"string\") {\n this.attributes!.addClass(value);\n } else {\n this.attributes!.set(originalKey, value);\n }\n }\n if (part.style) {\n this.styles.addCSS(part.style || {}, `.${`${this.tagName}_${this.nodeId}`}`);\n }\n\n }\n getPath(): string {\n let path: number[] = []\n let node: ElementNode = this\n while (node && node.parent) {\n const parent = node.parent\n const index = parent.children!.items.indexOf(node)\n path.push(index)\n node = parent\n }\n return path.reverse().join(\".\")\n }\n\n addEvent(name: EventName, callback: (event: Event, node: ElementNode) => void): void {\n\n this._events = this._events || {}\n\n let current = this._events[name]\n if (typeof current == \"function\") {\n this._events[name] = (event: Event, node: ElementNode) => {\n current!(event, node)\n callback(event, node)\n }\n } else {\n this._events[name] = callback\n }\n }\n\n addHook<K extends keyof HookMap>(name: K, callback: HookMap[K]): void {\n const current = this._hooks[name];\n\n if (typeof current === \"function\") {\n this._hooks[name] = ((...args: any[]) => {\n (current as Function)(...args);\n (callback as Function)(...args);\n }) as HookMap[K];\n } else {\n this._hooks[name] = callback;\n }\n }\n getRoot(): ElementNode {\n let root: ElementNode = this;\n while (root && root instanceof ElementNode && root.parent) {\n root = root.parent;\n }\n return root\n }\n\n getContext(name: string): any {\n let node: ElementNode | null = this;\n while (node && (!node._context || !Object.prototype.hasOwnProperty.call(node._context, name))) {\n node = node.parent;\n }\n return node && node._context ? node._context[name] : undefined;\n }\n\n setContext(name: string, value: any) {\n this._context = this._context || {}\n this._context[name] = value;\n }\n\n getMetadata(name: string): any {\n return this._metadata ? this._metadata[name] : undefined;\n }\n\n setMetadata(key: string, value: any) {\n this._metadata = this._metadata || {}\n this._metadata[key] = value;\n\n }\n\n generateCSS(): string {\n if (!this.styles || !this.children) return \"\";\n let css = this.styles.cssText()\n css += this.children.items.map(child => child instanceof ElementNode ? child.generateCSS() : \"\").join(\"\")\n return css\n }\n\n generateHTML(): string {\n if (!this.children || !this.attributes) return \"\";\n let content = this.children.generateHTML();\n const attributes = this.attributes.generateHTML();\n return `<${this.tagName}${attributes}>${content}</${this.tagName}>`;\n }\n\n mount(domElement: HTMLElement, domStyle?: HTMLStyleElement): void {\n if (!domElement) throw new Error(\"Missing dom node on bind\");\n this.domElement = domElement;\n\n if (this._events) {\n for (const key in this._events) {\n const eventName = key as EventName;\n const handler = this._events[eventName] as (event: Event, node: ElementNode) => void;\n let fn: any = (event: Event) => handler(event, this)\n domElement.addEventListener(eventName, fn)\n this.addHook(\"BeforeRemove\", (n) => {\n n.domElement!.removeEventListener(eventName, fn)\n fn = null\n })\n }\n }\n\n if (this.children) {\n this.children.items.forEach((child, i) => {\n const childNode = domElement.childNodes[i];\n if (childNode instanceof Node && child instanceof ElementNode) {\n child.mount(childNode as HTMLElement, domStyle);\n }\n });\n }\n\n this._hooks.Mount && this._hooks.Mount(this)\n }\n\n render(domElement: HTMLElement | SVGElement | DocumentFragment, domStyle: HTMLStyleElement | null = null): HTMLElement | SVGElement {\n const newNode = this._createDOMNode();\n domElement.appendChild(newNode)\n this._hooks.Mount && this._hooks.Mount(this)\n domStyle ||= this.getRoot().styles.domStyle\n let root = domElement.getRootNode()\n const styleParent = root instanceof ShadowRoot ? root : document.head\n domStyle ||= styleParent.querySelector(\"#domphy-style\") as HTMLStyleElement;\n if (!domStyle) {\n domStyle = document.createElement(\"style\");\n domStyle.id = \"domphy-style\";\n styleParent.appendChild(domStyle);\n }\n this.styles.render(domStyle as HTMLStyleElement)\n this.children.items.forEach(child => {\n if (child instanceof ElementNode && child._portal) {\n let dom = child._portal!(this.getRoot())\n dom && child.render(dom)\n } else {\n child.render(newNode)\n }\n })\n return newNode;\n }\n\n remove() {\n if (this.parent) {\n this.parent.children.remove(this)\n\n } else {\n this.domElement?.remove()\n this._dispose();\n }\n }\n}\n","import { ThemeInput } from \"./types.js\";\r\n\r\nlet light: ThemeInput = {\r\n direction: \"darken\",\r\n colors: {\r\n highlight: [\"#ffffff\", \"#fcf4d6\", \"#fddc69\", \"#f1c21b\", \"#d2a106\", \"#b28600\", \"#8e6a00\", \"#684e00\", \"#483700\", \"#302400\", \"#1c1500\", \"#000000\"],\r\n warning: [\"#ffffff\", \"#fff2e8\", \"#ffd9be\", \"#ffb784\", \"#ff832b\", \"#eb6200\", \"#ba4e00\", \"#8a3800\", \"#5e2900\", \"#3e1a00\", \"#231000\", \"#000000\"],\r\n error: [\"#ffffff\", \"#fff1f1\", \"#ffd7d9\", \"#ffb3b8\", \"#ff8389\", \"#fa4d56\", \"#da1e28\", \"#a2191f\", \"#750e13\", \"#520408\", \"#2d0709\", \"#000000\"],\r\n danger: [\"#ffffff\", \"#fff1f1\", \"#ffd7d9\", \"#ffb3b8\", \"#ff8389\", \"#fa4d56\", \"#da1e28\", \"#a2191f\", \"#750e13\", \"#520408\", \"#2d0709\", \"#000000\"],\r\n secondary: [\"#ffffff\", \"#fff0f7\", \"#ffd6e8\", \"#ffafd2\", \"#ff7eb6\", \"#ee5396\", \"#d02670\", \"#9f1853\", \"#740937\", \"#510224\", \"#2a0a18\", \"#000000\"],\r\n primary: [\"#ffffff\", \"#edf5ff\", \"#d0e2ff\", \"#a6c8ff\", \"#78a9ff\", \"#4589ff\", \"#0f62fe\", \"#0043ce\", \"#002d9c\", \"#001d6c\", \"#001141\", \"#000000\"],\r\n info: [\"#ffffff\", \"#e5f6ff\", \"#bae6ff\", \"#82cfff\", \"#33b1ff\", \"#1192e8\", \"#0072c3\", \"#00539a\", \"#003a6d\", \"#012749\", \"#061727\", \"#000000\"],\r\n success: [\"#ffffff\", \"#defbe6\", \"#a7f0ba\", \"#6fdc8c\", \"#42be65\", \"#24a148\", \"#198038\", \"#0e6027\", \"#044317\", \"#022d0d\", \"#071908\", \"#000000\"],\r\n neutral: [\"#ffffff\", \"#f4f4f4\", \"#e0e0e0\", \"#c6c6c6\", \"#a8a8a8\", \"#8d8d8d\", \"#6f6f6f\", \"#525252\", \"#393939\", \"#262626\", \"#161616\", \"#000000\"],\r\n },\r\n baseTones: {\r\n highlight: 3,\r\n warning: 4,\r\n error: 5,\r\n secondary: 5,\r\n primary: 6,\r\n info: 5,\r\n success: 5,\r\n neutral: 5,\r\n },\r\n fontSizes: [\"0.75rem\", \"0.875rem\", \"1rem\", \"1.25rem\", \"1.5625rem\", \"1.9375rem\", \"2.4375rem\", \"3.0625rem\"],\r\n// pixels: 12 | 14 | 16 | 20 | 25 | 31 | 39 | 49\r\n custom: {},\r\n}\r\n\r\nexport default light\r\n","import { ElementNode, Listener } from \"@domphy/core\";\nimport { ThemeInput, ThemeVars } from \"./types.js\";\nimport light from \"./light.js\";\n\nconst themes: Record<string, ThemeInput> = {\n light: JSON.parse(JSON.stringify(light)),\n dark: createDark(light),\n};\n\n// --- Validation ---\n\nfunction validateTheme(partial: Partial<ThemeInput>): void {\n for (let key in partial) {\n if (!Object.keys(light).includes(key as keyof ThemeInput)) {\n throw new Error(`Invalid key: ${key}`);\n }\n }\n if (partial.fontSizes && !Array.isArray(partial.fontSizes)) {\n throw new Error(`fontSize must be array of string`);\n }\n if (\"custom\" in partial) {\n const custom = partial.custom!;\n if (typeof custom !== \"object\" || custom === null) {\n throw new Error(`Invalid custom property: must be an object`);\n }\n }\n}\n\n// --- Deep Merge ---\n\nfunction deepMerge(target: any, source: any): void {\n for (const key in source) {\n if (\n source[key] &&\n typeof source[key] === \"object\" &&\n !Array.isArray(source[key])\n ) {\n target[key] ??= {};\n deepMerge(target[key], source[key]);\n } else {\n target[key] = source[key];\n }\n }\n}\n\n// --- Builders (pure functions) ---\n\nfunction buildThemeCSS(name: string, input: ThemeInput): string {\n const styles: Record<string, string | number> = {};\n\n for (const key in input) {\n const value = input[key as keyof ThemeInput];\n\n if (key === \"colors\") {\n for (const colorName in input.colors) {\n [...Array(12).keys()].forEach(i =>\n styles[`--${colorName}-${i}`] = input.colors[colorName][i]\n );\n }\n } else if (key === \"fontSizes\") {\n [...Array(8).keys()].forEach(i =>\n styles[`--fontSize-${i}`] = input.fontSizes[i]\n );\n } else {\n if (typeof value === \"object\" && value !== null) {\n for (const k in value) {\n styles[`--${key}-${k.replace(\"/\", \"_\")}`] = (value as Record<string, string>)[k];\n }\n }\n }\n }\n\n let text = \"\";\n for (const prop in styles) {\n text += ` ${prop}: ${styles[prop]};\\n`;\n }\n return `[data-theme=\"${name}\"] {\\n${text}}`;\n}\n\n// --- Public API ---\n\nexport function getTheme(name: string): ThemeInput {\n if (!themes[name]) throw Error(`Theme \"${name}\" not found`);\n return themes[name];\n}\n\nexport function setTheme(name: string, input: Partial<ThemeInput>): void {\n validateTheme(input);\n if (!themes[name]) themes[name] = structuredClone(light);\n deepMerge(themes[name], input);\n}\n\nexport function createDark(source: ThemeInput): ThemeInput {\n let dark = structuredClone(source)\n dark.direction = \"lighten\"\n for (let name in dark.colors) {\n dark.colors[name].reverse()\n dark.baseTones[name] = 12 - 1 - dark.baseTones[name]\n }\n return dark\n}\n\nexport function themeTokens(name: string): Record<string, any> {\n let input = getTheme(name)\n let tokens: Record<string, any> = {};\n\n for (const key in input) {\n const value = input[key as keyof ThemeInput];\n\n if (key === \"colors\") {\n for (const name in input.colors) {\n let colorTones = {} as Partial<Record<number, string>>;\n [...Array(12).keys()].forEach(i => colorTones[i] = input.colors[name][i]);\n tokens[name] = colorTones as Record<number, string>;\n }\n } else if (key === \"fontSizes\") {\n tokens.fontSizes = input.fontSizes;\n } else {\n tokens[key] = {} as any;\n if (typeof value === \"object\" && value !== null) {\n for (const k in value) {\n tokens[key][k] = (value as Record<string, string>)[k];\n }\n }\n }\n }\n\n return tokens;\n}\n\nexport function themeVars(): ThemeVars {\n let input = getTheme(\"light\")\n let theme = {} as ThemeVars;\n\n for (const key in input) {\n const section = key as keyof ThemeVars;\n const value = input[key as keyof ThemeInput];\n\n if (key === \"colors\") {\n for (const name in input.colors) {\n let colorTones = {} as Partial<Record<number, string>>;\n [...Array(12).keys()].forEach(i => colorTones[i] = `var(--${name}-${i})`);\n theme[name] = colorTones as Record<number, string>;\n }\n } else if (key === \"fontSizes\") {\n theme.fontSizes = [...Array(8).keys()].map(i => `var(--fontSize-${i})`);\n } else {\n theme[section] = {} as ThemeVars[typeof section];\n if (typeof value === \"object\" && value !== null) {\n for (const k in value) {\n (theme[section] as Record<string, string>)[k] = `var(--${section as string}-${k.replace(\"/\", \"_\")})`;\n }\n }\n }\n }\n\n return theme;\n}\n\nexport function themeCSS(): string {\n return Object.entries(themes)\n .map(([name, input]) => buildThemeCSS(name, input))\n .join(\"\\n\")\n}\n\nexport function themeApply(el?: HTMLStyleElement): void {\n if (typeof document === \"undefined\") return\n if (el) {\n el.textContent = themeCSS()\n return\n } else {\n el = document.getElementById(\"domphy-themes\") as HTMLStyleElement\n ?? Object.assign(document.createElement(\"style\"), { id: \"domphy-themes\" })\n el.textContent = themeCSS()\n document.head.appendChild(el)\n }\n\n}\n\nexport function themeSpacing(n: number) {\n return n / 4 + \"em\"\n}\n\nexport function themeName(object: ElementNode | Listener) {\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataTheme\"))) {\n node = node.parent as ElementNode\n }\n\n let themeName = \"light\"\n\n if (node.attributes && node.attributes.has(\"dataTheme\")) {\n themeName = node.attributes.get(\"dataTheme\")\n typeof object == \"function\" && node.attributes.onChange(\"dataTheme\", object)\n }\n return themeName\n}\n\nexport type ThemeColor = keyof ThemeInput[\"colors\"]","import type { ElementNode, Listener } from \"@domphy/core\";\r\nimport { themeVars } from \"./theme.js\";\r\n\r\nconst ElementSizes = [\"inherit\"];\r\n\r\n[...Array(8).keys()].forEach(i =>{\r\n ElementSizes.push(`decrease-${i}`)\r\n ElementSizes.push(`increase-${i}`)\r\n})\r\n\r\nexport type ElementSize = typeof ElementSizes[number];\r\n\r\nfunction offsetSize(origin: number, size: ElementSize = \"inherit\"): number {\r\n\r\n if (!ElementSizes.includes(size!)) {\r\n throw Error(`size name \"${size}\" invalid`)\r\n }\r\n let resultSize: number\r\n if (size == \"inherit\") {\r\n resultSize = origin as number\r\n } else if (size?.startsWith(\"increase-\")) {\r\n let offset = parseInt(size.replace(\"increase-\", \"\"), 10)\r\n resultSize = origin + offset;\r\n } else if (size?.startsWith(\"decrease-\")) {\r\n let offset = parseInt(size.replace(\"decrease-\", \"\"), 10)\r\n resultSize = origin - offset;\r\n } else {\r\n resultSize = origin\r\n }\r\n return Math.max(0, Math.min(8, resultSize))\r\n}\r\n\r\nfunction contextSize(object: ElementNode | Listener | null): number {\r\n\r\n if (!object) return 2\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(\"dataSize\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let size = 2\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataSize\")) {\r\n size = offsetSize(size, node.attributes.get(\"dataSize\"))\r\n typeof object == \"function\" && node.attributes.onChange(\"dataSize\", object)\r\n }\r\n return size\r\n}\r\n\r\n\r\nexport function themeSize(object: ElementNode | Listener, size: ElementSize = \"inherit\"): string {\r\n let index = offsetSize(contextSize(object), size)\r\n return themeVars().fontSizes[index]\r\n}","import { themeVars, getTheme, themeName } from \"./theme.js\"\r\nimport type { Listener, ElementNode } from \"@domphy/core\";\r\n\r\nconst TONE_STEPS = 12\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 newIndex = tone <= 5 ? 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.onChange(\"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\nexport function contextColor(object: ElementNode | Listener, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n\r\n let themeColor = color == \"inherit\" ? elementNode.getContext(\"themeColor\") || \"neutral\" : color;\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 resultTone = offsetTone(contextTone(object), tone)\r\n }\r\n let resultColor = themeVars()[themeColor][resultTone]\r\n\r\n return resultColor\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 resultTone = themeTone(object, tone)\r\n }\r\n let resultColor = themeVars()[themeColor][resultTone]\r\n\r\n return resultColor\r\n}\r\n","export * from \"./patches.js\"\nexport * from \"./classes.js\"\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSpacing } from \"@domphy/theme\";\n\nfunction abbreviation(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\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 color: (listener) => themeColor(listener, \"shift-7\", color),\n textDecorationLine: \"underline\",\n textDecorationStyle: \"dotted\",\n textDecorationColor: (listener) => themeColor(listener, \"shift-4\", color),\n textUnderlineOffset: themeSpacing(0.72),\n cursor: \"help\",\n \"&:hover\": {\n color: (listener) => themeColor(listener, \"shift-8\", accentColor),\n textDecorationColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\n },\n },\n };\n}\n\nexport { abbreviation };\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction card(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n return {\r\n style: {\r\n display: \"grid\",\r\n gridTemplateColumns: \"1fr auto\",\r\n gridTemplateAreas: '\"image image\" \"title aside\" \"desc aside\" \"content content\" \"footer footer\"',\r\n borderRadius: themeSpacing(2),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n outlineOffset: \"-1px\",\r\n overflow: \"hidden\",\r\n \"& > img\": {\r\n gridArea: \"image\",\r\n width: \"100%\",\r\n height: \"auto\",\r\n display: \"block\",\r\n },\r\n \"& > :is(h1,h2,h3,h4,h5,h6)\": {\r\n gridArea: \"title\",\r\n paddingBlock: themeSpacing(2),\r\n paddingInline: themeSpacing(4),\r\n fontWeight: \"600\",\r\n margin: 0\r\n },\r\n \"& > p\": {\r\n gridArea: \"desc\",\r\n paddingInline: themeSpacing(4),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n margin: 0\r\n },\r\n \"& > aside\": {\r\n gridArea: \"aside\",\r\n alignSelf: \"center\",\r\n padding: themeSpacing(2),\r\n height: \"auto\",\r\n },\r\n \"& > div\": {\r\n gridArea: \"content\",\r\n padding: themeSpacing(4),\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n },\r\n \"& > footer\": {\r\n gridArea: \"footer\",\r\n display: \"flex\",\r\n gap: themeSpacing(2),\r\n paddingBlock: themeSpacing(2),\r\n paddingInline: themeSpacing(4),\r\n borderTop: (listener) => `1px solid ${themeColor(listener, \"shift-2\", color)}`,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { card };\r\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.onChange((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),\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, 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: themeSpacing(3),\r\n paddingBlock: themeSpacing(2),\r\n border: \"none\",\r\n borderBottom: (listener) => `1px solid ${themeColor(listener, \"shift-2\", color)}`,\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&::placeholder\": {\r\n color: (listener) => themeColor(listener, \"shift-4\"),\r\n },\r\n \"&:focus-visible\": {\r\n borderBottomColor: (listener) => themeColor(listener, \"shift-5\", 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.onChange((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: themeSpacing(8),\r\n paddingInline: themeSpacing(3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\n },\r\n },\r\n };\r\n}\r\n\r\nexport { command, commandSearch, commandItem };\r\n","import { type PartialElement, type ElementNode } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction toggle(props: {\r\n color?: ThemeColor;\r\n accentColor?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n return {\r\n role: \"button\",\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"button\") {\r\n console.warn(`\"toggle\" patch must use button tag`);\r\n }\r\n const ctx = node.getContext(\"toggleGroup\");\r\n const children = node.parent?.children.items as ElementNode[]\r\n\r\n let items = children.filter(n => n.type === \"ElementNode\" && n.attributes.get(\"role\") === \"button\");\r\n const key = String(items.findIndex(n => n === node));\r\n\r\n node.attributes.set(\"ariaPressed\", (listener) => {\r\n const val = ctx.value.get(listener);\r\n return Array.isArray(val) ? val.includes(key) : val === key;\r\n })\r\n\r\n node.addEvent(\"click\", () => {\r\n const val = ctx.value.get();\r\n if (ctx.multiple) {\r\n const arr = Array.isArray(val) ? [...val] : [];\r\n ctx.value.set(arr.includes(key) ? arr.filter(v => v !== key) : [...arr, key]);\r\n } else {\r\n ctx.value.set(val === key ? \"\" : key);\r\n }\r\n })\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: themeSpacing(6),\r\n paddingBlock: themeSpacing(1),\r\n paddingInline: themeSpacing(2),\r\n border: \"none\",\r\n borderRadius: themeSpacing(1),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n transition:\"background-color 300ms ease\",\r\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&[aria-pressed=true]\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { toggle };\r\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 dataTone: \"shift-1\",\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-1\", 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(8) + \"!important\",\r\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\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction alert(props: {\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"primary\" } = props;\r\n\r\n return {\r\n role: \"alert\",\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: themeSpacing(3),\r\n paddingBlock: themeSpacing(2),\r\n paddingInline: themeSpacing(4),\r\n boxShadow: (listener) => `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-5\", color)}`,\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n },\r\n };\r\n}\r\n\r\nexport { alert };\r\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction avatar(props: {\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"primary\" } = props;\r\n\r\n return {\r\n style: {\r\n position: \"relative\",\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n overflow: \"hidden\",\r\n borderRadius: \"50%\",\r\n flexShrink: 0,\r\n width: themeSpacing(8),\r\n height: themeSpacing(8),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n fontWeight: \"600\",\r\n userSelect: \"none\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color),\r\n color: (listener) => themeColor(listener, \"shift-8\", color),\r\n \"& img\": {\r\n position: \"absolute\",\r\n inset: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"cover\",\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { avatar };\r\n","\r\nimport { type DomphyElement, type PartialElement, type ValueOrState, toState } from '@domphy/core'\r\nimport { themeSpacing, themeColor, themeSize, ThemeColor } from \"@domphy/theme\"\r\n\r\nfunction badge(props: {\r\n color?: ThemeColor\r\n label?: ValueOrState<string | number>\r\n} = {}): PartialElement {\r\n const { color = \"danger\", label = 999 } = props\r\n let state = toState(label)\r\n return {\r\n style: {\r\n position: \"relative\",\r\n \"&::after\": {\r\n content: (l) => `\"${state.get(l)}\"`,\r\n position: \"absolute\",\r\n top: 0,\r\n right: 0,\r\n transform: \"translate(50%,-50%)\",\r\n paddingInline:themeSpacing(1),\r\n minWidth:themeSpacing(6),\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent:\"center\",\r\n fontSize: (l) => themeSize(l, \"decrease-1\"),\r\n borderRadius: themeSpacing(999),\n backgroundColor: (l) => themeColor(l, \"shift-6\", color),\r\n color: (l) => themeColor(l, \"shift-0\", color),\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { badge };\r\n","import type { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction breadcrumb(props: {\r\n color?: ThemeColor;\r\n separator?: string;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", separator = \"/\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"nav\") console.warn('\"breadcrumb\" patch must use nav tag');\r\n },\r\n ariaLabel: \"breadcrumb\",\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n flexWrap: \"wrap\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n gap: themeSpacing(1),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"& > *\": {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n color: (listener) => themeColor(listener, \"shift-5\", color),\r\n },\r\n \"& > *:not(:last-child)::after\": {\r\n content: `\"${separator}\"`,\r\n color: (listener) => themeColor(listener, \"shift-3\", color),\r\n paddingInlineStart: themeSpacing(1),\r\n },\r\n \"& > [aria-current=page]\": {\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n pointerEvents: \"none\",\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { breadcrumb };\r\n","import type { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction breadcrumbEllipsis(props: {\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"button\") {\r\n console.warn('\"breadcrumbEllipsis\" patch must use button tag');\r\n }\r\n },\r\n ariaLabel: \"More breadcrumb items\",\r\n style: {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n paddingInline: themeSpacing(1),\r\n border: \"none\",\r\n background: \"none\",\r\n cursor: \"pointer\",\r\n color: (listener) => themeColor(listener, \"shift-5\", color),\r\n borderRadius: themeSpacing(1),\r\n \"&:hover\": {\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", color)}`,\n outlineOffset: themeSpacing(0.5),\n },\r\n },\r\n };\r\n}\r\n\r\nexport { breadcrumbEllipsis };\r\n","import type { PartialElement, DomphyElement } 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?: ThemeColor\n removable?: boolean\n} = {}): PartialElement {\n const { color = \"neutral\", removable=false } = props;\n\n return {\n dataTone: \"shift-1\",\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-3\", color),\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),\n color: (listener) => themeColor(listener, \"shift-6\", color),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\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};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\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}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n return yAxisSides.has(getSide(placement)) ? '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.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\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 return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\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/**\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 validMiddleware = middleware.filter(Boolean);\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 middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n var _platform$detectOverf;\n const {\n name,\n fn\n } = validMiddleware[i];\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: {\n ...platform,\n detectOverflow: (_platform$detectOverf = platform.detectOverflow) != null ? _platform$detectOverf : detectOverflow\n },\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\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}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\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) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n return topLayerSelectors.some(selector => {\n try {\n return element.matches(selector);\n } catch (_e) {\n return false;\n }\n });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\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 transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\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 (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n return lastTraversableNodeNames.has(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 }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\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 (isHTMLElement(offsetParent)) {\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\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\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 && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || 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 firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.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) : []), ...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) {\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 resizeObserver.observe(floating);\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, PartialElement, DomphyElement, toState, ValueOrState, merge } from \"@domphy/core\";\nimport { computePosition, autoUpdate, offset, flip, shift, type Placement } from \"@floating-ui/dom\";\n\nfunction creatFloating(props: {\n open?: ValueOrState<boolean>;\n placement?: ValueOrState<Placement>;\n content: DomphyElement;\n onPlacement?: (anchor: HTMLElement, popover: HTMLElement, placement: Placement) => void;\n}) {\n const {\n open = false,\n placement = \"bottom\",\n } = props;\n\n let timer: ReturnType<typeof setTimeout> | null = null;\n let cleanup: (() => void) | null = null;\n let reference: HTMLElement | null = null\n let floating: HTMLElement | null = null\n const openState = toState(open);\n const placeState = toState(placement);\n\n const instantShow = () => {\n if (reference && floating) {\n cleanup && cleanup();\n cleanup = autoUpdate(reference, floating, () => {\n computePosition(reference as HTMLElement, floating as HTMLElement, {\n placement: placeState.get() as Placement,\n middleware: [offset(12), flip(), shift()],\n strategy: \"fixed\"\n }).then(({ x, y, placement: computedPlacement }) => {\n Object.assign((floating as HTMLElement).style, { left: `${x}px`, top: `${y}px` });\n computedPlacement !== placeState.get() && placeState.set(computedPlacement)\n props.onPlacement?.(reference!, floating!, computedPlacement)\n });\n });\n openState.set(true)\n }\n };\n const instantHide = () => { cleanup && cleanup(); cleanup = null; openState.set(false) }\n const show = () => { timer && clearTimeout(timer); timer = setTimeout(instantShow, 100) }\n const hide = () => { timer && clearTimeout(timer); timer = setTimeout(instantHide, 100) }\n\n const floatingPartial: PartialElement = {\n style: {\n position: \"fixed\",\n pointerEvents: \"auto\",\n visibility: (listener) => openState.get(listener) ? \"visible\" : \"hidden\",\n\n },\n _onMount: (node) => floating = node.domElement as HTMLElement,\n\n _portal: (rootNode) => {\n let overlay = rootNode.domElement!.querySelector(`#domphy-floating`);\n if (!overlay) {\n const overlayEle: DomphyElement<\"div\"> = {\n div: [],\n id: `domphy-floating`,\n style: { position: \"fixed\", inset: 0, zIndex: 20, pointerEvents: \"none\" },\n };\n const overlayNode = rootNode.children!.insert(overlayEle) as ElementNode;\n overlay = overlayNode.domElement!;\n }\n return overlay;\n },\n };\n\n merge(props.content, floatingPartial);\n\n const anchorPartial: PartialElement = {\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\n _onSchedule: (node) => {\n let floatingNode: ElementNode | null = null\n node.getRoot().addHook(\"Init\", (root) => {\n floatingNode = root.children!.insert(props.content) as ElementNode\n })\n node.addHook(\"BeforeRemove\", () => {\n hide();\n if (timer) clearTimeout(timer);\n floatingNode && floatingNode.remove();\n });\n },\n _onMount: (node) => {\n reference = node.domElement as HTMLElement\n const handleOutside = (event: MouseEvent) => {\n if (!openState.get() || !reference || !floating) return;\n\n const target = event.target as Node;\n if (!reference.contains(target) && !floating.contains(target)) {\n hide()\n }\n }\n node.getRoot().domElement!.addEventListener(\"click\", handleOutside)\n node.addHook(\"BeforeRemove\", () => node.getRoot().domElement!.removeEventListener(\"click\", handleOutside));\n }\n };\n\n return { show, hide, anchorPartial };\n}\n\nexport { creatFloating };\n","import { type PartialElement, type DomphyElement, type StyleObject, type ValueOrState, toState, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, 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 onPlacement?: (anchor: HTMLElement, popover: HTMLElement, placement: Placement) => void;\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, content: props.content, onPlacement: props.onPlacement })\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-6\", 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-3\", \"neutral\")}`,\r\n paddingBlock: themeSpacing(1),\r\n paddingInline: themeSpacing(1),\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", 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, type ThemeColor } from \"@domphy/theme\";\r\nimport { 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 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 const flipPlace = toState(flipMap[place.get()])\r\n place.onChange(val => flipPlace.set(flipMap[val as Placement]))\r\n\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 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 ? \"0px\" :\"1px\",\r\n borderColor: (listener) => themeColor(listener, \"inherit\", color),\r\n borderTopStyle: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"top\") || pos.includes(\"right\") ? `solid` : \"none\"\r\n },\r\n borderBottomStyle: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"bottom\") || pos.includes(\"left\") ? `solid` : \"none\"\r\n },\r\n borderLeftStyle: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"top\") || pos.includes(\"left\") ? `solid` : \"none\"\r\n },\r\n borderRightStyle: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"bottom\") || pos.includes(\"right\") ? `solid` : \"none\"\r\n },\r\n top: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"top\") ? 0 : pos.includes(\"bottom\") ? \"auto\" : start(pos)\r\n },\r\n right: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"right\") ? 0 : pos.includes(\"left\") ? \"auto\" : end(pos)\r\n },\r\n bottom: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"bottom\") ? 0 : pos.includes(\"top\") ? \"auto\" : end(pos)\r\n },\r\n left: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"left\") ? 0 : pos.includes(\"right\") ? \"auto\" : start(pos)\r\n },\r\n transform: (listener) => {\r\n const pos = flipPlace.get(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 } from \"@domphy/core\";\nimport { themeSpacing, ThemeColor, themeColor, themeSize } from \"@domphy/theme\";\n\nfunction blockquote(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"inherit\" } = props;\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"blockquote\") {\n console.warn(`\"blockquote\" primitive patch must use blockquote tag`);\n }\n },\n dataTone: \"shift-1\",\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n boxShadow: (listener) => `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-3\", color)}`,\n border: \"none\",\n paddingBlock: themeSpacing(2),\n paddingInline: themeSpacing(4),\n margin: 0,\n },\n };\n}\n\nexport { blockquote };\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeSize, type ThemeColor, } from \"@domphy/theme\";\r\n\r\nfunction button(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"primary\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"button\") {\r\n console.warn(`\"button\" primitive patch must use button tag`);\r\n }\r\n },\r\n style: {\r\n appearance: \"none\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n paddingBlock: themeSpacing(1),\r\n paddingInline: themeSpacing(3),\r\n borderRadius: themeSpacing(2),\r\n width: \"fit-content\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n userSelect: \"none\",\r\n fontFamily: \"inherit\",\r\n lineHeight: \"inherit\",\r\n border: \"none\",\r\n outlineOffset: \"-1px\",\r\n outlineWidth: \"1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&:focus-visible\": {\r\n boxShadow: (listener) => `inset 0 0 0 ${themeSpacing(0.5)} ${themeColor(listener, \"shift-6\", color)}`,\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n },\r\n \"&[aria-busy=true]\": {\r\n opacity: 0.7,\r\n cursor: \"wait\",\r\n pointerEvents: \"none\",\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { button };\r\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction inputCheckbox(props: { color?: ThemeColor, accentColor?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\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)}`,\n color: (listener) => themeColor(listener, \"shift-6\", color),\n width: themeSpacing(4),\n height: themeSpacing(4),\n },\n \"&:hover::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\n },\n \"&:checked::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-5\", accentColor),\n },\n \"&:checked:hover:not([disabled])::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", accentColor),\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)}`,\n borderTop: 0,\n borderInlineStart: 0,\n transform: \"rotate(45deg)\",\n },\n \"&:indeterminate::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", accentColor)}`,\n backgroundColor: (listener) => themeColor(listener, \"inherit\", accentColor),\n },\n \"&:indeterminate::after\": {\n content: `\"\"`,\n position: \"absolute\",\n inset: \"30%\",\n backgroundColor: (listener) => themeColor(listener, \"shift-5\", accentColor),\n },\n \"&:indeterminate:hover:not([disabled])::after\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", accentColor),\n },\n \"&:focus-visible\": {\n borderRadius: themeSpacing(1.5),\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n },\n \"&[disabled]\": {\n cursor: \"not-allowed\",\n },\n \"&[disabled]::before, &[disabled]::after\": {\n outline: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", \"neutral\"),\n pointerEvents: \"none\",\n },\n }\n }\n}\n\nexport { inputCheckbox };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeSpacing, themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction code(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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-6\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n height: themeSpacing(6),\n paddingInline: themeSpacing(1.5),\n borderRadius: themeSpacing(1),\n },\n };\n}\n\nexport { code };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction details(\n props: { color?: ThemeColor; accentColor?: ThemeColor; duration?: number } = {}\n): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\", duration = 240 } = props;\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-6\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n \n overflow: \"hidden\",\n \"& > summary\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\n color: (listener) => themeColor(listener, \"shift-7\", color),\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: themeSpacing(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-6\", color)}`,\n borderBottom: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", color)}`,\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-2\", color),\n },\n \"& > summary:focus-visible\": {\n borderRadius: themeSpacing(2),\n outlineOffset: `-${themeSpacing(0.5)}`,\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n },\n \"& > :not(summary)\": {\n maxHeight: \"0px\",\n opacity: 0,\n overflow: \"hidden\",\n paddingInline: themeSpacing(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: themeSpacing(1),\n paddingBottom: themeSpacing(3),\n },\n },\n };\n}\n\nexport { details };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction descriptionList(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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-7\", color),\n },\n \"& dd\": {\n margin: 0,\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-6\", color),\n },\n },\n };\n}\n\nexport { descriptionList };\n","import { type PartialElement, type ValueOrState, toState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction dialog(props: { color?: ThemeColor; open?: ValueOrState<boolean> } = {}): PartialElement {\n const { color = \"neutral\", open = false } = props;\n const state = toState(open)\n return {\n _onInsert: (node) => {\n if (node.tagName != \"dialog\") {\n console.warn(`\"dialog\" primitive patch must use dialog tag`);\n }\n },\n onClick: (e: MouseEvent, node) => {\n if (e.target !== node.domElement) return\n const r = node.domElement!.getBoundingClientRect()\n const inside =\n e.clientX >= r.left &&\n e.clientX <= r.right &&\n e.clientY >= r.top &&\n e.clientY <= r.bottom\n if (!inside) state.set(false)\n },\n onTransitionEnd: (_e, node) => {\n const dlg = node.domElement as HTMLDialogElement\n if (dlg.style.opacity === \"0\") {\n dlg.close()\n document.body.style.overflow = \"\"\n }\n },\n _onMount: (node) => {\n const dlg = node.domElement as HTMLDialogElement\n const update = (val: boolean) => {\n if (val) {\n dlg.showModal()\n document.body.style.overflow = \"hidden\"\n requestAnimationFrame(() => {\n dlg.style.opacity = \"1\"\n const focusable = dlg.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n focusable?.focus()\n })\n } else {\n dlg.style.opacity = \"0\"\n }\n }\n update(state.get())\n state.onChange(update)\n },\n style: {\n opacity: \"0\",\n transition: \"opacity 200ms ease\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-7\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n border: \"none\",\n padding: themeSpacing(3),\n boxShadow: (listener) => `0 ${themeSpacing(8)} ${themeSpacing(16)} ${themeColor(listener, \"shift-3\", \"neutral\")}`,\n \"&::backdrop\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\n opacity: 0.75,\n }\n },\n };\n}\n\nexport { dialog };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction emphasis(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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-7\", color),\n },\n };\n}\n\nexport { emphasis };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction figure(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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-6\", color),\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-5\", color),\n lineHeight: 1.45,\n },\n },\n };\n}\n\nexport { figure };\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, themeSize, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction formGroup(props: { color?: ThemeColor; layout?: \"horizontal\" | \"vertical\" } = {}): PartialElement {\r\n const { color = \"neutral\", layout = \"horizontal\" } = props;\r\n\r\n const isVertical = layout === \"vertical\";\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"fieldset\") {\r\n console.warn(`\"formGroup\" patch must use fieldset tag`);\r\n }\r\n },\r\n style: {\r\n margin: 0,\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(3),\r\n border: \"none\",\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n display: \"grid\",\r\n gridTemplateColumns: isVertical ? `minmax(0, 1fr)` : `max-content minmax(0, 1fr)`,\r\n columnGap: themeSpacing(4),\r\n rowGap: themeSpacing(3),\r\n alignItems: \"start\",\r\n \"& > legend\": {\r\n gridColumn: \"1 / -1\",\r\n margin: 0,\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n fontWeight: 600,\r\n paddingBlock: themeSpacing(1),\r\n borderRadius: themeSpacing(2),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n },\r\n \"& > label\": {\r\n gridColumn: \"1\",\r\n alignSelf: \"start\",\r\n margin: 0,\r\n paddingBlock: isVertical ? 0 : themeSpacing(1),\r\n },\r\n \"& > label:has(+ :not(legend, label, p) + p)\": {\r\n gridRow: isVertical ? \"auto\" : \"span 2\",\r\n },\r\n \"& > :not(legend, label, p)\": {\r\n gridColumn: isVertical ? \"1\" : \"2\",\r\n minWidth: 0,\r\n width: \"100%\",\r\n boxSizing: \"border-box\",\r\n },\r\n \"& > p\": {\r\n gridColumn: isVertical ? \"1\" : \"2\",\r\n minWidth: 0,\r\n margin: 0,\r\n marginBlockStart: `calc(${themeSpacing(2)} * -1)`,\r\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { formGroup };\r\n","import { PartialElement } 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?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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-8\", color),\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 } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction horizontalRule(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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-3\", color),\n },\n };\n}\n\nexport { horizontalRule };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction image(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\n\n return {\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, \"shift-1\", color),\n },\n };\n}\n\nexport { image };\n","import type { PartialElement } from \"@domphy/core\";\nimport { themeSpacing } from \"@domphy/theme\";\n\nfunction icon(): PartialElement {\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 verticalAlign: \"middle\",\n width: themeSpacing(6),\n height: themeSpacing(6),\n },\n };\n}\n\nexport { icon };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, themeSize, type ThemeColor } from \"@domphy/theme\";\n\nfunction inputColor(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\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: themeSpacing(1),\n paddingInline: themeSpacing(1),\n blockSize: themeSpacing(8),\n inlineSize: themeSpacing(8),\n backgroundColor: \"transparent\",\n \"&::-webkit-color-swatch-wrapper\": {\n margin: 0,\n padding: 0,\n },\n \"&::-webkit-color-swatch\": {\n borderRadius: themeSpacing(1),\n },\n \"&::-moz-color-swatch\": {\n borderRadius: themeSpacing(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-1\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\n },\n },\n };\n}\n\nexport { inputColor };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\ntype InputDateTimeMode = \"date\" | \"time\" | \"week\" | \"month\" | \"datetime-local\";\n\nfunction inputDateTime(\n props: { mode?: InputDateTimeMode; color?: ThemeColor; accentColor?: ThemeColor } = {}\n): PartialElement {\n const { mode = \"datetime-local\", color = \"neutral\", accentColor = \"primary\" } = props;\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-6\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\n borderRadius: themeSpacing(2),\n paddingInline: themeSpacing(3),\n height: themeSpacing(8),\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-5\", accentColor)}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\n },\n \"&:invalid\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"error\")}`,\n },\n },\n };\n}\n\nexport { inputDateTime };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputFile(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\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 fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-6\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\n borderRadius: themeSpacing(2),\n height: themeSpacing(8),\n paddingInline: themeSpacing(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-7\", accentColor),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", accentColor),\n },\n \"&::-webkit-file-upload-button\": {\n marginTop: themeSpacing(1),\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-7\", color),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"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-5\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\n },\n },\n };\n}\n\nexport { inputFile };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputSearch(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\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-6\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\n borderRadius: themeSpacing(2),\n minWidth: themeSpacing(32),\n paddingInline: themeSpacing(3),\n paddingBlock: themeSpacing(1),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-4\", color),\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-5\", accentColor)}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\n },\n },\n };\n}\n\nexport { inputSearch };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction inputText(props: { color?: ThemeColor, accentColor?: ThemeColor } = {}): PartialElement {\n let {\n color = \"neutral\",\n accentColor = \"primary\",\n } = props;\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(32),\n paddingInline: themeSpacing(3),\n paddingBlock: themeSpacing(1),\n borderRadius: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\n color: (listener) => themeColor(listener, \"shift-6\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-4\"),\n },\n \"&:not(:placeholder-shown)\": {\n color: (listener) => themeColor(listener, \"shift-7\"),\n },\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\n\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\n },\n \"&:invalid:not(:placeholder-shown)\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"error\")}`,\n },\n \"&[data-status=error]\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"error\")}`,\n },\n \"&[data-status=warning]\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"warning\")}`,\n },\n },\n };\n}\n\nexport { inputText };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction inputRange(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\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-2\", color),\n },\n \"&::-moz-range-track\": {\n height: themeSpacing(1.5),\n borderRadius: themeSpacing(999),\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\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-6\", accentColor),\n },\n \"&::-moz-range-thumb\": {\n width: themeSpacing(4),\n height: themeSpacing(4),\n borderRadius: themeSpacing(999),\n border: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\n },\n \"&:hover:not([disabled])::-webkit-slider-thumb\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor),\n },\n \"&:hover:not([disabled])::-moz-range-thumb\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor),\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", accentColor)}`,\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 } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction inputNumber(props: { color?: ThemeColor, accentColor?: ThemeColor } = {}): PartialElement {\r\n const {\r\n color = \"neutral\",\r\n accentColor = \"primary\",\r\n } = props;\r\n\r\n return {\r\n type: \"number\",\r\n _onSchedule: (node, element) => {\r\n if (node.tagName != \"input\") {\r\n console.warn(`\"inputNumber\" primitive patch must use input tag`);\r\n }\r\n (element as any).type = \"number\";\r\n },\r\n style: {\r\n fontFamily: \"inherit\",\r\n lineHeight: \"inherit\",\r\n minWidth: themeSpacing(32),\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(1),\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n border: \"none\",\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button\": {\r\n opacity: 1,\r\n },\r\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { inputNumber };\r\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction keyboard(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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-6\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n paddingBlock: themeSpacing(0.5),\n paddingInline: themeSpacing(1.5),\n borderRadius: themeSpacing(1),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\n },\n };\n}\n\nexport { keyboard };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction label(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\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-6\", color),\n cursor: \"pointer\",\n \"&:focus-within\": {\n color: (listener) => themeColor(listener, \"shift-7\", accentColor),\n },\n \"&[aria-disabled=true]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\n },\n },\n };\n}\n\nexport { label };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSize,themeSpacing,type ThemeColor } from \"@domphy/theme\";\n\nfunction link(props: { color?: ThemeColor, accentColor?: ThemeColor } = {}): PartialElement {\n let {\n color = \"primary\",\n accentColor = \"secondary\",\n } = props\n return {\n _onInsert: (node) => {\n if (node.tagName != \"a\") {\n console.warn(`\"link\" primitive patch must use a tag`)\n }\n },\n style: {\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-6\", color),\n textDecoration: \"none\",\n \"&:visited\": {\n color: (listener) => themeColor(listener, \"shift-6\", accentColor),\n },\n \"&:hover:not([disabled])\": {\n color: (listener) => themeColor(listener, \"shift-7\", color),\n textDecoration: \"underline\",\n },\n \"&:focus-visible\": {\n borderRadius: themeSpacing(1),\n outlineOffset:themeSpacing(1),\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", accentColor)}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\n }\n },\n };\n}\n\nexport { link };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeSpacing, ThemeColor, ElementTone, themeSize, themeColor } from \"@domphy/theme\";\n\nfunction mark(props: { accentColor?: ThemeColor; tone?: ElementTone } = {}): PartialElement {\n const {\n accentColor = \"highlight\",\n tone = \"shift-1\",\n } = props;\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: tone,\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-6\", accentColor),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", accentColor),\n height: themeSpacing(6),\n borderRadius: themeSpacing(1),\n paddingInline: themeSpacing(1.5),\n },\n };\n}\n\nexport { mark };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction paragraph(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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-6\", color),\n lineHeight:1.5,\n marginTop: 0,\n marginBottom: 0,\n },\n };\n}\n\nexport { paragraph };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction preformated(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\n\n return {\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-6\", color),\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\n border: \"none\",\n paddingBlock: themeSpacing(2),\n paddingInline: themeSpacing(3),\n borderRadius: themeSpacing(2),\n },\n };\n}\n\nexport { preformated };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction progress(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\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-2\", color),\n \"&::-webkit-progress-bar\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\n borderRadius: themeSpacing(999),\n },\n \"&::-webkit-progress-value\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\n borderRadius: themeSpacing(999),\n transition: \"width 220ms ease\",\n },\n \"&::-moz-progress-bar\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\n borderRadius: themeSpacing(999),\n },\n },\n };\n}\n\nexport { progress };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction inputRadio(props: { color?: ThemeColor, accentColor?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\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)}`,\n color: (listener) => themeColor(listener, \"shift-6\", color),\n width: themeSpacing(4),\n height: themeSpacing(4)\n },\n \"&:hover::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\n },\n \"&:checked::before\": {\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n },\n \"&:checked::after\": {\n content: `\"\"`,\n position: \"absolute\",\n inset: \"30%\",\n borderRadius: \"50%\",\n backgroundColor: (listener) => themeColor(listener, \"shift-5\", accentColor),\n },\n \"&:checked:hover:not([disabled])::before\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", accentColor),\n },\n \"&:focus-visible\": {\n borderRadius: \"50%\",\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n },\n \"&[disabled]\": {\n cursor: \"not-allowed\",\n },\n \"&[disabled]::before, &[disabled]::after\": {\n outline: \"none\",\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", \"neutral\"),\n pointerEvents: \"none\",\n },\n }\n }\n}\n\nexport { inputRadio };\n","import { type PartialElement } from \"@domphy/core\";\nimport { type ThemeColor, themeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction select(\n props: { color?: ThemeColor; accentColor?: ThemeColor } = {}\n): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = props;\n\n return {\n _onInsert: (node) => {\n if (node.tagName != \"select\") {\n console.warn(`\"select\" primitive patch must use select tag`);\n }\n },\n style: {\n fontFamily: \"inherit\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n lineHeight: \"inherit\",\n color: (listener) => themeColor(listener, \"shift-6\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n border: \"none\",\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\n borderRadius: themeSpacing(2),\n paddingBlock: themeSpacing(1),\n paddingLeft: themeSpacing(3),\n paddingRight: themeSpacing(1),\n \"&:not([multiple])\": {\n height: themeSpacing(8),\n },\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", accentColor)}`,\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n },\n \"& optgroup\": {\n color: (listener) => themeColor(listener, \"shift-8\", color),\n },\n \"& option[disabled]\": {\n color: (listener) => themeColor(listener, \"shift-4\", \"neutral\"),\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\n }\n },\n };\n}\n\nexport { select };\n","import { type PartialElement, type StyleObject, hashString } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction skeleton(props: {\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n const keyframes = {\r\n \"0%,100%\": { opacity: 1 },\r\n \"50%\": { opacity: .4 }\r\n }\r\n const animationName = hashString(JSON.stringify(keyframes))\r\n return {\r\n ariaHidden: \"true\",\r\n style: {\r\n height: themeSpacing(6),\r\n display: \"block\",\r\n borderRadius: themeSpacing(1),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n animation: `${animationName} 1.5s ease-in-out infinite`,\r\n [`@keyframes ${animationName}`]: keyframes,\r\n } as StyleObject,\r\n };\r\n}\r\n\r\nexport { skeleton };\r\n","import type { PartialElement, StyleObject } from \"@domphy/core\";\r\nimport { hashString } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nconst keyframes = { to: { transform: \"rotate(360deg)\" } };\r\nconst animationName = hashString(JSON.stringify(keyframes));\r\n\r\nfunction spinner(props: {\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n role: \"status\",\r\n ariaLabel: \"loading\",\r\n _onInsert: (node) => {\r\n if (node.tagName != \"span\") {\r\n console.warn(`\"spinner\" patch must use span tag`);\r\n }\r\n },\r\n style: {\r\n display: \"inline-block\",\r\n margin: 0,\r\n flexShrink: 0,\r\n width: themeSpacing(6),\r\n height: themeSpacing(6),\r\n borderRadius: \"50%\",\r\n border: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-3\", color)}`,\r\n borderTopColor: (listener) => themeColor(listener, \"shift-6\", color),\r\n boxSizing: \"border-box\",\r\n padding: 0,\r\n animation: `${animationName} 0.7s linear infinite`,\r\n [`@keyframes ${animationName}`]: keyframes,\r\n } as StyleObject,\r\n\r\n };\r\n}\r\n\r\nexport { spinner };\r\n","import { PartialElement, DomphyElement, State } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\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-11\",\r\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: themeSpacing(2),\r\n paddingInline: themeSpacing(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 { selectList };\r\n","import { PartialElement, toState, type State } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeSize } from \"@domphy/theme\";\r\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: themeSpacing(8),\r\n paddingInline: themeSpacing(3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled]):not([aria-selected=true])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&[aria-selected=true]\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", accentColor),\r\n color: (listener) => themeColor(listener, \"shift-8\"),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\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, 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 onPlacement?: (anchor: HTMLElement, popover: HTMLElement, placement: Placement) => void;\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, content: props.content, onPlacement: props.onPlacement })\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: themeSpacing(8),\r\n minWidth: themeSpacing(32),\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n paddingInline: themeSpacing(2),\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", 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 } from \"@domphy/core\";\nimport { ThemeColor, themeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction inputSwitch(props: { accentColor?: ThemeColor } = {}): PartialElement {\n const { accentColor = \"primary\" } = props;\n\n return {\n dataTone: \"increase-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(8),\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),\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?: ThemeColor;\n color?: ThemeColor;\n} = {}): PartialElement {\n const {\n checked = false,\n accentColor = \"primary\",\n color = \"neutral\",\n } = props;\n\n const check = toState(checked);\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: \"increase-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-2\", color)}`,\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),\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-6\"),\n backgroundColor: (listener) => themeColor(listener, \"decrease-2\", color),\n },\n \"&[aria-checked=true]\": {\n backgroundColor: (listener) => themeColor(listener, \"increase-3\", accentColor),\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 } from \"@domphy/core\";\nimport { themeColor, ThemeColor, themeSize } from \"@domphy/theme\";\n\nfunction small(props: { color?: ThemeColor} = {}): PartialElement {\n const {\n color = \"neutral\",\n } = props;\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-6\", color),\n },\n };\n}\n\nexport { small };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction strong(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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-8\", color),\n },\n };\n}\n\nexport { strong };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction subscript(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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-6\", color),\n },\n };\n}\n\nexport { subscript };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction superscript(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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-6\", color),\n },\n };\n}\n\nexport { superscript };\n","import { type PartialElement, type DomphyElement } from \"@domphy/core\";\r\nimport { type ThemeColor, themeColor, themeSpacing, themeSize } from \"@domphy/theme\";\r\n\r\nfunction table(props: { color?: ThemeColor } = {}): PartialElement {\r\n const {\r\n color = \"neutral\",\r\n } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"table\") {\r\n console.warn(`\"table\" primitive patch must use table tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n \"& caption\": {\r\n captionSide: \"bottom\"\r\n },\r\n \"& th, & thead td\": {\r\n textAlign: \"left\",\r\n fontWeight: 500,\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(1),\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n },\r\n \"& td\": {\r\n textAlign: \"left\",\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(1),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n boxShadow: (listener) => `inset 0 1px 0 ${themeColor(listener, \"shift-3\", color)}`,\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n },\r\n \"& tfoot th, & tfoot td\": {\r\n textAlign: \"left\",\r\n fontWeight: 500,\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(1),\r\n color: (l) => themeColor(l, \"shift-7\", color),\r\n backgroundColor: (l) => themeColor(l, \"inherit\"),\r\n boxShadow: (l) => `inset 0 -1px 0 ${themeColor(l, \"shift-3\", color)}`\r\n },\r\n \"& tr\": {\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n },\r\n\r\n \"& tbody tr:hover\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\") + \"!important\",\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { table };\r\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\n\nfunction textarea(\n props: { color?: ThemeColor; accentColor?: ThemeColor } = {}\n): PartialElement {\n const { color = \"neutral\", accentColor = \"primary\" } = 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 style: {\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n resize: \"vertical\",\n paddingInline: themeSpacing(4),\n paddingBlock: themeSpacing(2),\n border:\"none\",\n borderRadius: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-6\", color),\n outlineOffset: \"-1px\",\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n \"&::placeholder\": {\n color: (listener) => themeColor(listener, \"shift-4\"),\n },\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", accentColor)}`,\n },\n \"&:focus-visible\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n },\n \"&:invalid\": {\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", \"error\")}`,\n },\n \"&[disabled]\": {\n opacity: 0.7,\n cursor: \"not-allowed\",\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\n }\n },\n };\n}\n\nexport { textarea };\n","import { PartialElement } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction unorderedList(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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 color: (listener) => themeColor(listener, \"shift-6\", color),\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 } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\n\nfunction orderedList(props: { color?: ThemeColor } = {}): PartialElement {\n const { color = \"neutral\" } = props;\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 color: (listener) => themeColor(listener, \"shift-6\", color),\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, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\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: themeSpacing(8),\r\n height: themeSpacing(8),\r\n paddingInline: themeSpacing(2),\r\n borderRadius: themeSpacing(2),\r\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-6\", color),\r\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener: any) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.4,\r\n cursor: \"not-allowed\",\r\n },\r\n };\r\n\r\n const activeStyle = {\r\n ...btnBase,\r\n backgroundColor: (listener: any) => themeColor(listener, \"shift-2\", accentColor),\r\n color: (listener: any) => themeColor(listener, \"shift-8\", accentColor),\r\n fontWeight: \"600\",\r\n cursor: \"default\",\r\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener: any) => themeColor(listener, \"shift-2\", accentColor),\r\n },\r\n };\r\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: themeSpacing(2), color: (listener: any) => themeColor(listener, \"shift-4\", color) } });\r\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 { themeColor, type ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\n\nfunction divider(props: {\n color?: ThemeColor;\n} = {}): PartialElement {\n const {\n color = \"neutral\",\n } = props;\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 minHeight: \"1lh\",\n \"&::before\": {\n content: `\"\"`,\n flex:1,\n borderColor: (listener) => themeColor(listener, \"shift-3\", color),\n borderWidth: \"1px\",\n borderBottomStyle: \"solid\",\n },\n \"&::after\": {\n content: `\"\"`,\n flex:1,\n borderColor: (listener) => themeColor(listener, \"shift-3\", color),\n borderWidth: \"1px\",\n borderBottomStyle: \"solid\",\n },\n },\n };\n}\n\nexport { divider };\n","import { type PartialElement, type ValueOrState, toState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\ntype Placement = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nconst translateOut: Record<Placement, string> = {\n left: \"translateX(-100%)\",\n right: \"translateX(100%)\",\n top: \"translateY(-100%)\",\n bottom: \"translateY(100%)\",\n};\n\nconst marginMap: Record<Placement, string> = {\n left: \"0 auto 0 0\",\n right: \"0 0 0 auto\",\n top: \"0 0 auto 0\",\n bottom: \"auto 0 0 0\",\n};\n\nconst isVertical = (p: Placement) => p === \"left\" || p === \"right\";\n\nfunction drawer(props: {\n color?: ThemeColor;\n open?: ValueOrState<boolean>;\n placement?: Placement;\n size?: string;\n} = {}): PartialElement {\n const { color = \"neutral\", open = false, placement = \"right\", size } = props;\n const state = toState(open);\n const defaultSize = isVertical(placement) ? themeSpacing(80) : themeSpacing(64);\n const drawerSize = size ?? defaultSize;\n\n return {\n _onInsert: (node) => {\n if (node.tagName !== \"dialog\") {\n console.warn(`\"drawer\" patch must use dialog tag`);\n }\n },\n onClick: (e: MouseEvent, node) => {\n if (e.target !== node.domElement) return;\n state.set(false);\n },\n onTransitionEnd: (_e, node) => {\n const dlg = node.domElement as HTMLDialogElement;\n if (!state.get()) {\n dlg.close();\n document.body.style.overflow = \"\";\n }\n },\n _onMount: (node) => {\n const dlg = node.domElement as HTMLDialogElement;\n const update = (val: boolean) => {\n if (val) {\n dlg.showModal();\n document.body.style.overflow = \"hidden\";\n requestAnimationFrame(() => { dlg.style.transform = \"translate(0, 0)\"; });\n } else {\n dlg.style.transform = translateOut[placement];\n }\n };\n update(state.get());\n state.onChange(update);\n },\n style: {\n transform: translateOut[placement],\n transition: \"transform 0.25s ease\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-7\", color),\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\n border: \"none\",\n padding: themeSpacing(3),\n margin: marginMap[placement],\n width: isVertical(placement) ? drawerSize : \"100dvw\",\n height: isVertical(placement) ? \"100dvh\" : drawerSize,\n maxWidth: \"100dvw\",\n maxHeight: \"100dvh\",\n boxShadow: (listener) => `0 ${themeSpacing(4)} ${themeSpacing(12)} ${themeColor(listener, \"shift-3\", \"neutral\")}`,\n \"&::backdrop\": {\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\n opacity: 0.75,\n },\n },\n };\n}\n\nexport { drawer };\n","import { PartialElement, DomphyElement, toState, ValueOrState, merge } from \"@domphy/core\";\nimport { type Placement } from \"@floating-ui/dom\";\nimport { creatFloating } from \"../utils/floating.js\";\n\nfunction popover(props: {\n openOn: \"click\" | \"hover\";\n open?: ValueOrState<boolean>;\n placement?: ValueOrState<Placement>;\n content: DomphyElement;\n onPlacement?: (anchor: HTMLElement, popover: HTMLElement, placement: Placement) => void;\n}): PartialElement {\n const {\n open = false,\n placement = \"bottom\",\n openOn = \"click\"\n } = props;\n\n\n let popoverId: string | null = null\n const openState = toState(open);\n\n let { show, hide, anchorPartial } = creatFloating({ open: openState, placement, content: props.content, onPlacement: props.onPlacement })\n\n const popoverPartial: PartialElement = {\n role: \"dialog\",\n dataTone: \"shift-6\", \n onMouseEnter: () => openOn === \"hover\" && show(),\n onMouseLeave: () => openOn === \"hover\" && hide(),\n _onInsert: (node) => {\n let id = node.attributes.get(\"id\")\n popoverId = id || node.nodeId\n !id && node.attributes.set(\"id\", popoverId)\n },\n };\n\n merge(props.content, popoverPartial);\n\n const triggerPartial: PartialElement = {\n ariaHaspopup: \"dialog\",\n ariaExpanded: (listener) => openState.get(listener),\n onMouseEnter: () => openOn === \"hover\" && show(),\n onMouseLeave: () => openOn === \"hover\" && hide(),\n onClick: () => openOn === \"click\" && (openState.get() ? hide() : show()),\n onFocus: () => show(),\n onBlur: () => hide(),\n _onMount: (node) => popoverId && node.attributes.set(\"ariaControls\", popoverId)\n };\n merge(anchorPartial, triggerPartial);\n\n return anchorPartial;\n}\n\nexport { popover };\n","import type { DomphyElement, PartialElement, ElementNode } from \"@domphy/core\";\nimport { toState } from \"@domphy/core\";\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\n\ntype ToastPosition = \"top-left\" | \"top-center\" | \"top-right\" | \"bottom-left\" | \"bottom-center\" | \"bottom-right\";\n\nfunction toast(props: {\n position?: ToastPosition;\n color?: ThemeColor;\n} = {}): PartialElement {\n const { position = \"top-center\", color = \"neutral\" } = props;\n const state = toState(false);\n\n const isTop = position.startsWith(\"top\");\n const isCenter = position.endsWith(\"center\");\n const isRight = position.endsWith(\"right\");\n\n const overlayEle: DomphyElement<\"div\"> = {\n div: [],\n id: `domphy-toast-${position}`,\n style: {\n position: \"fixed\",\n display: \"flex\",\n flexDirection: isTop ? \"column\" : \"column-reverse\",\n alignItems: isCenter ? \"center\" : isRight ? \"end\" : \"start\",\n inset: 0,\n gap: themeSpacing(4),\n zIndex: 30,\n padding: themeSpacing(6),\n pointerEvents: \"none\",\n },\n }\n\n return {\n _portal: (rootNode) => {\n let overlay = rootNode.domElement!.querySelector(`#domphy-toast-${position}`);\n if (!overlay) {\n const overlayNode = rootNode.children!.insert(overlayEle) as ElementNode;\n overlay = overlayNode.domElement!;\n }\n return overlay;\n },\n role: \"status\",\n ariaAtomic: \"true\",\n style: {\n minWidth: themeSpacing(32),\n pointerEvents: \"auto\",\n paddingBlock: themeSpacing(2),\n paddingInline: themeSpacing(4),\n borderRadius: themeSpacing(2),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n color: (listener) => themeColor(listener, \"shift-1\", color),\n backgroundColor: (listener) => themeColor(listener, \"shift-9\", color),\n boxShadow: (listener) => `0 ${themeSpacing(2)} ${themeSpacing(8)} ${themeColor(listener, \"shift-3\", \"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)),\n _onBeforeRemove: (node, done) => {\n const onEnd = (e: Event) => {\n if ((e as TransitionEvent).propertyName === \"transform\") {\n node.domElement!.removeEventListener(\"transitionend\", onEnd)\n done()\n }\n }\n node.domElement!.addEventListener(\"transitionend\", onEnd)\n state.set(false)\n }\n };\n}\n\nexport { toast };\n","import { PartialElement, DomphyElement, toState, State, ValueOrState, merge } from \"@domphy/core\";\nimport { themeSpacing, themeColor, themeSize } from \"@domphy/theme\";\nimport { type Placement } from \"@floating-ui/dom\";\nimport { creatFloating } from \"../utils/floating.js\";\nimport { popoverArrow } from \"./popoverArrow.js\";\n\nfunction defaultTooltip(content: string, placement: State<Placement>): DomphyElement<\"span\"> {\n return {\n span: content,\n dataSize: \"decrease-1\",\n dataTone: \"shift-6\",\n style: {\n paddingBlock: themeSpacing(1),\n paddingInline: themeSpacing(3),\n borderRadius: themeSpacing(2),\n color: (listener) => themeColor(listener, \"shift-6\"),\n backgroundColor: (listener) => themeColor(listener),\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n },\n $: [popoverArrow({ placement, bordered: false })]\n }\n}\n\nfunction tooltip(props: {\n open?: ValueOrState<boolean>;\n placement?: ValueOrState<Placement>;\n content?: DomphyElement | string;\n} = {}): PartialElement {\n const {\n open = false,\n placement = \"top\",\n content = \"Tooltip Content\"\n } = props;\n\n let tooltipId: string | null = null\n const placeState = toState(placement);\n\n let contentElement = typeof content == \"string\" ? defaultTooltip(content, placeState) : content\n let { show, hide, anchorPartial } = creatFloating({ open, placement, content: contentElement })\n\n const tooltipPartial: PartialElement = {\n role: \"tooltip\",\n _onInsert: (node) => {\n let id = node.attributes.get(\"id\")\n tooltipId = id || node.nodeId\n !id && node.attributes.set(\"id\", tooltipId)\n },\n };\n\n merge(contentElement, tooltipPartial);\n\n const triggerPartial: PartialElement = {\n onMouseEnter: () => show(),\n onMouseLeave: () => hide(),\n onFocus: () => show(),\n onBlur: () => hide(),\n onKeyDown: (e) => (e as KeyboardEvent).key === \"Escape\" && hide(),\n _onMount: (node) => tooltipId && node.attributes.set(\"ariaDescribedby\", tooltipId)\n };\n\n merge(anchorPartial, triggerPartial)\n\n return anchorPartial;\n}\n\nexport { tooltip };\n","import { ElementNode, PartialElement } from \"@domphy/core\";\n\ntype RectMap = Map<string, DOMRect>;\n\nfunction getItemId(node: ElementNode, index: number): string {\n if (node.key !== undefined && node.key !== null) {\n return String(node.key);\n }\n return `index-${index}`;\n}\n\nfunction transitionGroup(props: { duration?: number; delay?: number } = {}): PartialElement {\n const {\n duration = 300,\n delay = 0,\n } = props;\n\n let previousRects: RectMap = new Map();\n\n return {\n _onBeforeUpdate: (node) => {\n previousRects = new Map();\n node.children.items.forEach((item, index) => {\n if (!(item instanceof ElementNode)) return;\n const dom = item.domElement as HTMLElement | undefined;\n if (!dom) return;\n previousRects.set(getItemId(item, index), dom.getBoundingClientRect());\n });\n },\n _onUpdate: (node) => {\n node.children.items.forEach((item, index) => {\n if (!(item instanceof ElementNode)) return;\n const dom = item.domElement as HTMLElement | undefined;\n if (!dom) return;\n\n const key = getItemId(item, index);\n const prev = previousRects.get(key);\n if (!prev) return;\n\n const next = dom.getBoundingClientRect();\n const deltaX = prev.left - next.left;\n const deltaY = prev.top - next.top;\n if (Math.abs(deltaX) < 0.5 && Math.abs(deltaY) < 0.5) return;\n\n const previousTransition = dom.style.transition;\n const previousTransform = dom.style.transform;\n\n dom.style.transition = \"none\";\n dom.style.transform = `translate(${deltaX}px, ${deltaY}px)`;\n dom.getBoundingClientRect();\n\n requestAnimationFrame(() => {\n dom.style.transition = `transform ${duration}ms ease ${delay}ms`;\n dom.style.transform = \"translate(0px, 0px)\";\n });\n\n const cleanup = () => {\n dom.style.transition = previousTransition;\n dom.style.transform = previousTransform;\n dom.removeEventListener(\"transitionend\", onEnd);\n };\n\n const onEnd = (event: Event) => {\n const transitionEvent = event as TransitionEvent;\n if (transitionEvent.propertyName === \"transform\") {\n cleanup();\n }\n };\n\n dom.addEventListener(\"transitionend\", onEnd);\n setTimeout(cleanup, duration + delay + 34);\n });\n previousRects.clear();\n },\n };\n}\n\r\n\r\nexport { transitionGroup };\r\n","import { PartialElement, merge } from \"@domphy/core\";\nimport { toState, ValueOrState } from \"@domphy/core\";\n\nfunction tabs(props: {\n activeKey?: ValueOrState<number | string>;\n} = {}): PartialElement {\n\n let partial: PartialElement = {\n role: \"tablist\",\n _onSchedule: (node, element) => {\n let partial = {\n _context: {\n tabs: {\n activeKey: toState(props.activeKey || 0),\n path: node.key\n }\n },\n }\n merge(element, partial)\n },\n }\n return partial;\n}\n\nexport { tabs };\n","import { PartialElement, ElementNode } from \"@domphy/core\";\nimport { themeSpacing, ThemeColor, themeColor, themeSize } from \"@domphy/theme\";\n\nfunction tab(props: {\n accentColor?: ThemeColor;\n color?: ThemeColor;\n} = {}): PartialElement {\n const {\n accentColor = \"primary\",\n color = \"neutral\",\n } = props;\n let partial: PartialElement = {\n role: \"tab\",\n _onInsert: (node) => {\n\n if (node.tagName != \"button\") {\n console.warn(`\"tab\" patch must use button tag`);\n }\n\n let context = node.getContext(\"tabs\")\n let children = node.parent?.children.items as ElementNode[]\n children = children.filter(n => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"tab\")\n let key = node.key || children.findIndex(n => n == node)\n\n let part: PartialElement = {\n id: \"tab\" + context.path + key,\n \"ariaControls\": \"tabpanel\" + context.path + key,\n \"ariaSelected\": (listener) => context.activeKey.get(listener) == key,\n onClick: () => context.activeKey.set(key),\n onKeyDown: (e: Event) => {\n const k = (e as KeyboardEvent).key;\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(k)) return;\n e.preventDefault();\n const tabs = (node.parent?.children.items ?? []).filter(\n n => n.type === \"ElementNode\" && (n as ElementNode).attributes.get(\"role\") === \"tab\"\n ) as ElementNode[];\n const idx = tabs.findIndex(n => n === node);\n let next = idx;\n if (k === \"ArrowRight\") next = (idx + 1) % tabs.length;\n else if (k === \"ArrowLeft\") next = (idx - 1 + tabs.length) % tabs.length;\n else if (k === \"Home\") next = 0;\n else if (k === \"End\") next = tabs.length - 1;\n const target = tabs[next];\n context.activeKey.set(target.key ?? next);\n (target.domElement as HTMLElement)?.focus();\n },\n }\n node.merge(part)\n },\n style: {\n cursor: \"pointer\",\n fontSize: (listener) => themeSize(listener, \"inherit\"),\n height: themeSpacing(8),\n paddingInline: themeSpacing(4),\n border: \"none\",\n outline: \"none\",\n color: (listener) => themeColor(listener, \"shift-6\"),\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-2\", color)}`,\n \"&:hover:not([disabled])\": {\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-3\", color)}`,\n },\n \"&[aria-selected=true]:not([disabled])\": {\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-4\", accentColor)}`,\n },\n \"&:focus-visible\": {\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-6\", accentColor)}`,\n\n },\n },\n }\n return partial\n}\n\n\nexport { tab };\n","import { PartialElement, ElementNode, merge } from \"@domphy/core\";\nimport { themeSpacing, themeColor } from \"@domphy/theme\";\n\nfunction tabPanel(): PartialElement {\n let partial: PartialElement = {\n role: \"tabpanel\",\n style: {\n paddingBlock: themeSpacing(2),\n paddingInline: themeSpacing(2),\n },\n _onInsert: (node) => {\n let context = node.getContext(\"tabs\")\n let children = node.parent?.children.items as ElementNode[]\n children = children.filter(n => n.type == \"ElementNode\" && n.attributes.get(\"role\") == \"tabpanel\")\n let key = node.key || children.findIndex(n => n == node)\n let part: PartialElement = {\n id: \"tabpanel\" + context.path + key,\n \"ariaLabelledby\": \"tab\" + context.path + key,\n \"hidden\": (listener) => context.activeKey.get(listener) != key,\n }\n node.merge(part)\n },\n };\n return partial;\n}\n\n\n\nexport { tabPanel };\n","import { PartialElement, merge } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction menu(props: {\r\n activeKey?: ValueOrState<number | string>;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n let partial: PartialElement = {\r\n role: \"menu\",\r\n dataTone:\"shift-11\",\r\n _onSchedule: (node, element) => {\r\n let partial = {\r\n _context: {\r\n menu: {\r\n activeKey: toState(props.activeKey || 0),\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: themeSpacing(2),\r\n paddingInline: themeSpacing(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, 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 node.attributes.set(\"ariaCurrent\", (listener) => context.activeKey.get(listener) == key || undefined)\r\n node.addEvent(\"click\", () => context.activeKey.set(key))\r\n node.addEvent(\"keydown\", (e: Event) => {\r\n const k = (e as KeyboardEvent).key;\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\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: themeSpacing(8),\r\n paddingInline: themeSpacing(3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-6\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n \"&:hover:not([disabled]):not([aria-current=true])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\"),\r\n },\r\n \"&[aria-current=true]\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", accentColor),\r\n color: (listener) => themeColor(listener, \"shift-7\"),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\n outlineOffset: `-${themeSpacing(0.5)}`,\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 = {\n error?: string;\n warning?: string;\n success?: string;\n};\n\nexport type FieldValidator = (value: unknown) => FieldMessages | null | Promise<FieldMessages | null>;\n\nfunction isPromiseLike(\n value: FieldMessages | null | Promise<FieldMessages | null>\n): value is Promise<FieldMessages | null> {\n return !!value && typeof (value as Promise<FieldMessages | null>).then === \"function\";\n}\n\r\nexport class FieldState {\n _notifier = new Notifier();\n _value: unknown;\n _initValue: unknown;\n _messages: FieldMessages = {};\n _touched = false;\n _validator: FieldValidator | undefined;\n _pending = false;\n _validationToken = 0;\n\n constructor(initValue: unknown, validator?: FieldValidator) {\n this._value = initValue;\n this._initValue = initValue;\n this._validator = validator;\n if (validator) this.validate();\n }\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 {\n this._value = val;\n this._notifier.notify(\"value\", val);\n this._notifier.notify(\"dirty\", val !== this._initValue);\n this.validate();\n }\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 {\n if (!this._touched) {\n this._touched = true;\n this._notifier.notify(\"touched\", true);\n }\n }\n\n configure(initValue?: unknown, validator?: FieldValidator): void {\n let shouldValidate = false;\n\n if (\n initValue !== undefined &&\n this._value === undefined &&\n this._initValue === undefined\n ) {\n this._value = initValue;\n this._initValue = initValue;\n this._notifier.notify(\"value\", initValue);\n this._notifier.notify(\"dirty\", false);\n shouldValidate = true;\n }\n\n if (validator !== undefined && validator !== this._validator) {\n this._validator = validator;\n shouldValidate = true;\n }\n\n if (shouldValidate) this.validate();\n }\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 {\n const prev = this._messages;\n this._messages = next;\n for (const type of [\"error\", \"warning\", \"success\"] as const) {\n if (prev[type] !== next[type]) this._notifier.notify(type, next[type]);\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 {\n this._value = this._initValue;\n this._touched = false;\n this._notifier.notify(\"value\", this._value);\n this._notifier.notify(\"dirty\", false);\n this._notifier.notify(\"touched\", false);\n this.setMessages({});\n this.validate();\n }\n\n validate(): void {\n const token = ++this._validationToken;\n\n if (!this._validator) {\n this._pending = false;\n this.setMessages({});\n return;\n }\n\n try {\n const result = this._validator(this._value);\n\n if (isPromiseLike(result)) {\n this._pending = true;\n Promise.resolve(result)\n .then((msg) => {\n if (token !== this._validationToken) return;\n this._pending = false;\n this.setMessages(msg ?? {});\n })\n .catch((error) => {\n if (token !== this._validationToken) return;\n this._pending = false;\n console.error(error);\n });\n } else {\n this._pending = false;\n this.setMessages(result ?? {});\n }\n } catch (error) {\n if (token === this._validationToken) {\n this._pending = false;\n }\n console.error(error);\n }\n }\n\n _dispose(): void {\n this._validationToken += 1;\n this._pending = false;\n this._notifier._dispose();\n }\n}\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 {\n fields = new Map<string, FieldState>();\n\n setField(path: string, initValue?: unknown, validator?: FieldValidator): FieldState {\n let field = this.fields.get(path);\n\n if (!field) {\n field = new FieldState(initValue, validator);\n this.fields.set(path, field);\n } else {\n field.configure(initValue, validator);\n }\n\n return field;\n }\n\n getField(path: string): FieldState {\n return this.setField(path);\n }\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 {\n for (const f of this.fields.values()) {\n if (f._pending || f._messages.error) return false;\n }\n return true;\n }\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,KCAO,IAAAC,GAAA,GAAAC,GAAAD,GAAA,mBAAAE,GAAA,sBAAAC,GAAA,oBAAAC,GAAA,gBAAAC,GAAA,gBAAAC,EAAA,aAAAC,GAAA,aAAAC,GAAA,cAAAC,EAAA,UAAAC,GAAA,aAAAC,GAAA,eAAAC,EAAA,UAAAC,EAAA,YAAAC,IAAA,IAAMC,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,EC1KaC,GAAN,KAAe,CAAf,aAAA,CACL,KAAQ,WAAkD,CAAC,CAAA,CAE3D,UAAiB,CACf,GAAI,KAAK,WACP,QAAWC,KAAS,KAAK,WACvB,KAAK,WAAWA,CAAK,EAAE,MAAM,EAIjC,KAAK,WAAa,IACpB,CACA,YAAYA,EAAeC,EAA+B,CACxD,GAAI,CAAC,KAAK,WAAY,MAAO,IAAM,CAAE,EAErC,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,OAAK,KAAK,WAAWD,CAAK,EAAE,IAAIC,CAAQ,IACtC,KAAK,WAAWD,CAAK,EAAE,IAAIC,CAAQ,EAC/B,OAAOA,EAAS,aAAgB,YAClCA,EAAS,YAAYC,CAAO,GAIzBA,CACT,CAEA,eAAeF,EAAeC,EAAyB,CACrD,GAAI,CAAC,KAAK,WAAY,OAEtB,IAAME,EAAY,KAAK,WAAWH,CAAK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","names":["global_exports","__export","dist_exports","src_exports","dist_exports","__export","R","x","V","C","d","j","k","b","_","oe","H","g","Q","EventProperties","eventNameMap","acc","ev","key","HtmlTags","Notifier","event","listener","release","listeners","args","e","State","initialValue","newValue","merge","source","target","comma","space","adjacent","deepClone","value","old","val1","val2","name","addEvent","addHook","toState","val","hashString","str","hash","i","partial","hookName","handler","hookProperty","current","attributes","eventName","eventProperty","node","seen","proto","clone","v","validate","element","asPartial","keys","isHTML","escapeHTML","getTagName","camelToKebab","selectorSplitter","selectors","splitted","parens","angulars","soFar","len","char","mergePartial","part","p","VoidTags","BooleanAttributes","PrefixCSS","CamelAttributes","ElementAttribute","parent","domElement","mutateAttrs","AttributeList","attr","_a","callback","force","className","add","classes","newClass","list","updated","cls","oldClass","TextNode","textContent","newNode","tpl","domText","ElementList","index","ElementNode","dom","el","currentRef","aNode","bNode","a","aNext","bNext","inputs","updateDom","silent","_b","_c","_d","oldItems","keyed","item","input","reused","cur","isPortal","length","finalIndex","domNode","ref","root","domStyle","child","done","snapshot","aIndex","bIndex","itemA","itemB","fromIndex","toIndex","html","StyleProperty","parentRule","domRule","style","prefix","Listener","StyleRule","_StyleRule","selectorText","StyleList","prop","styleStr","decl","nested","sheet","rules","domSheet","css","err","obj","parentSelector","basic","getSelector","selector","prev","splitKeys","currentSelector","rule","newSelector","domRuleList","wrongCount","fixOddEven","_ElementNode","domphyElement","_parent","tempPath","children","fn","n","originalKey","path","content","childNode","styleParent","dist_exports","__export","H","I","d","A","R","b","J","p","P","M","L","m","light","light_default","themes","createDark","validateTheme","partial","key","custom","deepMerge","target","source","_a","buildThemeCSS","name","input","styles","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","TONE_STEPS","ElementTones","adjustTone","tone","level","newIndex","shiftTone","offsetTone","originTone","contextTone","themeTone","contextColor","color","elementNode","themeColor","resultTone","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","color","accentColor","node","listener","J","M","card","props","color","M","listener","J","splitter","props","direction","defaultSize","min","max","node","element","g","Q","splitterPanel","ctx","el","prop","release","size","splitterHandle","handle","isHorizontal","onMousedown","e","container","onMousemove","rect","raw","onMouseup","listener","J","M","command","node","element","g","Q","commandSearch","props","color","accentColor","ctx","input","onInput","listener","P","M","J","commandItem","_a","_b","el","text","release","q","toggle","props","color","accentColor","node","_a","ctx","items","n","key","listener","val","arr","v","P","M","J","toggleGroup","props","_a","multiple","color","Q","M","listener","P","J","inputOTP","M","node","container","getInputs","onInput","e","inputs","target","idx","onKeydown","onPaste","_a","_b","_c","text","startIdx","char","i","lastFilled","alert","props","color","M","listener","J","P","avatar","props","color","M","listener","P","J","badge","props","color","label","state","Q","l","M","P","J","breadcrumb","props","color","separator","node","listener","P","M","J","breadcrumbEllipsis","props","color","node","listener","P","M","J","xSvg","tag","props","color","removable","node","removeBtn","e","M","listener","J","P","min","max","round","floor","createCoords","v","oppositeSideMap","oppositeAlignmentMap","clamp","start","value","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","yAxisSides","getSideAxis","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","computePosition","config","middleware","validMiddleware","statefulPlacement","middlewareData","resetCount","i","_platform$detectOverf","name","fn","nextX","nextY","data","reset","__spreadProps","__spreadValues","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","invalidOverflowDisplayValues","isOverflowElement","element","overflow","overflowX","overflowY","display","getComputedStyle","tableElements","isTableElement","topLayerSelectors","isTopLayer","selector","_e","transformProperties","willChangeValues","containValues","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","lastTraversableNodeNames","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","absoluteOrFixed","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","firstClippingAncestor","clippingRect","accRect","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","Q","placeState","instantShow","autoUpdate","computePosition","offset","flip","shift","x","y","computedPlacement","_a","instantHide","show","hide","floatingPartial","listener","node","rootNode","overlay","overlayEle","g","e","floatingNode","root","handleOutside","event","target","combobox","props","options","placement","color","open","multiple","state","Q","openState","show","hide","anchorPartial","creatFloating","popoverPartial","g","inputStyle","M","listener","P","J","inputElement","wrap","val","vals","items","opt","tag","_node","cur","filter","v","partial","node","popoverArrow","props","placement","color","sideOffset","M","bordered","place","Q","flipMap","flipPlace","val","start","pos","end","listener","J","x","y","blockquote","props","color","node","listener","P","J","M","button","props","color","node","listener","P","M","J","inputCheckbox","props","color","accentColor","node","listener","P","M","J","code","props","color","node","listener","P","J","M","details","props","color","accentColor","duration","node","listener","P","J","M","descriptionList","props","color","node","M","listener","P","J","dialog","props","color","open","state","Q","node","e","r","_e","dlg","update","val","focusable","listener","P","J","M","emphasis","props","color","node","listener","P","J","figure","props","color","node","M","listener","J","P","formGroup","props","color","layout","isVertical","node","M","listener","P","J","Headinghift","heading","props","color","node","listener","J","M","offset","P","horizontalRule","props","color","node","M","listener","J","image","props","color","node","M","listener","J","icon","node","M","inputColor","props","color","accentColor","node","element","listener","P","M","J","inputDateTime","props","mode","color","accentColor","node","element","listener","P","J","M","inputFile","props","color","accentColor","node","element","listener","P","J","M","inputSearch","props","color","accentColor","node","element","listener","P","J","M","inputText","props","color","accentColor","node","element","M","listener","P","J","inputRange","props","color","accentColor","node","M","listener","J","inputNumber","props","color","accentColor","node","element","M","listener","P","J","keyboard","props","color","node","listener","P","J","M","label","props","color","accentColor","node","M","listener","P","J","link","props","color","accentColor","node","listener","P","J","M","mark","props","accentColor","tone","node","listener","P","J","M","paragraph","props","color","node","listener","P","J","preformated","props","color","node","listener","P","J","M","progress","props","color","accentColor","node","M","listener","J","inputRadio","props","color","accentColor","node","listener","P","M","J","select","props","color","accentColor","node","listener","P","J","M","skeleton","props","color","keyframes","animationName","H","M","listener","J","keyframes","animationName","H","spinner","props","color","node","M","listener","J","selectList","props","_a","color","multiple","state","Q","inputs","listener","val","v","node","M","P","J","selectItem","props","accentColor","color","value","node","select","state","listener","val","v","P","M","J","selectBox","props","options","placement","color","open","multiple","state","Q","openState","show","hide","anchorPartial","creatFloating","popoverPartial","g","wrap","listener","val","vals","opt","tag","_node","cur","filter","v","M","partial","node","J","P","inputSwitch","props","accentColor","node","listener","P","M","J","buttonSwitch","props","checked","accentColor","color","check","Q","node","listener","P","J","M","small","props","color","node","listener","P","J","strong","props","color","node","listener","P","J","subscript","props","color","node","listener","P","J","superscript","props","color","node","listener","P","J","table","props","color","node","listener","P","J","M","l","textarea","props","color","accentColor","node","M","listener","P","J","unorderedList","props","color","node","listener","P","J","M","orderedList","props","color","node","listener","P","J","M","getPages","current","total","_","i","pages","start","end","pagination","props","_a","color","accentColor","state","Q","btnBase","M","listener","P","J","activeStyle","__spreadProps","__spreadValues","node","content","page","items","p","isActive","divider","props","color","node","M","listener","P","J","translateOut","marginMap","isVertical","p","drawer","props","color","open","placement","size","state","Q","defaultSize","M","drawerSize","node","e","_e","dlg","update","val","listener","P","J","popover","props","open","placement","openOn","popoverId","openState","Q","show","hide","anchorPartial","creatFloating","popoverPartial","node","id","g","listener","toast","props","position","color","state","Q","isTop","isCenter","isRight","overlayEle","M","rootNode","overlay","listener","P","J","node","done","onEnd","e","defaultTooltip","content","placement","M","listener","J","P","popoverArrow","tooltip","props","open","tooltipId","placeState","Q","contentElement","show","hide","anchorPartial","creatFloating","g","node","id","e","getItemId","node","index","transitionGroup","props","duration","delay","previousRects","item","d","dom","key","prev","next","deltaX","deltaY","previousTransition","previousTransform","cleanup","onEnd","event","tabs","props","node","element","partial","Q","g","tab","props","accentColor","color","node","_a","context","children","n","key","part","listener","e","_b","_c","_d","k","tabs","idx","next","target","P","M","J","tabPanel","M","node","_a","context","children","n","key","part","listener","menu","props","color","node","element","partial","Q","g","M","listener","P","J","menuItem","props","accentColor","color","node","_a","context","children","n","key","listener","e","_b","_c","k","items","idx","next","P","M","J","form","state","node","element","g","field","path","validator","node","f","tag","type","part","listener","e","isPromiseLike","value","FieldState","initValue","validator","k","listener","val","shouldValidate","type","resolveStatus","next","prev","token","result","msg","error","m","FormState","path","initValue","validator","field","FieldState","_a","f","result","setByPath","obj","value","segments","cur","i","key"]}
|
|
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/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","../../theme/src/light.ts","../../theme/src/theme.ts","../../theme/src/size.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.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.7.4/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.7.5/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\"\r\n\r\nexport class Notifier {\r\n private _listeners: Record<string, Set<Handler>> | null = {};\r\n\r\n _dispose(): void {\r\n if (this._listeners) {\r\n for (const event in this._listeners) {\r\n this._listeners[event].clear();\r\n }\r\n }\r\n\r\n this._listeners = null;\r\n }\r\n addListener(event: string, listener: Handler): () => void {\r\n if (!this._listeners) return () => { };\r\n\r\n if (typeof event !== \"string\" || typeof listener !== \"function\") {\r\n throw new Error(\"Event name must be a string, listener must be a function\");\r\n }\r\n\r\n if (!this._listeners[event]) {\r\n this._listeners[event] = new Set();\r\n }\r\n\r\n const release = () => this.removeListener(event, listener);\r\n\r\n if (!this._listeners[event].has(listener)) {\r\n this._listeners[event].add(listener);\r\n if (typeof listener.onSubscribe === \"function\") {\r\n listener.onSubscribe(release);\r\n }\r\n }\r\n\r\n return release;\r\n }\r\n\r\n removeListener(event: string, listener: Handler): void {\r\n if (!this._listeners) return;\r\n\r\n const listeners = this._listeners[event];\r\n if (listeners && listeners.has(listener)) {\r\n listeners.delete(listener);\r\n if (listeners.size === 0) {\r\n delete this._listeners[event];\r\n }\r\n }\r\n }\r\n\r\n notify(event: string, ...args: unknown[]): void {\r\n if (!this._listeners) return;\r\n const listeners = this._listeners[event];\r\n if (listeners) {\r\n for (const listener of [...listeners]) {\r\n try {\r\n listener(...args);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n }\r\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\nexport class State<T> {\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) {\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.onChange(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(\"change\", newValue);\r\n }\r\n\r\n reset(): void {\r\n this.set(this.initialValue);\r\n }\r\n\r\n onChange(listener: ValueListener<T>): () => void {\r\n if (!this._notifier) return () => { };\r\n return this._notifier.addListener(\"change\", 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}","import { DomphyElement, HookMap, EventName, Handler } from \"./types.js\";\r\nimport { State } from \"./classes/State.js\"\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 toState<T>(val: T | State<T>): State<T> {\r\n return val instanceof State ? val : new State<T>(val);\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}","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 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\";\r\nimport { BooleanAttributes, CamelAttributes } from \"../constants.js\";\r\nimport type { ElementNode } from \"./ElementNode.js\"\r\nimport { type AttributeValue } from \"../types.js\"\r\n\r\nexport class ElementAttribute {\r\n readonly name: string;\r\n readonly isBoolean: boolean;\r\n value: any;\r\n parent: ElementNode;\r\n constructor(name: string, value: any, parent: any) {\r\n this.parent = parent;\r\n this.isBoolean = (BooleanAttributes as readonly string[]).includes(name);\r\n if (CamelAttributes.includes(name)) {\r\n this.name = name\r\n } else {\r\n this.name = camelToKebab(name)\r\n }\r\n this.value = undefined;\r\n this.set(value);\r\n }\r\n\r\n render(): void {\r\n if (!this.parent || !this.parent.domElement) return;\r\n const domElement = this.parent.domElement;\r\n\r\n const mutateAttrs = [\"value\"];\r\n if (this.isBoolean) {\r\n if (this.value === false || this.value == null) {\r\n domElement.removeAttribute(this.name)\r\n } else {\r\n domElement.setAttribute(this.name, this.value === true ? \"\" : this.value)\r\n }\r\n } else if (this.value == null) {\r\n domElement.removeAttribute(this.name);\r\n } else if (mutateAttrs.includes(this.name)) {\r\n (domElement as any)[this.name] = this.value;\r\n } else {\r\n domElement.setAttribute(this.name, this.value);\r\n }\r\n }\r\n\r\n set(value: AttributeValue): void {\r\n if (value == null) {\r\n this.value = null;\r\n this.render();\r\n return;\r\n }\r\n if (typeof value === \"string\" && /<\\/?[a-z][\\s\\S]*>/i.test(value)) {\r\n this.value = escapeHTML(value);\r\n } else if (typeof value == \"function\") {\r\n let listener: any = () => {\r\n if (!listener) return;\r\n this.value = this.isBoolean ? Boolean((value as Function)()) : (value as Function)();\r\n this.render();\r\n };\r\n\r\n listener.elementNode = this.parent!;\r\n\r\n listener.onSubscribe = (release: () => void) => {\r\n if (this.parent) {\r\n this.parent.addHook(\"BeforeRemove\", () => {\r\n release();\r\n listener = null;\r\n });\r\n }\r\n };\r\n\r\n this.value = this.isBoolean ? Boolean(value(listener)) : value(listener);\r\n } else {\r\n this.value = this.isBoolean ? Boolean(value) : value;\r\n }\r\n\r\n this.render();\r\n }\r\n\r\n remove(): void {\r\n if (this.parent && this.parent.attributes) {\r\n this.parent.attributes.remove(this.name);\r\n }\r\n this._dispose();\r\n }\r\n\r\n _dispose(): void {\r\n this.value = null;\r\n this.parent = null as any\r\n }\r\n\r\n generateHTML(): string {\r\n const { name, value } = this;\r\n if (this.isBoolean) {\r\n return value ? `${name}` : \"\";\r\n } else {\r\n const val = Array.isArray(value) ? JSON.stringify(value) : value;\r\n return `${name}=\"${escapeHTML(String(val))}\"`;\r\n }\r\n }\r\n}","import type { ElementNode } from \"./ElementNode.js\";\r\nimport { ElementAttribute } from \"./ElementAttribute.js\";\r\nimport { BooleanAttributes } from \"../constants.js\";\r\nimport { Notifier } from \"./Notifier.js\"\r\nimport { AttributeValue } from \"../types.js\"\r\n\r\nexport class AttributeList {\r\n _notifier = new Notifier()\r\n\r\n items: Record<string, ElementAttribute> | null = {};\n parent: ElementNode | null;\r\n\r\n constructor(parent: ElementNode) {\r\n this.parent = parent;\r\n }\r\n\r\n generateHTML(): string {\r\n if (!this.items) return \"\";\n const str = Object.values(this.items)\n .map((attr) => attr.generateHTML())\r\n .join(\" \");\r\n return str ? ` ${str}` : \"\";\r\n }\r\n\r\n get(name: string): any {\r\n if (!this.items) return undefined;\n return this.items[name]?.value;\n }\r\n\r\n set(name: string, value: AttributeValue): void {\r\n if (!this.items || !this.parent) return;\n\n if (this.items[name]) {\n this.items[name].set(value);\n this.parent.domElement && this._notifier.notify(name, this.items[name].value)\n } else {\n this.items[name] = new ElementAttribute(name, value, this.parent);\n }\r\n }\r\n\r\n onChange(name: string, callback: (value: string | number) => void): void {\r\n if (this.has(name) && this.parent?.domElement) {\r\n const handler = callback as any\r\n handler.onSubscribe = (release: () => void) => this.parent?.addHook(\"BeforeRemove\", release);\r\n this._notifier.addListener(name, handler)\r\n }\r\n }\r\n\r\n has(name: string): boolean {\r\n if (!this.items) return false;\n return Object.prototype.hasOwnProperty.call(this.items, name);\n }\r\n\r\n remove(name: string): void {\r\n if (!this.items) return;\n\n if (this.items[name]) {\n this.items[name]._dispose();\n delete this.items[name];\n }\r\n\r\n if (this.parent && this.parent.domElement && this.parent.domElement instanceof Element) {\r\n this.parent.domElement.removeAttribute(name);\r\n }\r\n }\r\n\r\n _dispose(): void {\r\n\r\n if (this.items) {\n for (const key in this.items) {\n this.items[key]._dispose();\n }\n }\n this._notifier._dispose()\n this.items = null;\n this.parent = null;\r\n }\r\n\r\n toggle(name: string, force?: boolean): void {\r\n if (\r\n !BooleanAttributes.includes(name as (typeof BooleanAttributes)[number])\r\n ) {\r\n throw Error(`${name} is not a boolean attribute`);\r\n }\r\n if (force === true) {\r\n this.set(name, true);\r\n } else if (force === false) {\r\n this.remove(name);\r\n } else {\r\n this.has(name) ? this.remove(name) : this.set(name, true);\r\n }\r\n }\r\n\r\n addClass(className: string): void {\r\n if (!className || typeof className !== \"string\") return;\r\n\r\n const add = (classes: string, newClass: string) => {\r\n const list = (classes || \"\").split(\" \").filter((e: string) => e);\r\n !list.includes(newClass) && list.push(className)\r\n return list.join(\" \")\r\n }\r\n\r\n let current = this.get(\"class\");\r\n\r\n if (typeof current === \"function\") {\r\n this.set(\"class\", () => add(current(), className));\r\n } else {\r\n this.set(\"class\", add(current, className))\r\n }\r\n }\r\n\r\n hasClass(className: string): boolean {\r\n if (!className || typeof className !== \"string\") return false;\r\n const current = this.get(\"class\") || \"\";\r\n const list = current.split(\" \").filter((e: string) => e);\r\n return list.includes(className);\r\n }\r\n\r\n toggleClass(className: string): void {\r\n if (!className || typeof className !== \"string\") return;\r\n this.hasClass(className)\r\n ? this.removeClass(className)\r\n : this.addClass(className);\r\n }\r\n\r\n removeClass(className: string): void {\r\n if (!className || typeof className !== \"string\") return;\r\n const current = this.get(\"class\") || \"\";\r\n const list: string[] = current.split(\" \").filter((e: string) => e);\r\n const updated = list.filter((cls) => cls !== className);\r\n updated.length > 0\r\n ? this.set(\"class\", updated.join(\" \"))\r\n : this.remove(\"class\");\r\n }\r\n\r\n replaceClass(oldClass: string, newClass: string): void {\r\n if (\r\n !oldClass ||\r\n !newClass ||\r\n typeof oldClass !== \"string\" ||\r\n typeof newClass !== \"string\"\r\n )\r\n return;\r\n if (this.hasClass(oldClass)) {\r\n this.removeClass(oldClass);\r\n this.addClass(newClass);\r\n }\r\n }\r\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\";\nimport { ElementNode } from \"./ElementNode.js\";\nimport type { DomphyElement } from \"../types.js\";\nimport { ensureDomStyle } from \"../helpers.js\";\n\r\ntype ElementInput = DomphyElement | null | undefined | number | string\r\ntype NodeItem = ElementNode | TextNode;\r\n\r\nexport class ElementList {\n items: NodeItem[] = [];\n owner: ElementNode;\n\r\n constructor(parent: ElementNode) {\r\n this.owner = parent;\r\n }\r\n\r\n _createNode(element: ElementInput | DomphyElement, index = 0): NodeItem {\r\n return (typeof element === \"object\" && element !== null)\r\n ? new ElementNode(element, this.owner, index)\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\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)\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);\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) {\n this.remove(this.items[this.items.length - 1], updateDom, true);\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;\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, finalIndex);\r\n this.items.splice(finalIndex, 0, item);\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;\n domElement.insertBefore(domNode, ref);\n let root = domElement.getRootNode()\n const styleParent = root instanceof ShadowRoot ? root : document.head\n let domStyle = ensureDomStyle(styleParent)\n item.styles.render(domStyle as HTMLStyleElement)\n item._hooks.Mount && item._hooks.Mount(item)\n item.children.items.forEach(child => {\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);\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);\n updateDom && el && el.remove()\r\n item._hooks?.Remove?.(item)\r\n item._dispose();\r\n }\r\n if (item._hooks && item._hooks.BeforeRemove && item.domElement) {\r\n item._hooks.BeforeRemove(item, done)\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);\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;\n const snapshot = this.items.slice();\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 = [];\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 ||\n aIndex === bIndex) return;\r\n\r\n const itemA = this.items[aIndex];\n const itemB = this.items[bIndex];\n\r\n this.items[aIndex] = itemB;\n this.items[bIndex] = itemA;\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 ||\n toIndex < 0 || toIndex >= this.items.length || fromIndex === toIndex) return;\n\n const item = this.items[fromIndex];\n\n this.items.splice(fromIndex, 1);\n this.items.splice(toIndex, 0, item);\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();\n return html;\r\n }\r\n}\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\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: any = () => {\r\n if (!Listener) return;\r\n this.value = value(Listener);\r\n this._domUpdate();\r\n }\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 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\";\nimport { merge, hashString } from \"../utils.js\";\r\n\r\nexport class ElementNode {\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?.getPath()}.${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\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 let listener: any = () => {\r\n let input = children(listener)\r\n this.children!.update(Array.isArray(input) ? input : [input])\r\n }\r\n listener!.elementNode = this;\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 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\"]\r\n\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())\n }\r\n return node\r\n }\r\n\r\n _dispose(): void {\r\n\r\n if (this.children) {\r\n this.children._dispose();\r\n }\r\n\r\n if (this.styles) {\n this.styles.items!.forEach((rule) => rule.remove());\n this.styles._dispose();\n }\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 get pathId(): string {\r\n return hashString(this.getPath())\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 getPath(): string {\r\n let path: number[] = []\r\n let node: ElementNode = this\r\n while (node && node.parent) {\r\n const parent = node.parent\r\n const index = parent.children!.items.indexOf(node)\n path.push(index)\r\n node = parent\r\n }\r\n return path.reverse().join(\".\")\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(\"\")\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) => {\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 {\n const newNode = this._createDOMNode();\n domElement.appendChild(newNode)\n this._hooks.Mount && this._hooks.Mount(this)\n let domStyle = this.getRoot().styles.domStyle\n let root = domElement.getRootNode()\n const styleParent = root instanceof ShadowRoot ? root : document.head\n domStyle ||= ensureDomStyle(styleParent)\n this.styles.render(domStyle as HTMLStyleElement)\n this.children.items.forEach(child => {\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 { ThemeInput } from \"./types.js\";\r\n\r\nlet light: ThemeInput = {\r\n direction: \"darken\",\r\n colors: {\r\n highlight: [\"#ffffff\", \"#fcf4d6\", \"#fddc69\", \"#f1c21b\", \"#d2a106\", \"#b28600\", \"#8e6a00\", \"#684e00\", \"#483700\", \"#302400\", \"#1c1500\", \"#000000\"],\r\n warning: [\"#ffffff\", \"#fff2e8\", \"#ffd9be\", \"#ffb784\", \"#ff832b\", \"#eb6200\", \"#ba4e00\", \"#8a3800\", \"#5e2900\", \"#3e1a00\", \"#231000\", \"#000000\"],\r\n error: [\"#ffffff\", \"#fff1f1\", \"#ffd7d9\", \"#ffb3b8\", \"#ff8389\", \"#fa4d56\", \"#da1e28\", \"#a2191f\", \"#750e13\", \"#520408\", \"#2d0709\", \"#000000\"],\r\n danger: [\"#ffffff\", \"#fff1f1\", \"#ffd7d9\", \"#ffb3b8\", \"#ff8389\", \"#fa4d56\", \"#da1e28\", \"#a2191f\", \"#750e13\", \"#520408\", \"#2d0709\", \"#000000\"],\r\n secondary: [\"#ffffff\", \"#fff0f7\", \"#ffd6e8\", \"#ffafd2\", \"#ff7eb6\", \"#ee5396\", \"#d02670\", \"#9f1853\", \"#740937\", \"#510224\", \"#2a0a18\", \"#000000\"],\r\n primary: [\"#ffffff\", \"#edf5ff\", \"#d0e2ff\", \"#a6c8ff\", \"#78a9ff\", \"#4589ff\", \"#0f62fe\", \"#0043ce\", \"#002d9c\", \"#001d6c\", \"#001141\", \"#000000\"],\r\n info: [\"#ffffff\", \"#e5f6ff\", \"#bae6ff\", \"#82cfff\", \"#33b1ff\", \"#1192e8\", \"#0072c3\", \"#00539a\", \"#003a6d\", \"#012749\", \"#061727\", \"#000000\"],\r\n success: [\"#ffffff\", \"#defbe6\", \"#a7f0ba\", \"#6fdc8c\", \"#42be65\", \"#24a148\", \"#198038\", \"#0e6027\", \"#044317\", \"#022d0d\", \"#071908\", \"#000000\"],\r\n neutral: [\"#ffffff\", \"#f4f4f4\", \"#e0e0e0\", \"#c6c6c6\", \"#a8a8a8\", \"#8d8d8d\", \"#6f6f6f\", \"#525252\", \"#393939\", \"#262626\", \"#161616\", \"#000000\"],\r\n },\r\n baseTones: {\r\n highlight: 3,\r\n warning: 4,\r\n error: 5,\r\n secondary: 5,\r\n primary: 6,\r\n info: 5,\r\n success: 5,\r\n neutral: 5,\r\n },\r\n fontSizes: [\"0.75rem\", \"0.875rem\", \"1rem\", \"1.25rem\", \"1.5625rem\", \"1.9375rem\", \"2.4375rem\", \"3.0625rem\"],\r\n// pixels: 12 | 14 | 16 | 20 | 25 | 31 | 39 | 49\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\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 (\"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\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(12).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 {\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\nexport function 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] = 12 - 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 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(12).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 {\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 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(12).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 {\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.attributes && node.attributes.has(\"dataTheme\")) {\r\n themeName = node.attributes.get(\"dataTheme\")\r\n typeof object == \"function\" && node.attributes.onChange(\"dataTheme\", object)\r\n }\r\n return themeName\r\n}\r\n\r\nexport type ThemeColor = keyof ThemeInput[\"colors\"]","import type { ElementNode, Listener } from \"@domphy/core\";\r\nimport { themeVars } from \"./theme.js\";\r\n\r\nconst ElementSizes = [\"inherit\"];\r\n\r\n[...Array(8).keys()].forEach(i =>{\r\n ElementSizes.push(`decrease-${i}`)\r\n ElementSizes.push(`increase-${i}`)\r\n})\r\n\r\nexport type ElementSize = typeof ElementSizes[number];\r\n\r\nfunction offsetSize(origin: number, size: ElementSize = \"inherit\"): number {\r\n\r\n if (!ElementSizes.includes(size!)) {\r\n throw Error(`size name \"${size}\" invalid`)\r\n }\r\n let resultSize: number\r\n if (size == \"inherit\") {\r\n resultSize = origin as number\r\n } else if (size?.startsWith(\"increase-\")) {\r\n let offset = parseInt(size.replace(\"increase-\", \"\"), 10)\r\n resultSize = origin + offset;\r\n } else if (size?.startsWith(\"decrease-\")) {\r\n let offset = parseInt(size.replace(\"decrease-\", \"\"), 10)\r\n resultSize = origin - offset;\r\n } else {\r\n resultSize = origin\r\n }\r\n return Math.max(0, Math.min(8, resultSize))\r\n}\r\n\r\nfunction contextSize(object: ElementNode | Listener | null): number {\r\n\r\n if (!object) return 2\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(\"dataSize\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let size = 2\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataSize\")) {\r\n size = offsetSize(size, node.attributes.get(\"dataSize\"))\r\n typeof object == \"function\" && node.attributes.onChange(\"dataSize\", object)\r\n }\r\n return size\r\n}\r\n\r\n\r\nexport function themeSize(object: ElementNode | Listener, size: ElementSize = \"inherit\"): string {\r\n let index = offsetSize(contextSize(object), size)\r\n return themeVars().fontSizes[index]\r\n}","import { themeVars, getTheme, themeName } from \"./theme.js\"\r\nimport type { Listener, ElementNode } from \"@domphy/core\";\r\n\r\nconst TONE_STEPS = 12\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 newIndex = tone <= 5 ? 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.onChange(\"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\nexport function contextColor(object: ElementNode | Listener, tone: ElementTone = \"inherit\", color: string = \"inherit\"): string {\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n\r\n let themeColor = color == \"inherit\" ? elementNode.getContext(\"themeColor\") || \"neutral\" : color;\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 resultTone = offsetTone(contextTone(object), tone)\r\n }\r\n let resultColor = themeVars()[themeColor][resultTone]\r\n\r\n return resultColor\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 resultTone = themeTone(object, tone)\r\n }\r\n let resultColor = themeVars()[themeColor][resultTone]\r\n\r\n return resultColor\r\n}\r\n","export * from \"./patches.js\"\r\nexport * from \"./classes.js\"\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, ThemeColor, themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction abbreviation(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"abbr\") {\r\n console.warn(`\"abbreviation\" primitive patch must use abbr tag`);\r\n }\r\n },\r\n style: {\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n textDecorationLine: \"underline\",\r\n textDecorationStyle: \"dotted\",\r\n textDecorationColor: (listener) => themeColor(listener, \"shift-4\", color),\r\n textUnderlineOffset: themeSpacing(0.72),\r\n cursor: \"help\",\r\n \"&:hover\": {\r\n color: (listener) => themeColor(listener, \"shift-8\", accentColor),\r\n textDecorationColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { abbreviation };\r\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction card(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n return {\r\n style: {\r\n display: \"grid\",\r\n gridTemplateColumns: \"1fr auto\",\r\n gridTemplateAreas: '\"image image\" \"title aside\" \"desc aside\" \"content content\" \"footer footer\"',\r\n borderRadius: themeSpacing(2),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n outlineOffset: \"-1px\",\r\n overflow: \"hidden\",\r\n \"& > img\": {\r\n gridArea: \"image\",\r\n width: \"100%\",\r\n height: \"auto\",\r\n display: \"block\",\r\n },\r\n \"& > :is(h1,h2,h3,h4,h5,h6)\": {\r\n gridArea: \"title\",\r\n paddingBlock: themeSpacing(2),\r\n paddingInline: themeSpacing(4),\r\n fontWeight: \"600\",\r\n margin: 0\r\n },\r\n \"& > p\": {\r\n gridArea: \"desc\",\r\n paddingInline: themeSpacing(4),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n margin: 0\r\n },\r\n \"& > aside\": {\r\n gridArea: \"aside\",\r\n alignSelf: \"center\",\r\n padding: themeSpacing(2),\r\n height: \"auto\",\r\n },\r\n \"& > div\": {\r\n gridArea: \"content\",\r\n padding: themeSpacing(4),\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n },\r\n \"& > footer\": {\r\n gridArea: \"footer\",\r\n display: \"flex\",\r\n gap: themeSpacing(2),\r\n paddingBlock: themeSpacing(2),\r\n paddingInline: themeSpacing(4),\r\n borderTop: (listener) => `1px solid ${themeColor(listener, \"shift-2\", color)}`,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { card };\r\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.onChange((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, 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: themeSpacing(3),\r\n paddingBlock: themeSpacing(2),\r\n border: \"none\",\r\n borderBottom: (listener) => `1px solid ${themeColor(listener, \"shift-2\", color)}`,\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&::placeholder\": {\r\n color: (listener) => themeColor(listener, \"shift-4\"),\r\n },\r\n \"&:focus-visible\": {\r\n borderBottomColor: (listener) => themeColor(listener, \"shift-5\", 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.onChange((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: themeSpacing(8),\r\n paddingInline: themeSpacing(3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", 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 } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction toggle(props: {\r\n color?: ThemeColor;\r\n accentColor?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n return {\r\n role: \"button\",\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"button\") {\r\n console.warn(`\"toggle\" patch must use button tag`);\r\n }\r\n const ctx = node.getContext(\"toggleGroup\");\r\n const children = node.parent?.children.items as ElementNode[]\n\r\n let items = children.filter(n => n.type === \"ElementNode\" && n.attributes.get(\"role\") === \"button\");\r\n const key = String(items.findIndex(n => n === node));\r\n\r\n node.attributes.set(\"ariaPressed\", (listener) => {\r\n const val = ctx.value.get(listener);\r\n return Array.isArray(val) ? val.includes(key) : val === key;\r\n })\r\n\r\n node.addEvent(\"click\", () => {\r\n const val = ctx.value.get();\r\n if (ctx.multiple) {\r\n const arr = Array.isArray(val) ? [...val] : [];\r\n ctx.value.set(arr.includes(key) ? arr.filter(v => v !== key) : [...arr, key]);\r\n } else {\r\n ctx.value.set(val === key ? \"\" : key);\r\n }\r\n })\r\n },\r\n style: {\r\n cursor: \"pointer\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n height: themeSpacing(6),\r\n paddingBlock: themeSpacing(1),\r\n paddingInline: themeSpacing(2),\r\n border: \"none\",\r\n borderRadius: themeSpacing(1),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n transition:\"background-color 300ms ease\",\r\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&[aria-pressed=true]\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n outlineOffset: `-${themeSpacing(0.5)}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { toggle };\r\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 dataTone: \"shift-1\",\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-1\", 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(8) + \"!important\",\r\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\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction alert(props: {\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"primary\" } = props;\r\n\r\n return {\r\n role: \"alert\",\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: themeSpacing(3),\r\n paddingBlock: themeSpacing(2),\r\n paddingInline: themeSpacing(4),\r\n boxShadow: (listener) => `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-5\", color)}`,\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n },\r\n };\r\n}\r\n\r\nexport { alert };\r\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction avatar(props: {\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"primary\" } = props;\r\n\r\n return {\r\n style: {\r\n position: \"relative\",\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n overflow: \"hidden\",\r\n borderRadius: \"50%\",\r\n flexShrink: 0,\r\n width: themeSpacing(8),\r\n height: themeSpacing(8),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n fontWeight: \"600\",\r\n userSelect: \"none\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color),\r\n color: (listener) => themeColor(listener, \"shift-8\", color),\r\n \"& img\": {\r\n position: \"absolute\",\r\n inset: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"cover\",\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { avatar };\r\n","\r\nimport { type DomphyElement, type PartialElement, type ValueOrState, toState } from '@domphy/core'\r\nimport { themeSpacing, themeColor, themeSize, ThemeColor } from \"@domphy/theme\"\r\n\r\nfunction badge(props: {\r\n color?: ThemeColor\r\n label?: ValueOrState<string | number>\r\n} = {}): PartialElement {\r\n const { color = \"danger\", label = 999 } = props\r\n let state = toState(label)\r\n return {\r\n style: {\r\n position: \"relative\",\r\n \"&::after\": {\r\n content: (l) => `\"${state.get(l)}\"`,\r\n position: \"absolute\",\r\n top: 0,\r\n right: 0,\r\n transform: \"translate(50%,-50%)\",\r\n paddingInline:themeSpacing(1),\r\n minWidth:themeSpacing(6),\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent:\"center\",\r\n fontSize: (l) => themeSize(l, \"decrease-1\"),\r\n borderRadius: themeSpacing(999),\r\n backgroundColor: (l) => themeColor(l, \"shift-6\", color),\r\n color: (l) => themeColor(l, \"shift-0\", color),\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { badge };\r\n","import type { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction breadcrumb(props: {\r\n color?: ThemeColor;\r\n separator?: string;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", separator = \"/\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"nav\") console.warn('\"breadcrumb\" patch must use nav tag');\r\n },\r\n ariaLabel: \"breadcrumb\",\r\n style: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n flexWrap: \"wrap\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n gap: themeSpacing(1),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"& > *\": {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n color: (listener) => themeColor(listener, \"shift-5\", color),\r\n },\r\n \"& > *:not(:last-child)::after\": {\r\n content: `\"${separator}\"`,\r\n color: (listener) => themeColor(listener, \"shift-3\", color),\r\n paddingInlineStart: themeSpacing(1),\r\n },\r\n \"& > [aria-current=page]\": {\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n pointerEvents: \"none\",\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { breadcrumb };\r\n","import type { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction breadcrumbEllipsis(props: {\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"button\") {\r\n console.warn('\"breadcrumbEllipsis\" patch must use button tag');\r\n }\r\n },\r\n ariaLabel: \"More breadcrumb items\",\r\n style: {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n paddingInline: themeSpacing(1),\r\n border: \"none\",\r\n background: \"none\",\r\n cursor: \"pointer\",\r\n color: (listener) => themeColor(listener, \"shift-5\", color),\r\n borderRadius: themeSpacing(1),\r\n \"&:hover\": {\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", color)}`,\r\n outlineOffset: themeSpacing(0.5),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { breadcrumbEllipsis };\r\n","import type { PartialElement, DomphyElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\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>`\r\n\r\nfunction tag(props: {\r\n color?: ThemeColor\r\n removable?: boolean\r\n} = {}): PartialElement {\r\n const { color = \"neutral\", removable=false } = props;\r\n\r\n return {\r\n dataTone: \"shift-1\",\r\n _onInit: (node) => {\r\n\r\n const removeBtn: DomphyElement<\"span\"> = {\r\n span: xSvg,\r\n onClick: (e) => { (e as Event).stopPropagation(); node.remove() },\r\n style: {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n borderRadius: themeSpacing(1),\r\n width: themeSpacing(4),\r\n height: themeSpacing(4),\r\n flexShrink: 0,\r\n \"&:hover\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color),\r\n }\r\n }\r\n }\r\n\r\n removable && node.children.insert(removeBtn)\r\n \r\n },\r\n style: {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n whiteSpace: \"nowrap\",\r\n userSelect: \"none\",\r\n height: themeSpacing(6),\r\n paddingBlock: \"0px\",\r\n borderRadius: themeSpacing(1),\r\n paddingInlineStart: themeSpacing(2),\r\n paddingInlineEnd: removable ? themeSpacing(1) : themeSpacing(2),\r\n gap: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n border: \"none\",\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n },\r\n };\r\n}\r\n\r\nexport { tag };\r\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};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\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}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n return yAxisSides.has(getSide(placement)) ? '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.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\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 return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\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/**\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 validMiddleware = middleware.filter(Boolean);\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 middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n var _platform$detectOverf;\n const {\n name,\n fn\n } = validMiddleware[i];\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: {\n ...platform,\n detectOverflow: (_platform$detectOverf = platform.detectOverflow) != null ? _platform$detectOverf : detectOverflow\n },\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\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}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\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) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n return topLayerSelectors.some(selector => {\n try {\n return element.matches(selector);\n } catch (_e) {\n return false;\n }\n });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\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 transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\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 (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n return lastTraversableNodeNames.has(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 }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\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 (isHTMLElement(offsetParent)) {\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\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\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 && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || 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 firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.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) : []), ...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) {\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 resizeObserver.observe(floating);\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, 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?: ValueOrState<Placement>;\r\n content: DomphyElement;\r\n onPlacement?: (anchor: HTMLElement, popover: HTMLElement, placement: Placement) => void;\r\n}) {\r\n const {\r\n open = false,\r\n placement = \"bottom\",\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 const placeState = toState(placement);\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: placeState.get() as Placement,\r\n middleware: [offset(12), flip(), shift()],\r\n strategy: \"fixed\"\r\n }).then(({ x, y, placement: computedPlacement }) => {\r\n Object.assign((floating as HTMLElement).style, { left: `${x}px`, top: `${y}px` });\r\n computedPlacement !== placeState.get() && placeState.set(computedPlacement)\r\n props.onPlacement?.(reference!, floating!, computedPlacement)\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 _onSchedule: (node) => {\r\n let floatingNode: ElementNode | null = null\r\n node.getRoot().addHook(\"Init\", (root) => {\r\n floatingNode = root.children!.insert(props.content) as ElementNode\r\n })\r\n node.addHook(\"BeforeRemove\", () => {\r\n hide();\r\n if (timer) clearTimeout(timer);\r\n floatingNode && floatingNode.remove();\r\n });\r\n },\r\n _onMount: (node) => {\r\n reference = node.domElement as HTMLElement\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 node.addHook(\"BeforeRemove\", () => node.getRoot().domElement!.removeEventListener(\"click\", handleOutside));\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, 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 onPlacement?: (anchor: HTMLElement, popover: HTMLElement, placement: Placement) => void;\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, content: props.content, onPlacement: props.onPlacement })\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-6\", 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-3\", \"neutral\")}`,\r\n paddingBlock: themeSpacing(1),\r\n paddingInline: themeSpacing(1),\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", 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, type ThemeColor } from \"@domphy/theme\";\r\nimport { 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 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 const flipPlace = toState(flipMap[place.get()])\r\n place.onChange(val => flipPlace.set(flipMap[val as Placement]))\r\n\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 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 ? \"0px\" :\"1px\",\r\n borderColor: (listener) => themeColor(listener, \"inherit\", color),\r\n borderTopStyle: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"top\") || pos.includes(\"right\") ? `solid` : \"none\"\r\n },\r\n borderBottomStyle: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"bottom\") || pos.includes(\"left\") ? `solid` : \"none\"\r\n },\r\n borderLeftStyle: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"top\") || pos.includes(\"left\") ? `solid` : \"none\"\r\n },\r\n borderRightStyle: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"bottom\") || pos.includes(\"right\") ? `solid` : \"none\"\r\n },\r\n top: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"top\") ? 0 : pos.includes(\"bottom\") ? \"auto\" : start(pos)\r\n },\r\n right: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"right\") ? 0 : pos.includes(\"left\") ? \"auto\" : end(pos)\r\n },\r\n bottom: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"bottom\") ? 0 : pos.includes(\"top\") ? \"auto\" : end(pos)\r\n },\r\n left: (listener) => {\r\n const pos = flipPlace.get(listener)\r\n return pos.includes(\"left\") ? 0 : pos.includes(\"right\") ? \"auto\" : start(pos)\r\n },\r\n transform: (listener) => {\r\n const pos = flipPlace.get(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 } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeSize } from \"@domphy/theme\";\r\n\r\nfunction blockquote(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"inherit\" } = props;\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-1\",\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n boxShadow: (listener) => `inset ${themeSpacing(1)} 0 0 0 ${themeColor(listener, \"shift-3\", color)}`,\r\n border: \"none\",\r\n paddingBlock: themeSpacing(2),\r\n paddingInline: themeSpacing(4),\r\n margin: 0,\r\n },\r\n };\r\n}\r\n\r\nexport { blockquote };\r\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeSize, type ThemeColor, } from \"@domphy/theme\";\r\n\r\nfunction button(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"primary\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"button\") {\r\n console.warn(`\"button\" primitive patch must use button tag`);\r\n }\r\n },\r\n style: {\r\n appearance: \"none\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n paddingBlock: themeSpacing(1),\r\n paddingInline: themeSpacing(3),\r\n borderRadius: themeSpacing(2),\r\n width: \"fit-content\",\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n userSelect: \"none\",\r\n fontFamily: \"inherit\",\r\n lineHeight: \"inherit\",\r\n border: \"none\",\r\n outlineOffset: \"-1px\",\r\n outlineWidth: \"1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&:focus-visible\": {\r\n boxShadow: (listener) => `inset 0 0 0 ${themeSpacing(0.5)} ${themeColor(listener, \"shift-6\", color)}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n },\r\n \"&[aria-busy=true]\": {\r\n opacity: 0.7,\r\n cursor: \"wait\",\r\n pointerEvents: \"none\",\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { button };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\r\n\r\nfunction inputCheckbox(props: { color?: ThemeColor, accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n type: \"checkbox\",\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"input\") {\r\n console.warn(`\"inputCheckbox\" primitive patch must use input tag`);\r\n }\r\n },\r\n style: {\r\n appearance: \"none\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n display: \"inline-flex\",\r\n position: \"relative\",\r\n width: themeSpacing(6),\r\n height: themeSpacing(6),\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n transition: \"background-color 300ms, outline-color 300ms\",\r\n margin: 0,\r\n padding: 0,\r\n \"&::before\": {\r\n content: `\"\"`,\r\n display: \"block\",\r\n borderRadius: themeSpacing(1),\r\n lineHeight: 1,\r\n cursor: \"pointer\",\r\n border: \"none\",\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color)}`,\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n width: themeSpacing(4),\r\n height: themeSpacing(4),\r\n },\r\n \"&:hover::before\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n },\r\n \"&:checked::before\": {\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n backgroundColor: (listener) => themeColor(listener, \"shift-5\", accentColor),\r\n },\r\n \"&:checked:hover:not([disabled])::before\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", accentColor),\r\n },\r\n \"&:checked::after\": {\r\n content: `\"\"`,\r\n display: \"block\",\r\n position: \"absolute\",\r\n top: \"25%\",\r\n insetInlineStart: \"37%\",\r\n width: \"20%\",\r\n height: \"30%\",\r\n border: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"inherit\", accentColor)}`,\r\n borderTop: 0,\r\n borderInlineStart: 0,\r\n transform: \"rotate(45deg)\",\r\n },\r\n \"&:indeterminate::before\": {\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", accentColor)}`,\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", accentColor),\r\n },\r\n \"&:indeterminate::after\": {\r\n content: `\"\"`,\r\n position: \"absolute\",\r\n inset: \"30%\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-5\", accentColor),\r\n },\r\n \"&:indeterminate:hover:not([disabled])::after\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", accentColor),\r\n },\r\n \"&:focus-visible\": {\r\n borderRadius: themeSpacing(1.5),\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&[disabled]\": {\r\n cursor: \"not-allowed\",\r\n },\r\n \"&[disabled]::before, &[disabled]::after\": {\r\n outline: \"none\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", \"neutral\"),\r\n pointerEvents: \"none\",\r\n },\r\n }\r\n }\r\n}\r\n\r\nexport { inputCheckbox };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction code(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n dataTone: \"shift-2\",\r\n _onInsert: (node) => {\r\n if (node.tagName != \"code\") {\r\n console.warn(`\"code\" primitive patch must use code tag`);\r\n }\r\n },\r\n style: {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n height: themeSpacing(6),\r\n paddingInline: themeSpacing(1.5),\r\n borderRadius: themeSpacing(1),\r\n },\r\n };\r\n}\r\n\r\nexport { code };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction details(\r\n props: { color?: ThemeColor; accentColor?: ThemeColor; duration?: number } = {}\r\n): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\", duration = 240 } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"details\") {\r\n console.warn(`\"details\" primitive patch must use details tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \r\n overflow: \"hidden\",\r\n \"& > summary\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n listStyle: \"none\",\r\n display: \"flex\",\r\n justifyContent:\"space-between\",\r\n alignItems: \"center\",\r\n gap: themeSpacing(2),\r\n cursor: \"pointer\",\r\n userSelect: \"none\",\r\n fontWeight: 500,\r\n paddingInline: themeSpacing(4),\r\n height: themeSpacing(10),\r\n },\r\n \"& > summary::-webkit-details-marker\": {\r\n display: \"none\",\r\n },\r\n \"& > summary::marker\": {\r\n content: `\"\"`,\r\n },\r\n \"& > summary::after\": {\r\n content: `\"\"`,\r\n width: themeSpacing(2),\r\n height: themeSpacing(2),\r\n flexShrink: 0,\r\n marginTop: `-${themeSpacing(0.5)}`,\r\n borderInlineEnd: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", color)}`,\r\n borderBottom: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-6\", color)}`,\r\n transform: \"rotate(45deg)\",\r\n transition: `transform ${duration}ms ease`,\r\n },\r\n \"&[open] > summary::after\": {\r\n transform: \"rotate(-135deg)\",\r\n },\r\n \"& > summary:hover\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n },\r\n \"& > summary:focus-visible\": {\r\n borderRadius: themeSpacing(2),\r\n outlineOffset: `-${themeSpacing(0.5)}`,\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"& > :not(summary)\": {\r\n maxHeight: \"0px\",\r\n opacity: 0,\r\n overflow: \"hidden\",\r\n paddingInline: themeSpacing(3),\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n transition: `max-height ${duration}ms ease, opacity ${duration}ms ease, padding ${duration}ms ease`,\r\n },\r\n \"&[open] > :not(summary)\": {\r\n maxHeight: themeSpacing(250),\r\n opacity: 1,\r\n paddingTop: themeSpacing(1),\r\n paddingBottom: themeSpacing(3),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { details };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction descriptionList(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"dl\") {\r\n console.warn(`\"descriptionList\" primitive patch must use dl tag`);\r\n }\r\n },\r\n style: {\r\n display: \"grid\",\r\n gridTemplateColumns: `minmax(${themeSpacing(24)}, max-content) 1fr`,\r\n columnGap: themeSpacing(4),\r\n margin: 0,\r\n \"& dt\": {\r\n margin: 0,\r\n fontWeight: 600,\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n },\r\n \"& dd\": {\r\n margin: 0,\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { descriptionList };\r\n","import { type PartialElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, 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.onChange(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-7\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n border: \"none\",\r\n padding: themeSpacing(3),\r\n boxShadow: (listener) => `0 ${themeSpacing(8)} ${themeSpacing(16)} ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n \"&::backdrop\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n opacity: 0.75,\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { dialog };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction emphasis(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"em\") {\r\n console.warn(`\"emphasis\" primitive patch must use em tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n fontStyle: \"italic\",\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n },\r\n };\r\n}\r\n\r\nexport { emphasis };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction figure(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"figure\") {\r\n console.warn(`\"figure\" primitive patch must use figure tag`);\r\n }\r\n },\r\n style: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: themeSpacing(2),\r\n marginInline: 0,\r\n marginTop: themeSpacing(3),\r\n marginBottom: themeSpacing(3),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n \"& img, & svg, & video, & canvas\": {\r\n display: \"block\",\r\n maxWidth: \"100%\",\r\n borderRadius: themeSpacing(2),\r\n },\r\n \"& figcaption\": {\r\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\r\n color: (listener) => themeColor(listener, \"shift-5\", color),\r\n lineHeight: 1.45,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { figure };\r\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, themeSize, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction formGroup(props: { color?: ThemeColor; layout?: \"horizontal\" | \"vertical\" } = {}): PartialElement {\r\n const { color = \"neutral\", layout = \"horizontal\" } = props;\r\n\r\n const isVertical = layout === \"vertical\";\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"fieldset\") {\r\n console.warn(`\"formGroup\" patch must use fieldset tag`);\r\n }\r\n },\r\n style: {\r\n margin: 0,\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(3),\r\n border: \"none\",\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n display: \"grid\",\r\n gridTemplateColumns: isVertical ? `minmax(0, 1fr)` : `max-content minmax(0, 1fr)`,\r\n columnGap: themeSpacing(4),\r\n rowGap: themeSpacing(3),\r\n alignItems: \"start\",\r\n \"& > legend\": {\r\n gridColumn: \"1 / -1\",\r\n margin: 0,\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n fontWeight: 600,\r\n paddingBlock: themeSpacing(1),\r\n borderRadius: themeSpacing(2),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n },\r\n \"& > label\": {\r\n gridColumn: \"1\",\r\n alignSelf: \"start\",\r\n margin: 0,\r\n paddingBlock: isVertical ? 0 : themeSpacing(1),\r\n },\r\n \"& > label:has(+ :not(legend, label, p) + p)\": {\r\n gridRow: isVertical ? \"auto\" : \"span 2\",\r\n },\r\n \"& > :not(legend, label, p)\": {\r\n gridColumn: isVertical ? \"1\" : \"2\",\r\n minWidth: 0,\r\n width: \"100%\",\r\n boxSizing: \"border-box\",\r\n },\r\n \"& > p\": {\r\n gridColumn: isVertical ? \"1\" : \"2\",\r\n minWidth: 0,\r\n margin: 0,\r\n marginBlockStart: `calc(${themeSpacing(2)} * -1)`,\r\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { formGroup };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nconst Headinghift: Record<string, string> = {\r\n h6: \"decrease-1\",\r\n h5: \"inherit\",\r\n h4: \"increase-1\",\r\n h3: \"increase-2\",\r\n h2: \"increase-3\",\r\n h1: \"increase-4\",\r\n}\r\n\r\nfunction heading(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (![\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes(node.tagName)) {\r\n console.warn(`\"heading\" primitive patch must use heading tags [h1...h6]`);\r\n }\r\n },\r\n style: {\r\n color: (listener) => themeColor(listener, \"shift-8\", color),\r\n marginTop: 0,\r\n marginBottom: themeSpacing(2),\r\n fontSize: (listener) => {\r\n const offset = Headinghift[listener.elementNode.tagName] || \"inherit\";\r\n return themeSize(listener, offset);\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { heading };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction horizontalRule(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"hr\") {\r\n console.warn(`\"horizontalRule\" primitive patch must use hr tag`);\r\n }\r\n },\r\n style: {\r\n border: 0,\r\n height: \"1px\",\r\n marginInline: 0,\r\n marginTop: themeSpacing(3),\r\n marginBottom: themeSpacing(3),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", color),\r\n },\r\n };\r\n}\r\n\r\nexport { horizontalRule };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction image(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"img\") {\r\n console.warn(`\"image\" primitive patch must use img tag`);\r\n }\r\n },\r\n style: {\r\n display: \"block\",\r\n width: \"100%\",\r\n maxWidth: \"100%\",\r\n height: \"auto\",\r\n objectFit: \"cover\",\r\n borderRadius: themeSpacing(2),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n };\r\n}\r\n\r\nexport { image };\r\n","import type { PartialElement } from \"@domphy/core\";\r\nimport { themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction icon(): PartialElement {\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"span\") {\r\n console.warn(`\"icon\" primitive patch should use span tag`);\r\n }\r\n },\r\n style: {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n verticalAlign: \"middle\",\r\n width: themeSpacing(6),\r\n height: themeSpacing(6),\r\n },\r\n };\r\n}\r\n\r\nexport { icon };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, themeSize, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction inputColor(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n type: \"color\",\r\n _onSchedule: (node, element) => {\r\n if (node.tagName != \"input\") {\r\n console.warn(`\"inputColor\" primitive patch must use input tag`);\r\n }\r\n (element as any).type = \"color\";\r\n },\r\n style: {\r\n appearance: \"none\",\r\n border: \"none\",\r\n cursor: \"pointer\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n paddingBlock: themeSpacing(1),\r\n paddingInline: themeSpacing(1),\r\n blockSize: themeSpacing(8),\r\n inlineSize: themeSpacing(8),\r\n backgroundColor: \"transparent\",\r\n \"&::-webkit-color-swatch-wrapper\": {\r\n margin: 0,\r\n padding: 0,\r\n },\r\n \"&::-webkit-color-swatch\": {\r\n borderRadius: themeSpacing(1),\r\n },\r\n \"&::-moz-color-swatch\": {\r\n borderRadius: themeSpacing(1),\r\n },\r\n \"&:hover:not([disabled]), &:focus-visible\": {\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { inputColor };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\ntype InputDateTimeMode = \"date\" | \"time\" | \"week\" | \"month\" | \"datetime-local\";\r\n\r\nfunction inputDateTime(\r\n props: { mode?: InputDateTimeMode; color?: ThemeColor; accentColor?: ThemeColor } = {}\r\n): PartialElement {\r\n const { mode = \"datetime-local\", color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n type: mode,\r\n _onSchedule: (node, element) => {\r\n if (node.tagName != \"input\") {\r\n console.warn(`\"inputDateTime\" primitive patch must use input tag`);\r\n }\r\n (element as any).type = mode;\r\n },\r\n style: {\r\n fontFamily: \"inherit\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n lineHeight: \"inherit\",\r\n color: (listener) => themeColor(listener, \"shift-6\", 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-3\", color)}`,\r\n borderRadius: themeSpacing(2),\r\n paddingInline: themeSpacing(3),\r\n height: themeSpacing(8),\r\n \"&::-webkit-calendar-picker-indicator\": {\r\n cursor: \"pointer\",\r\n opacity: 0.85,\r\n },\r\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n },\r\n \"&:invalid\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"error\")}`,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { inputDateTime };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction inputFile(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n type: \"file\",\r\n _onSchedule: (node, element) => {\r\n if (node.tagName != \"input\") {\r\n console.warn(`\"inputFile\" primitive patch must use input tag`);\r\n }\r\n (element as any).type = \"file\";\r\n },\r\n style: {\r\n fontFamily: \"inherit\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n lineHeight: \"inherit\",\r\n color: (listener) => themeColor(listener, \"shift-6\", 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-3\", color)}`,\r\n borderRadius: themeSpacing(2),\r\n height: themeSpacing(8),\r\n paddingInline: themeSpacing(1),\r\n \"&::file-selector-button\": {\r\n marginBlock: \"auto\",\r\n fontFamily: \"inherit\",\r\n fontSize: \"inherit\",\r\n border: \"none\",\r\n borderRadius: themeSpacing(1),\r\n height: themeSpacing(6),\r\n paddingInline: themeSpacing(2),\r\n cursor: \"pointer\",\r\n color: (listener) => themeColor(listener, \"shift-7\", accentColor),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", accentColor),\r\n },\r\n \"&::-webkit-file-upload-button\": {\r\n marginTop: themeSpacing(1),\r\n fontFamily: \"inherit\",\r\n fontSize: \"inherit\",\r\n border: \"none\",\r\n borderRadius: themeSpacing(1),\r\n height: themeSpacing(6),\r\n paddingInline: themeSpacing(2),\r\n cursor: \"pointer\",\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n },\r\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n },\r\n \"&[disabled]::file-selector-button, &[disabled]::-webkit-file-upload-button\": {\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", \"neutral\"),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { inputFile };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction inputSearch(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n type: \"search\",\r\n _onSchedule: (node, element) => {\r\n if (node.tagName != \"input\") {\r\n console.warn(`\"inputSearch\" primitive patch must use input tag`);\r\n }\r\n (element as any).type = \"search\";\r\n },\r\n style: {\r\n fontFamily: \"inherit\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n lineHeight: \"inherit\",\r\n color: (listener) => themeColor(listener, \"shift-6\", 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-3\", color)}`,\r\n borderRadius: themeSpacing(2),\r\n minWidth: themeSpacing(32),\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(1),\r\n \"&::placeholder\": {\r\n color: (listener) => themeColor(listener, \"shift-4\", color),\r\n },\r\n \"&::-webkit-search-decoration\": {\r\n display: \"none\",\r\n },\r\n \"&::-webkit-search-cancel-button\": {\r\n cursor: \"pointer\",\r\n },\r\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { inputSearch };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction inputText(props: { color?: ThemeColor, accentColor?: ThemeColor } = {}): PartialElement {\r\n let {\r\n color = \"neutral\",\r\n accentColor = \"primary\",\r\n } = props;\r\n\r\n return {\r\n type: \"text\",\r\n _onSchedule: (node, element) => {\r\n if (node.tagName != \"input\") {\r\n console.warn(`\"inputText\" primitive patch must use input tag and text type`);\r\n }\r\n (element as any).type = \"text\";\r\n },\r\n style: {\r\n fontFamily: \"inherit\",\r\n lineHeight: \"inherit\",\r\n minWidth: themeSpacing(32),\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(1),\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n border: \"none\",\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&::placeholder\": {\r\n color: (listener) => themeColor(listener, \"shift-4\"),\r\n },\r\n \"&:not(:placeholder-shown)\": {\r\n color: (listener) => themeColor(listener, \"shift-7\"),\r\n },\r\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\r\n\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n },\r\n \"&:invalid:not(:placeholder-shown)\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"error\")}`,\r\n },\r\n \"&[data-status=error]\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"error\")}`,\r\n },\r\n \"&[data-status=warning]\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", \"warning\")}`,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { inputText };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction inputRange(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n type: \"range\",\r\n _onInsert: (node) => {\r\n if (node.tagName != \"input\") {\r\n console.warn(`\"inputRange\" primitive patch must use input tag`);\r\n }\r\n },\r\n style: {\r\n appearance: \"none\",\r\n width: \"100%\",\r\n margin: 0,\r\n padding: 0,\r\n height: themeSpacing(4),\r\n background: \"transparent\",\r\n cursor: \"pointer\",\r\n \"&::-webkit-slider-runnable-track\": {\r\n height: themeSpacing(1.5),\r\n borderRadius: themeSpacing(999),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n },\r\n \"&::-moz-range-track\": {\r\n height: themeSpacing(1.5),\r\n borderRadius: themeSpacing(999),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n },\r\n \"&::-webkit-slider-thumb\": {\r\n appearance: \"none\",\r\n width: themeSpacing(4),\r\n height: themeSpacing(4),\r\n borderRadius: themeSpacing(999),\r\n border: \"none\",\r\n marginTop: `calc((${themeSpacing(1.5)} - ${themeSpacing(4)}) / 2)`,\r\n backgroundColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\r\n },\r\n \"&::-moz-range-thumb\": {\r\n width: themeSpacing(4),\r\n height: themeSpacing(4),\r\n borderRadius: themeSpacing(999),\r\n border: \"none\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\r\n },\r\n \"&:hover:not([disabled])::-webkit-slider-thumb\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor),\r\n },\r\n \"&:hover:not([disabled])::-moz-range-thumb\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-7\", accentColor),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", accentColor)}`,\r\n outlineOffset: themeSpacing(1),\r\n borderRadius: themeSpacing(2),\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { inputRange };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction inputNumber(props: { color?: ThemeColor, accentColor?: ThemeColor } = {}): PartialElement {\r\n const {\r\n color = \"neutral\",\r\n accentColor = \"primary\",\r\n } = props;\r\n\r\n return {\r\n type: \"number\",\r\n _onSchedule: (node, element) => {\r\n if (node.tagName != \"input\") {\r\n console.warn(`\"inputNumber\" primitive patch must use input tag`);\r\n }\r\n (element as any).type = \"number\";\r\n },\r\n style: {\r\n fontFamily: \"inherit\",\r\n lineHeight: \"inherit\",\r\n minWidth: themeSpacing(32),\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(1),\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n border: \"none\",\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&::-webkit-inner-spin-button, &::-webkit-outer-spin-button\": {\r\n opacity: 1,\r\n },\r\n \"&:hover:not([disabled]):not([aria-busy=true]), &:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { inputNumber };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction keyboard(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"kbd\") {\r\n console.warn(`\"keyboard\" primitive patch must use kbd tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n paddingBlock: themeSpacing(0.5),\r\n paddingInline: themeSpacing(1.5),\r\n borderRadius: themeSpacing(1),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n },\r\n };\r\n}\r\n\r\nexport { keyboard };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction label(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"label\") {\r\n console.warn(`\"label\" primitive patch must use label tag`);\r\n }\r\n },\r\n style: {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n gap: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n cursor: \"pointer\",\r\n \"&:focus-within\": {\r\n color: (listener) => themeColor(listener, \"shift-7\", accentColor),\r\n },\r\n \"&[aria-disabled=true]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { label };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize,themeSpacing,type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction link(props: { color?: ThemeColor, accentColor?: ThemeColor } = {}): PartialElement {\r\n let {\r\n color = \"primary\",\r\n accentColor = \"secondary\",\r\n } = props\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 color: (listener) => themeColor(listener, \"shift-6\", color),\r\n textDecoration: \"none\",\r\n \"&:visited\": {\r\n color: (listener) => themeColor(listener, \"shift-6\", accentColor),\r\n },\r\n \"&:hover:not([disabled])\": {\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\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)}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { link };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, ElementTone, themeSize, themeColor } from \"@domphy/theme\";\r\n\r\nfunction mark(props: { accentColor?: ThemeColor; tone?: ElementTone } = {}): PartialElement {\r\n const {\r\n accentColor = \"highlight\",\r\n tone = \"shift-1\",\r\n } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"mark\") {\r\n console.warn(`\"mark\" primitive patch must use mark tag`);\r\n }\r\n },\r\n dataTone: tone,\r\n style: {\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", accentColor),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", accentColor),\r\n height: themeSpacing(6),\r\n borderRadius: themeSpacing(1),\r\n paddingInline: themeSpacing(1.5),\r\n },\r\n };\r\n}\r\n\r\nexport { mark };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\r\n\r\nfunction paragraph(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"p\") {\r\n console.warn(`\"paragraph\" primitive patch must use p tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n lineHeight:1.5,\r\n marginTop: 0,\r\n marginBottom: 0,\r\n },\r\n };\r\n}\r\n\r\nexport { paragraph };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, ThemeColor, themeSize } from \"@domphy/theme\";\r\n\r\nfunction preformated(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"pre\") {\r\n console.warn(`\"preformated\" primitive patch must use pre tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n border: \"none\",\r\n paddingBlock: themeSpacing(2),\r\n paddingInline: themeSpacing(3),\r\n borderRadius: themeSpacing(2),\r\n },\r\n };\r\n}\r\n\r\nexport { preformated };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction progress(props: { color?: ThemeColor; accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"progress\") {\r\n console.warn(`\"progress\" primitive patch must use progress tag`);\r\n }\r\n },\r\n style: {\r\n appearance: \"none\",\r\n width: \"100%\",\r\n height: themeSpacing(2),\r\n border: 0,\r\n borderRadius: themeSpacing(999),\r\n overflow: \"hidden\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n \"&::-webkit-progress-bar\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n borderRadius: themeSpacing(999),\r\n },\r\n \"&::-webkit-progress-value\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\r\n borderRadius: themeSpacing(999),\r\n transition: \"width 220ms ease\",\r\n },\r\n \"&::-moz-progress-bar\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-6\", accentColor),\r\n borderRadius: themeSpacing(999),\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { progress };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction inputRadio(props: { color?: ThemeColor, accentColor?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\", accentColor = \"primary\" } = props;\r\n\r\n return {\r\n type: \"radio\",\r\n _onInsert: (node) => {\r\n if (node.tagName != \"input\") {\r\n console.warn(`\"inputRadio\" primitive patch must use input tag and radio type`);\r\n return;\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n appearance: \"none\",\r\n display: \"inline-flex\",\r\n position: \"relative\",\r\n width: themeSpacing(6),\r\n height: themeSpacing(6),\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n transition: \"background-color 300ms, outline-color 300ms\",\r\n margin: 0,\r\n padding: 0,\r\n \"&::before\": {\r\n content: `\"\"`,\r\n display: \"block\",\r\n borderRadius: \"50%\",\r\n lineHeight: 1,\r\n cursor: \"pointer\",\r\n border: \"none\",\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-4\", color)}`,\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n width: themeSpacing(4),\r\n height: themeSpacing(4)\r\n },\r\n \"&:hover::before\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n },\r\n \"&:checked::before\": {\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&:checked::after\": {\r\n content: `\"\"`,\r\n position: \"absolute\",\r\n inset: \"30%\",\r\n borderRadius: \"50%\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-5\", accentColor),\r\n },\r\n \"&:checked:hover:not([disabled])::before\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-4\", accentColor),\r\n },\r\n \"&:focus-visible\": {\r\n borderRadius: \"50%\",\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&[disabled]\": {\r\n cursor: \"not-allowed\",\r\n },\r\n \"&[disabled]::before, &[disabled]::after\": {\r\n outline: \"none\",\r\n backgroundColor: (listener) => themeColor(listener, \"shift-3\", \"neutral\"),\r\n pointerEvents: \"none\",\r\n },\r\n }\r\n }\r\n}\r\n\r\nexport { inputRadio };\r\n","import { type PartialElement } from \"@domphy/core\";\r\nimport { type ThemeColor, themeColor, themeSize, themeSpacing } 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 fontFamily: \"inherit\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n lineHeight: \"inherit\",\r\n color: (listener) => themeColor(listener, \"shift-6\", 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-3\", color)}`,\r\n borderRadius: themeSpacing(2),\r\n paddingBlock: themeSpacing(1),\r\n paddingLeft: themeSpacing(3),\r\n paddingRight: themeSpacing(1),\r\n \"&:not([multiple])\": {\r\n height: themeSpacing(8),\r\n },\r\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", accentColor)}`,\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"& optgroup\": {\r\n color: (listener) => themeColor(listener, \"shift-8\", color),\r\n },\r\n \"& option[disabled]\": {\r\n color: (listener) => themeColor(listener, \"shift-4\", \"neutral\"),\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { select };\r\n","import { type PartialElement, type StyleObject, hashString } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction skeleton(props: {\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n const keyframes = {\r\n \"0%,100%\": { opacity: 1 },\r\n \"50%\": { opacity: .4 }\r\n }\r\n const animationName = hashString(JSON.stringify(keyframes))\r\n return {\r\n ariaHidden: \"true\",\r\n style: {\r\n height: themeSpacing(6),\r\n display: \"block\",\r\n borderRadius: themeSpacing(1),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", color),\r\n animation: `${animationName} 1.5s ease-in-out infinite`,\r\n [`@keyframes ${animationName}`]: keyframes,\r\n } as StyleObject,\r\n };\r\n}\r\n\r\nexport { skeleton };\r\n","import type { PartialElement, StyleObject } from \"@domphy/core\";\r\nimport { hashString } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nconst keyframes = { to: { transform: \"rotate(360deg)\" } };\r\nconst animationName = hashString(JSON.stringify(keyframes));\r\n\r\nfunction spinner(props: {\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n role: \"status\",\r\n ariaLabel: \"loading\",\r\n _onInsert: (node) => {\r\n if (node.tagName != \"span\") {\r\n console.warn(`\"spinner\" patch must use span tag`);\r\n }\r\n },\r\n style: {\r\n display: \"inline-block\",\r\n margin: 0,\r\n flexShrink: 0,\r\n width: themeSpacing(6),\r\n height: themeSpacing(6),\r\n borderRadius: \"50%\",\r\n border: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-3\", color)}`,\r\n borderTopColor: (listener) => themeColor(listener, \"shift-6\", color),\r\n boxSizing: \"border-box\",\r\n padding: 0,\r\n animation: `${animationName} 0.7s linear infinite`,\r\n [`@keyframes ${animationName}`]: keyframes,\r\n } as StyleObject,\r\n\r\n };\r\n}\r\n\r\nexport { spinner };\r\n","import { PartialElement, DomphyElement, State } from \"@domphy/core\";\r\nimport { toState, ValueOrState } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\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-11\",\r\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: themeSpacing(2),\r\n paddingInline: themeSpacing(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 { selectList };\r\n","import { PartialElement, toState, type State } from \"@domphy/core\";\r\nimport { themeSpacing, ThemeColor, themeColor, themeSize } from \"@domphy/theme\";\r\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: themeSpacing(8),\r\n paddingInline: themeSpacing(3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&:hover:not([disabled]):not([aria-selected=true])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&[aria-selected=true]\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\", accentColor),\r\n color: (listener) => themeColor(listener, \"shift-8\"),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\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, 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 onPlacement?: (anchor: HTMLElement, popover: HTMLElement, placement: Placement) => void;\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, content: props.content, onPlacement: props.onPlacement })\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: themeSpacing(8),\r\n minWidth: themeSpacing(32),\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n paddingInline: themeSpacing(2),\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", 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 } from \"@domphy/core\";\r\nimport { ThemeColor, themeColor, themeSize, themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction inputSwitch(props: { accentColor?: ThemeColor } = {}): PartialElement {\r\n const { accentColor = \"primary\" } = props;\r\n\r\n return {\r\n dataTone: \"increase-2\",\r\n type: \"checkbox\",\r\n _onSchedule: (node) => {\r\n if (node.tagName != \"input\") {\r\n console.warn(`\"inputSwitch\" primitive patch must use input tag`);\r\n return;\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n appearance: \"none\",\r\n position: \"relative\",\r\n display: \"inline-flex\",\r\n width: themeSpacing(8),\r\n height: themeSpacing(6),\r\n cursor: \"pointer\",\r\n margin: `0`,\r\n paddingBlock: themeSpacing(1),\r\n \"&:checked\": {\r\n \"&::before\": {\r\n backgroundColor: (listener) => themeColor(listener, \"increase-3\", accentColor),\r\n },\r\n \"&::after\": {\r\n left: `calc(100% - ${themeSpacing(3.5)})`,\r\n },\r\n },\r\n \"&::after\": {\r\n content: `\"\"`,\r\n aspectRatio: `1/1`,\r\n position: \"absolute\",\r\n width: themeSpacing(3),\r\n height: themeSpacing(3),\r\n borderRadius: themeSpacing(999),\r\n left: themeSpacing(0.5),\r\n top: \"50%\",\r\n transform: \"translateY(-50%)\",\r\n transition: \"left 0.3s\",\r\n backgroundColor: (listener) => themeColor(listener, \"decrease-3\"),\r\n },\r\n \"&::before\": {\r\n content: '\"\"',\r\n width: \"100%\",\r\n borderRadius: themeSpacing(999),\r\n display: \"inline-block\",\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n lineHeight: 1,\r\n backgroundColor: (listener) => themeColor(listener),\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { inputSwitch };\r\n","import { type PartialElement, toState, type ValueOrState } from \"@domphy/core\";\r\nimport { type ThemeColor, themeColor, themeSize, themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction buttonSwitch(props: {\r\n checked?: ValueOrState<boolean>;\r\n accentColor?: ThemeColor;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const {\r\n checked = false,\r\n accentColor = \"primary\",\r\n color = \"neutral\",\r\n } = props;\r\n\r\n const check = toState(checked);\r\n\r\n return {\r\n _onSchedule: (node) => {\r\n if (node.tagName != \"button\") {\r\n console.warn(`\"buttonSwitch\" primitive patch must use button tag`);\r\n }\r\n },\r\n role: \"switch\",\r\n ariaChecked: (listener) => check.get(listener),\r\n dataTone: \"increase-2\",\r\n onClick: () => check.set(!check.get()),\r\n style: {\r\n position: \"relative\",\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n fontSize: (listener) => themeSize(listener),\r\n border: \"none\",\r\n outlineWidth: \"1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-2\", color)}`,\r\n minWidth: themeSpacing(12),\r\n minHeight: themeSpacing(6),\r\n borderRadius: themeSpacing(999),\r\n paddingLeft: themeSpacing(7),\r\n paddingRight: themeSpacing(2),\r\n transition: \"padding-left 0.3s, padding-right 0.3s\",\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"& > :first-child\": {\r\n content: '\"\"',\r\n position: \"absolute\",\r\n display: \"inline-flex\",\r\n alignItems: \"center\",\r\n left: themeSpacing(0.5),\r\n top: \"50%\",\r\n transform: \"translateY(-50%)\",\r\n transition: \"left 0.3s\",\r\n width: themeSpacing(5),\r\n height: themeSpacing(5),\r\n borderRadius: themeSpacing(999),\r\n color: (listener) => themeColor(listener, \"shift-6\"),\r\n backgroundColor: (listener) => themeColor(listener, \"decrease-2\", color),\r\n },\r\n \"&[aria-checked=true]\": {\r\n backgroundColor: (listener) => themeColor(listener, \"increase-3\", accentColor),\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"decrease-2\"),\r\n paddingLeft: themeSpacing(2),\r\n paddingRight: themeSpacing(7),\r\n },\r\n \"&[aria-checked=true] > :first-child\": {\r\n left: `calc(100% - ${themeSpacing(5.5)})`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { buttonSwitch };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, ThemeColor, themeSize } from \"@domphy/theme\";\r\n\r\nfunction small(props: { color?: ThemeColor} = {}): PartialElement {\r\n const {\r\n color = \"neutral\",\r\n } = props;\r\n\r\n return {\r\n dataSize:\"decrease-1\",\r\n _onInsert: (node) => {\r\n if (node.tagName != \"small\") {\r\n console.warn(`\"small\" primitive patch must use small tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n },\r\n };\r\n}\r\n\r\nexport { small };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction strong(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"strong\") {\r\n console.warn(`\"strong\" primitive patch must use strong tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n fontWeight: 700,\r\n color: (listener) => themeColor(listener, \"shift-8\", color),\r\n },\r\n };\r\n}\r\n\r\nexport { strong };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction subscript(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"sub\") {\r\n console.warn(`\"subscript\" primitive patch must use sub tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\r\n verticalAlign: \"sub\",\r\n lineHeight: 0,\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n },\r\n };\r\n}\r\n\r\nexport { subscript };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction superscript(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"sup\") {\r\n console.warn(`\"superscript\" primitive patch must use sup tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"decrease-1\"),\r\n verticalAlign: \"super\",\r\n lineHeight: 0,\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n },\r\n };\r\n}\r\n\r\nexport { superscript };\r\n","import { type PartialElement, type DomphyElement } from \"@domphy/core\";\r\nimport { type ThemeColor, themeColor, themeSpacing, themeSize } from \"@domphy/theme\";\r\n\r\nfunction table(props: { color?: ThemeColor } = {}): PartialElement {\r\n const {\r\n color = \"neutral\",\r\n } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"table\") {\r\n console.warn(`\"table\" primitive patch must use table tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n width: \"100%\",\r\n borderCollapse: \"collapse\",\r\n \"& caption\": {\r\n captionSide: \"bottom\"\r\n },\r\n \"& th, & thead td\": {\r\n textAlign: \"left\",\r\n fontWeight: 500,\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(1),\r\n color: (listener) => themeColor(listener, \"shift-7\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n },\r\n \"& td\": {\r\n textAlign: \"left\",\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(1),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n boxShadow: (listener) => `inset 0 1px 0 ${themeColor(listener, \"shift-3\", color)}`,\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n },\r\n \"& tfoot th, & tfoot td\": {\r\n textAlign: \"left\",\r\n fontWeight: 500,\r\n paddingInline: themeSpacing(3),\r\n paddingBlock: themeSpacing(1),\r\n color: (l) => themeColor(l, \"shift-7\", color),\r\n backgroundColor: (l) => themeColor(l, \"inherit\"),\r\n boxShadow: (l) => `inset 0 -1px 0 ${themeColor(l, \"shift-3\", color)}`\r\n },\r\n \"& tr\": {\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n },\r\n\r\n \"& tbody tr:hover\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-2\") + \"!important\",\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { table };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSpacing, themeSize, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction textarea(\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 != \"textarea\") {\r\n console.warn(`\"textarea\" primitive patch must use textarea tag`);\r\n }\r\n },\r\n style: {\r\n fontFamily: \"inherit\",\r\n lineHeight: \"inherit\",\r\n resize: \"vertical\",\r\n paddingInline: themeSpacing(4),\r\n paddingBlock: themeSpacing(2),\r\n border:\"none\",\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n outlineOffset: \"-1px\",\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", color)}`,\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n \"&::placeholder\": {\r\n color: (listener) => themeColor(listener, \"shift-4\"),\r\n },\r\n \"&:hover:not([disabled]):not([aria-busy=true])\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", accentColor)}`,\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", accentColor)}`,\r\n },\r\n \"&:invalid\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-4\", \"error\")}`,\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.7,\r\n cursor: \"not-allowed\",\r\n color: (listener) => themeColor(listener, \"shift-5\", \"neutral\"),\r\n outline: (listener) => `1px solid ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport { textarea };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction unorderedList(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"ul\") {\r\n console.warn(`\"unorderedList\" primitive patch must use ul tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n marginTop: 0,\r\n marginBottom: 0,\r\n paddingLeft: themeSpacing(3),\r\n listStyleType: \"disc\",\r\n listStylePosition: \"outside\",\r\n },\r\n };\r\n}\r\n\r\nexport { unorderedList };\r\n","import { PartialElement } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction orderedList(props: { color?: ThemeColor } = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n return {\r\n _onInsert: (node) => {\r\n if (node.tagName != \"ol\") {\r\n console.warn(`\"orderedList\" primitive patch must use ol tag`);\r\n }\r\n },\r\n style: {\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-6\", color),\r\n marginTop: 0,\r\n marginBottom: 0,\r\n paddingLeft: themeSpacing(3),\r\n listStyleType: \"decimal\",\r\n listStylePosition: \"outside\",\r\n },\r\n };\r\n}\r\n\r\nexport { orderedList };\r\n","import { type PartialElement, type DomphyElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\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: themeSpacing(8),\r\n height: themeSpacing(8),\r\n paddingInline: themeSpacing(2),\r\n borderRadius: themeSpacing(2),\r\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-6\", color),\r\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener: any) => themeColor(listener, \"shift-1\", color),\r\n },\r\n \"&[disabled]\": {\r\n opacity: 0.4,\r\n cursor: \"not-allowed\",\r\n },\r\n };\r\n\r\n const activeStyle = {\r\n ...btnBase,\r\n backgroundColor: (listener: any) => themeColor(listener, \"shift-2\", accentColor),\r\n color: (listener: any) => themeColor(listener, \"shift-8\", accentColor),\r\n fontWeight: \"600\",\r\n cursor: \"default\",\r\n \"&:hover:not([disabled])\": {\r\n backgroundColor: (listener: any) => themeColor(listener, \"shift-2\", accentColor),\r\n },\r\n };\r\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: themeSpacing(2), color: (listener: any) => themeColor(listener, \"shift-4\", color) } });\r\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\";\r\nimport { themeColor, type ThemeColor, themeSize, themeSpacing } from \"@domphy/theme\";\r\n\r\nfunction divider(props: {\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const {\r\n color = \"neutral\",\r\n } = props;\r\n\r\n return {\r\n role: \"separator\",\r\n _onInsert: (node) => {\r\n if (node.tagName !== \"div\") {\r\n console.warn(`\"divider\" patch should be used with <div>`)\r\n }\r\n },\r\n style: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"baseline\",\r\n gap: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n minHeight: \"1lh\",\r\n \"&::before\": {\r\n content: `\"\"`,\r\n flex:1,\r\n borderColor: (listener) => themeColor(listener, \"shift-3\", color),\r\n borderWidth: \"1px\",\r\n borderBottomStyle: \"solid\",\r\n },\r\n \"&::after\": {\r\n content: `\"\"`,\r\n flex:1,\r\n borderColor: (listener) => themeColor(listener, \"shift-3\", color),\r\n borderWidth: \"1px\",\r\n borderBottomStyle: \"solid\",\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { divider };\r\n","import { type PartialElement, type ValueOrState, toState } from \"@domphy/core\";\r\nimport { themeColor, 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.onChange(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-7\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\", color),\r\n border: \"none\",\r\n padding: themeSpacing(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-3\", \"neutral\")}`,\r\n \"&::backdrop\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", \"neutral\"),\r\n opacity: 0.75,\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport { drawer };\r\n","import { PartialElement, 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 onPlacement?: (anchor: HTMLElement, popover: HTMLElement, placement: Placement) => void;\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\r\n let { show, hide, anchorPartial } = creatFloating({ open: openState, placement, content: props.content, onPlacement: props.onPlacement })\r\n\r\n const popoverPartial: PartialElement = {\r\n role: \"dialog\",\r\n dataTone: \"shift-6\", \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: () => openOn === \"click\" && (openState.get() ? hide() : show()),\r\n onFocus: () => show(),\r\n onBlur: () => hide(),\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, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\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 {\r\n _portal: (rootNode) => {\r\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 },\r\n role: \"status\",\r\n ariaAtomic: \"true\",\r\n style: {\r\n minWidth: themeSpacing(32),\r\n pointerEvents: \"auto\",\r\n paddingBlock: themeSpacing(2),\r\n paddingInline: themeSpacing(4),\r\n borderRadius: themeSpacing(2),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n color: (listener) => themeColor(listener, \"shift-1\", color),\r\n backgroundColor: (listener) => themeColor(listener, \"shift-9\", color),\r\n boxShadow: (listener) => `0 ${themeSpacing(2)} ${themeSpacing(8)} ${themeColor(listener, \"shift-3\", \"neutral\")}`,\r\n opacity: (listener) => Number(state.get(listener)),\r\n transform: (listener) => state.get(listener) ? \"translateY(0)\" : isTop ? \"translateY(-100%)\" : \"translateY(100%)\",\r\n transition: \"opacity 300ms ease, transform 300ms ease\",\r\n },\r\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, DomphyElement, toState, State, ValueOrState, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor, 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?: DomphyElement | 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 let tooltipId: string | null = null\r\n const placeState = toState(placement);\r\n\r\n let contentElement = typeof content == \"string\" ? {span:content} : content\r\n let { show, hide, anchorPartial } = creatFloating({ open, placement, content: contentElement })\r\n\r\n const tooltipPartial: PartialElement = {\r\n role: \"tooltip\",\r\n dataSize: \"decrease-1\",\r\n dataTone: \"shift-11\",\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: themeSpacing(1),\r\n paddingInline: themeSpacing(3),\r\n borderRadius: themeSpacing(2),\r\n color: (listener) => themeColor(listener, \"shift-6\"),\r\n backgroundColor: (listener) => themeColor(listener),\r\n fontSize: (listener) => themeSize(listener, \"inherit\"),\r\n },\r\n $: [popoverArrow({ placement, 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, themeSize } from \"@domphy/theme\";\r\n\r\nfunction tab(props: {\r\n accentColor?: ThemeColor;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const {\r\n accentColor = \"primary\",\r\n color = \"neutral\",\r\n } = props;\r\n let partial: PartialElement = {\r\n role: \"tab\",\r\n _onInsert: (node) => {\r\n\r\n if (node.tagName != \"button\") {\r\n console.warn(`\"tab\" patch must use button tag`);\r\n }\r\n\r\n let context = node.getContext(\"tabs\")\r\n 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: themeSpacing(8),\r\n paddingInline: themeSpacing(4),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-6\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-2\", color)}`,\r\n \"&:hover:not([disabled])\": {\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-3\", color)}`,\r\n },\r\n \"&[aria-selected=true]:not([disabled])\": {\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-4\", accentColor)}`,\r\n },\r\n \"&:focus-visible\": {\r\n boxShadow: (listener) => `inset 0 -${themeSpacing(0.5)} 0 0 ${themeColor(listener, \"shift-6\", accentColor)}`,\r\n\r\n },\r\n },\r\n }\r\n return partial\r\n}\r\n\r\n\r\nexport { tab };\r\n","import { PartialElement, ElementNode, merge } from \"@domphy/core\";\r\nimport { themeSpacing, themeColor } from \"@domphy/theme\";\r\n\r\nfunction tabPanel(): PartialElement {\r\n let partial: PartialElement = {\r\n role: \"tabpanel\",\r\n style: {\r\n paddingBlock: themeSpacing(2),\r\n paddingInline: themeSpacing(2),\r\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, themeSize, themeSpacing, type ThemeColor } from \"@domphy/theme\";\r\n\r\nfunction menu(props: {\r\n activeKey?: ValueOrState<number | string>;\r\n color?: ThemeColor;\r\n} = {}): PartialElement {\r\n const { color = \"neutral\" } = props;\r\n\r\n let partial: PartialElement = {\r\n role: \"menu\",\r\n dataTone:\"shift-11\",\r\n _onSchedule: (node, element) => {\r\n let partial = {\r\n _context: {\r\n menu: {\r\n activeKey: toState(props.activeKey || 0),\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: themeSpacing(2),\r\n paddingInline: themeSpacing(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, 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[];\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 node.attributes.set(\"ariaCurrent\", (listener) => context.activeKey.get(listener) == key || undefined)\r\n node.addEvent(\"click\", () => context.activeKey.set(key))\r\n },\r\n onKeyDown:(e:KeyboardEvent,node)=>{\r\n const k = (e as KeyboardEvent).key;\r\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(k)) return;\r\n e.preventDefault();\r\n const items = (node.parent?.children.items ?? []).filter(\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: themeSpacing(8),\r\n paddingInline: themeSpacing(3),\r\n border: \"none\",\r\n outline: \"none\",\r\n color: (listener) => themeColor(listener, \"shift-6\"),\r\n backgroundColor: (listener) => themeColor(listener, \"inherit\"),\r\n \"&:hover:not([disabled]):not([aria-current=true])\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\"),\r\n },\r\n \"&[aria-current=true]\": {\r\n backgroundColor: (listener) => themeColor(listener, \"shift-1\", accentColor),\r\n color: (listener) => themeColor(listener, \"shift-7\"),\r\n },\r\n \"&:focus-visible\": {\r\n outline: (listener) => `${themeSpacing(0.5)} solid ${themeColor(listener, \"shift-5\", 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,KCAO,IAAAC,GAAA,GAAAC,GAAAD,GAAA,mBAAAE,GAAA,sBAAAC,GAAA,oBAAAC,GAAA,gBAAAC,GAAA,gBAAAC,EAAA,aAAAC,GAAA,aAAAC,GAAA,cAAAC,EAAA,UAAAC,GAAA,aAAAC,GAAA,eAAAC,EAAA,UAAAC,EAAA,YAAAC,IAAA,IAAMC,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,EC1KaC,GAAN,KAAe,CAAf,aAAA,CACL,KAAQ,WAAkD,CAAC,CAAA,CAE3D,UAAiB,CACf,GAAI,KAAK,WACP,QAAWC,KAAS,KAAK,WACvB,KAAK,WAAWA,CAAK,EAAE,MAAM,EAIjC,KAAK,WAAa,IACpB,CACA,YAAYA,EAAeC,EAA+B,CACxD,GAAI,CAAC,KAAK,WAAY,MAAO,IAAM,CAAE,EAErC,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,OAAK,KAAK,WAAWD,CAAK,EAAE,IAAIC,CAAQ,IACtC,KAAK,WAAWD,CAAK,EAAE,IAAIC,CAAQ,EAC/B,OAAOA,EAAS,aAAgB,YAClCA,EAAS,YAAYC,CAAO,GAIzBA,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,CAC9C,GAAI,CAAC,KAAK,WAAY,OACtB,IAAMD,EAAY,KAAK,WAAWH,CAAK,EACvC,GAAIG,EACF,QAAWF,IAAY,CAAC,GAAGE,CAAS,EAClC,GAAI,CACFF,EAAS,GAAGG,CAAI,CAClB,OAASC,EAAG,CACV,QAAQ,MAAMA,CAAC,CACjB,CAGN,CACF,ECzDaC,GAAN,KAAe,CAKpB,YAAYC,EAAiB,CAF7B,KAAQ,UAA6B,IAAIR,GAGvC,KAAK,aAAeQ,EACpB,KAAK,OAASA,CAChB,CAEA,IAAIN,EAAgC,CAClC,OAAIA,GAAU,KAAK,SAASA,CAAQ,EAC7B,KAAK,MACd,CAEA,IAAIO,EAAmB,CAChB,KAAK,YACV,KAAK,OAASA,EACd,KAAK,UAAU,OAAO,SAAUA,CAAQ,EAC1C,CAEA,OAAc,CACZ,KAAK,IAAI,KAAK,YAAY,CAC5B,CAEA,SAASP,EAAwC,CAC/C,OAAK,KAAK,UACH,KAAK,UAAU,YAAY,SAAUA,CAAQ,EADxB,IAAM,CAAE,CAEtC,CAEA,UAAiB,CACX,KAAK,YACP,KAAK,UAAU,SAAS,EACxB,KAAK,UAAY,KAErB,CACF,ECrCO,SAASQ,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,EAAUJ,CAAM,GAG7B,QAAWd,KAAOc,EAAQ,CAEtB,IAAMK,EAAQL,EAAOd,CAAG,EACxB,GAAI,EAAuBmB,GAAU,MAAQA,IAAU,IAEvD,GAAI,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAK,EAC7C,OAAON,EAAOb,CAAG,GAAM,SACvBa,EAAOb,CAAG,EAAIY,EAAMC,EAAOb,CAAG,EAAGmB,CAAK,EAEtCN,EAAOb,CAAG,EAAImB,UAIdJ,EAAM,SAASf,CAAG,EAClB,GAAI,OAAOa,EAAOb,CAAG,GAAM,YAAc,OAAOmB,GAAU,WAAY,CAClE,IAAIC,EAAMP,EAAOb,CAAG,EACpBa,EAAOb,CAAG,EAAKI,GAAsB,CACjC,IAAIiB,EAAO,OAAOD,GAAQ,WAAaA,EAAIhB,CAAQ,EAAIgB,EACnDE,EAAO,OAAOH,GAAU,WAAaA,EAAMf,CAAQ,EAAIe,EAC3D,MAAO,CAACE,EAAMC,CAAI,EAAE,OAAOd,GAAKA,CAAC,EAAE,KAAK,IAAI,CAChD,CACJ,MACIK,EAAOb,CAAG,EAAI,CAACa,EAAOb,CAAG,EAAGmB,CAAK,EAAE,OAAOX,GAAKA,CAAC,EAAE,KAAK,IAAI,UAGxDS,EAAS,SAASjB,CAAG,EAC5B,GAAI,OAAOa,EAAOb,CAAG,GAAM,YAAc,OAAOmB,GAAU,WAAY,CAClE,IAAIC,EAAMP,EAAOb,CAAG,EACpBa,EAAOb,CAAG,EAAKI,GAAsB,CACjC,IAAIiB,EAAO,OAAOD,GAAQ,WAAaA,EAAIhB,CAAQ,EAAIgB,EACnDE,EAAO,OAAOH,GAAU,WAAaA,EAAMf,CAAQ,EAAIe,EAC3D,MAAO,CAACE,EAAMC,CAAI,EAAE,OAAOd,GAAKA,CAAC,EAAE,KAAK,EAAE,CAC9C,CACJ,MACIK,EAAOb,CAAG,EAAI,CAACa,EAAOb,CAAG,EAAGmB,CAAK,EAAE,OAAOX,GAAKA,CAAC,EAAE,KAAK,EAAE,UAEtDQ,EAAM,SAAShB,CAAG,EACzB,GAAI,OAAOa,EAAOb,CAAG,GAAM,YAAc,OAAOmB,GAAU,WAAY,CAClE,IAAIC,EAAMP,EAAOb,CAAG,EACpBa,EAAOb,CAAG,EAAKI,GAAsB,CACjC,IAAIiB,EAAO,OAAOD,GAAQ,WAAaA,EAAIhB,CAAQ,EAAIgB,EACnDE,EAAO,OAAOH,GAAU,WAAaA,EAAMf,CAAQ,EAAIe,EAC3D,MAAO,CAACE,EAAMC,CAAI,EAAE,OAAOd,GAAKA,CAAC,EAAE,KAAK,GAAG,CAC/C,CACJ,MACIK,EAAOb,CAAG,EAAI,CAACa,EAAOb,CAAG,EAAGmB,CAAK,EAAE,OAAOX,GAAKA,CAAC,EAAE,KAAK,GAAG,UAEvDR,EAAI,WAAW,IAAI,EAAG,CAC7B,IAAIuB,EAAOvB,EAAI,QAAQ,KAAM,EAAE,EAAE,YAAY,EAC7CwB,GAASX,EAAyBU,EAAMJ,CAAK,CACjD,SAAWnB,EAAI,WAAW,KAAK,EAAG,CAC9B,IAAIuB,EAAOvB,EAAI,QAAQ,MAAO,EAAE,EAChCyB,GAAQZ,EAAyBU,EAAMJ,CAAK,CAChD,MACIN,EAAOb,CAAG,EAAImB,CAG1B,CACA,OAAON,CACX,CAEO,SAASa,EAAWC,EAA6B,CACpD,OAAOA,aAAelB,GAAQkB,EAAM,IAAIlB,GAASkB,CAAG,CACxD,CAEO,SAASC,EAAWC,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,CC7EO,SAASL,GAAiCO,EAAyBC,EAAaC,EAA2B,CAC9G,IAAMC,EAAe,MAAMF,CAAQ,GAC/BG,EAAUJ,EAAQG,CAAY,EAE9B,OAAOC,GAAY,WAClBJ,EAAgBG,CAAY,EAAI,IAAI5B,IAAgB,CAChD6B,EAAqB,GAAG7B,CAAI,EAC5B2B,EAAqB,GAAG3B,CAAI,CACjC,EAECyB,EAAgBG,CAAY,EAAID,CAEzC,CAEO,SAASV,GACZa,EACAC,EACAJ,EACI,CACJ,IAAMK,EAAgB1C,GAAayC,CAAS,EAC5C,GAAI,CAACC,EACD,MAAM,MAAM,uBAAuBD,CAAS,GAAG,EAEnD,IAAMF,EAAWC,EAAmBE,CAAa,EAE7C,OAAOH,GAAW,WACjBC,EAAmBE,CAAa,EAAI,CAACpC,EAA+BqC,IAAsB,CACvFJ,EAAQjC,EAAOqC,CAAI,EACnBN,EAAQ/B,EAAOqC,CAAI,CACvB,EAECH,EAAmBE,CAAa,EAAIL,CAE7C,CAEO,SAAShB,EAAUC,EAAYsB,EAAO,IAAI,QAAgB,CAE7D,GADItB,IAAU,MAAQ,OAAOA,GAAU,UACnC,OAAOA,GAAU,WAAY,OAAOA,EACxC,GAAIsB,EAAK,IAAItB,CAAK,EAAG,OAAOsB,EAAK,IAAItB,CAAK,EAE1C,IAAMuB,EAAQ,OAAO,eAAevB,CAAK,EACzC,GAAIuB,IAAU,OAAO,WAAa,CAAC,MAAM,QAAQvB,CAAK,EAAG,OAAOA,EAEhE,IAAIwB,EAEJ,GAAI,MAAM,QAAQxB,CAAK,EAAG,CACtBwB,EAAQ,CAAC,EACTF,EAAK,IAAItB,EAAOwB,CAAK,EACrB,QAAWC,KAAKzB,EAAOwB,EAAM,KAAKzB,EAAU0B,EAAGH,CAAI,CAAC,EACpD,OAAOE,CACX,CAEA,GAAIxB,aAAiB,KAAM,OAAO,IAAI,KAAKA,CAAK,EAChD,GAAIA,aAAiB,OAAQ,OAAO,IAAI,OAAOA,CAAK,EACpD,GAAIA,aAAiB,IAAK,CACtBwB,EAAQ,IAAI,IACZF,EAAK,IAAItB,EAAOwB,CAAK,EACrB,OAAW,CAACE,EAAGD,CAAC,IAAKzB,EAAOwB,EAAM,IAAIzB,EAAU2B,EAAGJ,CAAI,EAAGvB,EAAU0B,EAAGH,CAAI,CAAC,EAC5E,OAAOE,CACX,CACA,GAAIxB,aAAiB,IAAK,CACtBwB,EAAQ,IAAI,IACZF,EAAK,IAAItB,EAAOwB,CAAK,EACrB,QAAWC,KAAKzB,EAAOwB,EAAM,IAAIzB,EAAU0B,EAAGH,CAAI,CAAC,EACnD,OAAOE,CACX,CACA,GAAI,YAAY,OAAOxB,CAAK,EACxB,OAAO,IAAKA,EAAc,YAAYA,CAAK,EAE/C,GAAIA,aAAiB,YACjB,OAAOA,EAAM,MAAM,CAAC,EAGxBwB,EAAQ,OAAO,OAAOD,CAAK,EAC3BD,EAAK,IAAItB,EAAOwB,CAAK,EAErB,QAAW3C,KAAO,QAAQ,QAAQmB,CAAK,EACnCwB,EAAM3C,CAAG,EAAIkB,EAAUC,EAAMnB,CAAG,EAAGyC,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,QAAShB,EAAI,EAAGA,EAAIkB,EAAK,OAAQlB,IAAK,CAClC,IAAI/B,EAAMiD,EAAKlB,CAAC,EACZJ,EAAMoB,EAAQ/C,CAA2B,EAC7C,GAAI+B,GAAK,GAAK,CAAC9B,GAAS,SAASD,CAAG,GAAK,CAACA,EAAI,SAAS,GAAG,GAAK,CAACgD,EAC5D,MAAM,MAAM,OAAOhD,CAAG,6BAA6B,EAChD,GAAIA,GAAO,SAAW2B,GAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,kBACxE,MAAM,MAAM,0BAA0B,EACnC,GAAI3B,GAAO,IACd+C,EAAQ,EAAG,QAAQH,GAAKE,GAASF,EAAqB,EAAI,CAAC,MACxD,CAAA,GAAI5C,EAAI,WAAW,KAAK,GAAK,OAAO2B,GAAO,WAC9C,MAAM,MAAM,QAAQ3B,CAAG,WAAW2B,CAAG,uBAAuB,EACzD,GAAI3B,EAAI,WAAW,IAAI,GAAK,OAAO2B,GAAO,WAC7C,MAAM,MAAM,SAAS3B,CAAG,WAAW2B,CAAG,uBAAuB,EAC1D,GAAI3B,GAAO,WAAa,OAAO2B,GAAQ,WAC1C,MAAM,MAAM,iDAAiD,EAC1D,GAAI3B,GAAO,YAAc,OAAO,UAAU,SAAS,KAAK2B,CAAG,IAAM,kBACpE,MAAM,MAAM,6BAA6B,EACtC,GAAI3B,GAAO,aAAe,OAAO,UAAU,SAAS,KAAK2B,CAAG,IAAM,kBACrE,MAAM,MAAM,8BAA8B,EACvC,GAAI3B,GAAO,QAAW,OAAO2B,GAAQ,UAAY,OAAOA,GAAQ,SACnE,MAAM,MAAM,mCAAmC,CAAA,CAEvD,CACA,MAAO,EACX,CAqBO,SAASuB,GAAOrB,EAAsB,CACzC,MAAO,iEAAiE,KAAKA,EAAI,KAAK,CAAC,CAC3F,CAEO,SAASsB,GAAWtB,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,SAASuB,GAAWL,EAA6C,CACpE,OAAO,OAAO,KAAKA,CAAO,EAAE,KAAK,GAAK9C,GAAS,SAAS,CAAC,CAAC,CAC9D,CAGO,SAASoD,GAAaxB,EAAqB,CAC9C,OAAOA,EAAI,QAAQ,qBAAsB,OAAO,EAAE,YAAY,CAClE,CAEO,SAASyB,GAAiBC,EAAmB,CAChD,GAAIA,EAAU,QAAQ,GAAG,IAAM,EAC3B,MAAO,CAACA,CAAS,EAMrB,QAJIC,EAAW,CAAC,EACZC,EAAS,EACTC,EAAW,EACXC,EAAQ,GACH5B,EAAI,EAAG6B,EAAML,EAAU,OAAQxB,EAAI6B,EAAK7B,IAAK,CAClD,IAAI8B,EAAON,EAAUxB,CAAC,EACtB,GAAI8B,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,GAAKxD,EAAMuD,EAAMD,GAAaE,CAAC,CAAC,CAAC,EACnD,OAAOpC,EAAQ,EACfpB,EAAMuD,EAAMnC,CAAO,EAEZmC,CACX,KACI,QAAOnC,CAEf,EC5QaqC,GAAW,CACtB,OACA,OACA,KACA,MACA,QACA,KACA,MACA,QACA,OACA,OACA,SACA,QACA,KACF,ECdaC,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,EClBaC,GAAN,KAAuB,CAK5B,YAAYlD,EAAcJ,EAAYuD,EAAa,CACjD,KAAK,OAASA,EACd,KAAK,UAAaJ,GAAwC,SAAS/C,CAAI,EACnEiD,GAAgB,SAASjD,CAAI,EAC/B,KAAK,KAAOA,EAEZ,KAAK,KAAO8B,GAAa9B,CAAI,EAE/B,KAAK,MAAQ,OACb,KAAK,IAAIJ,CAAK,CAChB,CAEA,QAAe,CACb,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,OAAO,WAAY,OAC7C,IAAMwD,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,IAAIxD,EAA6B,CAC/B,GAAIA,GAAS,KAAM,CACjB,KAAK,MAAQ,KACb,KAAK,OAAO,EACZ,MACF,CACA,GAAI,OAAOA,GAAU,UAAY,qBAAqB,KAAKA,CAAK,EAC9D,KAAK,MAAQgC,GAAWhC,CAAK,UACpB,OAAOA,GAAS,WAAY,CACrC,IAAIf,EAAgB,IAAM,CACnBA,IACL,KAAK,MAAQ,KAAK,UAAY,CAAA,CAASe,EAAmB,EAAMA,EAAmB,EACnF,KAAK,OAAO,EACd,EAEAf,EAAS,YAAc,KAAK,OAE5BA,EAAS,YAAeC,GAAwB,CAC1C,KAAK,QACP,KAAK,OAAO,QAAQ,eAAgB,IAAM,CACxCA,EAAQ,EACRD,EAAW,IACb,CAAC,CAEL,EAEA,KAAK,MAAQ,KAAK,UAAY,CAAA,CAAQe,EAAMf,CAAQ,EAAKe,EAAMf,CAAQ,CACzE,MACE,KAAK,MAAQ,KAAK,UAAY,CAAA,CAAQe,EAASA,EAGjD,KAAK,OAAO,CACd,CAEA,QAAe,CACT,KAAK,QAAU,KAAK,OAAO,YAC7B,KAAK,OAAO,WAAW,OAAO,KAAK,IAAI,EAEzC,KAAK,SAAS,CAChB,CAEA,UAAiB,CACf,KAAK,MAAQ,KACb,KAAK,OAAS,IAChB,CAEA,cAAuB,CACrB,GAAM,CAAE,KAAAI,EAAM,MAAAJ,CAAM,EAAI,KACxB,GAAI,KAAK,UACP,OAAOA,EAAQ,GAAGI,CAAI,GAAK,GACtB,CACL,IAAMI,EAAM,MAAM,QAAQR,CAAK,EAAI,KAAK,UAAUA,CAAK,EAAIA,EAC3D,MAAO,GAAGI,CAAI,KAAK4B,GAAW,OAAOxB,CAAG,CAAC,CAAC,GAC5C,CACF,CACF,EC3FakD,GAAN,KAAoB,CAMzB,YAAYH,EAAqB,CALjC,KAAA,UAAY,IAAIxE,GAEhB,KAAA,MAAiD,CAAC,EAIhD,KAAK,OAASwE,CAChB,CAEA,cAAuB,CACrB,GAAI,CAAC,KAAK,MAAO,MAAO,GACxB,IAAM7C,EAAM,OAAO,OAAO,KAAK,KAAK,EACjC,IAAKiD,GAASA,EAAK,aAAa,CAAC,EACjC,KAAK,GAAG,EACX,OAAOjD,EAAM,IAAIA,CAAG,GAAK,EAC3B,CAEA,IAAIN,EAAmB,CAxBzB,IAAAyC,EAyBI,GAAK,KAAK,MACV,OAAOA,EAAA,KAAK,MAAMzC,CAAI,IAAf,KAAA,OAAAyC,EAAkB,KAC3B,CAEA,IAAIzC,EAAcJ,EAA6B,CACzC,CAAC,KAAK,OAAS,CAAC,KAAK,SAErB,KAAK,MAAMI,CAAI,GACjB,KAAK,MAAMA,CAAI,EAAE,IAAIJ,CAAK,EAC1B,KAAK,OAAO,YAAc,KAAK,UAAU,OAAOI,EAAM,KAAK,MAAMA,CAAI,EAAE,KAAK,GAE5E,KAAK,MAAMA,CAAI,EAAI,IAAIkD,GAAiBlD,EAAMJ,EAAO,KAAK,MAAM,EAEpE,CAEA,SAASI,EAAcwD,EAAkD,CAxC3E,IAAAf,EAyCI,GAAI,KAAK,IAAIzC,CAAI,IAAKyC,EAAA,KAAK,SAAL,MAAAA,EAAa,WAAY,CAC7C,IAAM9B,EAAU6C,EAChB7C,EAAQ,YAAe7B,GAAqB,CA3ClD,IAAA2D,EA2CqD,OAAAA,EAAA,KAAK,SAAL,KAAA,OAAAA,EAAa,QAAQ,eAAgB3D,CAAAA,CAAAA,EACpF,KAAK,UAAU,YAAYkB,EAAMW,CAAO,CAC1C,CACF,CAEA,IAAIX,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,CAEf,GAAI,KAAK,MACP,QAAWvB,KAAO,KAAK,MACrB,KAAK,MAAMA,CAAG,EAAE,SAAS,EAG7B,KAAK,UAAU,SAAS,EACxB,KAAK,MAAQ,KACb,KAAK,OAAS,IAChB,CAEA,OAAOuB,EAAcyD,EAAuB,CAC1C,GACE,CAACV,GAAkB,SAAS/C,CAA0C,EAEtE,MAAM,MAAM,GAAGA,CAAI,6BAA6B,EAE9CyD,IAAU,GACZ,KAAK,IAAIzD,EAAM,EAAI,EACVyD,IAAU,GACnB,KAAK,OAAOzD,CAAI,EAEhB,KAAK,IAAIA,CAAI,EAAI,KAAK,OAAOA,CAAI,EAAI,KAAK,IAAIA,EAAM,EAAI,CAE5D,CAEA,SAAS0D,EAAyB,CAChC,GAAI,CAACA,GAAa,OAAOA,GAAc,SAAU,OAEjD,IAAMC,EAAM,CAACC,EAAiBC,IAAqB,CACjD,IAAMC,GAAQF,GAAW,IAAI,MAAM,GAAG,EAAE,OAAQ3E,GAAcA,CAAC,EAC/D,MAAA,CAAC6E,EAAK,SAASD,CAAQ,GAAKC,EAAK,KAAKJ,CAAS,EACxCI,EAAK,KAAK,GAAG,CACtB,EAEIjD,EAAU,KAAK,IAAI,OAAO,EAE1B,OAAOA,GAAY,WACrB,KAAK,IAAI,QAAS,IAAM8C,EAAI9C,EAAQ,EAAG6C,CAAS,CAAC,EAEjD,KAAK,IAAI,QAASC,EAAI9C,EAAS6C,CAAS,CAAC,CAE7C,CAEA,SAASA,EAA4B,CACnC,MAAI,CAACA,GAAa,OAAOA,GAAc,SAAiB,IACxC,KAAK,IAAI,OAAO,GAAK,IAChB,MAAM,GAAG,EAAE,OAAQzE,GAAcA,CAAC,EAC3C,SAASyE,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,OAAQ9E,GAAcA,CAAC,EAC5C,OAAQ+E,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,ECjJaK,GAAN,KAAe,CAMpB,YAAYC,EAA8BhB,EAAqB,CAL/D,KAAA,KAAO,WAML,KAAK,OAASA,EACd,KAAK,KAAOgB,IAAgB,GAAK,SAAW,OAAOA,CAAW,CAChE,CACA,gBAAiB,CACf,IAAIC,EACJ,GAAIzC,GAAO,KAAK,IAAI,EAAG,CACrB,IAAM0C,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,CAIvB,YAAYpB,EAAqB,CAHjC,KAAA,MAAoB,CAAC,EAInB,KAAK,MAAQA,CACf,CAEA,YAAY3B,EAAuCgD,EAAQ,EAAa,CACtE,OAAQ,OAAOhD,GAAY,UAAYA,IAAY,KAC/C,IAAIiD,EAAYjD,EAAS,KAAK,MAAOgD,CAAK,EAC1C,IAAIN,GAAS1C,GAAW,KAAO,GAAK,OAAOA,CAAO,EAAG,KAAK,KAAK,CACrE,CAEA,gBAAgBP,EAAgBuD,EAAe,CAC7C,GAAI,CAAC,KAAK,OAAS,CAAC,KAAK,MAAM,WAAY,OAC3C,IAAME,EAAM,KAAK,MAAM,WAEjBC,EAAK1D,aAAgBwD,EAAcxD,EAAK,WAAaA,EAAK,QAChE,GAAI0D,EAAI,CACN,IAAMC,EAAaF,EAAI,WAAWF,CAAK,GAAK,KACxCG,IAAOC,GACTF,EAAI,aAAaC,EAAIC,CAAU,CAEnC,CACF,CAEA,gBAAgBC,EAAiBC,EAAiB,CAChD,GAAI,CAAC,KAAK,OAAS,CAAC,KAAK,MAAM,WAAY,OAC3C,IAAM3B,EAAS,KAAK,MAAM,WAEpB4B,EAAIF,aAAiBJ,EAAcI,EAAM,WAAaA,EAAM,QAC5D9G,EAAI+G,aAAiBL,EAAcK,EAAM,WAAaA,EAAM,QAClE,GAAI,CAACC,GAAK,CAAChH,EAAG,OAEd,IAAMiH,EAAQD,EAAE,YACVE,EAAQlH,EAAE,YAEhBoF,EAAO,aAAa4B,EAAGE,CAAK,EAC5B9B,EAAO,aAAapF,EAAGiH,CAAK,CAC9B,CAEA,OAAOE,EAAwBC,EAAY,GAAMC,EAAS,GAAa,CAlDzE,IAAA3C,EAAA4C,EAAAC,EAAAC,EAoDI,IAAMC,EAAW,KAAK,MAAM,MAAM,EAG5BC,EAAQ,IAAI,IAClB,QAAWC,KAAQF,EACbE,aAAgBjB,GAAeiB,EAAK,MAAQ,MAAQA,EAAK,MAAQ,QACnED,EAAM,IAAIC,EAAK,IAAKA,CAAI,EAIxB,CAACN,GAAU,KAAK,MAAM,cAAYC,GAAA5C,EAAA,KAAK,MAAM,SAAX,KAAA,OAAAA,EAAmB,eAAnB,MAAA4C,EAAA,KAAA5C,EAAkC,KAAK,MAAOyC,CAAAA,GAEpF,QAAS1E,EAAI,EAAGA,EAAI0E,EAAO,OAAQ1E,IAAK,CACtC,IAAMmF,EAAQT,EAAO1E,CAAC,EAChB/B,EACH,OAAOkH,GAAU,UAAYA,IAAU,KAASA,EAAc,KAAO,OAExE,GAAIlH,IAAQ,OAAW,CACrB,IAAMmH,EAASH,EAAM,IAAIhH,CAAG,EAC5B,GAAImH,EAAQ,CACVH,EAAM,OAAOhH,CAAG,EAEhB,IAAMoH,EAAM,KAAK,MAAM,QAAQD,CAAM,EACrC,GAAIC,IAAQrF,GAAKqF,GAAO,EAAG,CACzB,IAAMC,EAAWF,aAAkBnB,GAAe,CAAC,CAACmB,EAAO,QAC3D,KAAK,KAAKC,EAAKrF,EAAGsF,EAAW,GAAQX,EAAW,EAAI,CACtD,CACAS,EAAO,OAAS,KAAK,MACrB,QACF,CACF,CAEA,KAAK,OAAOD,EAAOnF,EAAG2E,EAAW,EAAI,CACvC,CAEA,KAAO,KAAK,MAAM,OAASD,EAAO,QAChC,KAAK,OAAO,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,EAAGC,EAAW,EAAI,EAEhEM,EAAM,QAASxE,GAAS,KAAK,OAAOA,EAAMkE,EAAW,EAAI,CAAC,EACrDC,IAAQG,GAAAD,EAAA,KAAK,MAAM,SAAX,KAAA,OAAAA,EAAmB,SAAnB,MAAAC,EAAA,KAAAD,EAA4B,KAAK,KAAA,CAChD,CAEA,OAAOK,EAAqBnB,EAAgBW,EAAY,GAAMC,EAAS,GAAiB,CA9F1F,IAAA3C,EAAA4C,EAgGI,IAAIU,EAAS,KAAK,MAAM,OAClBC,EAAc,OAAOxB,GAAU,UAAY,MAAMA,CAAK,GAAKA,EAAQ,GAAKA,EAAQuB,EAClFA,EACAvB,EACEkB,EAAO,KAAK,YAAYC,EAAOK,CAAU,EAG/C,GAFA,KAAK,MAAM,OAAOA,EAAY,EAAGN,CAAI,EAEjCA,aAAgBjB,EAAa,CAE/BiB,EAAK,OAAO,QAAUA,EAAK,OAAO,OAAOA,CAAI,EAE7C,IAAItC,EAAa,KAAK,MAAM,WAC5B,GAAI+B,GAAa/B,EAGf,GAAIsC,EAAK,QAAS,CAChB,IAAItC,EAAasC,EAAK,QAAS,KAAK,MAAM,QAAQ,CAAC,EACnDtC,GAAcsC,EAAK,OAAOtC,CAAU,CACtC,KAAO,CACL,IAAI6C,EAAUP,EAAK,eAAe,EAC5BQ,GAAMzD,EAAAW,EAAW,WAAW4C,CAAU,IAAhC,KAAAvD,EAAqC,KACjDW,EAAW,aAAa6C,EAASC,CAAG,EACpC,IAAIC,EAAO/C,EAAW,YAAY,EAC5BZ,EAAc2D,aAAgB,WAAaA,EAAO,SAAS,KAC7DzD,EAAWH,GAAeC,CAAW,EACzCkD,EAAK,OAAO,OAAOhD,CAA4B,EAC/CgD,EAAK,OAAO,OAASA,EAAK,OAAO,MAAMA,CAAI,EAC3CA,EAAK,SAAS,MAAM,QAAQU,GAAS,CACnC,GAAIA,aAAiB3B,GAAe2B,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,IAAI7C,EAAa,KAAK,MAAM,WAC5B,GAAI+B,GAAa/B,EAAY,CAC3B,IAAI6C,EAAUP,EAAK,eAAe,EAC5BQ,GAAMb,EAAAjC,EAAW,WAAW4C,CAAU,IAAhC,KAAAX,EAAqC,KACjDjC,EAAW,aAAa6C,EAASC,CAAG,CACtC,CACF,CACA,MAAA,CAACd,GAAU,KAAK,MAAM,YAAc,KAAK,MAAM,OAAO,QAAU,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,EAC5FM,CACT,CAEA,OAAOA,EAAgBP,EAAY,GAAMC,EAAS,GAAa,CAE7D,IAAMZ,EAAQ,KAAK,MAAM,QAAQkB,CAAI,EACrC,GAAI,EAAAlB,EAAQ,GAEZ,CAAA,GAAIkB,aAAgBjB,EAAa,CAC/B,IAAM4B,EAAO,IAAM,CA1JzB,IAAA5D,EAAA4C,EA2JQ,IAAMV,EAAKe,EAAK,WAChB,KAAK,MAAM,OAAOlB,EAAO,CAAC,EAC1BW,GAAaR,GAAMA,EAAG,OAAO,GAC7BU,GAAA5C,EAAAiD,EAAK,SAAL,KAAA,OAAAjD,EAAa,SAAb,MAAA4C,EAAA,KAAA5C,EAAsBiD,CAAAA,EACtBA,EAAK,SAAS,CAChB,EACIA,EAAK,QAAUA,EAAK,OAAO,cAAgBA,EAAK,WAClDA,EAAK,OAAO,aAAaA,EAAMW,CAAI,EAEnCA,EAAK,CAGT,KAAO,CACL,IAAM1B,EAAKe,EAAK,QAChB,KAAK,MAAM,OAAOlB,EAAO,CAAC,EAC1BW,GAAaR,GAAMA,EAAG,OAAO,EAC7Be,EAAK,SAAS,CAChB,CAEA,CAACN,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,IAAMkB,EAAW,KAAK,MAAM,MAAM,EAElC,QAAWZ,KAAQY,EACjB,KAAK,OAAOZ,EAAMP,EAAW,EAAI,EAEnC,CAACC,GAAU,KAAK,MAAM,YAAc,KAAK,MAAM,OAAO,QAAU,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,CACrG,CAEA,UAAiB,CACf,KAAK,MAAQ,CAAC,CAChB,CAEA,KAAKmB,EAAgBC,EAAgBrB,EAAY,GAAMC,EAAS,GAAO,CACrE,GAAImB,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,EAEjBtB,GAAW,KAAK,gBAAgBsB,EAAOC,CAAK,EAEhD,CAACtB,GAAU,KAAK,MAAM,YAAc,KAAK,MAAM,OAAO,QAAU,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,CACrG,CAEA,KAAKuB,EAAmBC,EAAiBzB,EAAY,GAAMC,EAAS,GAAa,CAC/E,GAAIuB,EAAY,GAAKA,GAAa,KAAK,MAAM,QAC3CC,EAAU,GAAKA,GAAW,KAAK,MAAM,QAAUD,IAAcC,EAAS,OAExE,IAAMlB,EAAO,KAAK,MAAMiB,CAAS,EAEjC,KAAK,MAAM,OAAOA,EAAW,CAAC,EAC9B,KAAK,MAAM,OAAOC,EAAS,EAAGlB,CAAI,EAE9BP,GAAW,KAAK,gBAAgBO,EAAMkB,CAAO,EAEjD,CAACxB,GAAU,KAAK,MAAM,YAAc,KAAK,MAAM,OAAO,QAAU,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,CACrG,CAEA,cAAuB,CACrB,IAAIyB,EAAO,GACX,QAAWnB,KAAQ,KAAK,MAAOmB,GAAQnB,EAAK,aAAa,EACzD,OAAOmB,CACT,CACF,EC7NaC,GAAN,KAAoB,CAMzB,YAAY9G,EAAcJ,EAAmBmH,EAAuB,CAHpE,KAAA,MAAoB,GAIlB,KAAK,KAAO/G,EACZ,KAAK,QAAU8B,GAAa9B,CAAI,EAChC,KAAK,WAAa+G,EAClB,KAAK,IAAInH,CAAK,CAChB,CAEA,YAAmB,CACjB,GAAI,CAAC,KAAK,WAAY,OACtB,IAAMoH,EAAU,KAAK,WAAW,QAEhC,GAAIA,GAAYA,EAAyB,MAAO,CAC9C,IAAIC,EAA8BD,EAAyB,MAC3DC,EAAM,YAAY,KAAK,QAAS,OAAO,KAAK,KAAK,CAAC,EAE9CjE,EAAU,KAAK,IAAI,GACrBA,EAAU,KAAK,IAAI,EAAE,QAASkE,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,IAAItH,EAAyB,CAE3B,GAAI,OAAOA,GAAU,WAAY,CAC/B,IAAIuH,EAAgB,IAAM,CACnBA,IACL,KAAK,MAAQvH,EAAMuH,CAAQ,EAC3B,KAAK,WAAW,EAClB,EAEAA,EAAS,YAAerI,GAAwB,CA/CtD,IAAA2D,GAgDQA,EAAA,KAAK,WAAW,aAAhB,MAAAA,EAA4B,QAAQ,eAAgB,IAAM,CACxD3D,EAAQ,EACRqI,EAAW,IACb,CAAA,CACF,EAEAA,EAAS,YAAc,KAAK,WAAY,KACxC,KAAK,MAAQvH,EAAMuH,CAAQ,CAC7B,MACE,KAAK,MAAQvH,EAGf,KAAK,WAAW,CAClB,CAEA,QAAe,CACb,GAAK,KAAK,WAEV,CAAA,GAAI,KAAK,WAAW,mBAAmB,aAAc,CACnD,IAAM8C,EAAW,KAAK,WAAW,QAAQ,MACzCA,EAAS,eAAe,KAAK,OAAO,EAEhCM,EAAU,KAAK,IAAI,GACrBA,EAAU,KAAK,IAAI,EAAE,QAASkE,GAAW,CACvCxE,EAAS,eAAe,IAAIwE,CAAM,IAAI,KAAK,OAAO,EAAE,CACtD,CAAC,CAEL,CACA,OAAO,KAAK,WAAW,WAAY,KAAK,IAAI,EAC5C,KAAK,SAAS,CAAA,CAChB,CAEA,SAAkB,CAChB,IAAI5G,EAAM,GAAG,KAAK,OAAO,KAAK,KAAK,KAAK,GACxC,OAAI0C,EAAU,KAAK,IAAI,GACrBA,EAAU,KAAK,IAAI,EAAE,QAASkE,GAAW,CACvC5G,GAAO,MAAM4G,CAAM,IAAI,KAAK,OAAO,KAAK,KAAK,KAAK,EACpD,CAAC,EAEI5G,CACT,CACF,ECrFa8G,EAAN,MAAMC,EAAU,CAOrB,YAAYC,EAAsBnE,EAAiC,CALnE,KAAA,QAA4D,KAE5D,KAAA,WAAmD,CAAC,EAIlD,KAAK,aAAemE,EACpB,KAAK,UAAY,IAAIC,GAAU,IAAI,EACnC,KAAK,OAASpE,CAChB,CAEA,UAAiB,CAEf,GAAI,KAAK,WACP,QAAWqE,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,IAAIvG,EAAO,KAAK,OAChB,KAAOA,aAAgBoG,IACrBpG,EAAOA,EAAK,OAEd,OAAOA,CACT,CAEA,IAAI,YAAiC,CACnC,IAAIkF,EAAY,KAAK,OACrB,KAAOA,GAAQA,aAAgBkB,IAC7BlB,EAAOA,EAAK,OAEd,OAAOA,CACT,CAEA,YAAYnG,EAAcI,EAAgB,CACnC,KAAK,aACN,KAAK,WAAWJ,CAAI,EACtB,KAAK,WAAWA,CAAI,EAAE,IAAII,CAAG,EAE7B,KAAK,WAAWJ,CAAI,EAAI,IAAI8G,GAAc9G,EAAMI,EAAK,IAAI,EAE7D,CAEA,YAAYJ,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,IAAMyH,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,MAAMX,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,IAAMY,EAAQ,KAAK,QAAQ,iBACrBC,EAAQD,EAAM,SACpB,QAASpH,EAAI,EAAGA,EAAIqH,EAAM,OAAQrH,IAChC,GAAIqH,EAAMrH,CAAC,IAAM,KAAK,QAAS,CAC7BoH,EAAM,WAAWpH,CAAC,EAClB,KACF,CAEJ,CACA,KAAK,SAAS,CAChB,CAEA,OAAOsH,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/Ed,EAAUc,EAAS,SAAStD,CAAK,EACnC,aAAcwC,IAChB,KAAK,MAAMA,CAA0B,EACrC,KAAK,UAAU,OAAOA,CAA0B,EAEpD,SAAW,KAAK,aAAa,WAAW,YAAY,GAAK,KAAK,aAAa,WAAW,YAAY,EAAG,CACnG,IAAMe,EAAM,KAAK,QAAQ,EACnBvD,EAAQsD,EAAS,WAAWC,EAAKD,EAAS,SAAS,MAAM,EACzDd,EAAUc,EAAS,SAAStD,CAAK,EACvC,KAAK,MAAMwC,CAAO,CACpB,MAnBwC,CACtC,IAAMe,EAAM,GAAG,KAAK,YAAY,MAAMN,CAAQ,KACxCjD,EAAQsD,EAAS,WAAWC,EAAKD,EAAS,SAAS,MAAM,EACzDd,EAAUc,EAAS,SAAStD,CAAK,EACnCwC,GAAW,iBAAkBA,GAC/B,KAAK,MAAMA,CAAO,CAEtB,CAaF,OAASgB,EAAK,CACZ,QAAQ,KAAK,yBAA0B,KAAK,aAAcA,CAAG,CAC/D,CACF,CACF,ECzHaT,GAAN,KAAgB,CAKrB,YAAYpE,EAAiC,CAH7C,KAAA,MAAqB,CAAC,EACtB,KAAA,SAAoC,KAGlC,KAAK,OAASA,CAChB,CAEA,IAAI,YAAiC,CACnC,IAAIgD,EAAY,KAAK,OACrB,KAAOA,GAAQA,aAAgBiB,GAC7BjB,EAAOA,EAAK,OAEd,OAAOA,CACT,CAEA,OAAO8B,EAA0BC,EAAyB,GAAU,CAClE,GAAI,CAAC,KAAK,OAAS,CAAC,KAAK,OAAQ,OACjC,IAAMC,EAA6B,CAAC,EAEpC,SAASC,EAAYC,EAAkBC,EAAsB,CAC3D,OAAOD,EAAS,WAAW,GAAG,EAC1B,GAAGC,CAAI,GAAGD,EAAS,MAAM,CAAC,CAAC,GAC3B,GAAGC,CAAI,IAAID,CAAQ,EACzB,CAEA,QAAWA,KAAYJ,EAAK,CAC1B,IAAMrI,EAAQqI,EAAII,CAAQ,EACtBE,EAAYxG,GAAiBsG,CAAQ,EACzC,QAAS5J,KAAO8J,EAAW,CACzB,IAAMC,EAAkBJ,EAAY3J,EAAKyJ,CAAc,EACvD,GAAI,uCAAuC,KAAKzJ,CAAG,GACjD,GAAI,OAAOmB,GAAU,UAAYA,GAAS,KAAM,CAC9C,IAAM6I,EAAO,IAAIrB,EAAU3I,EAAK,KAAK,MAAM,EAC3CgK,EAAK,UAAW,OAAO7I,EAAOsI,CAAc,EAC5C,KAAK,MAAM,KAAKO,CAAI,CACtB,UACShK,EAAI,WAAW,YAAY,EAAG,CACvC,IAAMgK,EAAO,IAAIrB,EAAU3I,EAAK,KAAK,MAAM,EAC3CgK,EAAK,UAAW,OAAO7I,EAAO,EAAE,EAChC,KAAK,MAAM,KAAK6I,CAAI,CACtB,SAAWhK,EAAI,WAAW,YAAY,EAAG,CACvC,IAAMgK,EAAO,IAAIrB,EAAU3I,EAAK,KAAK,MAAM,EAC3C,QAAW6C,KAAK1B,EAAO6I,EAAK,YAAYnH,EAAG1B,EAAM0B,CAAC,CAAC,EACnD,KAAK,MAAM,KAAKmH,CAAI,CACtB,SAAW,OAAO7I,GAAU,UAAYA,GAAS,KAAM,CACrD,IAAM6I,EAAO,IAAIrB,EAAUoB,EAAiB,KAAK,MAAM,EACvD,KAAK,MAAM,KAAKC,CAAI,EACpB,OAAW,CAACnH,EAAGD,CAAC,IAAK,OAAO,QAAQzB,CAAK,EACvC,GAAI,OAAOyB,GAAM,UAAYA,GAAK,KAAM,CACtC,IAAIqH,EAAcN,EAAY9G,EAAGkH,CAAe,EAC5ClH,EAAE,WAAW,GAAG,EAClB,KAAK,OAAOD,EAAGqH,CAAW,EAEhBD,EAAK,UAAW,WAAWC,CAAW,EAC9C,UAAW,OAAOrH,EAAGqH,CAAW,CAEtC,MACED,EAAK,YAAYnH,EAAGD,CAAC,CAG3B,MACE8G,EAAM1J,CAAG,EAAImB,CAEjB,CACF,CAEA,GAAI,OAAO,KAAKuI,CAAK,EAAE,OAAQ,CAC7B,IAAMM,EAAO,IAAIrB,EAAUc,EAAgB,KAAK,MAAM,EACtD,QAAWzJ,KAAO0J,EAAOM,EAAK,YAAYhK,EAAK0J,EAAM1J,CAAG,CAAC,EACzD,KAAK,MAAM,KAAKgK,CAAI,CACtB,CACF,CAEA,SAAkB,CAChB,OAAK,KAAK,MACH,KAAK,MAAM,IAAKA,GAASA,EAAK,QAAQ,CAAC,EAAE,KAAK,EAAE,EAD/B,EAE1B,CAEA,WAAWJ,EAA6B,CACtC,GAAI,CAAC,KAAK,OAAS,CAAC,KAAK,OAAQ,OAAO,KACxC,IAAII,EAAO,KAAK,MAAM,KAAMA,GAASA,EAAK,eAAiBJ,CAAQ,EACnE,OAAKI,IACHA,EAAO,IAAIrB,EAAUiB,EAAU,KAAK,MAAM,EAC1C,KAAK,MAAM,KAAKI,CAAI,GAEfA,CACT,CAEA,MAAME,EAAgC,CACpC,GAAI,CAAC,KAAK,MAAO,OACjB,GAAI,CAACA,EAAa,MAAM,MAAM,8BAA8B,EAC5D,IAAIC,EAAa,EACXC,EAAcd,GAAgBA,EAAI,QAAQ,QAAS,QAAQ,EAAE,QAAQ,SAAU,MAAM,EAE3F,KAAK,MAAM,QAAQ,CAACU,EAAM,IAAM,CAC9B,IAAMjE,EAAQ,EAAIoE,EACZ5B,EAAU2B,EAAYnE,CAAK,EAC5BwC,IACDyB,EAAK,aAAa,WAAW,GAAG,GAAKzB,aAAmB,kBAEjD,YAAaA,EADtByB,EAAK,MAAMzB,CAAO,EAGT,iBAAkBA,EACvBA,EAAQ,eAAiB6B,EAAWJ,EAAK,YAAY,EACvDG,GAAc,EAEdH,EAAK,MAAMzB,CAAO,EAEX,aAAcA,GACvByB,EAAK,MAAMzB,CAAuB,EAEtC,CAAC,CACH,CAEA,OAAOtC,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,QAASlE,EAAI,EAAGA,EAAI,KAAK,MAAM,OAAQA,IACrC,KAAK,MAAMA,CAAC,EAAE,SAAS,EAI3B,KAAK,MAAQ,CAAC,EACd,KAAK,OAAS,KACd,KAAK,SAAW,IAClB,CACF,ECtIaiE,EAAN,MAAMqE,EAAY,CAgBvB,YAAYC,EAA8BC,EAA8B,KAAMxE,EAAQ,EAAG,CAfzF,KAAA,KAAO,cACP,KAAA,OAA6B,KAG7B,KAAA,SAAW,IAAID,GAAY,IAAI,EAC/B,KAAA,OAAS,IAAIgD,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,KApBjC,IAAAb,EAAA4C,EAwBI0D,EAAgBpJ,EAAUoJ,CAAa,EACvCxH,GAASwH,CAAa,EACtBA,EAAc,MAAQA,EAAc,OAAS,CAAC,EAC9C,KAAK,OAASC,EACd,KAAK,QAAUnH,GAAWkH,CAAa,EACvCA,EAAgBpG,GAAaoG,CAAa,EAE1C,KAAK,KAAOtG,EAAAsG,EAAsB,OAAtB,KAAAtG,EAA8B,KAC1C,KAAK,SAAWsG,EAAc,UAAY,CAAC,EAC3C,KAAK,UAAYA,EAAc,WAAa,CAAC,EAE7C,IAAIE,EAAW,IAAG5D,EAAA,KAAK,SAAL,KAAA,OAAAA,EAAa,QAAA,CAAS,IAAIb,CAAK,GAC3ClE,EAAM,KAAK,UAAUyI,EAAc,OAAS,CAAC,EAAG,CAACzH,EAAGD,IAAM,OAAOA,GAAM,WAAa4H,EAAW5H,CAAE,EACvG,KAAK,OAAShB,EAAW4I,EAAW3I,CAAG,EAEvC,KAAK,WAAY,SAAS,GAAG,KAAK,OAAO,IAAI,KAAK,MAAM,EAAE,EAEtDyI,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,CAClC,IAAIrK,EAAgB,IAAM,CACxB,IAAI8G,EAAQuD,EAASrK,CAAQ,EAC7B,KAAK,SAAU,OAAO,MAAM,QAAQ8G,CAAK,EAAIA,EAAQ,CAACA,CAAK,CAAC,CAC9D,EACA9G,EAAU,YAAc,KACxBA,EAAU,YAAeC,GAAwB,KAAK,QAAQ,eAAgB,IAAM,CAClFA,EAAQ,EACRD,EAAW,IACb,CAAC,EACDA,GAAYA,EAAS,CACvB,MACE,KAAK,SAAU,OAAO,MAAM,QAAQqK,CAAQ,EAAIA,EAAW,CAACA,CAAQ,CAAC,EAGzE,KAAK,OAAO,MAAQ,KAAK,OAAO,KAAK,IAAI,CAC3C,CAEA,gBAAiB,CAYf,IAAIjI,EAVY,CAAC,MAAO,SAAU,OAAQ,OAAQ,UAChD,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,EAET,SAAS,KAAK,OAAO,EACpC,SAAS,gBAZQ,6BAYsB,KAAK,OAAO,EACnD,SAAS,cAAc,KAAK,OAAO,EAIvC,GAFA,KAAK,WAAaA,EAEd,KAAK,QACP,QAAWxC,KAAO,KAAK,QAAS,CAC9B,IAAMsC,EAAYtC,EACZkC,EAAU,KAAK,QAAQI,CAAS,EAClCoI,EAAWvK,GAAiB+B,EAAQ/B,EAAO,IAAI,EACnDqC,EAAK,iBAAiBF,EAAWoI,CAAE,EACnC,KAAK,QAAQ,eAAiBC,GAAM,CAClCA,EAAE,WAAY,oBAAoBrI,EAAWoI,CAAE,EAC/CA,EAAK,IACP,CAAC,CACH,CAGF,OAAI,KAAK,YACP,OAAO,OAAO,KAAK,WAAW,KAAM,EAAE,QAAQ5F,GAAQA,EAAK,OAAO,CAAC,EAE9DtC,CACT,CAEA,UAAiB,CAEX,KAAK,UACP,KAAK,SAAS,SAAS,EAGrB,KAAK,SACP,KAAK,OAAO,MAAO,QAASwH,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,IAAI,QAAiB,CACnB,OAAOpI,EAAW,KAAK,QAAQ,CAAC,CAClC,CACA,MAAMuC,EAAsB,CAC1BvD,EAAM,KAAK,SAAUuD,EAAK,QAAQ,EAClCvD,EAAM,KAAK,UAAWuD,EAAK,SAAS,EAEpC,IAAMlB,EAAO,OAAO,KAAKkB,CAAI,EAC7B,QAASpC,EAAI,EAAGA,EAAIkB,EAAK,OAAQlB,IAAK,CACpC,IAAM6I,EAAc3H,EAAKlB,CAAC,EACpBZ,EAASgD,EAAayG,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,EAAoBzJ,CAAK,EACpDyJ,EAAY,WAAW,IAAI,EACpC,KAAK,SAASA,EAAY,UAAU,CAAC,EAAE,YAAY,EAAgBzJ,CAAK,EAC/DyJ,GAAe,UACxB,KAAK,QAAUzJ,EACNyJ,GAAe,SAAW,OAAOzJ,GAAU,SACpD,KAAK,WAAY,SAASA,CAAK,EAE/B,KAAK,WAAY,IAAIyJ,EAAazJ,CAAK,EAE3C,CACIgD,EAAK,OACP,KAAK,OAAO,OAAOA,EAAK,OAAS,CAAC,EAAG,IAAI,GAAG,KAAK,OAAO,IAAI,KAAK,MAAM,EAAE,EAAE,CAG/E,CACA,SAAkB,CAChB,IAAI0G,EAAiB,CAAC,EAClBrI,EAAoB,KACxB,KAAOA,GAAQA,EAAK,QAAQ,CAC1B,IAAMkC,EAASlC,EAAK,OACduD,EAAQrB,EAAO,SAAU,MAAM,QAAQlC,CAAI,EACjDqI,EAAK,KAAK9E,CAAK,EACfvD,EAAOkC,CACT,CACA,OAAOmG,EAAK,QAAQ,EAAE,KAAK,GAAG,CAChC,CAEA,SAAStJ,EAAiBwD,EAA2D,CAEnF,KAAK,QAAU,KAAK,SAAW,CAAC,EAEhC,IAAI3C,EAAU,KAAK,QAAQb,CAAI,EAC3B,OAAOa,GAAW,WACpB,KAAK,QAAQb,CAAI,EAAI,CAACpB,EAAcqC,IAAsB,CACxDJ,EAASjC,EAAOqC,CAAI,EACpBuC,EAAS5E,EAAOqC,CAAI,CACtB,EAEA,KAAK,QAAQjB,CAAI,EAAIwD,CAEzB,CAEA,QAAiCxD,EAASwD,EAA4B,CACpE,IAAM3C,EAAU,KAAK,OAAOb,CAAI,EAE5B,OAAOa,GAAY,WACrB,KAAK,OAAOb,CAAI,GAAK,IAAIhB,IAAgB,CACtC6B,EAAqB,GAAG7B,CAAI,EAC5BwE,EAAsB,GAAGxE,CAAI,CAChC,GAEA,KAAK,OAAOgB,CAAI,EAAIwD,CAExB,CACA,SAAuB,CACrB,IAAI2C,EAAoB,KACxB,KAAOA,GAAQA,aAAgB2C,IAAe3C,EAAK,QACjDA,EAAOA,EAAK,OAEd,OAAOA,CACT,CAEA,WAAWnG,EAAmB,CAC5B,IAAIiB,EAA2B,KAC/B,KAAOA,IAAS,CAACA,EAAK,UAAY,CAAC,OAAO,UAAU,eAAe,KAAKA,EAAK,SAAUjB,CAAI,IACzFiB,EAAOA,EAAK,OAEd,OAAOA,GAAQA,EAAK,SAAWA,EAAK,SAASjB,CAAI,EAAI,MACvD,CAEA,WAAWA,EAAcJ,EAAY,CACnC,KAAK,SAAW,KAAK,UAAY,CAAC,EAClC,KAAK,SAASI,CAAI,EAAIJ,CACxB,CAEA,YAAYI,EAAmB,CAC7B,OAAO,KAAK,UAAY,KAAK,UAAUA,CAAI,EAAI,MACjD,CAEA,YAAYvB,EAAamB,EAAY,CACnC,KAAK,UAAY,KAAK,WAAa,CAAC,EACpC,KAAK,UAAUnB,CAAG,EAAImB,CAExB,CAEA,aAAsB,CACpB,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,SAAU,MAAO,GAC3C,IAAImI,EAAM,KAAK,OAAO,QAAQ,EAC9B,OAAAA,GAAO,KAAK,SAAS,MAAM,IAAI3B,GAASA,aAAiB0C,GAAc1C,EAAM,YAAY,EAAI,EAAE,EAAE,KAAK,EAAE,EACjG2B,CACT,CAEA,cAAuB,CACrB,GAAI,CAAC,KAAK,UAAY,CAAC,KAAK,WAAY,MAAO,GAC/C,IAAIwB,EAAU,KAAK,SAAS,aAAa,EACnCzI,EAAa,KAAK,WAAW,aAAa,EAChD,MAAO,IAAI,KAAK,OAAO,GAAGA,CAAU,IAAIyI,CAAO,KAAK,KAAK,OAAO,GAClE,CAEA,MAAMnG,EAAyBV,EAAmC,CAChE,GAAI,CAACU,EAAY,MAAM,IAAI,MAAM,0BAA0B,EAG3D,GAFA,KAAK,WAAaA,EAEd,KAAK,QACP,QAAW3E,KAAO,KAAK,QAAS,CAC9B,IAAMsC,EAAYtC,EACZkC,EAAU,KAAK,QAAQI,CAAS,EAClCoI,EAAWvK,GAAiB+B,EAAQ/B,EAAO,IAAI,EACnDwE,EAAW,iBAAiBrC,EAAWoI,CAAE,EACzC,KAAK,QAAQ,eAAiBC,GAAM,CAClCA,EAAE,WAAY,oBAAoBrI,EAAWoI,CAAE,EAC/CA,EAAK,IACP,CAAC,CACH,CAGE,KAAK,UACP,KAAK,SAAS,MAAM,QAAQ,CAAC/C,EAAO5F,IAAM,CACxC,IAAMgJ,EAAYpG,EAAW,WAAW5C,CAAC,EACrCgJ,aAAqB,MAAQpD,aAAiB0C,IAChD1C,EAAM,MAAMoD,EAA0B9G,CAAQ,CAElD,CAAC,EAGH,KAAK,OAAO,OAAS,KAAK,OAAO,MAAM,IAAI,CAC7C,CAEA,OAAOU,EAAmF,CACxF,IAAMgB,EAAU,KAAK,eAAe,EACpChB,EAAW,YAAYgB,CAAO,EAC9B,KAAK,OAAO,OAAS,KAAK,OAAO,MAAM,IAAI,EAC3C,IAAI1B,EAAW,KAAK,QAAQ,EAAE,OAAO,SACjCyD,EAAO/C,EAAW,YAAY,EAC5BZ,EAAc2D,aAAgB,WAAaA,EAAO,SAAS,KACjE,OAAAzD,IAAAA,EAAaH,GAAeC,CAAW,GACvC,KAAK,OAAO,OAAOE,CAA4B,EAC/C,KAAK,SAAS,MAAM,QAAQ0D,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,CAhSX,IAAA3B,EAiSQ,KAAK,OACP,KAAK,OAAO,SAAS,OAAO,IAAI,IAGhCA,EAAA,KAAK,aAAL,MAAAA,EAAiB,OAAA,EACjB,KAAK,SAAS,EAElB,CACF,ECvSA,IAAAgH,GAAA,GAAAC,GAAAD,GAAA,kBAAAE,GAAA,eAAAC,GAAA,aAAAC,GAAA,aAAAC,GAAA,eAAAC,GAAA,aAAAC,GAAA,eAAAC,EAAA,cAAAC,GAAA,cAAAC,EAAA,iBAAAC,EAAA,gBAAAC,GAAA,cAAAC,KAAA,IAAIC,GAAoB,CACtB,UAAW,SACX,OAAQ,CACN,UAAW,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC9I,QAAS,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC5I,MAAO,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC1I,OAAQ,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC3I,UAAW,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC9I,QAAS,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC5I,KAAM,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EACzI,QAAS,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,EAC5I,QAAS,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,SAAS,CAC9I,EACA,UAAW,CACT,UAAW,EACX,QAAS,EACT,MAAO,EACP,UAAW,EACX,QAAS,EACT,KAAM,EACN,QAAS,EACT,QAAS,CACX,EACA,UAAW,CAAC,UAAW,WAAY,OAAQ,UAAW,YAAa,YAAa,YAAa,WAAW,EAExG,OAAQ,CAAC,CACX,EAEOC,GAAQD,GC1BTE,GAAqC,CACzC,MAAO,KAAK,MAAM,KAAK,UAAUD,EAAK,CAAC,EACvC,KAAME,GAAWF,EAAK,CACxB,EAIA,SAASG,GAAcC,EAAoC,CACzD,QAASC,KAAOD,EACd,GAAI,CAAC,OAAO,KAAKJ,EAAK,EAAE,SAASK,CAAuB,EACtD,MAAM,IAAI,MAAM,gBAAgBA,CAAG,EAAE,EAGzC,GAAID,EAAQ,WAAa,CAAC,MAAM,QAAQA,EAAQ,SAAS,EACvD,MAAM,IAAI,MAAM,kCAAkC,EAEpD,GAAI,WAAYA,EAAS,CACvB,IAAME,EAASF,EAAQ,OACvB,GAAI,OAAOE,GAAW,UAAYA,IAAW,KAC3C,MAAM,IAAI,MAAM,4CAA4C,CAEhE,CACF,CAIA,SAASC,GAAUC,EAAaC,EAAmB,CA9BnD,IAAAC,EA+BE,QAAWL,KAAOI,EAEdA,EAAOJ,CAAG,GACV,OAAOI,EAAOJ,CAAG,GAAM,UACvB,CAAC,MAAM,QAAQI,EAAOJ,CAAG,CAAC,IAE1BK,EAAAF,EAAAH,CAAAA,IAAA,OAAAG,EAAAH,CAAAA,EAAgB,CAAC,GACjBE,GAAUC,EAAOH,CAAG,EAAGI,EAAOJ,CAAG,CAAC,GAElCG,EAAOH,CAAG,EAAII,EAAOJ,CAAG,CAG9B,CAIA,SAASM,GAAcC,EAAcC,EAA2B,CAC9D,IAAMC,EAA0C,CAAC,EAEjD,QAAWT,KAAOQ,EAAO,CACvB,IAAME,EAAQF,EAAMR,CAAuB,EAE3C,GAAIA,IAAQ,SACV,QAAWW,KAAaH,EAAM,OAC5B,CAAC,GAAG,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,QAAQI,GAC5BH,EAAO,KAAKE,CAAS,IAAIC,CAAC,EAAE,EAAIJ,EAAM,OAAOG,CAAS,EAAEC,CAAC,CAC3D,UAEOZ,IAAQ,YACjB,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQY,GAC3BH,EAAO,cAAcG,CAAC,EAAE,EAAIJ,EAAM,UAAUI,CAAC,CAC/C,UAEI,OAAOF,GAAU,UAAYA,IAAU,KACzC,QAAWG,KAAKH,EACdD,EAAO,KAAKT,CAAG,IAAIa,EAAE,QAAQ,IAAK,GAAG,CAAC,EAAE,EAAKH,EAAiCG,CAAC,CAIvF,CAEA,IAAIC,EAAO,GACX,QAAWC,KAAQN,EACjBK,GAAQ,KAAKC,CAAI,KAAKN,EAAOM,CAAI,CAAC;EAEpC,MAAO,gBAAgBR,CAAI;EAASO,CAAI,GAC1C,CAIO,SAASE,GAAST,EAA0B,CACjD,GAAI,CAACX,GAAOW,CAAI,EAAG,MAAM,MAAM,UAAUA,CAAI,aAAa,EAC1D,OAAOX,GAAOW,CAAI,CACpB,CAEO,SAASU,GAASV,EAAcC,EAAkC,CACvEV,GAAcU,CAAK,EACdZ,GAAOW,CAAI,IAAGX,GAAOW,CAAI,EAAI,gBAAgBZ,EAAK,GACvDO,GAAUN,GAAOW,CAAI,EAAGC,CAAK,CAC/B,CAEO,SAASX,GAAWO,EAAgC,CACzD,IAAIc,EAAO,gBAAgBd,CAAM,EACjCc,EAAK,UAAY,UACjB,QAASX,KAAQW,EAAK,OACpBA,EAAK,OAAOX,CAAI,EAAE,QAAQ,EAC1BW,EAAK,UAAUX,CAAI,EAAI,GAASW,EAAK,UAAUX,CAAI,EAErD,OAAOW,CACT,CAEO,SAASC,GAAYZ,EAAmC,CAC7D,IAAIC,EAAQQ,GAAST,CAAI,EACrBa,EAA8B,CAAC,EAEnC,QAAWpB,KAAOQ,EAAO,CACvB,IAAME,EAAQF,EAAMR,CAAuB,EAE3C,GAAIA,IAAQ,SACV,QAAWO,KAAQC,EAAM,OAAQ,CAC/B,IAAIa,EAAa,CAAC,EAClB,CAAC,GAAG,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,QAAQT,GAAKS,EAAWT,CAAC,EAAIJ,EAAM,OAAOD,CAAI,EAAEK,CAAC,CAAC,EACxEQ,EAAOb,CAAI,EAAIc,CACjB,SACSrB,IAAQ,YACjBoB,EAAO,UAAYZ,EAAM,kBAEzBY,EAAOpB,CAAG,EAAI,CAAC,EACX,OAAOU,GAAU,UAAYA,IAAU,KACzC,QAAWG,KAAKH,EACdU,EAAOpB,CAAG,EAAEa,CAAC,EAAKH,EAAiCG,CAAC,CAI5D,CAEA,OAAOO,CACT,CAEO,SAASE,IAAuB,CACrC,IAAId,EAAQQ,GAAS,OAAO,EACxBO,EAAQ,CAAC,EAEb,QAAWvB,KAAOQ,EAAO,CACvB,IAAMgB,EAAUxB,EACVU,EAAQF,EAAMR,CAAuB,EAE3C,GAAIA,IAAQ,SACV,QAAWO,KAAQC,EAAM,OAAQ,CAC/B,IAAIa,EAAa,CAAC,EAClB,CAAC,GAAG,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,QAAQT,GAAKS,EAAWT,CAAC,EAAI,SAASL,CAAI,IAAIK,CAAC,GAAG,EACxEW,EAAMhB,CAAI,EAAIc,CAChB,SACSrB,IAAQ,YACjBuB,EAAM,UAAY,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,IAAIX,GAAK,kBAAkBA,CAAC,GAAG,UAEtEW,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,GAIzG,CAEA,OAAOU,CACT,CAEO,SAASE,IAAmB,CACjC,OAAO,OAAO,QAAQ7B,EAAM,EACzB,IAAI,CAAC,CAACW,EAAMC,CAAK,IAAMF,GAAcC,EAAMC,CAAK,CAAC,EACjD,KAAK;CAAI,CACd,CAEO,SAASkB,GAAWC,EAA6B,CArKxD,IAAAtB,EAsKE,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,EAAK,YAAcA,EAAK,WAAW,IAAI,WAAW,IACpDF,EAAYE,EAAK,WAAW,IAAI,WAAW,EAC3C,OAAOD,GAAU,YAAcC,EAAK,WAAW,SAAS,YAAaD,CAAM,GAEtED,CACT,CClMA,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,SAAS,WAAYD,CAAM,GAEvEK,CACX,CAGO,SAASI,EAAUT,EAAgCK,EAAoB,UAAmB,CAC7F,IAAIK,EAAQP,GAAWK,GAAYR,CAAM,EAAGK,CAAI,EAChD,OAAOd,GAAU,EAAE,UAAUmB,CAAK,CACtC,CCnDA,IAAMC,GAAa,GAEbC,GAAe,CAAC,UAAW,MAAM,EAEvC,CAAC,GAAG,MAAMD,EAAU,EAAE,KAAK,CAAC,EAAE,QAAQ9B,GAAK,CACvC+B,GAAa,KAAK,YAAY/B,CAAC,EAAE,EACjC+B,GAAa,KAAK,YAAY/B,CAAC,EAAE,EACjC+B,GAAa,KAAK,SAAS/B,CAAC,EAAE,CAClC,CAAC,EAID,SAASgC,GAAWC,EAAcC,EAAuB,CACrD,GAAID,EAAO,GAAKA,EAAOH,GAAa,EAAG,OAAOG,EAC9C,IAAIE,EAAWF,EAAOC,EACtB,OAAAC,EAAW,KAAK,IAAI,EAAG,KAAK,IAAIL,GAAa,EAAGK,CAAQ,CAAC,EAClDA,CACX,CAEA,SAASC,GAAUH,EAAcC,EAAuB,CACpD,GAAID,EAAO,GAAKA,EAAOH,GAAa,EAAG,OAAOG,EAC9C,IAAIE,EAAWF,GAAQ,EAAIA,EAAOC,EAAQD,EAAOC,EACjD,OAAAC,EAAWA,EAAW,GAAKA,EAAWL,GAAa,EAAI,CAAEK,EAAWA,EACpEA,EAAW,KAAK,IAAI,EAAG,KAAK,IAAIL,GAAa,EAAGK,CAAQ,CAAC,EAClDA,CACX,CAEA,SAASE,GAAWC,EAAoBL,EAAoB,UAAmB,CAE3E,GAAI,OAAOA,GAAQ,SAAU,OAAOA,EAEpC,GAAIA,GAAQ,UAAW,OAAOK,EAE9B,GAAI,CAACP,GAAa,SAASE,CAAK,EAC5B,MAAM,MAAM,cAAcA,CAAI,WAAW,EAG7C,GAAIA,EAAK,WAAW,WAAW,EAAG,CAC9B,IAAIP,EAAS,SAASO,EAAK,QAAQ,YAAa,EAAE,EAAG,EAAE,EACvD,OAAOD,GAAWM,EAAYZ,CAAM,CAExC,SAAWO,EAAK,WAAW,WAAW,EAAG,CACrC,IAAIP,EAAS,SAASO,EAAK,QAAQ,YAAa,EAAE,EAAG,EAAE,EACvD,OAAOD,GAAWM,EAAY,CAAEZ,CAAM,CAE1C,SAAWO,EAAK,WAAW,QAAQ,EAAG,CAClC,IAAIP,EAAS,SAASO,EAAK,QAAQ,SAAU,EAAE,EAAG,EAAE,EACpD,OAAOG,GAAUE,EAAYZ,CAAM,CAEvC,KACI,QAAOY,CAEf,CAEA,SAASC,GAAYpB,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,IAAIa,EAAO,EAEX,OAAIb,GAAQA,EAAK,YAAcA,EAAK,WAAW,IAAI,UAAU,IACzDa,EAAOI,GAAWJ,EAAMb,EAAK,WAAW,IAAI,UAAU,CAAC,EACvD,OAAOD,GAAU,YAAcC,EAAK,WAAW,SAAS,WAAYD,CAAM,GAEvEc,CACX,CAEA,SAASO,GAAUrB,EAAgCc,EAAoB,UAAmB,CAEtF,OAAOI,GAAWE,GAAYpB,CAAM,EAAGc,CAAI,CAC/C,CAEO,SAASQ,GAAatB,EAAgCc,EAAoB,UAAWS,EAAgB,UAAmB,CAC3H,IAAIC,EAAe,OAAOxB,GAAU,WAAaA,EAAO,YAAcA,EAElEyB,EAAaF,GAAS,UAAYC,EAAY,WAAW,YAAY,GAAK,UAAYD,EAEtFG,EACJ,OAAIZ,GAAQ,OACRY,EAAazC,GAASc,GAAUC,CAAM,CAAC,EAAE,UAAUyB,CAAU,EAE7DC,EAAaR,GAAWE,GAAYpB,CAAM,EAAGc,CAAI,EAEnCvB,GAAU,EAAEkC,CAAU,EAAEC,CAAU,CAGxD,CACO,SAASD,EAAWzB,EAAuCc,EAAoB,UAAWS,EAAgB,UAAmB,CAEhI,IAAIE,EAAaF,GAAS,UAAY,UAAYA,EAElD,GAAI,CAACvB,EACD,OAAOT,GAAU,EAAEkC,CAAU,EAAEP,GAAW,EAAGJ,CAAI,CAAC,EAGtD,IAAIY,EACJ,OAAIZ,GAAQ,OACRY,EAAazC,GAASc,GAAUC,CAAM,CAAC,EAAE,UAAUyB,CAAU,EAE7DC,EAAaL,GAAUrB,EAAQc,CAAI,EAErBvB,GAAU,EAAEkC,CAAU,EAAEC,CAAU,CAGxD,CChHA,IAAAC,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,EAA0D,CAAC,EAAmB,CAChG,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,QAChB,QAAQ,KAAK,kDAAkD,CAEvE,EACA,MAAO,CACH,MAAQC,GAAaC,EAAWD,EAAU,UAAWH,CAAK,EAC1D,mBAAoB,YACpB,oBAAqB,SACrB,oBAAsBG,GAAaC,EAAWD,EAAU,UAAWH,CAAK,EACxE,oBAAqBK,EAAa,GAAI,EACtC,OAAQ,OACR,UAAW,CACP,MAAQF,GAAaC,EAAWD,EAAU,UAAWF,CAAW,EAChE,oBAAsBE,GAAaC,EAAWD,EAAU,UAAWF,CAAW,CAClF,CACJ,CACJ,CACJ,CCtBA,SAASK,GAAKC,EAAgC,CAAC,EAAmB,CAC9D,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAC9B,MAAO,CACH,MAAO,CACH,QAAS,OACT,oBAAqB,WACrB,kBAAmB,6EACnB,aAAcE,EAAa,CAAC,EAC5B,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWF,CAAK,EACpE,MAAQE,GAAaC,EAAWD,EAAU,UAAWF,CAAK,EAC1D,QAAUE,GAAa,aAAaC,EAAWD,EAAU,UAAWF,CAAK,CAAC,GAC1E,cAAe,OACf,SAAU,SACV,UAAW,CACP,SAAU,QACV,MAAO,OACP,OAAQ,OACR,QAAS,OACb,EACA,6BAA8B,CAC1B,SAAU,QACV,aAAcC,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,WAAY,MACZ,OAAQ,CACZ,EACA,QAAS,CACL,SAAU,OACV,cAAeA,EAAa,CAAC,EAC7B,MAAQC,GAAaC,EAAWD,EAAU,UAAWF,CAAK,EAC1D,OAAQ,CACZ,EACA,YAAa,CACT,SAAU,QACV,UAAW,SACX,QAASC,EAAa,CAAC,EACvB,OAAQ,MACZ,EACA,UAAW,CACP,SAAU,UACV,QAASA,EAAa,CAAC,EACvB,MAAQC,GAAaC,EAAWD,EAAU,UAAWF,CAAK,CAC9D,EACA,aAAc,CACV,SAAU,SACV,QAAS,OACT,IAAKC,EAAa,CAAC,EACnB,aAAcA,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,UAAYC,GAAa,aAAaC,EAAWD,EAAU,UAAWF,CAAK,CAAC,EAChF,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,SAAUI,GAAiB,CAChDH,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,cAAeE,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,OAAQ,OACR,aAAeF,GAAa,aAAaG,EAAWH,EAAU,UAAWL,CAAK,CAAC,GAC/E,QAAS,OACT,MAAQK,GAAaG,EAAWH,EAAU,UAAWL,CAAK,EAC1D,gBAAkBK,GAAaG,EAAWH,EAAU,UAAWL,CAAK,EACpE,iBAAkB,CACd,MAAQK,GAAaG,EAAWH,EAAU,SAAS,CACvD,EACA,kBAAmB,CACf,kBAAoBA,GAAaG,EAAWH,EAAU,UAAWJ,CAAW,CAChF,CACJ,CACJ,CACJ,CAEA,SAASQ,GAAYV,EAA0D,CAAC,EAAmB,CAC/F,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EACvD,MAAO,CACH,KAAM,SACN,SAAWL,GAAS,CA7D5B,IAAAgB,EAAAC,EA8DY,IAAMT,EAAMR,EAAK,WAAW,SAAS,EAC/BkB,EAAKlB,EAAK,WACVmB,GAAOF,GAAAD,EAAAE,EAAG,cAAH,YAAAF,EAAgB,gBAAhB,KAAAC,EAAiC,GACxCG,EAAUZ,EAAI,MAAM,SAAUa,GAAc,CAC9CH,EAAG,OAASG,EAAE,OAAS,GAAK,CAACF,EAAK,SAASE,EAAE,YAAY,CAAC,CAC9D,CAAC,EACDrB,EAAK,QAAQ,SAAUoB,CAAO,CAClC,EACA,MAAO,CACH,OAAQ,UACR,QAAS,OACT,WAAY,SACZ,MAAO,OACP,SAAWT,GAAaC,EAAUD,EAAU,SAAS,EACrD,OAAQE,EAAa,CAAC,EACtB,cAAeA,EAAa,CAAC,EAC7B,OAAQ,OACR,QAAS,OACT,MAAQF,GAAaG,EAAWH,EAAU,UAAWL,CAAK,EAC1D,gBAAkBK,GAAaG,EAAWH,EAAU,UAAWL,CAAK,EACpE,0BAA2B,CACvB,gBAAkBK,GAAaG,EAAWH,EAAU,UAAWL,CAAK,CACxE,EACA,kBAAmB,CACf,QAAUK,GAAa,GAAGE,EAAa,EAAG,CAAC,UAAUC,EAAWH,EAAU,UAAWJ,CAAW,CAAC,GACjG,cAAe,IAAIM,EAAa,EAAG,CAAC,EACxC,CACJ,CACJ,CACJ,CCxFA,SAASS,GAAOC,EAGZ,CAAC,EAAmB,CACpB,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EACvD,MAAO,CACH,KAAM,SACN,UAAYG,GAAS,CAV7B,IAAAC,EAWgBD,EAAK,UAAY,UACjB,QAAQ,KAAK,oCAAoC,EAErD,IAAME,EAAMF,EAAK,WAAW,aAAa,EAGrCG,IAFaF,EAAAD,EAAK,SAAL,YAAAC,EAAa,SAAS,OAElB,OAAOG,GAAKA,EAAE,OAAS,eAAiBA,EAAE,WAAW,IAAI,MAAM,IAAM,QAAQ,EAC5FC,EAAM,OAAOF,EAAM,UAAUC,GAAKA,IAAMJ,CAAI,CAAC,EAEnDA,EAAK,WAAW,IAAI,cAAgBM,GAAa,CAC7C,IAAMC,EAAML,EAAI,MAAM,IAAII,CAAQ,EAClC,OAAO,MAAM,QAAQC,CAAG,EAAIA,EAAI,SAASF,CAAG,EAAIE,IAAQF,CAC5D,CAAC,EAEDL,EAAK,SAAS,QAAS,IAAM,CACzB,IAAMO,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,CAAK,EAC1D,gBAAkBQ,GAAaM,EAAWN,EAAU,UAAWR,CAAK,EACpE,WAAW,8BACX,0BAA2B,CACvB,gBAAkBQ,GAAaM,EAAWN,EAAU,UAAWR,CAAK,CACxE,EACA,uBAAwB,CACpB,gBAAkBQ,GAAaM,EAAWN,EAAU,UAAWR,CAAK,CACxE,EACA,kBAAmB,CACf,QAAUQ,GAAa,GAAGK,EAAa,EAAG,CAAC,UAAUC,EAAWN,EAAU,UAAWP,CAAW,CAAC,GACjG,cAAe,IAAIY,EAAa,EAAG,CAAC,EACxC,EACA,cAAe,CACX,QAAS,GACT,OAAQ,aACZ,CACJ,CACJ,CACJ,CC3DA,SAASE,GAAYC,EAIjB,CAAC,EAAmB,CAPxB,IAAAC,EAQI,GAAM,CAAE,SAAAC,EAAW,GAAO,MAAAC,EAAQ,SAAU,EAAIH,EAChD,MAAO,CACH,KAAM,QACN,SAAU,UACV,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,CC3BA,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,CCzDA,SAASS,GAAMC,EAEX,CAAC,EAAmB,CACtB,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACL,KAAM,QACN,MAAO,CACL,QAAS,OACT,WAAY,aACZ,IAAKE,EAAa,CAAC,EACnB,aAAcA,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,UAAYC,GAAa,SAASD,EAAa,CAAC,CAAC,UAAUE,EAAWD,EAAU,UAAWF,CAAK,CAAC,GACjG,gBAAkBE,GAAaC,EAAWD,EAAU,UAAWF,CAAK,EACpE,MAAQE,GAAaC,EAAWD,EAAU,UAAWF,CAAK,EAC1D,SAAWE,GAAaE,EAAUF,EAAU,SAAS,CACvD,CACF,CACF,CCnBA,SAASG,GAAOC,EAEZ,CAAC,EAAmB,CACpB,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,MAAO,CACH,SAAU,WACV,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,SAAU,SACV,aAAc,MACd,WAAY,EACZ,MAAOE,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,MACZ,WAAY,OACZ,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EACpE,MAAQE,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EAC1D,QAAS,CACL,SAAU,WACV,MAAO,EACP,MAAO,OACP,OAAQ,OACR,UAAW,OACf,CACJ,CACJ,CACJ,CC7BA,SAASK,GAAMC,EAGX,CAAC,EAAmB,CACpB,GAAM,CAAE,MAAAC,EAAQ,SAAU,MAAAC,EAAQ,GAAI,EAAIF,EACtCG,EAAQC,EAAQF,CAAK,EACzB,MAAO,CACH,MAAO,CACH,SAAU,WACV,WAAY,CACR,QAAUG,GAAM,IAAIF,EAAM,IAAIE,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,UAAWJ,CAAK,EACtD,MAAQI,GAAMG,EAAWH,EAAG,UAAWJ,CAAK,CAChD,CACJ,CACJ,CACJ,CC5BA,SAASQ,GAAWC,EAGhB,CAAC,EAAmB,CACpB,GAAM,CAAE,MAAAC,EAAQ,UAAW,UAAAC,EAAY,GAAI,EAAIF,EAE/C,MAAO,CACH,UAAYG,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,CAAK,EAC1D,gBAAkBG,GAAaG,EAAWH,EAAU,UAAWH,CAAK,EACpE,QAAS,CACL,QAAS,cACT,WAAY,SACZ,MAAQG,GAAaG,EAAWH,EAAU,UAAWH,CAAK,CAC9D,EACA,gCAAiC,CAC7B,QAAS,IAAIC,CAAS,IACtB,MAAQE,GAAaG,EAAWH,EAAU,UAAWH,CAAK,EAC1D,mBAAoBK,EAAa,CAAC,CACtC,EACA,0BAA2B,CACvB,MAAQF,GAAaG,EAAWH,EAAU,UAAWH,CAAK,EAC1D,cAAe,MACnB,CACJ,CACJ,CACJ,CCnCA,SAASO,GAAmBC,EAExB,CAAC,EAAmB,CACpB,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,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,UAAWF,CAAK,EAC1D,aAAcI,EAAa,CAAC,EAC5B,UAAW,CACP,MAAQF,GAAaG,EAAWH,EAAU,UAAWF,CAAK,EAC1D,gBAAkBE,GAAaG,EAAWH,EAAU,UAAWF,CAAK,CACxE,EACA,kBAAmB,CACf,QAAUE,GAAa,GAAGE,EAAa,EAAG,CAAC,UAAUC,EAAWH,EAAU,UAAWF,CAAK,CAAC,GAC3F,cAAeI,EAAa,EAAG,CACnC,CACJ,CACJ,CACJ,CCjCA,IAAME,GAAO,yWAEb,SAASC,GAAIC,EAGT,CAAC,EAAmB,CACtB,GAAM,CAAE,MAAAC,EAAQ,UAAW,UAAAC,EAAU,EAAM,EAAIF,EAE/C,MAAO,CACL,SAAU,UACV,QAAUG,GAAS,CAEjB,IAAMC,EAAmC,CACvC,KAAMN,GACN,QAAUO,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,CAAK,CACtE,CACF,CACF,EAEAC,GAAaC,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,iBAAkBJ,EAAYI,EAAa,CAAC,EAAIA,EAAa,CAAC,EAC9D,IAAKA,EAAa,CAAC,EACnB,SAAWC,GAAaE,EAAUF,EAAU,SAAS,EACrD,gBAAkBA,GAAaC,EAAWD,EAAU,UAAWN,CAAK,EACpE,MAAQM,GAAaC,EAAWD,EAAU,UAAWN,CAAK,EAC1D,OAAQ,OACR,cAAe,OACf,QAAUM,GAAa,aAAaC,EAAWD,EAAU,UAAWN,CAAK,CAAC,EAC5E,CACF,CACF,CC9CA,IAAMS,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,EACMC,GAAuB,CAC3B,MAAO,MACP,IAAK,OACP,EACA,SAASC,GAAMC,EAAOC,EAAOC,EAAK,CAChC,OAAOV,EAAIQ,EAAOT,GAAIU,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,IAAME,GAA0B,IAAI,IAAI,CAAC,MAAO,QAAQ,CAAC,EACzD,SAASC,EAAYN,EAAW,CAC9B,OAAOK,GAAW,IAAIN,EAAQC,CAAS,CAAC,EAAI,IAAM,GACpD,CACA,SAASO,GAAiBP,EAAW,CACnC,OAAOE,GAAgBI,EAAYN,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,QAAQ,aAAcW,GAAanB,GAAqBmB,CAAS,CAAC,CACrF,CACA,IAAMQ,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,OAAOA,EAAU,QAAQ,yBAA0BwB,GAAQjC,GAAgBiC,CAAI,CAAC,CAClF,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,EAAiBC,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,CCrIA,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,EAAiB,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,EAAiBd,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,GASA,IAAME,GAAkB,CAAO1C,EAAWC,EAAU0C,IAAWxB,EAAA,sBAC7D,GAAM,CACJ,UAAArB,EAAY,SACZ,SAAA4B,EAAW,WACX,WAAAkB,EAAa,CAAC,EACd,SAAArB,CACF,EAAIoB,EACEE,EAAkBD,EAAW,OAAO,OAAO,EAC3C7C,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,EAChD+C,EAAoBhD,EACpBiD,EAAiB,CAAC,EAClBC,EAAa,EACjB,QAASC,EAAI,EAAGA,EAAIJ,EAAgB,OAAQI,IAAK,CAC/C,IAAIC,EACJ,GAAM,CACJ,KAAAC,EACA,GAAAC,CACF,EAAIP,EAAgBI,CAAC,EACf,CACJ,EAAGI,EACH,EAAGC,EACH,KAAAC,EACA,MAAAC,CACF,EAAI,MAAMJ,EAAG,CACX,EAAA/B,EACA,EAAAC,EACA,iBAAkBxB,EAClB,UAAWgD,EACX,SAAApB,EACA,eAAAqB,EACA,MAAAvB,EACA,SAAUiC,EAAAC,EAAA,GACLnC,GADK,CAER,gBAAiB2B,EAAwB3B,EAAS,iBAAmB,KAAO2B,EAAwBlC,EACtG,GACA,SAAU,CACR,UAAAhB,EACA,SAAAC,CACF,CACF,CAAC,EACDoB,EAAIgC,GAAS,KAAOA,EAAQhC,EAC5BC,EAAIgC,GAAS,KAAOA,EAAQhC,EAC5ByB,EAAiBU,EAAAC,EAAA,GACZX,GADY,CAEf,CAACI,CAAI,EAAGO,IAAA,GACHX,EAAeI,CAAI,GACnBI,EAEP,GACIC,GAASR,GAAc,KACzBA,IACI,OAAOQ,GAAU,WACfA,EAAM,YACRV,EAAoBU,EAAM,WAExBA,EAAM,QACRhC,EAAQgC,EAAM,QAAU,GAAO,MAAMjC,EAAS,gBAAgB,CAC5D,UAAAvB,EACA,SAAAC,EACA,SAAAyB,CACF,CAAC,EAAI8B,EAAM,OAEZ,CACC,EAAAnC,EACA,EAAAC,CACF,EAAI1B,GAA2B4B,EAAOsB,EAAmB/C,CAAG,GAE9DkD,EAAI,GAER,CACA,MAAO,CACL,EAAA5B,EACA,EAAAC,EACA,UAAWwB,EACX,SAAApB,EACA,eAAAqB,CACF,CACF,GAiMA,IAAMY,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,EAjbxB,EAmbUP,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,CAx1BR,EA01BUM,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,ECp4BA,SAASgB,IAAY,CACnB,OAAO,OAAO,QAAW,WAC3B,CACA,SAASC,EAAYC,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,IAAMI,GAA4C,IAAI,IAAI,CAAC,SAAU,UAAU,CAAC,EAChF,SAASC,GAAkBC,EAAS,CAClC,GAAM,CACJ,SAAAC,EACA,UAAAC,EACA,UAAAC,EACA,QAAAC,CACF,EAAIC,EAAiBL,CAAO,EAC5B,MAAO,kCAAkC,KAAKC,EAAWE,EAAYD,CAAS,GAAK,CAACJ,GAA6B,IAAIM,CAAO,CAC9H,CACA,IAAME,GAA6B,IAAI,IAAI,CAAC,QAAS,KAAM,IAAI,CAAC,EAChE,SAASC,GAAeP,EAAS,CAC/B,OAAOM,GAAc,IAAInB,EAAYa,CAAO,CAAC,CAC/C,CACA,IAAMQ,GAAoB,CAAC,gBAAiB,QAAQ,EACpD,SAASC,GAAWT,EAAS,CAC3B,OAAOQ,GAAkB,KAAKE,GAAY,CACxC,GAAI,CACF,OAAOV,EAAQ,QAAQU,CAAQ,CACjC,OAASC,EAAI,CACX,MAAO,EACT,CACF,CAAC,CACH,CACA,IAAMC,GAAsB,CAAC,YAAa,YAAa,QAAS,SAAU,aAAa,EACjFC,GAAmB,CAAC,YAAa,YAAa,QAAS,SAAU,cAAe,QAAQ,EACxFC,GAAgB,CAAC,QAAS,SAAU,SAAU,SAAS,EAC7D,SAASC,GAAkBC,EAAc,CACvC,IAAMC,EAASC,GAAS,EAClBC,EAAMxB,EAAUqB,CAAY,EAAIX,EAAiBW,CAAY,EAAIA,EAIvE,OAAOJ,GAAoB,KAAKlB,GAASyB,EAAIzB,CAAK,EAAIyB,EAAIzB,CAAK,IAAM,OAAS,EAAK,IAAMyB,EAAI,cAAgBA,EAAI,gBAAkB,SAAW,KAAU,CAACF,IAAWE,EAAI,eAAiBA,EAAI,iBAAmB,OAAS,KAAU,CAACF,IAAWE,EAAI,OAASA,EAAI,SAAW,OAAS,KAAUN,GAAiB,KAAKnB,IAAUyB,EAAI,YAAc,IAAI,SAASzB,CAAK,CAAC,GAAKoB,GAAc,KAAKpB,IAAUyB,EAAI,SAAW,IAAI,SAASzB,CAAK,CAAC,CACza,CACA,SAAS0B,GAAmBpB,EAAS,CACnC,IAAIqB,EAAcC,EAActB,CAAO,EACvC,KAAOJ,EAAcyB,CAAW,GAAK,CAACE,GAAsBF,CAAW,GAAG,CACxE,GAAIN,GAAkBM,CAAW,EAC/B,OAAOA,EACF,GAAIZ,GAAWY,CAAW,EAC/B,OAAO,KAETA,EAAcC,EAAcD,CAAW,CACzC,CACA,OAAO,IACT,CACA,SAASH,IAAW,CAClB,OAAI,OAAO,KAAQ,aAAe,CAAC,IAAI,SAAiB,GACjD,IAAI,SAAS,0BAA2B,MAAM,CACvD,CACA,IAAMM,GAAwC,IAAI,IAAI,CAAC,OAAQ,OAAQ,WAAW,CAAC,EACnF,SAASD,GAAsBnC,EAAM,CACnC,OAAOoC,GAAyB,IAAIrC,EAAYC,CAAI,CAAC,CACvD,CACA,SAASiB,EAAiBL,EAAS,CACjC,OAAOV,EAAUU,CAAO,EAAE,iBAAiBA,CAAO,CACpD,CACA,SAASyB,GAAczB,EAAS,CAC9B,OAAIL,EAAUK,CAAO,EACZ,CACL,WAAYA,EAAQ,WACpB,UAAWA,EAAQ,SACrB,EAEK,CACL,WAAYA,EAAQ,QACpB,UAAWA,EAAQ,OACrB,CACF,CACA,SAASsB,EAAclC,EAAM,CAC3B,GAAID,EAAYC,CAAI,IAAM,OACxB,OAAOA,EAET,IAAMsC,EAENtC,EAAK,cAELA,EAAK,YAELS,GAAaT,CAAI,GAAKA,EAAK,MAE3BI,EAAmBJ,CAAI,EACvB,OAAOS,GAAa6B,CAAM,EAAIA,EAAO,KAAOA,CAC9C,CACA,SAASC,GAA2BvC,EAAM,CACxC,IAAMwC,EAAaN,EAAclC,CAAI,EACrC,OAAImC,GAAsBK,CAAU,EAC3BxC,EAAK,cAAgBA,EAAK,cAAc,KAAOA,EAAK,KAEzDQ,EAAcgC,CAAU,GAAK7B,GAAkB6B,CAAU,EACpDA,EAEFD,GAA2BC,CAAU,CAC9C,CACA,SAASC,GAAqBzC,EAAM0C,EAAMC,EAAiB,CACzD,IAAIC,EACAF,IAAS,SACXA,EAAO,CAAC,GAENC,IAAoB,SACtBA,EAAkB,IAEpB,IAAME,EAAqBN,GAA2BvC,CAAI,EACpD8C,EAASD,MAAyBD,EAAuB5C,EAAK,gBAAkB,KAAO,OAAS4C,EAAqB,MACrHG,EAAM7C,EAAU2C,CAAkB,EACxC,GAAIC,EAAQ,CACV,IAAME,EAAeC,GAAgBF,CAAG,EACxC,OAAOL,EAAK,OAAOK,EAAKA,EAAI,gBAAkB,CAAC,EAAGpC,GAAkBkC,CAAkB,EAAIA,EAAqB,CAAC,EAAGG,GAAgBL,EAAkBF,GAAqBO,CAAY,EAAI,CAAC,CAAC,CAC9L,CACA,OAAON,EAAK,OAAOG,EAAoBJ,GAAqBI,EAAoB,CAAC,EAAGF,CAAe,CAAC,CACtG,CACA,SAASM,GAAgBF,EAAK,CAC5B,OAAOA,EAAI,QAAU,OAAO,eAAeA,EAAI,MAAM,EAAIA,EAAI,aAAe,IAC9E,CCzJA,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,EAAiB,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,EAAY7B,CAAY,IAAM,QAAU8B,GAAkBZ,CAAe,KAC3EC,EAASJ,GAAcf,CAAY,GAEjCzB,EAAcyB,CAAY,GAAG,CAC/B,IAAM+B,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,CAEA,IAAM2D,GAA+B,IAAI,IAAI,CAAC,WAAY,OAAO,CAAC,EAElE,SAASC,GAA2B/E,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,SAAS6D,GAAkChF,EAASiF,EAAkB1B,EAAU,CAC9E,IAAIvC,EACJ,GAAIiE,IAAqB,WACvBjE,EAAOsD,GAAgBtE,EAASuD,CAAQ,UAC/B0B,IAAqB,WAC9BjE,EAAOiD,GAAgBlB,EAAmB/C,CAAO,CAAC,UACzCY,EAAUqE,CAAgB,EACnCjE,EAAO+D,GAA2BE,EAAkB1B,CAAQ,MACvD,CACL,IAAMrB,EAAgBb,GAAiBrB,CAAO,EAC9CgB,EAAO,CACL,EAAGiE,EAAiB,EAAI/C,EAAc,EACtC,EAAG+C,EAAiB,EAAI/C,EAAc,EACtC,MAAO+C,EAAiB,MACxB,OAAQA,EAAiB,MAC3B,CACF,CACA,OAAOtC,EAAiB3B,CAAI,CAC9B,CACA,SAASkE,GAAyBlF,EAASmF,EAAU,CACnD,IAAMC,EAAaC,EAAcrF,CAAO,EACxC,OAAIoF,IAAeD,GAAY,CAACvE,EAAUwE,CAAU,GAAKE,GAAsBF,CAAU,EAChF,GAEFlF,EAAmBkF,CAAU,EAAE,WAAa,SAAWF,GAAyBE,EAAYD,CAAQ,CAC7G,CAKA,SAASI,GAA4BvF,EAASwF,EAAO,CACnD,IAAMC,EAAeD,EAAM,IAAIxF,CAAO,EACtC,GAAIyF,EACF,OAAOA,EAET,IAAIC,EAASC,GAAqB3F,EAAS,CAAC,EAAG,EAAK,EAAE,OAAO4F,GAAMhF,EAAUgF,CAAE,GAAKhC,EAAYgC,CAAE,IAAM,MAAM,EAC1GC,EAAsC,KACpCC,EAAiB5F,EAAmBF,CAAO,EAAE,WAAa,QAC5D+F,EAAcD,EAAiBT,EAAcrF,CAAO,EAAIA,EAG5D,KAAOY,EAAUmF,CAAW,GAAK,CAACT,GAAsBS,CAAW,GAAG,CACpE,IAAMC,EAAgB9F,EAAmB6F,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,GAAuCf,GAAgB,IAAIe,EAAoC,QAAQ,GAAKhC,GAAkBkC,CAAW,GAAK,CAACE,GAA2Bf,GAAyBlF,EAAS+F,CAAW,GAG5YL,EAASA,EAAO,OAAOS,GAAYA,IAAaJ,CAAW,EAG3DF,EAAsCG,EAExCD,EAAcV,EAAcU,CAAW,CACzC,CACA,OAAAP,EAAM,IAAIxF,EAAS0F,CAAM,EAClBA,CACT,CAIA,SAASU,GAAgB/C,EAAM,CAC7B,GAAI,CACF,QAAArD,EACA,SAAAqG,EACA,aAAAC,EACA,SAAA/C,CACF,EAAIF,EAEEkD,EAAoB,CAAC,GADMF,IAAa,oBAAsB5C,GAAWzD,CAAO,EAAI,CAAC,EAAIuF,GAA4BvF,EAAS,KAAK,EAAE,EAAI,CAAC,EAAE,OAAOqG,CAAQ,EACzGC,CAAY,EAC9DE,EAAwBD,EAAkB,CAAC,EAC3CE,EAAeF,EAAkB,OAAO,CAACG,EAASzB,IAAqB,CAC3E,IAAMjE,EAAOgE,GAAkChF,EAASiF,EAAkB1B,CAAQ,EAClF,OAAAmD,EAAQ,IAAMtC,EAAIpD,EAAK,IAAK0F,EAAQ,GAAG,EACvCA,EAAQ,MAAQC,GAAI3F,EAAK,MAAO0F,EAAQ,KAAK,EAC7CA,EAAQ,OAASC,GAAI3F,EAAK,OAAQ0F,EAAQ,MAAM,EAChDA,EAAQ,KAAOtC,EAAIpD,EAAK,KAAM0F,EAAQ,IAAI,EACnCA,CACT,EAAG1B,GAAkChF,EAASwG,EAAuBjD,CAAQ,CAAC,EAC9E,MAAO,CACL,MAAOkD,EAAa,MAAQA,EAAa,KACzC,OAAQA,EAAa,OAASA,EAAa,IAC3C,EAAGA,EAAa,KAChB,EAAGA,EAAa,GAClB,CACF,CAEA,SAASG,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,EAAY7B,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,EAAkB/B,EAAcrF,CAAO,EAC3C,KAAOoH,GAAmB,CAAC9B,GAAsB8B,CAAe,GAAG,CACjE,GAAIxG,EAAUwG,CAAe,GAAK,CAACL,GAAmBK,CAAe,EACnE,OAAOA,EAETA,EAAkB/B,EAAc+B,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,GAAgBuD,GAAsBvD,CAAY,GAAKgF,GAAmBhF,CAAY,GAAK,CAACmE,GAAkBnE,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,gBAAAqD,GACA,gBAAAe,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,EAAcxE,GAAqBwE,CAAW,EAAI,CAAC,EAAI,GAAGxE,GAAqBiE,CAAQ,CAAC,EAAI,CAAC,EACvJQ,EAAU,QAAQjE,GAAY,CAC5B2D,GAAkB3D,EAAS,iBAAiB,SAAU0D,EAAQ,CAC5D,QAAS,EACX,CAAC,EACDE,GAAkB5D,EAAS,iBAAiB,SAAU0D,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,IAGrDA,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,EAEpCI,EAAe,QAAQX,CAAQ,GAEjC,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,QAAQjE,GAAY,CAC5B2D,GAAkB3D,EAAS,oBAAoB,SAAU0D,CAAM,EAC/DE,GAAkB5D,EAAS,oBAAoB,SAAU0D,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,ECnwBA,SAASE,EAAcC,EAKpB,CACC,GAAM,CACF,KAAAC,EAAO,GACP,UAAAC,EAAY,QAChB,EAAIF,EAEAG,EAA8C,KAC9CC,EAA+B,KAC/BC,EAAgC,KAChCC,EAA+B,KAC7BC,EAAYC,EAAQP,CAAI,EACxBQ,EAAaD,EAAQN,CAAS,EAE9BQ,EAAc,IAAM,CAClBL,GAAaC,IACbF,GAAWA,EAAQ,EACnBA,EAAUO,GAAWN,EAAWC,EAAU,IAAM,CAC5CM,GAAgBP,EAA0BC,EAAyB,CAC/D,UAAWG,EAAW,IAAI,EAC1B,WAAY,CAACI,GAAO,EAAE,EAAGC,GAAK,EAAGC,GAAM,CAAC,EACxC,SAAU,OACd,CAAC,EAAE,KAAK,CAAC,CAAE,EAAAC,EAAG,EAAG,UAAWC,CAAkB,IAAM,CA7BpE,IAAAC,EA8BoB,OAAO,OAAQZ,EAAyB,MAAO,CAAE,KAAM,GAAGU,CAAC,KAAM,IAAK,GAAG,CAAC,IAAK,CAAC,EAChFC,IAAsBR,EAAW,IAAI,GAAKA,EAAW,IAAIQ,CAAiB,GAC1EC,EAAAlB,EAAM,cAAN,MAAAkB,EAAA,KAAAlB,EAAoBK,EAAYC,EAAWW,EAC/C,CAAC,CACL,CAAC,EACDV,EAAU,IAAI,EAAI,EAE1B,EACMY,EAAc,IAAM,CAAEf,GAAWA,EAAQ,EAAGA,EAAU,KAAMG,EAAU,IAAI,EAAK,CAAE,EACjFa,EAAO,IAAM,CAAEjB,GAAS,aAAaA,CAAK,EAAGA,EAAQ,WAAWO,EAAa,GAAG,CAAE,EAClFW,EAAO,IAAM,CAAElB,GAAS,aAAaA,CAAK,EAAGA,EAAQ,WAAWgB,EAAa,GAAG,CAAE,EAElFG,EAAkC,CACpC,MAAO,CACH,SAAU,QACV,cAAe,OACf,WAAaC,GAAahB,EAAU,IAAIgB,CAAQ,EAAI,UAAY,QAEpE,EACA,SAAWC,GAASlB,EAAWkB,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,EAAM5B,EAAM,QAASsB,CAAe,EA8B7B,CAAE,KAAAF,EAAM,KAAAC,EAAM,cA5BiB,CAClC,UAAYQ,GAAOA,EAAoB,MAAQ,UAAYR,EAAK,EAChE,YAAcG,GAAS,CACnB,IAAIM,EAAmC,KACvCN,EAAK,QAAQ,EAAE,QAAQ,OAASO,GAAS,CACrCD,EAAeC,EAAK,SAAU,OAAO/B,EAAM,OAAO,CACtD,CAAC,EACDwB,EAAK,QAAQ,eAAgB,IAAM,CAC/BH,EAAK,EACDlB,GAAO,aAAaA,CAAK,EAC7B2B,GAAgBA,EAAa,OAAO,CACxC,CAAC,CACL,EACA,SAAWN,GAAS,CAChBnB,EAAYmB,EAAK,WACjB,IAAMQ,EAAiBC,GAAsB,CACzC,GAAI,CAAC1B,EAAU,IAAI,GAAK,CAACF,GAAa,CAACC,EAAU,OAEjD,IAAM4B,EAASD,EAAM,OACjB,CAAC5B,EAAU,SAAS6B,CAAM,GAAK,CAAC5B,EAAS,SAAS4B,CAAM,GACxDb,EAAK,CAEb,EACAG,EAAK,QAAQ,EAAE,WAAY,iBAAiB,QAASQ,CAAa,EAClER,EAAK,QAAQ,eAAgB,IAAMA,EAAK,QAAQ,EAAE,WAAY,oBAAoB,QAASQ,CAAa,CAAC,CAC7G,CACJ,CAEmC,CACvC,CC3FA,SAASG,GAASC,EAUC,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,UAAAN,EAAW,QAASF,EAAM,QAAS,YAAaA,EAAM,WAAY,CAAC,EAElIa,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,aAAcD,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,SAAWC,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,CC5GA,SAASsB,GAAaC,EAMlB,CAAC,EAAmB,CACpB,GAAI,CACA,UAAAC,EAAY,aACZ,MAAAC,EAAQ,UACR,WAAAC,EAAaC,EAAa,CAAC,EAC3B,SAAAC,EAAW,EACf,EAAIL,EACAM,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,EACMC,EAAYF,EAAQC,EAAQF,EAAM,IAAI,CAAC,CAAC,EAC9CA,EAAM,SAASI,GAAOD,EAAU,IAAID,EAAQE,CAAgB,CAAC,CAAC,EAE9D,IAAMC,EAASC,GAAgBA,EAAI,SAAS,OAAO,EAAIT,EAAaS,EAAI,SAAS,KAAK,EAAI,OAAS,MAC7FC,EAAOD,GAAgBA,EAAI,SAAS,KAAK,EAAIT,EAAaS,EAAI,SAAS,OAAO,EAAI,OAAS,MAEjG,MAAO,CACH,MAAO,CACH,SAAU,WACV,WAAY,CACR,QAAS,KACT,SAAU,WACV,MAAOR,EAAa,GAAG,EACvB,OAAQA,EAAa,GAAG,EACxB,gBAAkBU,GAAaC,EAAWD,EAAU,UAAWZ,CAAK,EACpE,YAAYG,EAAW,MAAO,MAC9B,YAAcS,GAAaC,EAAWD,EAAU,UAAWZ,CAAK,EAChE,eAAiBY,GAAa,CAC1B,IAAMF,EAAMH,EAAU,IAAIK,CAAQ,EAClC,OAAOF,EAAI,SAAS,KAAK,GAAKA,EAAI,SAAS,OAAO,EAAI,QAAU,MACpE,EACA,kBAAoBE,GAAa,CAC7B,IAAMF,EAAMH,EAAU,IAAIK,CAAQ,EAClC,OAAOF,EAAI,SAAS,QAAQ,GAAKA,EAAI,SAAS,MAAM,EAAI,QAAU,MACtE,EACA,gBAAkBE,GAAa,CAC3B,IAAMF,EAAMH,EAAU,IAAIK,CAAQ,EAClC,OAAOF,EAAI,SAAS,KAAK,GAAKA,EAAI,SAAS,MAAM,EAAI,QAAU,MACnE,EACA,iBAAmBE,GAAa,CAC5B,IAAMF,EAAMH,EAAU,IAAIK,CAAQ,EAClC,OAAOF,EAAI,SAAS,QAAQ,GAAKA,EAAI,SAAS,OAAO,EAAI,QAAU,MACvE,EACA,IAAME,GAAa,CACf,IAAMF,EAAMH,EAAU,IAAIK,CAAQ,EAClC,OAAOF,EAAI,SAAS,KAAK,EAAI,EAAIA,EAAI,SAAS,QAAQ,EAAI,OAASD,EAAMC,CAAG,CAChF,EACA,MAAQE,GAAa,CACjB,IAAMF,EAAMH,EAAU,IAAIK,CAAQ,EAClC,OAAOF,EAAI,SAAS,OAAO,EAAI,EAAIA,EAAI,SAAS,MAAM,EAAI,OAASC,EAAID,CAAG,CAC9E,EACA,OAASE,GAAa,CAClB,IAAMF,EAAMH,EAAU,IAAIK,CAAQ,EAClC,OAAOF,EAAI,SAAS,QAAQ,EAAI,EAAIA,EAAI,SAAS,KAAK,EAAI,OAASC,EAAID,CAAG,CAC9E,EACA,KAAOE,GAAa,CAChB,IAAMF,EAAMH,EAAU,IAAIK,CAAQ,EAClC,OAAOF,EAAI,SAAS,MAAM,EAAI,EAAIA,EAAI,SAAS,OAAO,EAAI,OAASD,EAAMC,CAAG,CAChF,EACA,UAAYE,GAAa,CACrB,IAAMF,EAAMH,EAAU,IAAIK,CAAQ,EAC5BE,EAAIJ,EAAI,SAAS,OAAO,GAAMA,EAAI,SAAS,KAAK,GAAK,CAACA,EAAI,SAAS,MAAM,EAAK,MAAQ,OACtFK,EAAIL,EAAI,SAAS,QAAQ,GAAMA,EAAI,SAAS,KAAK,GAAK,CAACA,EAAI,SAAS,KAAK,EAAK,MAAQ,OAC5F,MAAO,aAAaI,CAAC,IAAIC,CAAC,iBAC9B,CACJ,CACJ,CACJ,CACJ,CCxFA,SAASC,GAAWC,EAAgC,CAAC,EAAmB,CACpE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,GAAS,CACbA,EAAK,SAAW,cAChB,QAAQ,KAAK,sDAAsD,CAE3E,EACA,SAAU,UACV,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EACpE,UAAYE,GAAa,SAASG,EAAa,CAAC,CAAC,UAAUD,EAAWF,EAAU,UAAWF,CAAK,CAAC,GACjG,OAAQ,OACR,aAAcK,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,OAAQ,CACZ,CACJ,CACJ,CCpBA,SAASC,GAAOC,EAAgC,CAAC,EAAmB,CAChE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,GAAS,CACbA,EAAK,SAAW,UAChB,QAAQ,KAAK,8CAA8C,CAEnE,EACA,MAAO,CACH,WAAY,OACZ,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,aAAcE,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,MAAO,cACP,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,WAAY,OACZ,WAAY,UACZ,WAAY,UACZ,OAAQ,OACR,cAAe,OACf,aAAc,MACd,QAAUF,GAAa,aAAaG,EAAWH,EAAU,UAAWF,CAAK,CAAC,GAC1E,MAAQE,GAAaG,EAAWH,EAAU,UAAWF,CAAK,EAC1D,gBAAkBE,GAAaG,EAAWH,EAAU,UAAWF,CAAK,EACpE,gDAAiD,CAC7C,MAAQE,GAAaG,EAAWH,EAAU,UAAWF,CAAK,EAC1D,gBAAkBE,GAAaG,EAAWH,EAAU,UAAWF,CAAK,CACxE,EACA,kBAAmB,CACf,UAAYE,GAAa,eAAeE,EAAa,EAAG,CAAC,IAAIC,EAAWH,EAAU,UAAWF,CAAK,CAAC,EACvG,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,gBAAkBE,GAAaG,EAAWH,EAAU,UAAW,SAAS,EACxE,QAAUA,GAAa,aAAaG,EAAWH,EAAU,UAAW,SAAS,CAAC,GAC9E,MAAQA,GAAaG,EAAWH,EAAU,UAAW,SAAS,CAClE,EACA,oBAAqB,CACjB,QAAS,GACT,OAAQ,OACR,cAAe,MACnB,CACJ,CACJ,CACJ,CCjDA,SAASI,GAAcC,EAA0D,CAAC,EAAmB,CACjG,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EAEvD,MAAO,CACH,KAAM,WACN,UAAYG,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,UAAWH,CAAK,CAAC,GAC1E,MAAQG,GAAaG,EAAWH,EAAU,UAAWH,CAAK,EAC1D,MAAOK,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,CAC1B,EACA,kBAAmB,CACf,gBAAkBF,GAAaG,EAAWH,EAAU,UAAWH,CAAK,CACxE,EACA,oBAAqB,CACjB,QAAUG,GAAa,aAAaG,EAAWH,EAAU,UAAWF,CAAW,CAAC,GAChF,gBAAkBE,GAAaG,EAAWH,EAAU,UAAWF,CAAW,CAC9E,EACA,0CAA2C,CACvC,gBAAkBE,GAAaG,EAAWH,EAAU,UAAWF,CAAW,CAC9E,EACA,mBAAoB,CAChB,QAAS,KACT,QAAS,QACT,SAAU,WACV,IAAK,MACL,iBAAkB,MAClB,MAAO,MACP,OAAQ,MACR,OAASE,GAAa,GAAGE,EAAa,EAAG,CAAC,UAAUC,EAAWH,EAAU,UAAWF,CAAW,CAAC,GAChG,UAAW,EACX,kBAAmB,EACnB,UAAW,eACf,EACA,0BAA2B,CACvB,QAAUE,GAAa,aAAaG,EAAWH,EAAU,UAAWF,CAAW,CAAC,GAChF,gBAAkBE,GAAaG,EAAWH,EAAU,UAAWF,CAAW,CAC9E,EACA,yBAA0B,CACtB,QAAS,KACT,SAAU,WACV,MAAO,MACP,gBAAkBE,GAAaG,EAAWH,EAAU,UAAWF,CAAW,CAC9E,EACA,+CAAgD,CAC5C,gBAAkBE,GAAaG,EAAWH,EAAU,UAAWF,CAAW,CAC9E,EACA,kBAAmB,CACf,aAAcI,EAAa,GAAG,EAC9B,QAAUF,GAAa,GAAGE,EAAa,EAAG,CAAC,UAAUC,EAAWH,EAAU,UAAWF,CAAW,CAAC,EACrG,EACA,cAAe,CACX,OAAQ,aACZ,EACA,0CAA2C,CACvC,QAAS,OACT,gBAAkBE,GAAaG,EAAWH,EAAU,UAAW,SAAS,EACxE,cAAe,MACnB,CACJ,CACJ,CACJ,CCrFA,SAASI,GAAKC,EAAgC,CAAC,EAAmB,CAC9D,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,SAAU,UACV,UAAYE,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,UAAWF,CAAK,EAC1D,gBAAkBE,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EACpE,OAAQK,EAAa,CAAC,EACtB,cAAeA,EAAa,GAAG,EAC/B,aAAcA,EAAa,CAAC,CAChC,CACJ,CACJ,CCrBA,SAASC,GACLC,EAA6E,CAAC,EAChE,CACd,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,UAAW,SAAAC,EAAW,GAAI,EAAIH,EAEvE,MAAO,CACH,UAAYI,GAAS,CACbA,EAAK,SAAW,WAChB,QAAQ,KAAK,gDAAgD,CAErE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EAC1D,gBAAkBI,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EAEpE,SAAU,SACV,cAAe,CACZ,gBAAkBI,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EACrE,MAAQI,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EACxD,SAAWI,GAAaC,EAAUD,EAAU,SAAS,EACrD,UAAW,OACX,QAAS,OACX,eAAe,gBACb,WAAY,SACZ,IAAKG,EAAa,CAAC,EACnB,OAAQ,UACR,WAAY,OACZ,WAAY,IACZ,cAAeA,EAAa,CAAC,EAC/B,OAAQA,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,CAAK,CAAC,GACnG,aAAeI,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWJ,CAAK,CAAC,GAChG,UAAW,gBACX,WAAY,aAAaE,CAAQ,SACrC,EACA,2BAA4B,CACxB,UAAW,iBACf,EACA,oBAAqB,CACjB,gBAAkBE,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,CACxE,EACA,4BAA6B,CACzB,aAAcO,EAAa,CAAC,EAC5B,cAAe,IAAIA,EAAa,EAAG,CAAC,GACpC,QAAUH,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWH,CAAW,CAAC,EACrG,EACA,oBAAqB,CACjB,UAAW,MACX,QAAS,EACT,SAAU,SACV,cAAeM,EAAa,CAAC,EAC7B,WAAY,EACZ,cAAe,EACf,WAAY,cAAcL,CAAQ,oBAAoBA,CAAQ,oBAAoBA,CAAQ,SAC9F,EACA,0BAA2B,CACvB,UAAWK,EAAa,GAAG,EAC3B,QAAS,EACT,WAAYA,EAAa,CAAC,EAC1B,cAAeA,EAAa,CAAC,CACjC,CACJ,CACJ,CACJ,CC7EA,SAASC,GAAgBC,EAAgC,CAAC,EAAmB,CACzE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,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,UAAWH,CAAK,CAC9D,EACA,OAAQ,CACJ,OAAQ,EACR,SAAWG,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,CAAK,CAC9D,CACJ,CACJ,CACJ,CC3BA,SAASM,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,SAASO,CAAM,CACzB,EACA,MAAO,CACH,QAAS,IACT,WAAY,qBACZ,SAAWG,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWZ,CAAK,EAC1D,gBAAkBY,GAAaE,EAAWF,EAAU,UAAWZ,CAAK,EACpE,OAAQ,OACR,QAASe,EAAa,CAAC,EACvB,UAAYH,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,SAASI,GAASC,EAAgC,CAAC,EAAmB,CAClE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,GAAS,CACbA,EAAK,SAAW,MAChB,QAAQ,KAAK,4CAA4C,CAEjE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,UAAW,SACX,MAAQA,GAAaE,EAAWF,EAAU,UAAWF,CAAK,CAC9D,CACJ,CACJ,CCfA,SAASK,GAAOC,EAAgC,CAAC,EAAmB,CAChE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,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,UAAWH,CAAK,EAC1D,kCAAmC,CAC/B,QAAS,QACT,SAAU,OACV,aAAcE,EAAa,CAAC,CAChC,EACA,eAAgB,CACZ,SAAWC,GAAaE,EAAUF,EAAU,YAAY,EACxD,MAAQA,GAAaC,EAAWD,EAAU,UAAWH,CAAK,EAC1D,WAAY,IAChB,CACJ,CACJ,CACJ,CC7BA,SAASM,GAAUC,EAAoE,CAAC,EAAmB,CACvG,GAAM,CAAE,MAAAC,EAAQ,UAAW,OAAAC,EAAS,YAAa,EAAIF,EAE/CG,EAAaD,IAAW,WAE9B,MAAO,CACH,UAAYE,GAAS,CACbA,EAAK,SAAW,YAChB,QAAQ,KAAK,yCAAyC,CAE9D,EACA,MAAO,CACH,OAAQ,EACR,cAAeC,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,OAAQ,OACR,aAAcA,EAAa,CAAC,EAC5B,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWL,CAAK,EACpE,QAAS,OACT,oBAAqBE,EAAa,iBAAmB,6BACrD,UAAWE,EAAa,CAAC,EACzB,OAAQA,EAAa,CAAC,EACtB,WAAY,QACZ,aAAc,CACV,WAAY,SACZ,OAAQ,EACR,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,IACZ,aAAcD,EAAa,CAAC,EAC5B,aAAcA,EAAa,CAAC,EAC5B,MAAQC,GAAaE,EAAWF,EAAU,UAAWL,CAAK,EAC1D,gBAAkBK,GAAaE,EAAWF,EAAU,UAAWL,CAAK,CACxE,EACA,YAAa,CACT,WAAY,IACZ,UAAW,QACX,OAAQ,EACR,aAAcE,EAAa,EAAIE,EAAa,CAAC,CACjD,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,QAAQE,EAAa,CAAC,CAAC,SACzC,SAAWC,GAAaC,EAAUD,EAAU,YAAY,EACxD,MAAQA,GAAaE,EAAWF,EAAU,UAAWL,CAAK,CAC9D,CACJ,CACJ,CACJ,CC3DA,IAAMQ,GAAsC,CACxC,GAAI,aACJ,GAAI,UACJ,GAAI,aACJ,GAAI,aACJ,GAAI,aACJ,GAAI,YACR,EAEA,SAASC,GAAQC,EAAgC,CAAC,EAAmB,CACjE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,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,UAAWF,CAAK,EAC1D,UAAW,EACX,aAAcI,EAAa,CAAC,EAC5B,SAAWF,GAAa,CACpB,IAAMG,EAASR,GAAYK,EAAS,YAAY,OAAO,GAAK,UAC5D,OAAOI,EAAUJ,EAAUG,CAAM,CACrC,CACJ,CACJ,CACJ,CC5BA,SAASE,GAAeC,EAAgC,CAAC,EAAmB,CACxE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,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,UAAWH,CAAK,CACxE,CACJ,CACJ,CClBA,SAASK,GAAMC,EAAgC,CAAC,EAAmB,CAC/D,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,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,UAAWH,CAAK,CACxE,CACJ,CACJ,CCnBA,SAASK,IAAuB,CAC5B,MAAO,CACH,UAAYC,GAAS,CACbA,EAAK,SAAW,QAChB,QAAQ,KAAK,4CAA4C,CAEjE,EACA,MAAO,CACH,QAAS,cACT,WAAY,SACZ,cAAe,SACf,MAAOC,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,CAC1B,CACJ,CACJ,CCfA,SAASC,GAAWC,EAA0D,CAAC,EAAmB,CAC9F,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EAEvD,MAAO,CACH,KAAM,QACN,YAAa,CAACG,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,aAAcE,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,UAAWA,EAAa,CAAC,EACzB,WAAYA,EAAa,CAAC,EAC1B,gBAAiB,cACjB,kCAAmC,CAC/B,OAAQ,EACR,QAAS,CACb,EACA,0BAA2B,CACvB,aAAcA,EAAa,CAAC,CAChC,EACA,uBAAwB,CACpB,aAAcA,EAAa,CAAC,CAChC,EACA,2CAA4C,CAC5C,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,gBAAkBF,GAAaG,EAAWH,EAAU,UAAW,SAAS,EACxE,QAAUA,GAAa,aAAaG,EAAWH,EAAU,UAAW,SAAS,CAAC,EAClF,CACJ,CACJ,CACJ,CCvCA,SAASI,GACLC,EAAoF,CAAC,EACvE,CACd,GAAM,CAAE,KAAAC,EAAO,iBAAkB,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIH,EAEhF,MAAO,CACH,KAAMC,EACN,YAAa,CAACG,EAAMC,IAAY,CACxBD,EAAK,SAAW,SAChB,QAAQ,KAAK,oDAAoD,EAEpEC,EAAgB,KAAOJ,CAC5B,EACA,MAAO,CACH,WAAY,UACZ,SAAWK,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,UACZ,MAAQA,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EAC1D,gBAAkBI,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EACpE,OAAQ,OACR,cAAe,OACf,QAAUI,GAAa,aAAaE,EAAWF,EAAU,UAAWJ,CAAK,CAAC,GAC1E,aAAcO,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,OAAQA,EAAa,CAAC,EACtB,uCAAwC,CACpC,OAAQ,UACR,QAAS,GACb,EACA,iEAAkE,CAC9D,QAAUH,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWH,CAAW,CAAC,EACrG,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,MAAQG,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,CC9CA,SAASI,GAAUC,EAA0D,CAAC,EAAmB,CAC7F,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EAEvD,MAAO,CACH,KAAM,OACN,YAAa,CAACG,EAAMC,IAAY,CACxBD,EAAK,SAAW,SAChB,QAAQ,KAAK,gDAAgD,EAEhEC,EAAgB,KAAO,MAC5B,EACA,MAAO,CACH,WAAY,UACZ,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,UACZ,MAAQA,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EAC1D,gBAAkBI,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EACpE,OAAQ,OACR,cAAe,OACf,QAAUI,GAAa,aAAaE,EAAWF,EAAU,UAAWJ,CAAK,CAAC,GAC1E,aAAcO,EAAa,CAAC,EAC5B,OAAQA,EAAa,CAAC,EACtB,cAAeA,EAAa,CAAC,EAC7B,0BAA2B,CACvB,YAAa,OACb,WAAY,UACZ,SAAU,UACV,OAAQ,OACR,aAAcA,EAAa,CAAC,EAC5B,OAAQA,EAAa,CAAC,EACtB,cAAeA,EAAa,CAAC,EAC7B,OAAQ,UACR,MAAQH,GAAaE,EAAWF,EAAU,UAAWH,CAAW,EAChE,gBAAkBG,GAAaE,EAAWF,EAAU,UAAWH,CAAW,CAC9E,EACA,gCAAiC,CAC7B,UAAWM,EAAa,CAAC,EACzB,WAAY,UACZ,SAAU,UACV,OAAQ,OACR,aAAcA,EAAa,CAAC,EAC5B,OAAQA,EAAa,CAAC,EACtB,cAAeA,EAAa,CAAC,EAC7B,OAAQ,UACR,MAAQH,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EAC1D,gBAAkBI,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,CACxE,EACA,iEAAkE,CAC9D,QAAUI,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWH,CAAW,CAAC,EACrG,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,MAAQG,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,CChEA,SAASI,GAAYC,EAA0D,CAAC,EAAmB,CAC/F,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EAEvD,MAAO,CACH,KAAM,SACN,YAAa,CAACG,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,UAAWJ,CAAK,EAC1D,gBAAkBI,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EACpE,OAAQ,OACR,cAAe,OACf,QAAUI,GAAa,aAAaE,EAAWF,EAAU,UAAWJ,CAAK,CAAC,GAC1E,aAAcO,EAAa,CAAC,EAC5B,SAAUA,EAAa,EAAE,EACzB,cAAeA,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,iBAAkB,CACd,MAAQH,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,CAC9D,EACA,+BAAgC,CAC5B,QAAS,MACb,EACA,kCAAmC,CAC/B,OAAQ,SACZ,EACA,iEAAkE,CAC9D,QAAUI,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWH,CAAW,CAAC,EACrG,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,MAAQG,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,CC7CA,SAASI,GAAUC,EAA0D,CAAC,EAAmB,CAC7F,GAAI,CACA,MAAAC,EAAQ,UACR,YAAAC,EAAc,SAClB,EAAIF,EAEJ,MAAO,CACH,KAAM,OACN,YAAa,CAACG,EAAMC,IAAY,CACxBD,EAAK,SAAW,SAChB,QAAQ,KAAK,8DAA8D,EAE9EC,EAAgB,KAAO,MAC5B,EACA,MAAO,CACH,WAAY,UACZ,WAAY,UACZ,SAAUC,EAAa,EAAE,EACzB,cAAeA,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,aAAcA,EAAa,CAAC,EAC5B,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,OAAQ,OACR,cAAe,OACf,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAWL,CAAK,CAAC,GAC1E,MAAQK,GAAaE,EAAWF,EAAU,UAAWL,CAAK,EAC1D,gBAAkBK,GAAaE,EAAWF,EAAU,UAAWL,CAAK,EACpE,iBAAkB,CACd,MAAQK,GAAaE,EAAWF,EAAU,SAAS,CACvD,EACA,4BAA6B,CACzB,MAAQA,GAAaE,EAAWF,EAAU,SAAS,CACvD,EACA,iEAAkE,CAE9D,QAAUA,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUG,EAAWF,EAAU,UAAWJ,CAAW,CAAC,EACrG,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,gBAAkBI,GAAaE,EAAWF,EAAU,UAAW,SAAS,EACxE,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAW,SAAS,CAAC,GAC9E,MAAQA,GAAaE,EAAWF,EAAU,UAAW,SAAS,CAClE,EACA,oCAAqC,CACjC,QAAUA,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUG,EAAWF,EAAU,UAAW,OAAO,CAAC,EACjG,EACA,uBAAwB,CACpB,QAAUA,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUG,EAAWF,EAAU,UAAW,OAAO,CAAC,EACjG,EACA,yBAA0B,CACtB,QAAUA,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUG,EAAWF,EAAU,UAAW,SAAS,CAAC,EACnG,CACJ,CACJ,CACJ,CCvDA,SAASG,GAAWC,EAA0D,CAAC,EAAmB,CAC9F,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EAEvD,MAAO,CACH,KAAM,QACN,UAAYG,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,UAAWJ,CAAK,CACxE,EACA,sBAAuB,CACnB,OAAQG,EAAa,GAAG,EACxB,aAAcA,EAAa,GAAG,EAC9B,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWJ,CAAK,CACxE,EACA,0BAA2B,CACvB,WAAY,OACZ,MAAOG,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,CAAW,CAC9E,EACA,sBAAuB,CACnB,MAAOE,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,aAAcA,EAAa,GAAG,EAC9B,OAAQ,OACR,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWH,CAAW,CAC9E,EACA,gDAAiD,CAC7C,gBAAkBG,GAAaC,EAAWD,EAAU,UAAWH,CAAW,CAC9E,EACA,4CAA6C,CACzC,gBAAkBG,GAAaC,EAAWD,EAAU,UAAWH,CAAW,CAC9E,EACA,kBAAmB,CACf,QAAUG,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUE,EAAWD,EAAU,UAAWH,CAAW,CAAC,GACjG,cAAeE,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,CAChC,EACA,cAAe,CACX,QAAS,GACT,OAAQ,aACZ,CACJ,CACJ,CACJ,CC7DA,SAASG,GAAYC,EAA0D,CAAC,EAAmB,CAC/F,GAAM,CACF,MAAAC,EAAQ,UACR,YAAAC,EAAc,SAClB,EAAIF,EAEJ,MAAO,CACH,KAAM,SACN,YAAa,CAACG,EAAMC,IAAY,CACxBD,EAAK,SAAW,SAChB,QAAQ,KAAK,kDAAkD,EAElEC,EAAgB,KAAO,QAC5B,EACA,MAAO,CACH,WAAY,UACZ,WAAY,UACZ,SAAUC,EAAa,EAAE,EACzB,cAAeA,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,aAAcA,EAAa,CAAC,EAC5B,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,OAAQ,OACR,cAAe,OACf,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAWL,CAAK,CAAC,GAC1E,MAAQK,GAAaE,EAAWF,EAAU,UAAWL,CAAK,EAC1D,gBAAkBK,GAAaE,EAAWF,EAAU,UAAWL,CAAK,EACpE,6DAA8D,CAC1D,QAAS,CACb,EACA,iEAAkE,CAC9D,QAAUK,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUG,EAAWF,EAAU,UAAWJ,CAAW,CAAC,EACrG,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,gBAAkBI,GAAaE,EAAWF,EAAU,UAAW,SAAS,EACxE,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAW,SAAS,CAAC,GAC9E,MAAQA,GAAaE,EAAWF,EAAU,UAAW,SAAS,CAClE,CACJ,CACJ,CACJ,CC1CA,SAASG,GAASC,EAAgC,CAAC,EAAmB,CAClE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,GAAS,CACbA,EAAK,SAAW,OAChB,QAAQ,KAAK,6CAA6C,CAElE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EAC1D,gBAAkBE,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EACpE,aAAcK,EAAa,EAAG,EAC9B,cAAeA,EAAa,GAAG,EAC/B,aAAcA,EAAa,CAAC,EAC5B,QAAUH,GAAa,aAAaE,EAAWF,EAAU,UAAWF,CAAK,CAAC,EAC9E,CACJ,CACJ,CCnBA,SAASM,GAAMC,EAA0D,CAAC,EAAmB,CACzF,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EAEvD,MAAO,CACH,UAAYG,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,UAAWJ,CAAK,EAC1D,OAAQ,UACR,iBAAkB,CACd,MAAQI,GAAaE,EAAWF,EAAU,UAAWH,CAAW,CACpE,EACA,wBAAyB,CACrB,QAAS,GACT,OAAQ,cACR,MAAQG,GAAaE,EAAWF,EAAU,UAAW,SAAS,CAClE,CACJ,CACJ,CACJ,CC1BA,SAASG,GAAKC,EAA0D,CAAC,EAAmB,CACxF,GAAI,CACA,MAAAC,EAAQ,UACR,YAAAC,EAAc,WAClB,EAAIF,EACJ,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,KAChB,QAAQ,KAAK,uCAAuC,CAE5D,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,CAAK,EAC1D,eAAgB,OAChB,YAAa,CACT,MAAQG,GAAaE,EAAWF,EAAU,UAAWF,CAAW,CACpE,EACA,0BAA2B,CACvB,MAAQE,GAAaE,EAAWF,EAAU,UAAWH,CAAK,EAC1D,eAAgB,WACpB,EACA,kBAAmB,CACf,aAAcM,EAAa,CAAC,EAC5B,cAAcA,EAAa,CAAC,EAC5B,QAAUH,GAAa,GAAGG,EAAa,EAAG,CAAC,UAAUD,EAAWF,EAAU,UAAWF,CAAW,CAAC,EACrG,EACA,cAAe,CACX,QAAS,GACT,OAAQ,cACR,MAAQE,GAAaE,EAAWF,EAAU,UAAW,SAAS,CAClE,CACJ,CACJ,CACJ,CClCA,SAASI,GAAKC,EAA0D,CAAC,EAAmB,CACxF,GAAM,CACF,YAAAC,EAAc,YACd,KAAAC,EAAO,SACX,EAAIF,EAEJ,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,QAChB,QAAQ,KAAK,0CAA0C,CAE/D,EACA,SAAUD,EACV,MAAO,CACH,QAAS,cACT,WAAY,SACZ,SAAWE,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWH,CAAW,EAChE,gBAAkBG,GAAaE,EAAWF,EAAU,UAAWH,CAAW,EAC1E,OAAQM,EAAa,CAAC,EACtB,aAAcA,EAAa,CAAC,EAC5B,cAAeA,EAAa,GAAG,CACnC,CACJ,CACJ,CCxBA,SAASC,GAAUC,EAAgC,CAAC,EAAmB,CACnE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,GAAS,CACbA,EAAK,SAAW,KAChB,QAAQ,KAAK,4CAA4C,CAEjE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EAC1D,WAAW,IACX,UAAW,EACX,aAAc,CAClB,CACJ,CACJ,CCjBA,SAASK,GAAYC,EAAgC,CAAC,EAAmB,CACrE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,GAAS,CACbA,EAAK,SAAW,OAChB,QAAQ,KAAK,gDAAgD,CAErE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EAC1D,gBAAkBE,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EACpE,OAAQ,OACR,aAAcK,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,CAChC,CACJ,CACJ,CCnBA,SAASC,GAASC,EAA0D,CAAC,EAAmB,CAC5F,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EAEvD,MAAO,CACH,UAAYG,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,UAAWJ,CAAK,EACpE,0BAA2B,CACvB,gBAAkBI,GAAaC,EAAWD,EAAU,UAAWJ,CAAK,EACpE,aAAcG,EAAa,GAAG,CAClC,EACA,4BAA6B,CACzB,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWH,CAAW,EAC1E,aAAcE,EAAa,GAAG,EAC9B,WAAY,kBAChB,EACA,uBAAwB,CACpB,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWH,CAAW,EAC1E,aAAcE,EAAa,GAAG,CAClC,CACJ,CACJ,CACJ,CChCA,SAASG,GAAWC,EAA0D,CAAC,EAAmB,CAC9F,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EAEvD,MAAO,CACH,KAAM,QACN,UAAYG,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,UAAWH,CAAK,CAAC,GAC1E,MAAQG,GAAaG,EAAWH,EAAU,UAAWH,CAAK,EAC1D,MAAOK,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,CAC1B,EACA,kBAAmB,CACf,gBAAkBF,GAAaG,EAAWH,EAAU,UAAWH,CAAK,CACxE,EACA,oBAAqB,CACjB,QAAUG,GAAa,aAAaG,EAAWH,EAAU,UAAWF,CAAW,CAAC,EACpF,EACA,mBAAoB,CAChB,QAAS,KACT,SAAU,WACV,MAAO,MACP,aAAc,MACd,gBAAkBE,GAAaG,EAAWH,EAAU,UAAWF,CAAW,CAC9E,EACA,0CAA2C,CACvC,gBAAkBE,GAAaG,EAAWH,EAAU,UAAWF,CAAW,CAC9E,EACA,kBAAmB,CACf,aAAc,MACd,QAAUE,GAAa,GAAGE,EAAa,EAAG,CAAC,UAAUC,EAAWH,EAAU,UAAWF,CAAW,CAAC,EACrG,EACA,cAAe,CACX,OAAQ,aACZ,EACA,0CAA2C,CACvC,QAAS,OACT,gBAAkBE,GAAaG,EAAWH,EAAU,UAAW,SAAS,EACxE,cAAe,MACnB,CACJ,CACJ,CACJ,CClEA,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,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,aAAcM,EAAa,CAAC,EAC5B,aAAcA,EAAa,CAAC,EAC5B,YAAaA,EAAa,CAAC,EAC3B,aAAcA,EAAa,CAAC,EAC5B,oBAAqB,CACjB,OAAQA,EAAa,CAAC,CAC1B,EACA,gDAAiD,CAC7C,QAAUH,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,UAAWH,CAAK,CAC9D,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,CChDA,SAASI,GAASC,EAEd,CAAC,EAAmB,CACtB,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAExBE,EAAY,CAChB,UAAW,CAAE,QAAS,CAAE,EACxB,MAAO,CAAE,QAAS,EAAG,CACvB,EACMC,EAAgBC,EAAW,KAAK,UAAUF,CAAS,CAAC,EAC1D,MAAO,CACL,WAAY,OACZ,MAAO,CACL,OAAQG,EAAa,CAAC,EACtB,QAAS,QACT,aAAcA,EAAa,CAAC,EAC5B,gBAAkBC,GAAaC,EAAWD,EAAU,UAAWL,CAAK,EACpE,UAAW,GAAGE,CAAa,6BAC3B,CAAC,cAAcA,CAAa,EAAE,EAAGD,CACnC,CACF,CACF,CCpBA,IAAMM,GAAY,CAAE,GAAI,CAAE,UAAW,gBAAiB,CAAE,EAClDC,GAAgBC,EAAW,KAAK,UAAUF,EAAS,CAAC,EAE1D,SAASG,GAAQC,EAEb,CAAC,EAAmB,CACtB,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACL,KAAM,SACN,UAAW,UACX,UAAYE,GAAS,CACfA,EAAK,SAAW,QAClB,QAAQ,KAAK,mCAAmC,CAEpD,EACA,MAAO,CACL,QAAS,eACT,OAAQ,EACR,WAAY,EACZ,MAAOC,EAAa,CAAC,EACrB,OAAQA,EAAa,CAAC,EACtB,aAAc,MACd,OAASC,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUE,EAAWD,EAAU,UAAWH,CAAK,CAAC,GAC1F,eAAiBG,GAAaC,EAAWD,EAAU,UAAWH,CAAK,EACnE,UAAW,aACX,QAAS,EACT,UAAW,GAAGJ,EAAa,wBAC3B,CAAC,cAAcA,EAAa,EAAE,EAAGD,EACnC,CAEF,CACF,CChCA,SAASU,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,aAAcK,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,SAAWJ,GAAaK,EAAUL,EAAU,SAAS,EACrD,gBAAkBA,GAAaM,EAAWN,EAAU,UAAWL,CAAK,CACxE,CACJ,CAEJ,CC3CA,SAASY,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,OAAQI,EAAa,CAAC,EACtB,cAAeA,EAAa,CAAC,EAC7B,OAAQ,OACR,QAAS,OACT,MAAQJ,GAAaK,EAAWL,EAAU,UAAWL,CAAK,EAC1D,gBAAkBK,GAAaK,EAAWL,EAAU,UAAWL,CAAK,EACpE,oDAAqD,CACnD,gBAAkBK,GAAaK,EAAWL,EAAU,UAAWL,CAAK,CACtE,EACA,wBAAyB,CACvB,gBAAkBK,GAAaK,EAAWL,EAAU,UAAWN,CAAW,EAC1E,MAAQM,GAAaK,EAAWL,EAAU,SAAS,CACrD,EACA,kBAAmB,CACjB,QAAUA,GAAa,GAAGI,EAAa,EAAG,CAAC,UAAUC,EAAWL,EAAU,UAAWN,CAAW,CAAC,GACjG,cAAe,IAAIU,EAAa,EAAG,CAAC,EACtC,CACF,CACF,CAEF,CCxDA,SAASE,GAAUC,EASA,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,UAAAN,EAAW,QAASF,EAAM,QAAS,YAAaA,EAAM,WAAY,CAAC,EAElIa,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,UAAWgB,EAAa,CAAC,EACzB,SAAUA,EAAa,EAAE,EACzB,cAAe,OACf,QAAUT,GAAa,aAAaY,EAAWZ,EAAU,UAAW,SAAS,CAAC,GAC9E,cAAeS,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,SAAWT,GAAaa,EAAUb,EAAU,SAAS,EACrD,MAAQA,GAAaY,EAAWZ,EAAU,UAAWb,CAAK,EAC1D,gBAAkBa,GAAaY,EAAWZ,EAAU,UAAWb,CAAK,CACxE,CACJ,EAEA,OAAAW,EAAMH,EAAee,CAAO,EACrBf,CACX,CClFA,SAASmB,GAAYC,EAAsC,CAAC,EAAmB,CAC3E,GAAM,CAAE,YAAAC,EAAc,SAAU,EAAID,EAEpC,MAAO,CACH,SAAU,aACV,KAAM,WACN,YAAcE,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,aAAcF,CAAW,CACjF,EACA,WAAY,CACR,KAAM,eAAeI,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,CACpB,GAAM,CACF,QAAAC,EAAU,GACV,YAAAC,EAAc,UACd,MAAAC,EAAQ,SACZ,EAAIH,EAEEI,EAAQC,EAAQJ,CAAO,EAE7B,MAAO,CACH,YAAcK,GAAS,CACfA,EAAK,SAAW,UAChB,QAAQ,KAAK,oDAAoD,CAEzE,EACA,KAAM,SACN,YAAcC,GAAaH,EAAM,IAAIG,CAAQ,EAC7C,SAAU,aACV,QAAS,IAAMH,EAAM,IAAI,CAACA,EAAM,IAAI,CAAC,EACrC,MAAO,CACH,SAAU,WACV,QAAS,cACT,WAAY,SACZ,SAAWG,GAAaC,EAAUD,CAAQ,EAC1C,OAAQ,OACR,aAAc,MACd,QAAUA,GAAa,aAAaE,EAAWF,EAAU,UAAWJ,CAAK,CAAC,GAC1E,SAAUO,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,UAAWJ,CAAK,EACpE,mBAAoB,CAChB,QAAS,KACT,SAAU,WACV,QAAS,cACT,WAAY,SACZ,KAAMO,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,aAAcJ,CAAK,CAC3E,EACA,uBAAwB,CACpB,gBAAkBI,GAAaE,EAAWF,EAAU,aAAcL,CAAW,EAC7E,QAAS,OACT,MAAQK,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,CCrEA,SAASC,GAAMC,EAA+B,CAAC,EAAmB,CAC9D,GAAM,CACF,MAAAC,EAAQ,SACZ,EAAID,EAEJ,MAAO,CACH,SAAS,aACT,UAAYE,GAAS,CACbA,EAAK,SAAW,SAChB,QAAQ,KAAK,4CAA4C,CAEjE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWF,CAAK,CAC9D,CACJ,CACJ,CCjBA,SAASK,GAAOC,EAAgC,CAAC,EAAmB,CAChE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,GAAS,CACbA,EAAK,SAAW,UAChB,QAAQ,KAAK,8CAA8C,CAEnE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,WAAY,IACZ,MAAQA,GAAaE,EAAWF,EAAU,UAAWF,CAAK,CAC9D,CACJ,CACJ,CCfA,SAASK,GAAUC,EAAgC,CAAC,EAAmB,CACnE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,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,UAAWF,CAAK,CAC9D,CACJ,CACJ,CChBA,SAASK,GAAYC,EAAgC,CAAC,EAAmB,CACrE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,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,UAAWF,CAAK,CAC9D,CACJ,CACJ,CChBA,SAASK,GAAMC,EAAgC,CAAC,EAAmB,CAC/D,GAAM,CACF,MAAAC,EAAQ,SACZ,EAAID,EAEJ,MAAO,CACH,UAAYE,GAAS,CACbA,EAAK,SAAW,SAChB,QAAQ,KAAK,4CAA4C,CAEjE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EAC1D,MAAO,OACP,eAAgB,WAChB,YAAa,CACT,YAAa,QACjB,EACA,mBAAoB,CAChB,UAAW,OACX,WAAY,IACZ,cAAeK,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,MAAQH,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EAC1D,gBAAkBE,GAAaE,EAAWF,EAAU,SAAS,CACjE,EACA,OAAQ,CACJ,UAAW,OACX,cAAeG,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,MAAQH,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EAC1D,UAAYE,GAAa,iBAAiBE,EAAWF,EAAU,UAAWF,CAAK,CAAC,GAChF,SAAWE,GAAaC,EAAUD,EAAU,SAAS,CACzD,EACA,yBAA0B,CACtB,UAAW,OACX,WAAY,IACZ,cAAeG,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,MAAQC,GAAMF,EAAWE,EAAG,UAAWN,CAAK,EAC5C,gBAAkBM,GAAMF,EAAWE,EAAG,SAAS,EAC/C,UAAYA,GAAM,kBAAkBF,EAAWE,EAAG,UAAWN,CAAK,CAAC,EACvE,EACA,OAAQ,CACJ,gBAAkBE,GAAaE,EAAWF,EAAU,SAAS,CACjE,EAEA,mBAAoB,CAChB,gBAAkBA,GAAaE,EAAWF,EAAU,SAAS,EAAI,YACrE,CACJ,CACJ,CACJ,CCrDA,SAASK,GACLC,EAA0D,CAAC,EAC7C,CACd,GAAM,CAAE,MAAAC,EAAQ,UAAW,YAAAC,EAAc,SAAU,EAAIF,EAEvD,MAAO,CACH,UAAYG,GAAS,CACbA,EAAK,SAAW,YAChB,QAAQ,KAAK,kDAAkD,CAEvE,EACA,MAAO,CACH,WAAY,UACZ,WAAY,UACZ,OAAQ,WACR,cAAeC,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,OAAO,OACP,aAAcA,EAAa,CAAC,EAC5B,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EAC1D,cAAe,OACf,QAAUI,GAAa,aAAaE,EAAWF,EAAU,UAAWJ,CAAK,CAAC,GAC1E,gBAAkBI,GAAaE,EAAWF,EAAU,UAAWJ,CAAK,EACpE,iBAAkB,CACd,MAAQI,GAAaE,EAAWF,EAAU,SAAS,CACvD,EACA,gDAAiD,CAC7C,QAAUA,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUG,EAAWF,EAAU,UAAWH,CAAW,CAAC,EACrG,EACA,kBAAmB,CACf,QAAUG,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUG,EAAWF,EAAU,UAAWH,CAAW,CAAC,EACrG,EACA,YAAa,CACT,QAAUG,GAAa,GAAGD,EAAa,EAAG,CAAC,UAAUG,EAAWF,EAAU,UAAW,OAAO,CAAC,EACjG,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,CC7CA,SAASG,GAAcC,EAAgC,CAAC,EAAmB,CACvE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,GAAS,CACbA,EAAK,SAAW,MAChB,QAAQ,KAAK,iDAAiD,CAEtE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EAC1D,UAAW,EACX,aAAc,EACd,YAAaK,EAAa,CAAC,EAC3B,cAAe,OACf,kBAAmB,SACvB,CACJ,CACJ,CCnBA,SAASC,GAAYC,EAAgC,CAAC,EAAmB,CACrE,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAE9B,MAAO,CACH,UAAYE,GAAS,CACbA,EAAK,SAAW,MAChB,QAAQ,KAAK,+CAA+C,CAEpE,EACA,MAAO,CACH,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWF,CAAK,EAC1D,UAAW,EACX,aAAc,EACd,YAAaK,EAAa,CAAC,EAC3B,cAAe,UACf,kBAAmB,SACvB,CACJ,CACJ,CCnBA,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,SAAUC,EAAa,CAAC,EACxB,OAAQA,EAAa,CAAC,EACtB,cAAeA,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,OAAQ,OACR,OAAQ,UACR,SAAWC,GAAkBC,EAAUD,EAAU,SAAS,EAC1D,gBAAiB,cACjB,MAAQA,GAAkBE,EAAWF,EAAU,UAAWN,CAAK,EAC/D,0BAA2B,CACzB,gBAAkBM,GAAkBE,EAAWF,EAAU,UAAWN,CAAK,CAC3E,EACA,cAAe,CACb,QAAS,GACT,OAAQ,aACV,CACF,EAEMS,EAAcC,EAAAC,EAAA,GACfP,GADe,CAElB,gBAAkBE,GAAkBE,EAAWF,EAAU,UAAWL,CAAW,EAC/E,MAAQK,GAAkBE,EAAWF,EAAU,UAAWL,CAAW,EACrE,WAAY,MACZ,OAAQ,UACR,0BAA2B,CACzB,gBAAkBK,GAAkBE,EAAWF,EAAU,UAAWL,CAAW,CACjF,CACF,GAEA,MAAO,CACL,UAAYW,GAAS,CACfA,EAAK,UAAY,OAAO,QAAQ,KAAK,qCAAqC,CAChF,EACA,QAAUA,GAAS,CACjB,IAAMC,EAAgC,CACpC,IAAMP,GAAa,CACjB,IAAMQ,EAAOZ,EAAM,IAAII,CAAQ,EACzBS,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,cAAeV,EAAa,CAAC,EAAG,MAAQC,GAAkBE,EAAWF,EAAU,UAAWN,CAAK,CAAE,CAAE,CAAC,MAC9K,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,IAAKV,EAAa,CAAC,CACrB,CACF,EACAO,EAAK,SAAS,OAAOC,CAAO,CAC9B,EACA,MAAO,CACL,QAAS,aACX,CACF,CACF,CCpHA,SAASK,GAAQC,EAEb,CAAC,EAAmB,CACpB,GAAM,CACF,MAAAC,EAAQ,SACZ,EAAID,EAEJ,MAAO,CACH,KAAM,YACN,UAAYE,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,UAAW,MACX,YAAa,CACT,QAAS,KACT,KAAK,EACL,YAAcA,GAAaE,EAAWF,EAAU,UAAWH,CAAK,EAChE,YAAa,MACb,kBAAmB,OACvB,EACA,WAAY,CACR,QAAS,KACT,KAAK,EACL,YAAcG,GAAaE,EAAWF,EAAU,UAAWH,CAAK,EAChE,YAAa,MACb,kBAAmB,OACvB,CACJ,CACJ,CACJ,CCnCA,IAAMM,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,SAASS,CAAM,CACzB,EACA,MAAO,CACH,UAAWnB,GAAaQ,CAAS,EACjC,WAAY,uBACZ,SAAWa,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWf,CAAK,EAC1D,gBAAkBe,GAAaE,EAAWF,EAAU,UAAWf,CAAK,EACpE,OAAQ,OACR,QAASO,EAAa,CAAC,EACvB,OAAQZ,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,SAASG,GAAQC,EAME,CACf,GAAM,CACF,KAAAC,EAAO,GACP,UAAAC,EAAY,SACZ,OAAAC,EAAS,OACb,EAAIH,EAGAI,EAA2B,KACzBC,EAAYC,EAAQL,CAAI,EAE1B,CAAE,KAAAM,EAAM,KAAAC,EAAM,cAAAC,CAAc,EAAIC,EAAc,CAAE,KAAML,EAAW,UAAAH,EAAW,QAASF,EAAM,QAAS,YAAaA,EAAM,WAAY,CAAC,EAElIW,EAAiC,CACnC,KAAM,SACN,SAAU,UACV,aAAc,IAAMR,IAAW,SAAWI,EAAK,EAC/C,aAAc,IAAMJ,IAAW,SAAWK,EAAK,EAC/C,UAAYI,GAAS,CACjB,IAAIC,EAAKD,EAAK,WAAW,IAAI,IAAI,EACjCR,EAAYS,GAAMD,EAAK,OACvB,CAACC,GAAMD,EAAK,WAAW,IAAI,KAAMR,CAAS,CAC9C,CACJ,EAEA,OAAAU,EAAMd,EAAM,QAASW,CAAc,EAYnCG,EAAML,EAViC,CACnC,aAAc,SACd,aAAeM,GAAaV,EAAU,IAAIU,CAAQ,EAClD,aAAc,IAAMZ,IAAW,SAAWI,EAAK,EAC/C,aAAc,IAAMJ,IAAW,SAAWK,EAAK,EAC/C,QAAS,IAAML,IAAW,UAAYE,EAAU,IAAI,EAAIG,EAAK,EAAID,EAAK,GACtE,QAAS,IAAMA,EAAK,EACpB,OAAQ,IAAMC,EAAK,EACnB,SAAWI,GAASR,GAAaQ,EAAK,WAAW,IAAI,eAAgBR,CAAS,CAClF,CACmC,EAE5BK,CACX,CC5CA,SAASO,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,OACZ,MAAO,CACL,SAAUF,EAAa,EAAE,EACzB,cAAe,OACf,aAAcA,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,SAAWG,GAAaC,EAAUD,EAAU,SAAS,EACrD,MAAQA,GAAaE,EAAWF,EAAU,UAAWV,CAAK,EAC1D,gBAAkBU,GAAaE,EAAWF,EAAU,UAAWV,CAAK,EACpE,UAAYU,GAAa,KAAKH,EAAa,CAAC,CAAC,IAAIA,EAAa,CAAC,CAAC,IAAIK,EAAWF,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,CAACY,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,EACxDd,EAAM,IAAI,EAAK,CACjB,CACF,CACF,CC/DA,SAASgB,GAAQC,EAIb,CAAC,EAAmB,CACpB,GAAM,CACF,KAAAC,EAAO,GACP,UAAAC,EAAY,MACZ,QAAAC,EAAU,iBACd,EAAIH,EAEAI,EAA2B,KACzBC,EAAaC,EAAQJ,CAAS,EAEhCK,EAAiB,OAAOJ,GAAW,SAAW,CAAC,KAAKA,CAAO,EAAIA,EAC/D,CAAE,KAAAK,EAAM,KAAAC,EAAM,cAAAC,CAAc,EAAIC,EAAc,CAAE,KAAAV,EAAM,UAAAC,EAAW,QAASK,CAAe,CAAC,EAExFK,EAAiC,CACnC,KAAM,UACN,SAAU,aACV,SAAU,WACV,UAAYC,GAAS,CACjB,IAAIC,EAAKD,EAAK,WAAW,IAAI,IAAI,EACjCT,EAAYU,GAAMD,EAAK,OACvB,CAACC,GAAMD,EAAK,WAAW,IAAI,KAAMT,CAAS,CAC9C,EACA,MAAO,CACH,aAAcW,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,aAAcA,EAAa,CAAC,EAC5B,MAAQC,GAAaC,EAAWD,EAAU,SAAS,EACnD,gBAAkBA,GAAaC,EAAWD,CAAQ,EAClD,SAAWA,GAAaE,EAAUF,EAAU,SAAS,CACzD,EACA,EAAG,CAACG,GAAa,CAAE,UAAAjB,EAAW,SAAU,EAAM,CAAC,CAAC,CACpD,EACA,OAAAK,EAAe,IAAfA,EAAe,EAAK,CAAC,GACrBA,EAAe,EAAE,KAAKK,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,GAAST,GAAaS,EAAK,WAAW,IAAI,kBAAmBT,CAAS,CACrF,CAEmC,EAE5BM,CACX,CCtDA,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,OAAQW,EAAa,CAAC,EACtB,cAAeA,EAAa,CAAC,EAC7B,OAAQ,OACR,QAAS,OACT,MAAQX,GAAaY,EAAWZ,EAAU,SAAS,EACnD,gBAAkBA,GAAaY,EAAWZ,EAAU,SAAS,EAC7D,UAAYA,GAAa,YAAYW,EAAa,EAAG,CAAC,QAAQC,EAAWZ,EAAU,UAAWR,CAAK,CAAC,GACpG,0BAA2B,CACzB,UAAYQ,GAAa,YAAYW,EAAa,EAAG,CAAC,QAAQC,EAAWZ,EAAU,UAAWR,CAAK,CAAC,EACtG,EACA,wCAAyC,CACvC,UAAYQ,GAAa,YAAYW,EAAa,EAAG,CAAC,QAAQC,EAAWZ,EAAU,UAAWT,CAAW,CAAC,EAC5G,EACA,kBAAmB,CACjB,UAAYS,GAAa,YAAYW,EAAa,EAAG,CAAC,QAAQC,EAAWZ,EAAU,UAAWT,CAAW,CAAC,EAE5G,CACF,CACF,CAEF,CCrEA,SAASsB,IAA2B,CAoBlC,MAnB8B,CAC5B,KAAM,WACN,MAAO,CACL,aAAcC,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,CAC/B,EACA,UAAYC,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,OAAWE,GAAaL,EAAQ,UAAU,IAAIK,CAAQ,GAAKF,CAC7D,EACAL,EAAK,MAAMM,CAAI,CACjB,CACF,CAEF,CCpBA,SAASE,GAAKC,EAGV,CAAC,EAAmB,CACtB,GAAM,CAAE,MAAAC,EAAQ,SAAU,EAAID,EAwB9B,MAtB8B,CAC5B,KAAM,OACN,SAAS,WACT,YAAa,CAACE,EAAMC,IAAY,CAC9B,IAAIC,EAAU,CACZ,SAAU,CACR,KAAM,CACJ,UAAWC,EAAQL,EAAM,WAAa,CAAC,CACzC,CACF,CACF,EACAM,EAAMH,EAASC,CAAO,CACxB,EACA,MAAO,CACL,QAAS,OACT,cAAe,SACf,aAAcG,EAAa,CAAC,EAC5B,cAAeA,EAAa,CAAC,EAC7B,SAAWC,GAAaC,EAAUD,EAAU,SAAS,EACrD,gBAAkBA,GAAaE,EAAWF,EAAU,UAAWP,CAAK,CACtE,CACF,CAEF,CC9BA,SAASU,GAASC,EAGd,CAAC,EAAmB,CACtB,GAAM,CACJ,YAAAC,EAAc,UACd,MAAAC,EAAQ,SACV,EAAIF,EAwDJ,MAtD8B,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,EACvDA,EAAK,WAAW,IAAI,cAAgBM,GAAaJ,EAAQ,UAAU,IAAII,CAAQ,GAAKD,GAAO,MAAS,EACpGL,EAAK,SAAS,QAAS,IAAME,EAAQ,UAAU,IAAIG,CAAG,CAAC,CACzD,EACA,UAAU,CAACE,EAAgBP,IAAO,CA1BtC,IAAAC,EAAAO,EAAAC,EA2BQ,IAAMC,EAAKH,EAAoB,IAC/B,GAAI,CAAC,CAAC,YAAa,UAAW,OAAQ,KAAK,EAAE,SAASG,CAAC,EAAG,OAC1DH,EAAE,eAAe,EACjB,IAAMI,IAASH,GAAAP,EAAAD,EAAK,SAAL,YAAAC,EAAa,SAAS,QAAtB,KAAAO,EAA+B,CAAC,GAAG,OAChDJ,GAAKA,EAAE,OAAS,eAAkBA,EAAkB,WAAW,IAAI,MAAM,IAAM,UACjF,EACMQ,EAAMD,EAAM,UAAUP,GAAKA,IAAMJ,CAAI,EACvCa,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,SAAWH,GAAaQ,EAAUR,EAAU,SAAS,EACrD,OAAQS,EAAa,CAAC,EACtB,cAAeA,EAAa,CAAC,EAC7B,OAAQ,OACR,QAAS,OACT,MAAQT,GAAaU,EAAWV,EAAU,SAAS,EACnD,gBAAkBA,GAAaU,EAAWV,EAAU,SAAS,EAC7D,mDAAoD,CAClD,gBAAkBA,GAAaU,EAAWV,EAAU,SAAS,CAC/D,EACA,uBAAwB,CACtB,gBAAkBA,GAAaU,EAAWV,EAAU,UAAWR,CAAW,EAC1E,MAAQQ,GAAaU,EAAWV,EAAU,SAAS,CACrD,EACA,kBAAmB,CACjB,QAAUA,GAAa,GAAGS,EAAa,EAAG,CAAC,UAAUC,EAAWV,EAAU,UAAWR,CAAW,CAAC,GACjG,cAAe,IAAIiB,EAAa,EAAG,CAAC,EACtC,CACF,CACF,CAEF,CChEA,SAASE,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","dist_exports","__export","N","T","W","M","d","H","E","b","_","re","B","g","ee","EventProperties","eventNameMap","acc","ev","key","HtmlTags","Notifier","event","listener","release","listeners","args","e","State","initialValue","newValue","merge","source","target","comma","space","adjacent","deepClone","value","old","val1","val2","name","addEvent","addHook","toState","val","hashString","str","hash","i","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","BooleanAttributes","PrefixCSS","CamelAttributes","ElementAttribute","parent","domElement","mutateAttrs","AttributeList","attr","callback","force","className","add","classes","newClass","list","updated","cls","oldClass","TextNode","textContent","newNode","tpl","domText","ElementList","index","ElementNode","dom","el","currentRef","aNode","bNode","a","aNext","bNext","inputs","updateDom","silent","_b","_c","_d","oldItems","keyed","item","input","reused","cur","isPortal","length","finalIndex","domNode","ref","root","child","done","snapshot","aIndex","bIndex","itemA","itemB","fromIndex","toIndex","html","StyleProperty","parentRule","domRule","style","prefix","Listener","StyleRule","_StyleRule","selectorText","StyleList","prop","styleStr","decl","nested","sheet","rules","domSheet","css","err","obj","parentSelector","basic","getSelector","selector","prev","splitKeys","currentSelector","rule","newSelector","domRuleList","wrongCount","fixOddEven","_ElementNode","domphyElement","_parent","tempPath","children","fn","n","originalKey","path","content","childNode","dist_exports","__export","H","I","d","A","R","b","J","p","P","M","L","m","light","light_default","themes","createDark","validateTheme","partial","key","custom","deepMerge","target","source","_a","buildThemeCSS","name","input","styles","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","TONE_STEPS","ElementTones","adjustTone","tone","level","newIndex","shiftTone","offsetTone","originTone","contextTone","themeTone","contextColor","color","elementNode","themeColor","resultTone","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","color","accentColor","node","listener","J","M","card","props","color","M","listener","J","splitter","props","direction","defaultSize","min","max","node","element","g","ee","splitterPanel","ctx","el","prop","release","size","splitterHandle","handle","isHorizontal","onMousedown","e","container","onMousemove","rect","raw","onMouseup","listener","J","M","command","node","element","g","ee","commandSearch","props","color","accentColor","ctx","input","onInput","listener","P","M","J","commandItem","_a","_b","el","text","release","q","toggle","props","color","accentColor","node","_a","ctx","items","n","key","listener","val","arr","v","P","M","J","toggleGroup","props","_a","multiple","color","ee","M","listener","P","J","inputOTP","M","node","container","getInputs","onInput","e","inputs","target","idx","onKeydown","onPaste","_a","_b","_c","text","startIdx","char","i","lastFilled","alert","props","color","M","listener","J","P","avatar","props","color","M","listener","P","J","badge","props","color","label","state","ee","l","M","P","J","breadcrumb","props","color","separator","node","listener","P","M","J","breadcrumbEllipsis","props","color","node","listener","P","M","J","xSvg","tag","props","color","removable","node","removeBtn","e","M","listener","J","P","min","max","round","floor","createCoords","v","oppositeSideMap","oppositeAlignmentMap","clamp","start","value","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","yAxisSides","getSideAxis","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","computePosition","config","middleware","validMiddleware","statefulPlacement","middlewareData","resetCount","i","_platform$detectOverf","name","fn","nextX","nextY","data","reset","__spreadProps","__spreadValues","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","invalidOverflowDisplayValues","isOverflowElement","element","overflow","overflowX","overflowY","display","getComputedStyle","tableElements","isTableElement","topLayerSelectors","isTopLayer","selector","_e","transformProperties","willChangeValues","containValues","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","lastTraversableNodeNames","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","absoluteOrFixed","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","firstClippingAncestor","clippingRect","accRect","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","ee","placeState","instantShow","autoUpdate","computePosition","offset","flip","shift","x","computedPlacement","_a","instantHide","show","hide","floatingPartial","listener","node","rootNode","overlay","overlayEle","g","e","floatingNode","root","handleOutside","event","target","combobox","props","options","placement","color","open","multiple","state","ee","openState","show","hide","anchorPartial","creatFloating","popoverPartial","g","inputStyle","M","listener","P","J","inputElement","wrap","val","vals","items","opt","tag","_node","cur","filter","v","partial","node","popoverArrow","props","placement","color","sideOffset","M","bordered","place","ee","flipMap","flipPlace","val","start","pos","end","listener","J","x","y","blockquote","props","color","node","listener","P","J","M","button","props","color","node","listener","P","M","J","inputCheckbox","props","color","accentColor","node","listener","P","M","J","code","props","color","node","listener","P","J","M","details","props","color","accentColor","duration","node","listener","P","J","M","descriptionList","props","color","node","M","listener","P","J","dialog","props","color","open","state","ee","node","e","r","_e","dlg","update","val","focusable","listener","P","J","M","emphasis","props","color","node","listener","P","J","figure","props","color","node","M","listener","J","P","formGroup","props","color","layout","isVertical","node","M","listener","P","J","Headinghift","heading","props","color","node","listener","J","M","offset","P","horizontalRule","props","color","node","M","listener","J","image","props","color","node","M","listener","J","icon","node","M","inputColor","props","color","accentColor","node","element","listener","P","M","J","inputDateTime","props","mode","color","accentColor","node","element","listener","P","J","M","inputFile","props","color","accentColor","node","element","listener","P","J","M","inputSearch","props","color","accentColor","node","element","listener","P","J","M","inputText","props","color","accentColor","node","element","M","listener","P","J","inputRange","props","color","accentColor","node","M","listener","J","inputNumber","props","color","accentColor","node","element","M","listener","P","J","keyboard","props","color","node","listener","P","J","M","label","props","color","accentColor","node","M","listener","P","J","link","props","color","accentColor","node","listener","P","J","M","mark","props","accentColor","tone","node","listener","P","J","M","paragraph","props","color","node","listener","P","J","preformated","props","color","node","listener","P","J","M","progress","props","color","accentColor","node","M","listener","J","inputRadio","props","color","accentColor","node","listener","P","M","J","select","props","color","accentColor","node","listener","P","J","M","skeleton","props","color","keyframes","animationName","B","M","listener","J","keyframes","animationName","B","spinner","props","color","node","M","listener","J","selectList","props","_a","color","multiple","state","ee","inputs","listener","val","v","node","M","P","J","selectItem","props","accentColor","color","value","node","select","state","listener","val","v","P","M","J","selectBox","props","options","placement","color","open","multiple","state","ee","openState","show","hide","anchorPartial","creatFloating","popoverPartial","g","wrap","listener","val","vals","opt","tag","_node","cur","filter","v","M","partial","node","J","P","inputSwitch","props","accentColor","node","listener","P","M","J","buttonSwitch","props","checked","accentColor","color","check","ee","node","listener","P","J","M","small","props","color","node","listener","P","J","strong","props","color","node","listener","P","J","subscript","props","color","node","listener","P","J","superscript","props","color","node","listener","P","J","table","props","color","node","listener","P","J","M","l","textarea","props","color","accentColor","node","M","listener","P","J","unorderedList","props","color","node","listener","P","J","M","orderedList","props","color","node","listener","P","J","M","getPages","current","total","_","i","pages","start","end","pagination","props","_a","color","accentColor","state","ee","btnBase","M","listener","P","J","activeStyle","__spreadProps","__spreadValues","node","content","page","items","p","isActive","divider","props","color","node","M","listener","P","J","translateOut","marginMap","isVertical","p","drawer","props","color","open","placement","size","state","ee","defaultSize","M","drawerSize","node","e","_e","dlg","update","val","listener","P","J","popover","props","open","placement","openOn","popoverId","openState","ee","show","hide","anchorPartial","creatFloating","popoverPartial","node","id","g","listener","toast","props","position","color","state","ee","isTop","isCenter","isRight","overlayEle","M","rootNode","overlay","listener","P","J","node","done","onEnd","e","tooltip","props","open","placement","content","tooltipId","placeState","ee","contentElement","show","hide","anchorPartial","creatFloating","tooltipPartial","node","id","M","listener","J","P","popoverArrow","g","e","getItemId","node","index","transitionGroup","props","duration","delay","previousRects","item","d","dom","key","prev","next","deltaX","deltaY","previousTransition","previousTransform","cleanup","onEnd","event","tabs","props","node","element","partial","ee","g","tab","props","accentColor","color","node","_a","context","children","n","key","part","listener","e","_b","_c","_d","k","tabs","idx","next","target","P","M","J","tabPanel","M","node","_a","context","children","n","key","part","listener","menu","props","color","node","element","partial","ee","g","M","listener","P","J","menuItem","props","accentColor","color","node","_a","context","children","n","key","listener","e","_b","_c","k","items","idx","next","P","M","J","form","state","node","element","g","field","path","validator","node","f","tag","type","part","listener","e","isPromiseLike","value","FieldState","initValue","validator","E","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"]}
|