@domphy/theme 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.
@@ -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","../src/index.ts","../src/light.ts","../src/theme.ts","../src/size.ts","../src/tone.ts"],"sourcesContent":["export * as core from \"@domphy/core\"\r\nexport * as theme from \"./index.js\"\r\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, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n\r\nexport function addClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => String(reactive(listener)) + \" \" + className\r\n } else {\r\n let current = element.class || \"\"\r\n let split = String(current).split(\" \")\r\n split.push(className)\r\n element.class = split.filter(e => e).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function removeClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.filter(e => e != className).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.filter(e => e != className).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function toggleClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function getTagName(element: DomphyElement): TagName | undefined {\r\n return Object.keys(element).find(e => HtmlTags.includes(e)) as TagName | undefined\r\n}\r\n\r\n\r\nexport function camelToKebab(str: string): string {\r\n return str.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\r\n}\r\n\r\nexport function selectorSplitter(selectors: string) {\r\n if (selectors.indexOf('@') === 0) {\r\n return [selectors];\r\n }\r\n var splitted = [];\r\n var parens = 0;\r\n var angulars = 0;\r\n var soFar = '';\r\n for (var i = 0, len = selectors.length; i < len; i++) {\r\n var char = selectors[i];\r\n if (char === '(') {\r\n parens += 1;\r\n } else if (char === ')') {\r\n parens -= 1;\r\n } else if (char === '[') {\r\n angulars += 1;\r\n } else if (char === ']') {\r\n angulars -= 1;\r\n } else if (char === ',') {\r\n if (!parens && !angulars) {\r\n splitted.push(soFar.trim());\r\n soFar = '';\r\n continue;\r\n }\r\n }\r\n soFar += char;\r\n }\r\n splitted.push(soFar.trim());\r\n return splitted;\r\n};\r\n\r\nexport 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\" ? \"&#8203;\" : 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","export * from \"./size.js\"\nexport * from \"./tone.js\"\nexport * from \"./theme.js\"","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"],"mappings":"mcAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,UAAAE,EAAA,UAAAC,ICAO,IAAAC,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,EAAA,sBAAAC,EAAA,oBAAAC,EAAA,gBAAAC,EAAA,gBAAAC,EAAA,aAAAC,EAAA,aAAAC,EAAA,cAAAC,EAAA,UAAAC,EAAA,aAAAC,GAAA,eAAAC,EAAA,UAAAC,EAAA,YAAAC,KAAA,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,EAAW,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,EAAN,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,GAAa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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","src_exports","__export","contextColor","createDark","getTheme","setTheme","themeApply","themeCSS","themeColor","themeName","themeSize","themeSpacing","themeTokens","themeVars","light","light_default","themes","light_default","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","i","offsetSize","origin","size","resultSize","offset","contextSize","object","node","themeSize","index","themeVars","TONE_STEPS","ElementTones","i","adjustTone","tone","level","newIndex","shiftTone","offsetTone","originTone","offset","contextTone","object","node","themeTone","contextColor","color","elementNode","themeColor","resultTone","getTheme","themeName","themeVars"]}
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","../src/index.ts","../src/light.ts","../src/theme.ts","../src/size.ts","../src/density.ts","../src/tone.ts"],"sourcesContent":["export * as core from \"@domphy/core\"\r\nexport * as theme 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, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n\r\nexport function addClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => String(reactive(listener)) + \" \" + className\r\n } else {\r\n let current = element.class || \"\"\r\n let split = String(current).split(\" \")\r\n split.push(className)\r\n element.class = split.filter(e => e).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function removeClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.filter(e => e != className).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.filter(e => e != className).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function toggleClass(element: PartialElement, className: string): void {\r\n\r\n if (typeof element.class == \"function\") {\r\n let reactive = element.class\r\n element.class = (listener) => {\r\n let split = String(reactive(listener)).split(\" \")\r\n return split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n } else {\r\n let split = String(element.class).split(\" \")\r\n element.class ||= \"\"\r\n element.class = split.includes(className) ? split.filter(e => e != className).join(\" \") : split.concat([className]).join(\" \")\r\n }\r\n\r\n}\r\n\r\nexport function getTagName(element: DomphyElement): TagName | undefined {\r\n return Object.keys(element).find(e => HtmlTags.includes(e)) as TagName | undefined\r\n}\r\n\r\n\r\nexport function camelToKebab(str: string): string {\r\n return str.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\r\n}\r\n\r\nexport function selectorSplitter(selectors: string) {\n if (selectors.indexOf('@') === 0) {\r\n return [selectors];\r\n }\r\n var splitted = [];\r\n var parens = 0;\r\n var angulars = 0;\r\n var soFar = '';\r\n for (var i = 0, len = selectors.length; i < len; i++) {\r\n var char = selectors[i];\r\n if (char === '(') {\r\n parens += 1;\r\n } else if (char === ')') {\r\n parens -= 1;\r\n } else if (char === '[') {\r\n angulars += 1;\r\n } else if (char === ']') {\r\n angulars -= 1;\r\n } else if (char === ',') {\r\n if (!parens && !angulars) {\r\n splitted.push(soFar.trim());\r\n soFar = '';\r\n continue;\r\n }\r\n }\r\n soFar += char;\r\n }\r\n splitted.push(soFar.trim());\n return splitted;\n};\n\nexport function ensureDomStyle(styleParent: HTMLHeadElement | ShadowRoot): HTMLStyleElement {\n let domStyle = styleParent.querySelector(\"#domphy-style\") as HTMLStyleElement | null;\n\n if (!domStyle) {\n domStyle = document.createElement(\"style\");\n domStyle.id = \"domphy-style\";\n styleParent.appendChild(domStyle);\n }\n\n if (domStyle.dataset.domphyBase !== \"true\") {\n domStyle.sheet?.insertRule(\"[hidden] { display: none !important; }\", 0);\n domStyle.dataset.domphyBase = \"true\";\n }\n\n return domStyle;\n}\n\nexport const mergePartial = (partial: PartialElement | DomphyElement): typeof partial => {\n\r\n if (Array.isArray(partial.$)) {\r\n let part: typeof partial = {}\r\n partial.$.forEach(p => merge(part, mergePartial(p)))\r\n delete partial.$\r\n merge(part, partial) // native win\r\n\r\n return part\r\n } else {\r\n return partial\r\n }\r\n}\n","export const VoidTags = [\r\n \"area\",\r\n \"base\",\r\n \"br\",\r\n \"col\",\r\n \"embed\",\r\n \"hr\",\r\n \"img\",\r\n \"input\",\r\n \"link\",\r\n \"meta\",\r\n \"source\",\r\n \"track\",\r\n \"wbr\",\r\n] as const;\r\n\r\nexport type VoidTagName = (typeof VoidTags)[number];\r\n\r\n","export const 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\" ? \"&#8203;\" : this.text;\r\n }\r\n\r\n render(domText: ChildNode | DocumentFragment | HTMLElement): void {\r\n const newNode = this._createDOMNode();\r\n domText.appendChild(newNode);\r\n }\r\n}","import { TextNode } from \"./TextNode.js\";\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","export * from \"./size.js\"\nexport * from \"./density.js\"\nexport * from \"./tone.js\"\nexport * from \"./theme.js\"\n","import { ThemeInput } from \"./types.js\";\n\nlet light: ThemeInput = {\n direction: \"darken\",\n colors: {\n highlight: [\"#ffffff\", \"#fff8cc\", \"#fff197\", \"#ffde2c\", \"#f5c700\", \"#e6af00\", \"#d29500\", \"#c18300\", \"#af7400\", \"#9e6600\", \"#865500\", \"#724800\", \"#5d3b00\", \"#4b2f00\", \"#382300\", \"#281900\", \"#120b00\", \"#000000\"],\n warning: [\"#ffffff\", \"#fff6e7\", \"#ffeccf\", \"#ffda9e\", \"#ffc15e\", \"#ffa213\", \"#fc7d00\", \"#e86a00\", \"#d45b00\", \"#c24e00\", \"#a73e00\", \"#903300\", \"#762900\", \"#5f2000\", \"#491800\", \"#341200\", \"#190800\", \"#000000\"],\n error: [\"#ffffff\", \"#fff6f5\", \"#ffebe8\", \"#ffd6d1\", \"#ffbcb4\", \"#ff9d91\", \"#ff7665\", \"#ff513d\", \"#f03823\", \"#d73220\", \"#b72818\", \"#9c2113\", \"#811b0e\", \"#68150a\", \"#501006\", \"#3b0b04\", \"#1d0502\", \"#000000\"],\n danger: [\"#ffffff\", \"#fff6f5\", \"#ffebe8\", \"#ffd6d1\", \"#ffbcb4\", \"#ff9d91\", \"#ff7665\", \"#ff513d\", \"#f03823\", \"#d73220\", \"#b72818\", \"#9c2113\", \"#811b0e\", \"#68150a\", \"#501006\", \"#3b0b04\", \"#1d0502\", \"#000000\"],\n secondary: [\"#ffffff\", \"#fff6fc\", \"#ffe8f7\", \"#ffd3f0\", \"#ffb5e6\", \"#ff94db\", \"#ff67cc\", \"#f24cb8\", \"#e434a3\", \"#ce2a92\", \"#b01f7b\", \"#981668\", \"#800c55\", \"#690344\", \"#530035\", \"#3e0027\", \"#210015\", \"#000000\"],\n primary: [\"#ffffff\", \"#f5f9ff\", \"#e5f0fe\", \"#cbe2fe\", \"#accffd\", \"#8eb9fc\", \"#729efd\", \"#5d89ff\", \"#4b75ff\", \"#3b63fb\", \"#274dea\", \"#1d3ecf\", \"#1532ad\", \"#10288c\", \"#0c1f69\", \"#0e1843\", \"#070b1e\", \"#000000\"],\n info: [\"#ffffff\", \"#eefafe\", \"#d9f4fd\", \"#b7e7fc\", \"#8ad5ff\", \"#5cc0ff\", \"#30a7fe\", \"#1d95e7\", \"#1286cd\", \"#0b78b3\", \"#046691\", \"#005779\", \"#004762\", \"#00394e\", \"#002b3b\", \"#001f2b\", \"#000e14\", \"#000000\"],\n success: [\"#ffffff\", \"#edfcf1\", \"#d7f7e1\", \"#adeec5\", \"#6be3a2\", \"#2bd17d\", \"#12b867\", \"#0ba45d\", \"#079355\", \"#05834e\", \"#036e45\", \"#025d3c\", \"#014c34\", \"#003d2c\", \"#002e22\", \"#002119\", \"#000f0c\", \"#000000\"],\n neutral: [\"#ffffff\", \"#f7f7f7\", \"#efefef\", \"#dfdfdf\", \"#cccccc\", \"#b7b7b7\", \"#a0a0a0\", \"#8f8f8f\", \"#808080\", \"#727272\", \"#606060\", \"#515151\", \"#424242\", \"#343434\", \"#272727\", \"#1c1c1c\", \"#0c0c0c\", \"#000000\"],\n },\n baseTones: {\n highlight: 5,\n warning: 6,\n error: 8,\n danger: 8,\n secondary: 8,\n primary: 9,\n info: 8,\n success: 8,\n neutral: 8,\n },\n fontSizes: [\"0.75rem\", \"0.875rem\", \"1rem\", \"1.25rem\", \"1.5625rem\", \"1.9375rem\", \"2.4375rem\", \"3.0625rem\"],\n densities: [0.75, 1, 1.5, 2, 2.5],\n custom: {},\n}\n\nexport default light\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> = {\n light: JSON.parse(JSON.stringify(light)),\n dark: createDark(light),\n};\n\nfunction colorSteps(input: ThemeInput): number {\n const firstColor = Object.keys(input.colors)[0];\n return firstColor ? input.colors[firstColor].length : 0;\n}\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)) {\n throw new Error(`fontSize must be array of string`);\n }\n if (partial.densities) {\n if (!Array.isArray(partial.densities) || partial.densities.some(v => typeof v !== \"number\")) {\n throw new Error(`densities must be array of number`);\n }\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 }\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 {\n const styles: Record<string, string | number> = {};\n const toneSteps = colorSteps(input);\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\n for (const colorName in input.colors) {\n [...Array(toneSteps).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 if (key === \"densities\") {\n continue;\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 }\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 {\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] = dark.colors[name].length - 1 - dark.baseTones[name]\n }\n return dark\n}\n\r\nexport function themeTokens(name: string): Record<string, any> {\n let input = getTheme(name)\n const toneSteps = colorSteps(input);\n let tokens: Record<string, any> = {};\n\r\n for (const key in input) {\r\n const value = input[key as keyof ThemeInput];\r\n\r\n if (key === \"colors\") {\n for (const name in input.colors) {\n let colorTones = {} as Partial<Record<number, string>>;\n [...Array(toneSteps).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 if (key === \"densities\") {\n tokens.densities = input.densities;\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];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nexport function themeVars(): ThemeVars {\n let input = getTheme(\"light\")\n const toneSteps = colorSteps(input);\n let theme = {} as ThemeVars;\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\") {\n for (const name in input.colors) {\n let colorTones = {} as Partial<Record<number, string>>;\n [...Array(toneSteps).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 if (key === \"densities\") {\n continue;\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(\"/\", \"_\")})`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return theme;\r\n}\r\n\r\nexport function themeCSS(): string {\r\n return Object.entries(themes)\r\n .map(([name, input]) => buildThemeCSS(name, input))\r\n .join(\"\\n\")\r\n}\r\n\r\nexport function themeApply(el?: HTMLStyleElement): void {\r\n if (typeof document === \"undefined\") return\r\n if (el) {\r\n el.textContent = themeCSS()\r\n return\r\n } else {\r\n el = document.getElementById(\"domphy-themes\") as HTMLStyleElement\r\n ?? Object.assign(document.createElement(\"style\"), { id: \"domphy-themes\" })\r\n el.textContent = themeCSS()\r\n document.head.appendChild(el)\r\n }\r\n\r\n}\r\n\r\nexport function themeSpacing(n: number) {\r\n return n / 4 + \"em\"\r\n}\r\n\r\nexport function themeName(object: ElementNode | Listener) {\r\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode\r\n let node: ElementNode = elementNode;\r\n while (node && (!node.attributes || !node.attributes.get(\"dataTheme\"))) {\r\n node = node.parent as ElementNode\r\n }\r\n\r\n let themeName = \"light\"\r\n\r\n if (node && node.attributes && node.attributes.has(\"dataTheme\")) {\n themeName = node.attributes.get(\"dataTheme\")\n typeof object == \"function\" && node.attributes.onChange(\"dataTheme\", object)\n }\n return themeName\r\n}\r\n\r\nexport type ThemeColor = keyof ThemeInput[\"colors\"]\n","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 type { ElementNode, Listener } from \"@domphy/core\";\nimport { getTheme, themeName } from \"./theme.js\";\n\nconst ElementDensities = [\"inherit\"];\n\n[...Array(5).keys()].forEach(i => {\n ElementDensities.push(`decrease-${i}`);\n ElementDensities.push(`increase-${i}`);\n});\n\nexport type ElementDensity = typeof ElementDensities[number];\n\nfunction offsetDensity(origin: number, density: ElementDensity = \"inherit\"): number {\n\n if (!ElementDensities.includes(density!)) {\n throw Error(`density name \"${density}\" invalid`);\n }\n let resultDensity: number;\n if (density == \"inherit\") {\n resultDensity = origin as number;\n } else if (density?.startsWith(\"increase-\")) {\n let offset = parseInt(density.replace(\"increase-\", \"\"), 10);\n resultDensity = origin + offset;\n } else if (density?.startsWith(\"decrease-\")) {\n let offset = parseInt(density.replace(\"decrease-\", \"\"), 10);\n resultDensity = origin - offset;\n } else {\n resultDensity = origin;\n }\n return Math.max(0, Math.min(4, resultDensity));\n}\n\nfunction contextDensity(object: ElementNode | Listener | null): number {\n\n if (!object) return 2;\n let elementNode = (typeof object == \"function\" ? object.elementNode : object) as ElementNode;\n let node: ElementNode = elementNode;\n while (node && (!node.attributes || !node.attributes.get(\"dataDensity\"))) {\n node = node.parent as ElementNode;\n }\n\n let density = 2;\n\n if (node && node.attributes && node.attributes.has(\"dataDensity\")) {\n density = offsetDensity(density, node.attributes.get(\"dataDensity\"));\n typeof object == \"function\" && node.attributes.onChange(\"dataDensity\", object);\n }\n return density;\n}\n\nexport function themeDensity(object: ElementNode | Listener | null): number {\n let index = contextDensity(object);\n return getTheme(object ? themeName(object) : \"light\").densities[index];\n}\n","import { themeVars, getTheme, themeName } from \"./theme.js\"\nimport light from \"./light.js\";\nimport type { Listener, ElementNode } from \"@domphy/core\";\r\n\r\nconst TONE_STEPS = light.colors.neutral.length\n\r\nconst ElementTones = [\"inherit\", \"base\"];\r\n\r\n[...Array(TONE_STEPS).keys()].forEach(i => {\r\n ElementTones.push(`decrease-${i}`)\r\n ElementTones.push(`increase-${i}`)\r\n ElementTones.push(`shift-${i}`)\r\n})\r\n\r\nexport type ElementTone = typeof ElementTones[number];\r\n\r\nfunction adjustTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let newIndex = tone + level;\r\n newIndex = Math.max(0, Math.min(TONE_STEPS - 1, newIndex));\r\n return newIndex\r\n}\r\n\r\nfunction shiftTone(tone: number, level: number): number {\r\n if (tone < 0 || tone > TONE_STEPS - 1) return tone\r\n let midpoint = Math.floor((TONE_STEPS - 1) / 2)\n let newIndex = tone <= midpoint ? tone + level : tone - level\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"],"mappings":"mcAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,UAAAE,EAAA,UAAAC,ICAO,IAAAC,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,EAAA,sBAAAC,EAAA,oBAAAC,EAAA,gBAAAC,EAAA,gBAAAC,EAAA,aAAAC,EAAA,aAAAC,EAAA,cAAAC,EAAA,UAAAC,EAAA,aAAAC,GAAA,eAAAC,EAAA,UAAAC,EAAA,YAAAC,KAAA,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,EAAW,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,EAAN,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,GAAa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","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","src_exports","__export","contextColor","createDark","getTheme","setTheme","themeApply","themeCSS","themeColor","themeDensity","themeName","themeSize","themeSpacing","themeTokens","themeVars","light","light_default","themes","light_default","createDark","colorSteps","input","firstColor","validateTheme","partial","key","v","custom","deepMerge","target","source","_a","buildThemeCSS","name","styles","toneSteps","value","colorName","i","k","text","prop","getTheme","setTheme","dark","themeTokens","tokens","colorTones","themeVars","theme","section","themeCSS","themeApply","el","themeSpacing","n","themeName","object","node","ElementSizes","i","offsetSize","origin","size","resultSize","offset","contextSize","object","node","themeSize","index","themeVars","ElementDensities","i","offsetDensity","origin","density","resultDensity","offset","contextDensity","object","node","themeDensity","index","getTheme","themeName","TONE_STEPS","light_default","ElementTones","i","adjustTone","tone","level","newIndex","shiftTone","midpoint","offsetTone","originTone","offset","contextTone","object","node","themeTone","contextColor","color","elementNode","themeColor","resultTone","getTheme","themeName","themeVars"]}