@fynixorg/ui 1.0.13 → 1.0.14

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,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../runtime.ts"],
4
- "sourcesContent": ["/* MIT License\r\n\r\n* Copyright (c) 2026 Resty Gonzales\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n* SOFTWARE.\r\n */\r\n\r\n// ---------------------- Types ----------------------\r\n\r\ntype VNodeType = string | symbol | ComponentFunction;\r\ntype VNodeChild = VNode | string | number | boolean | null | undefined;\r\ntype VNodeChildren = VNodeChild | VNodeChild[];\r\n\r\ninterface VNodeProps {\r\n children?: VNode[];\r\n key?: string | number | null;\r\n [key: string]: any;\r\n}\r\n\r\ninterface VNode {\r\n type: VNodeType;\r\n props: VNodeProps;\r\n key: string | number | null;\r\n _domNode?: Node | null;\r\n _rendered?: VNode | null;\r\n _state?: ReactiveState<any> | null;\r\n _cleanup?: (() => void) | null;\r\n}\r\n\r\ninterface ComponentFunction {\r\n (props: any): VNode | Promise<VNode>;\r\n}\r\n\r\ninterface ReactiveState<T> {\r\n value: T;\r\n _isNixState: boolean;\r\n subscribe(callback: () => void): () => void;\r\n}\r\n\r\ninterface ComponentContext {\r\n hooks: any[];\r\n hookIndex: number;\r\n effects: Array<() => void | (() => void)>;\r\n cleanups: Array<() => void>;\r\n _vnode: VNode;\r\n _accessedStates: Set<ReactiveState<any>>;\r\n _subscriptions: Set<ReactiveState<any>>;\r\n _subscriptionCleanups: Array<() => void>;\r\n version: number;\r\n rerender: (() => void) | null;\r\n Component: ComponentFunction;\r\n _isMounted: boolean;\r\n _isRerendering: boolean;\r\n}\r\n\r\n// ---------------------- Imports ----------------------\r\n\r\nimport { activeContext, setActiveContext } from \"./context/context\";\r\nimport { Button, Path } from \"./custom/index\";\r\nimport { removeErrorOverlay, showErrorOverlay } from \"./error/errorOverlay\";\r\nimport { nixAsync } from \"./hooks/nixAsync\";\r\nimport { nixAsyncCached } from \"./hooks/nixAsyncCache\";\r\nimport { nixAsyncDebounce } from \"./hooks/nixAsyncDebounce\";\r\nimport { nixAsyncQuery } from \"./hooks/nixAsyncQuery\";\r\nimport { nixCallback } from \"./hooks/nixCallback\";\r\nimport { nixComputed } from \"./hooks/nixComputed\";\r\nimport { nixDebounce } from \"./hooks/nixDebounce\";\r\nimport { nixEffect, nixEffectAlways, nixEffectOnce } from \"./hooks/nixEffect\";\r\nimport { nixForm } from \"./hooks/nixForm\";\r\nimport { nixFormAsync } from \"./hooks/nixFormAsync\";\r\nimport { nixInterval } from \"./hooks/nixInterval\";\r\nimport { nixLazy, Suspense } from \"./hooks/nixLazy\";\r\nimport { nixLazyAsync } from \"./hooks/nixLazyAsync\";\r\nimport { nixLazyFormAsync } from \"./hooks/nixLazyFormAsync\";\r\nimport { nixLocalStorage } from \"./hooks/nixLocalStorage\";\r\nimport { nixMemo } from \"./hooks/nixMemo\";\r\nimport { nixPrevious } from \"./hooks/nixPrevious\";\r\nimport { nixRef } from \"./hooks/nixRef\";\r\nimport { nixState } from \"./hooks/nixState\";\r\nimport { nixStore } from \"./hooks/nixStore\";\r\nimport createFynix from \"./router/router\";\r\n// ---------------------- Symbols ----------------------\r\n\r\nexport const TEXT = Symbol(\"text\");\r\nexport const Fragment = Symbol(\"Fragment\");\r\n\r\n// ---------------------- Constants ----------------------\r\n\r\nconst BOOLEAN_ATTRS = new Set([\r\n \"checked\",\r\n \"selected\",\r\n \"disabled\",\r\n \"readonly\",\r\n \"multiple\",\r\n \"autoplay\",\r\n \"controls\",\r\n \"loop\",\r\n \"muted\",\r\n \"open\",\r\n \"required\",\r\n \"reversed\",\r\n \"scoped\",\r\n \"seamless\",\r\n \"autofocus\",\r\n \"novalidate\",\r\n \"formnovalidate\",\r\n]);\r\n\r\nconst DOM_PROPERTIES = new Set([\r\n \"value\",\r\n \"checked\",\r\n \"selected\",\r\n \"selectedIndex\",\r\n \"innerHTML\",\r\n \"textContent\",\r\n \"innerText\",\r\n]);\r\n\r\n// ---------------------- Virtual Node Helpers ----------------------\r\n\r\nexport function createTextVNode(text: any): VNode {\r\n if (text == null || text === false) {\r\n return { type: TEXT, props: { nodeValue: \"\" }, key: null };\r\n }\r\n\r\n if (text && typeof text === \"object\" && text._isNixState) {\r\n const vnode: VNode = {\r\n type: TEXT,\r\n props: { nodeValue: String(text.value) },\r\n key: null,\r\n _state: text,\r\n _cleanup: null,\r\n };\r\n\r\n vnode._cleanup = text.subscribe(() => {\r\n if (vnode._domNode) {\r\n (vnode._domNode as Text).nodeValue = String(text.value);\r\n }\r\n });\r\n\r\n return vnode;\r\n }\r\n\r\n return { type: TEXT, props: { nodeValue: String(text) }, key: null };\r\n}\r\n\r\nexport function h(\r\n type: VNodeType,\r\n props: VNodeProps | null = null,\r\n ...children: VNodeChildren[]\r\n): VNode {\r\n const normalizedProps: VNodeProps =\r\n props === null || typeof props !== \"object\" || Array.isArray(props)\r\n ? {}\r\n : props;\r\n\r\n const flatChildren: VNode[] = [];\r\n\r\n for (const c of children.flat(Infinity)) {\r\n if (c == null || c === false) continue;\r\n\r\n if (c && typeof c === \"object\" && \"_isNixState\" in c) {\r\n flatChildren.push(createTextVNode(c));\r\n } else if (typeof c === \"string\" || typeof c === \"number\") {\r\n flatChildren.push(createTextVNode(c));\r\n } else if (c && typeof c === \"object\" && \"type\" in c) {\r\n if (c.type === Fragment) {\r\n const fragmentChildren = (c.props.children || []).filter(\r\n (x: any) => x != null && x !== false\r\n );\r\n flatChildren.push(...fragmentChildren);\r\n } else {\r\n flatChildren.push(c as VNode);\r\n }\r\n } else {\r\n flatChildren.push(createTextVNode(String(c)));\r\n }\r\n }\r\n\r\n const key = normalizedProps.key ?? null;\r\n if (key !== undefined) delete normalizedProps.key;\r\n\r\n if (type === Fragment) {\r\n return { type: Fragment, props: { children: flatChildren }, key };\r\n }\r\n\r\n return {\r\n type,\r\n props: { ...normalizedProps, children: flatChildren },\r\n key,\r\n };\r\n}\r\n\r\nh.Fragment = ({ children }: { children?: VNode[] }) => children || [];\r\n\r\nexport const Fynix = h;\r\nFynix.Fragment = h.Fragment;\r\n\r\n// ---------------------- Component Management ----------------------\r\n\r\nconst componentInstances = new WeakMap<VNode, ComponentContext>();\r\nlet rootRenderFn: (() => Promise<void>) | null = null;\r\nconst pendingRerenders = new WeakSet<ComponentContext>();\r\n\r\nfunction beginComponent(vnode: VNode): ComponentContext {\r\n let ctx = componentInstances.get(vnode);\r\n\r\n if (!ctx) {\r\n ctx = {\r\n hooks: [],\r\n hookIndex: 0,\r\n effects: [],\r\n cleanups: [],\r\n _vnode: vnode,\r\n _accessedStates: new Set(),\r\n _subscriptions: new Set(),\r\n _subscriptionCleanups: [],\r\n version: 0,\r\n rerender: null,\r\n Component: vnode.type as ComponentFunction,\r\n _isMounted: false,\r\n _isRerendering: false,\r\n };\r\n componentInstances.set(vnode, ctx);\r\n }\r\n\r\n ctx.hookIndex = 0;\r\n ctx._accessedStates.clear();\r\n setActiveContext(ctx);\r\n ctx.version++;\r\n\r\n return ctx;\r\n}\r\n\r\nfunction endComponent(): void {\r\n const ctx = activeContext as ComponentContext | null;\r\n if (!ctx) return;\r\n\r\n ctx._accessedStates.forEach((state) => {\r\n if (!ctx._subscriptions.has(state)) {\r\n if (!ctx.rerender) {\r\n let rerenderTimeout: NodeJS.Timeout | null = null;\r\n\r\n ctx.rerender = function rerender() {\r\n if (ctx._isRerendering || pendingRerenders.has(ctx)) {\r\n return;\r\n }\r\n\r\n if (rerenderTimeout) {\r\n clearTimeout(rerenderTimeout);\r\n }\r\n\r\n rerenderTimeout = setTimeout(async () => {\r\n if (ctx._isRerendering || !ctx._isMounted) return;\r\n\r\n ctx._isRerendering = true;\r\n pendingRerenders.add(ctx);\r\n\r\n try {\r\n removeErrorOverlay();\r\n\r\n const vnode = ctx._vnode;\r\n const oldRendered = vnode._rendered;\r\n\r\n beginComponent(vnode);\r\n const result = ctx.Component(vnode.props);\r\n const newRendered =\r\n result instanceof Promise ? await result : result;\r\n endComponent();\r\n\r\n vnode._rendered = newRendered;\r\n\r\n const domNode = vnode._domNode;\r\n if (domNode && domNode.parentNode) {\r\n await patch(domNode.parentNode, newRendered, oldRendered);\r\n if (newRendered && typeof newRendered === \"object\") {\r\n vnode._domNode = (newRendered as VNode)._domNode;\r\n }\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n } else if (rootRenderFn) {\r\n await rootRenderFn();\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n } else {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix] Component rerender error:\", err);\r\n showErrorOverlay(err as Error);\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n }\r\n\r\n rerenderTimeout = null;\r\n }, 0);\r\n };\r\n }\r\n\r\n const unsub = state.subscribe(() => {\r\n if (ctx.rerender && ctx._isMounted) {\r\n if (typeof queueMicrotask === \"function\") {\r\n queueMicrotask(() => ctx.rerender!());\r\n } else {\r\n setTimeout(ctx.rerender, 0);\r\n }\r\n }\r\n });\r\n\r\n ctx._subscriptions.add(state);\r\n ctx._subscriptionCleanups.push(unsub);\r\n }\r\n });\r\n\r\n setActiveContext(null);\r\n}\r\n\r\nexport function renderComponent(\r\n Component: ComponentFunction,\r\n props: any = {}\r\n): VNode {\r\n const vnode: VNode = { type: Component, props, key: null };\r\n const ctx = beginComponent(vnode);\r\n ctx.Component = Component;\r\n\r\n if (!ctx.rerender) {\r\n let rerenderTimeout: NodeJS.Timeout | null = null;\r\n\r\n ctx.rerender = () => {\r\n if (ctx._isRerendering || pendingRerenders.has(ctx)) return;\r\n\r\n if (rerenderTimeout) {\r\n clearTimeout(rerenderTimeout);\r\n }\r\n\r\n rerenderTimeout = setTimeout(async () => {\r\n if (ctx._isRerendering || !ctx._isMounted) return;\r\n\r\n ctx._isRerendering = true;\r\n pendingRerenders.add(ctx);\r\n\r\n try {\r\n removeErrorOverlay();\r\n\r\n const vnode = ctx._vnode;\r\n const oldRendered = vnode._rendered;\r\n\r\n beginComponent(vnode);\r\n const result = ctx.Component(vnode.props);\r\n const newRendered = result instanceof Promise ? await result : result;\r\n endComponent();\r\n\r\n vnode._rendered = newRendered;\r\n\r\n const domNode = vnode._domNode;\r\n if (domNode && domNode.parentNode) {\r\n await patch(domNode.parentNode, newRendered, oldRendered);\r\n if (newRendered && typeof newRendered === \"object\") {\r\n vnode._domNode = (newRendered as VNode)._domNode;\r\n }\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n } else if (rootRenderFn) {\r\n await rootRenderFn();\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n } else {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix] Component rerender error:\", err);\r\n showErrorOverlay(err as Error);\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n }\r\n\r\n rerenderTimeout = null;\r\n }, 0);\r\n };\r\n }\r\n\r\n try {\r\n removeErrorOverlay();\r\n const result = Component(props);\r\n\r\n // Handle both sync and async components\r\n if (result instanceof Promise) {\r\n // For async components, return a placeholder and handle async rendering\r\n const placeholderVNode = h(\"div\", null, \"Loading...\");\r\n ctx._vnode = vnode;\r\n vnode._rendered = placeholderVNode;\r\n ctx._isMounted = true;\r\n\r\n result\r\n .then((resolvedVNode) => {\r\n vnode._rendered = resolvedVNode;\r\n if (ctx.rerender) {\r\n ctx.rerender();\r\n }\r\n })\r\n .catch((err) => {\r\n console.error(\"[Fynix] Async component error:\", err);\r\n showErrorOverlay(err as Error);\r\n });\r\n\r\n return placeholderVNode;\r\n }\r\n\r\n ctx._vnode = vnode;\r\n vnode._rendered = result;\r\n ctx._isMounted = true;\r\n return result;\r\n } catch (err) {\r\n console.error(\"[Fynix] Component render error:\", err);\r\n showErrorOverlay(err as Error);\r\n return h(\"div\", { style: \"color:red\" }, `Error: ${(err as Error).message}`);\r\n } finally {\r\n endComponent();\r\n }\r\n}\r\n\r\n// ---------------------- Event Delegation ----------------------\r\n\r\nconst delegatedEvents = new Map<string, Map<number, (e: Event) => void>>();\r\nlet eventIdCounter = 1;\r\n\r\nfunction ensureDelegated(eventType: string): void {\r\n if (delegatedEvents.has(eventType)) return;\r\n\r\n delegatedEvents.set(eventType, new Map());\r\n\r\n document.addEventListener(eventType, (e: Event) => {\r\n let cur: Node | null = e.target as Node;\r\n\r\n while (cur && cur !== document) {\r\n if (cur.nodeType !== 1) break;\r\n\r\n const el = cur as any;\r\n const eid = el._rest_eid;\r\n const map = delegatedEvents.get(eventType);\r\n\r\n if (eid != null && map?.has(eid)) {\r\n map.get(eid)!(e);\r\n return;\r\n }\r\n\r\n cur = (cur as Element).parentElement;\r\n }\r\n });\r\n}\r\n\r\nfunction registerDelegatedHandler(\r\n el: HTMLElement,\r\n eventName: string,\r\n fn: (e: Event) => void\r\n): void {\r\n if (!fn || el.nodeType !== 1) return;\r\n\r\n const anyEl = el as any;\r\n const eid = anyEl._rest_eid ?? (anyEl._rest_eid = ++eventIdCounter);\r\n\r\n ensureDelegated(eventName);\r\n\r\n delegatedEvents.get(eventName)!.set(eid, (e: Event) => {\r\n try {\r\n fn.call(el, e);\r\n } catch (err) {\r\n console.error(\"[Fynix] Event handler error:\", err);\r\n showErrorOverlay(err as Error);\r\n }\r\n });\r\n}\r\n\r\n// ---------------------- Property Setter ----------------------\r\n\r\nfunction setProperty(el: HTMLElement, key: string, value: any): void {\r\n const k = key.toLowerCase();\r\n\r\n if (key === \"r-class\" || key === \"rc\") {\r\n if (typeof value === \"string\") {\r\n el.setAttribute(\"class\", value);\r\n } else if (value && (value._isNixState || value._isRestState)) {\r\n el.setAttribute(\"class\", value.value);\r\n\r\n const anyEl = el as any;\r\n if (!anyEl._fynixCleanups) anyEl._fynixCleanups = [];\r\n\r\n const unsub = value.subscribe(() =>\r\n el.setAttribute(\"class\", value.value)\r\n );\r\n anyEl._fynixCleanups.push(unsub);\r\n }\r\n return;\r\n }\r\n\r\n if (key.startsWith(\"r-\")) {\r\n registerDelegatedHandler(el, key.slice(2).toLowerCase(), value);\r\n return;\r\n }\r\n\r\n if (key === \"style\" && typeof value === \"object\") {\r\n Object.assign(el.style, value);\r\n return;\r\n }\r\n\r\n if (key === \"innerHTML\" || key === \"outerHTML\") {\r\n console.warn(\r\n \"[Fynix] Security: innerHTML/outerHTML not allowed. Use textContent or children.\"\r\n );\r\n return;\r\n }\r\n\r\n if (BOOLEAN_ATTRS.has(k)) {\r\n if (value) {\r\n el.setAttribute(k, \"\");\r\n (el as any)[k] = true;\r\n } else {\r\n el.removeAttribute(k);\r\n (el as any)[k] = false;\r\n }\r\n return;\r\n }\r\n\r\n if (DOM_PROPERTIES.has(key)) {\r\n (el as any)[key] = value ?? \"\";\r\n return;\r\n }\r\n\r\n if (key.startsWith(\"data-\") || key.startsWith(\"aria-\")) {\r\n if (value != null && value !== false) {\r\n el.setAttribute(key, value);\r\n } else {\r\n el.removeAttribute(key);\r\n }\r\n return;\r\n }\r\n\r\n if ((key === \"href\" || key === \"src\") && typeof value === \"string\") {\r\n if (value.trim().toLowerCase().startsWith(\"javascript:\")) {\r\n console.warn(\"[Fynix] Security: javascript: protocol blocked in\", key);\r\n return;\r\n }\r\n }\r\n\r\n if (value != null && value !== false) {\r\n el.setAttribute(key, value);\r\n }\r\n}\r\n\r\n// ---------------------- DOM Creation ----------------------\r\n\r\nasync function createDom(\r\n vnode: VNode | string | number | Promise<any> | null | undefined,\r\n existing: Node | null = null\r\n): Promise<Node> {\r\n if (vnode == null) {\r\n return document.createTextNode(\"\");\r\n }\r\n\r\n if (typeof vnode === \"string\" || typeof vnode === \"number\") {\r\n return document.createTextNode(String(vnode));\r\n }\r\n\r\n if (vnode instanceof Promise) {\r\n const placeholder = document.createTextNode(\"Loading...\");\r\n\r\n vnode\r\n .then(async (resolved) => {\r\n try {\r\n const dom = await createDom(resolved);\r\n if (placeholder.parentNode) {\r\n placeholder.replaceWith(dom);\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix] Async component error:\", err);\r\n if (placeholder.parentNode) {\r\n placeholder.textContent = \"Error loading component\";\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n console.error(\"[Fynix] Async component promise error:\", err);\r\n if (placeholder.parentNode) {\r\n placeholder.textContent = \"Error loading async component\";\r\n }\r\n });\r\n\r\n return placeholder;\r\n }\r\n\r\n const vnodeObj = vnode as VNode;\r\n\r\n if (vnodeObj.type === TEXT) {\r\n const textNode =\r\n existing || document.createTextNode(vnodeObj.props.nodeValue ?? \"\");\r\n vnodeObj._domNode = textNode;\r\n return textNode;\r\n }\r\n\r\n if (vnodeObj.type === Fragment) {\r\n const frag = document.createDocumentFragment();\r\n for (const child of vnodeObj.props?.children || []) {\r\n frag.appendChild(await createDom(child));\r\n }\r\n vnodeObj._domNode = frag;\r\n return frag;\r\n }\r\n\r\n if (typeof vnodeObj.type === \"function\") {\r\n const rendered = await renderMaybeAsyncComponent(\r\n vnodeObj.type as ComponentFunction,\r\n vnodeObj.props,\r\n vnodeObj\r\n );\r\n vnodeObj._rendered = rendered;\r\n const dom = await createDom(rendered);\r\n vnodeObj._domNode = dom;\r\n return dom;\r\n }\r\n\r\n const el = existing || document.createElement(vnodeObj.type as string);\r\n\r\n for (const [k, v] of Object.entries(vnodeObj.props || {})) {\r\n if (k !== \"children\") {\r\n setProperty(el as HTMLElement, k, v);\r\n }\r\n }\r\n\r\n for (const child of vnodeObj.props?.children || []) {\r\n el.appendChild(await createDom(child));\r\n }\r\n\r\n vnodeObj._domNode = el;\r\n return el;\r\n}\r\n\r\n// ---------------------- Async Component Helper ----------------------\r\n\r\nasync function renderMaybeAsyncComponent(\r\n Component: ComponentFunction,\r\n props: any,\r\n vnode: VNode\r\n): Promise<VNode | null> {\r\n const ctx = beginComponent(vnode);\r\n removeErrorOverlay();\r\n\r\n try {\r\n const result = await Component(props);\r\n ctx._vnode = vnode;\r\n vnode._rendered = result;\r\n ctx._isMounted = true;\r\n endComponent();\r\n return result ?? null;\r\n } catch (err) {\r\n console.error(\"[Fynix] async render error:\", err);\r\n showErrorOverlay(err as Error);\r\n ctx._isMounted = false;\r\n endComponent();\r\n return h(\"div\", { style: \"color:red\" }, `Error: ${(err as Error).message}`);\r\n }\r\n}\r\n\r\n// ---------------------- Patch / Diff ----------------------\r\n\r\nexport async function patch(\r\n parent: Node,\r\n newVNode: VNode | string | number | null | undefined,\r\n oldVNode: VNode | string | number | null | undefined\r\n): Promise<void> {\r\n if (!(parent instanceof Node)) {\r\n console.error(\r\n \"[Fynix] patch() expects a DOM Node, got:\",\r\n typeof parent,\r\n parent\r\n );\r\n return;\r\n }\r\n\r\n if (!newVNode && !oldVNode) return;\r\n\r\n if (!newVNode && oldVNode) {\r\n const domNode = (oldVNode as VNode)._domNode;\r\n if (domNode?.parentNode) {\r\n domNode.parentNode.removeChild(domNode);\r\n }\r\n unmountVNode(oldVNode as VNode);\r\n return;\r\n }\r\n\r\n if (newVNode && !oldVNode) {\r\n const newDom = await createDom(newVNode);\r\n if (newDom instanceof Node) {\r\n parent.appendChild(newDom);\r\n }\r\n return;\r\n }\r\n\r\n const newIsPrimitive =\r\n typeof newVNode === \"string\" || typeof newVNode === \"number\";\r\n const oldIsPrimitive =\r\n typeof oldVNode === \"string\" || typeof oldVNode === \"number\";\r\n\r\n if (newIsPrimitive || oldIsPrimitive) {\r\n if (\r\n newIsPrimitive &&\r\n oldIsPrimitive &&\r\n String(newVNode) === String(oldVNode)\r\n )\r\n return;\r\n\r\n const newDom = await createDom(newVNode);\r\n const oldDom = (oldVNode as VNode)?._domNode || parent.firstChild;\r\n\r\n if (oldDom?.parentNode && newDom instanceof Node) {\r\n oldDom.parentNode.replaceChild(newDom, oldDom);\r\n }\r\n\r\n if (oldVNode && typeof oldVNode === \"object\") {\r\n unmountVNode(oldVNode as VNode);\r\n }\r\n return;\r\n }\r\n\r\n const newVN = newVNode as VNode;\r\n const oldVN = oldVNode as VNode;\r\n\r\n const newType = newVN.type;\r\n const oldType = oldVN.type;\r\n\r\n if (newType !== oldType) {\r\n const newDom = await createDom(newVN);\r\n const oldDom = oldVN._domNode;\r\n\r\n if (oldDom?.parentNode && newDom instanceof Node) {\r\n oldDom.parentNode.replaceChild(newDom, oldDom);\r\n }\r\n\r\n unmountVNode(oldVN);\r\n return;\r\n }\r\n\r\n if (newType === TEXT) {\r\n const oldDom = oldVN._domNode;\r\n const newText = newVN.props.nodeValue ?? \"\";\r\n const oldText = oldVN.props.nodeValue ?? \"\";\r\n\r\n if (newText !== oldText && oldDom) {\r\n (oldDom as Text).nodeValue = newText;\r\n }\r\n\r\n newVN._domNode = oldDom;\r\n return;\r\n }\r\n\r\n if (newType === Fragment) {\r\n const newChildren = newVN.props?.children || [];\r\n const oldChildren = oldVN.props?.children || [];\r\n await patchChildren(parent, newChildren, oldChildren);\r\n newVN._domNode = oldVN._domNode;\r\n return;\r\n }\r\n\r\n if (typeof newType === \"function\") {\r\n const oldCtx = componentInstances.get(oldVN);\r\n\r\n if (oldCtx && newType === oldType) {\r\n componentInstances.delete(oldVN);\r\n componentInstances.set(newVN, oldCtx);\r\n\r\n oldCtx._vnode = newVN;\r\n\r\n beginComponent(newVN);\r\n const rendered = await oldCtx.Component(newVN.props);\r\n endComponent();\r\n\r\n newVN._rendered = rendered;\r\n\r\n const oldRendered = oldVN._rendered;\r\n const oldDom = oldVN._domNode;\r\n\r\n if (oldDom?.parentNode instanceof Node) {\r\n await patch(oldDom.parentNode, rendered, oldRendered);\r\n newVN._domNode = (rendered as VNode)?._domNode || oldDom;\r\n }\r\n } else {\r\n const rendered = await renderMaybeAsyncComponent(\r\n newType as ComponentFunction,\r\n newVN.props,\r\n newVN\r\n );\r\n newVN._rendered = rendered;\r\n\r\n const oldRendered = oldVN._rendered;\r\n const oldDom = oldVN._domNode;\r\n\r\n if (oldDom?.parentNode instanceof Node) {\r\n await patch(oldDom.parentNode, rendered, oldRendered);\r\n newVN._domNode = (rendered as VNode)?._domNode || oldDom;\r\n } else {\r\n const newDom = await createDom(rendered);\r\n if (parent && newDom instanceof Node) {\r\n parent.appendChild(newDom);\r\n }\r\n newVN._domNode = newDom;\r\n }\r\n\r\n if (oldCtx && newType !== oldType) {\r\n unmountVNode(oldVN);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n const el = oldVN._domNode;\r\n if (!el || el.nodeType !== 1) {\r\n const newDom = await createDom(newVN);\r\n if (parent && newDom instanceof Node) {\r\n parent.appendChild(newDom);\r\n }\r\n unmountVNode(oldVN);\r\n return;\r\n }\r\n\r\n updateProps(el as HTMLElement, newVN.props, oldVN.props);\r\n newVN._domNode = el;\r\n\r\n const newChildren = newVN.props?.children || [];\r\n const oldChildren = oldVN.props?.children || [];\r\n await patchChildren(el, newChildren, oldChildren);\r\n}\r\n\r\nasync function patchChildren(\r\n parent: Node,\r\n newChildren: VNode[],\r\n oldChildren: VNode[]\r\n): Promise<void> {\r\n if (!(parent instanceof Node)) return;\r\n\r\n const hasKeys =\r\n newChildren.some((c) => c?.key != null) ||\r\n oldChildren.some((c) => c?.key != null);\r\n\r\n if (!hasKeys) {\r\n const maxLen = Math.max(newChildren.length, oldChildren.length);\r\n\r\n for (let i = 0; i < maxLen; i++) {\r\n const newChild = newChildren[i];\r\n const oldChild = oldChildren[i];\r\n\r\n if (i >= newChildren.length) {\r\n const dom = oldChild?._domNode;\r\n if (dom?.parentNode) {\r\n dom.parentNode.removeChild(dom);\r\n }\r\n unmountVNode(oldChild);\r\n } else if (i >= oldChildren.length) {\r\n const newDom = await createDom(newChild);\r\n if (newDom instanceof Node) {\r\n parent.appendChild(newDom);\r\n }\r\n } else {\r\n await patch(parent, newChild, oldChild);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n const oldKeyMap = new Map<string | number, VNode>();\r\n\r\n oldChildren.forEach((child) => {\r\n if (child?.key != null) {\r\n oldKeyMap.set(child.key, child);\r\n }\r\n });\r\n\r\n const newKeySet = new Set(\r\n newChildren.filter((c) => c?.key != null).map((c) => c.key!)\r\n );\r\n\r\n oldChildren.forEach((oldChild) => {\r\n if (oldChild?.key != null && !newKeySet.has(oldChild.key)) {\r\n const dom = oldChild._domNode;\r\n if (dom?.parentNode) {\r\n dom.parentNode.removeChild(dom);\r\n }\r\n unmountVNode(oldChild);\r\n }\r\n });\r\n\r\n for (let i = 0; i < newChildren.length; i++) {\r\n const newChild = newChildren[i];\r\n const key = newChild?.key;\r\n\r\n if (key != null && oldKeyMap.has(key)) {\r\n const oldChild = oldKeyMap.get(key)!;\r\n const oldDom = oldChild._domNode;\r\n const childNodes = Array.from(parent.childNodes);\r\n const currentPos = childNodes.indexOf(oldDom as ChildNode);\r\n const desiredPos = i;\r\n\r\n if (currentPos !== desiredPos) {\r\n const refNode = childNodes[desiredPos] || null;\r\n if (oldDom && oldDom.parentNode === parent) {\r\n parent.insertBefore(oldDom, refNode as ChildNode | null);\r\n }\r\n }\r\n\r\n await patch(parent, newChild, oldChild);\r\n } else {\r\n const newDom = await createDom(newChild);\r\n if (newDom instanceof Node) {\r\n const childNodes = Array.from(parent.childNodes);\r\n const refNode = childNodes[i] || null;\r\n parent.insertBefore(newDom, refNode as ChildNode | null);\r\n }\r\n }\r\n }\r\n}\r\n\r\n// ---------------------- Unmount ----------------------\r\n\r\nfunction unmountVNode(vnode: VNode | any): void {\r\n if (!vnode) return;\r\n\r\n if (vnode._cleanup && typeof vnode._cleanup === \"function\") {\r\n try {\r\n vnode._cleanup();\r\n } catch (e) {\r\n console.error(\"[Fynix] Text vnode cleanup error:\", e);\r\n }\r\n vnode._cleanup = null;\r\n }\r\n\r\n if (typeof vnode.type === \"function\") {\r\n const ctx = componentInstances.get(vnode);\r\n\r\n if (ctx) {\r\n ctx._isMounted = false;\r\n\r\n ctx._subscriptionCleanups.forEach((u) => {\r\n try {\r\n u();\r\n } catch (e) {\r\n console.error(\"[Fynix] Cleanup error:\", e);\r\n }\r\n });\r\n\r\n ctx.cleanups.forEach((c) => {\r\n try {\r\n c?.();\r\n } catch (e) {\r\n console.error(\"[Fynix] Effect cleanup error:\", e);\r\n }\r\n });\r\n\r\n ctx._subscriptions.clear();\r\n ctx._accessedStates.clear();\r\n ctx._subscriptionCleanups = [];\r\n ctx.cleanups = [];\r\n ctx.hooks = [];\r\n ctx.effects = [];\r\n ctx.rerender = null;\r\n ctx._vnode = null as any;\r\n\r\n componentInstances.delete(vnode);\r\n pendingRerenders.delete(ctx);\r\n }\r\n\r\n unmountVNode(vnode._rendered);\r\n return;\r\n }\r\n\r\n if (vnode._domNode && vnode._domNode.nodeType === 1) {\r\n const anyNode = vnode._domNode as any;\r\n const eid = anyNode._rest_eid;\r\n\r\n if (eid) {\r\n delegatedEvents.forEach((map) => map.delete(eid));\r\n }\r\n\r\n if (anyNode._fynixCleanups) {\r\n anyNode._fynixCleanups.forEach((cleanup: () => void) => {\r\n try {\r\n cleanup();\r\n } catch (e) {\r\n console.error(\"[Fynix] Element cleanup error:\", e);\r\n }\r\n });\r\n anyNode._fynixCleanups = null;\r\n }\r\n }\r\n\r\n if (vnode.props?.children) {\r\n vnode.props.children.forEach((c: VNode) => unmountVNode(c));\r\n }\r\n\r\n vnode._domNode = null;\r\n vnode._rendered = null;\r\n}\r\n\r\n// ---------------------- Update Props ----------------------\r\n\r\nfunction updateProps(\r\n el: HTMLElement,\r\n newProps: VNodeProps = {},\r\n oldProps: VNodeProps = {}\r\n): void {\r\n if (!el || el.nodeType !== 1) return;\r\n\r\n for (const k of Object.keys(oldProps)) {\r\n if (k === \"children\") continue;\r\n\r\n if (!(k in newProps)) {\r\n if (k.startsWith(\"r-\")) {\r\n const anyEl = el as any;\r\n const eid = anyEl._rest_eid;\r\n if (eid && delegatedEvents.has(k.slice(2).toLowerCase())) {\r\n delegatedEvents.get(k.slice(2).toLowerCase())!.delete(eid);\r\n }\r\n } else if (BOOLEAN_ATTRS.has(k.toLowerCase())) {\r\n el.removeAttribute(k);\r\n (el as any)[k] = false;\r\n } else if (DOM_PROPERTIES.has(k)) {\r\n (el as any)[k] = \"\";\r\n } else {\r\n el.removeAttribute(k);\r\n }\r\n }\r\n }\r\n\r\n for (const [k, v] of Object.entries(newProps)) {\r\n if (k === \"children\") continue;\r\n if (oldProps[k] !== v) {\r\n setProperty(el, k, v);\r\n }\r\n }\r\n}\r\n\r\n// ---------------------- Mount ----------------------\r\n\r\nexport function mount(\r\n AppComponent: ComponentFunction,\r\n root: string | Element,\r\n props: any = {}\r\n): void {\r\n if (typeof root === \"string\") {\r\n const element = document.querySelector(root);\r\n if (!element) {\r\n console.error(\r\n \"[Fynix] Mount error: Element not found for selector:\",\r\n root\r\n );\r\n return;\r\n }\r\n root = element;\r\n }\r\n\r\n if (!(root instanceof Element)) {\r\n console.error(\"[Fynix] Mount error: Invalid root element\", root);\r\n return;\r\n }\r\n\r\n let Component = AppComponent;\r\n let oldVNode: VNode | null = null;\r\n let currentProps = props;\r\n let appVNode: VNode | null = null;\r\n let isRendering = false;\r\n\r\n async function renderApp(): Promise<void> {\r\n if (isRendering) return;\r\n\r\n isRendering = true;\r\n\r\n try {\r\n removeErrorOverlay();\r\n\r\n const win = window as any;\r\n const propsToUse =\r\n win.__lastRouteProps || win.__fynix__?.lastRouteProps || currentProps;\r\n\r\n if (!appVNode) {\r\n appVNode = { type: Component, props: propsToUse, key: null };\r\n\r\n if (root instanceof Element) {\r\n root.innerHTML = \"\";\r\n const dom = await createDom(appVNode);\r\n if (dom instanceof Node) {\r\n root.appendChild(dom);\r\n }\r\n } else {\r\n console.error(\"[Fynix] Mount error: root is not a DOM Element\", root);\r\n return;\r\n }\r\n\r\n oldVNode = appVNode;\r\n } else {\r\n appVNode.props = propsToUse;\r\n\r\n if (root instanceof Node) {\r\n await patch(root, appVNode, oldVNode);\r\n oldVNode = appVNode;\r\n } else {\r\n console.error(\"[Fynix] Patch error: root is not a DOM Node\", root);\r\n return;\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix] Mount error:\", err);\r\n showErrorOverlay(err as Error);\r\n } finally {\r\n isRendering = false;\r\n }\r\n }\r\n\r\n rootRenderFn = renderApp;\r\n\r\n const win = window as any;\r\n win.__fynix__ = win.__fynix__ || {};\r\n win.__fynix__.rerender = renderApp;\r\n\r\n renderApp();\r\n\r\n if (import.meta.hot) {\r\n if (!win.__fynix__.hmr) {\r\n win.__fynix__.hmr = async ({ mod }: { mod: any }) => {\r\n try {\r\n const UpdatedComponent = mod.App || mod.default;\r\n if (UpdatedComponent) {\r\n Component = UpdatedComponent;\r\n if (appVNode) {\r\n appVNode.type = UpdatedComponent;\r\n }\r\n win.__fynix__.rerender?.();\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix HMR] update error:\", err);\r\n showErrorOverlay(err as Error);\r\n }\r\n };\r\n import.meta.hot.accept();\r\n }\r\n }\r\n}\r\n\r\n// ---------------------- Exports ----------------------\r\n\r\nexport {\r\n Button,\r\n createFynix,\r\n nixAsync,\r\n nixAsyncCached,\r\n nixAsyncDebounce,\r\n nixAsyncQuery,\r\n nixCallback,\r\n nixComputed,\r\n nixDebounce,\r\n nixEffect,\r\n nixEffectAlways,\r\n nixEffectOnce,\r\n nixForm,\r\n nixFormAsync,\r\n nixInterval,\r\n nixLazy,\r\n nixLazyAsync,\r\n nixLazyFormAsync,\r\n nixLocalStorage,\r\n nixMemo,\r\n nixPrevious,\r\n nixRef,\r\n nixState,\r\n nixStore,\r\n Path,\r\n Suspense,\r\n\r\n};\r\n"],
5
- "mappings": ";;AAyEA,SAAS,eAAe,wBAAwB;AAChD,SAAS,QAAQ,YAAY;AAC7B,SAAS,oBAAoB,wBAAwB;AACrD,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,WAAW,iBAAiB,qBAAqB;AAC1D,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAC5B,SAAS,SAAS,gBAAgB;AAClC,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAChC,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,SAAS,cAAc;AACvB,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,OAAO,iBAAiB;AAGjB,MAAM,OAAO,OAAO,MAAM;AAC1B,MAAM,WAAW,OAAO,UAAU;AAIzC,MAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,MAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAIM,SAAS,gBAAgB,MAAkB;AAChD,MAAI,QAAQ,QAAQ,SAAS,OAAO;AAClC,WAAO,EAAE,MAAM,MAAM,OAAO,EAAE,WAAW,GAAG,GAAG,KAAK,KAAK;AAAA,EAC3D;AAEA,MAAI,QAAQ,OAAO,SAAS,YAAY,KAAK,aAAa;AACxD,UAAM,QAAe;AAAA,MACnB,MAAM;AAAA,MACN,OAAO,EAAE,WAAW,OAAO,KAAK,KAAK,EAAE;AAAA,MACvC,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ;AAEA,UAAM,WAAW,KAAK,UAAU,MAAM;AACpC,UAAI,MAAM,UAAU;AAClB,QAAC,MAAM,SAAkB,YAAY,OAAO,KAAK,KAAK;AAAA,MACxD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,MAAM,MAAM,OAAO,EAAE,WAAW,OAAO,IAAI,EAAE,GAAG,KAAK,KAAK;AACrE;AAxBgB;AA0BT,SAAS,EACd,MACA,QAA2B,SACxB,UACI;AACP,QAAM,kBACJ,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,IAC9D,CAAC,IACD;AAEN,QAAM,eAAwB,CAAC;AAE/B,aAAW,KAAK,SAAS,KAAK,QAAQ,GAAG;AACvC,QAAI,KAAK,QAAQ,MAAM,MAAO;AAE9B,QAAI,KAAK,OAAO,MAAM,YAAY,iBAAiB,GAAG;AACpD,mBAAa,KAAK,gBAAgB,CAAC,CAAC;AAAA,IACtC,WAAW,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AACzD,mBAAa,KAAK,gBAAgB,CAAC,CAAC;AAAA,IACtC,WAAW,KAAK,OAAO,MAAM,YAAY,UAAU,GAAG;AACpD,UAAI,EAAE,SAAS,UAAU;AACvB,cAAM,oBAAoB,EAAE,MAAM,YAAY,CAAC,GAAG;AAAA,UAChD,CAAC,MAAW,KAAK,QAAQ,MAAM;AAAA,QACjC;AACA,qBAAa,KAAK,GAAG,gBAAgB;AAAA,MACvC,OAAO;AACL,qBAAa,KAAK,CAAU;AAAA,MAC9B;AAAA,IACF,OAAO;AACL,mBAAa,KAAK,gBAAgB,OAAO,CAAC,CAAC,CAAC;AAAA,IAC9C;AAAA,EACF;AAEA,QAAM,MAAM,gBAAgB,OAAO;AACnC,MAAI,QAAQ,OAAW,QAAO,gBAAgB;AAE9C,MAAI,SAAS,UAAU;AACrB,WAAO,EAAE,MAAM,UAAU,OAAO,EAAE,UAAU,aAAa,GAAG,IAAI;AAAA,EAClE;AAEA,SAAO;AAAA,IACL;AAAA,IACA,OAAO,EAAE,GAAG,iBAAiB,UAAU,aAAa;AAAA,IACpD;AAAA,EACF;AACF;AA7CgB;AA+ChB,EAAE,WAAW,CAAC,EAAE,SAAS,MAA8B,YAAY,CAAC;AAE7D,MAAM,QAAQ;AACrB,MAAM,WAAW,EAAE;AAInB,MAAM,qBAAqB,oBAAI,QAAiC;AAChE,IAAI,eAA6C;AACjD,MAAM,mBAAmB,oBAAI,QAA0B;AAEvD,SAAS,eAAe,OAAgC;AACtD,MAAI,MAAM,mBAAmB,IAAI,KAAK;AAEtC,MAAI,CAAC,KAAK;AACR,UAAM;AAAA,MACJ,OAAO,CAAC;AAAA,MACR,WAAW;AAAA,MACX,SAAS,CAAC;AAAA,MACV,UAAU,CAAC;AAAA,MACX,QAAQ;AAAA,MACR,iBAAiB,oBAAI,IAAI;AAAA,MACzB,gBAAgB,oBAAI,IAAI;AAAA,MACxB,uBAAuB,CAAC;AAAA,MACxB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,YAAY;AAAA,MACZ,gBAAgB;AAAA,IAClB;AACA,uBAAmB,IAAI,OAAO,GAAG;AAAA,EACnC;AAEA,MAAI,YAAY;AAChB,MAAI,gBAAgB,MAAM;AAC1B,mBAAiB,GAAG;AACpB,MAAI;AAEJ,SAAO;AACT;AA5BS;AA8BT,SAAS,eAAqB;AAC5B,QAAM,MAAM;AACZ,MAAI,CAAC,IAAK;AAEV,MAAI,gBAAgB,QAAQ,CAAC,UAAU;AACrC,QAAI,CAAC,IAAI,eAAe,IAAI,KAAK,GAAG;AAClC,UAAI,CAAC,IAAI,UAAU;AACjB,YAAI,kBAAyC;AAE7C,YAAI,WAAW,gCAAS,WAAW;AACjC,cAAI,IAAI,kBAAkB,iBAAiB,IAAI,GAAG,GAAG;AACnD;AAAA,UACF;AAEA,cAAI,iBAAiB;AACnB,yBAAa,eAAe;AAAA,UAC9B;AAEA,4BAAkB,WAAW,YAAY;AACvC,gBAAI,IAAI,kBAAkB,CAAC,IAAI,WAAY;AAE3C,gBAAI,iBAAiB;AACrB,6BAAiB,IAAI,GAAG;AAExB,gBAAI;AACF,iCAAmB;AAEnB,oBAAM,QAAQ,IAAI;AAClB,oBAAM,cAAc,MAAM;AAE1B,6BAAe,KAAK;AACpB,oBAAM,SAAS,IAAI,UAAU,MAAM,KAAK;AACxC,oBAAM,cACJ,kBAAkB,UAAU,MAAM,SAAS;AAC7C,2BAAa;AAEb,oBAAM,YAAY;AAElB,oBAAM,UAAU,MAAM;AACtB,kBAAI,WAAW,QAAQ,YAAY;AACjC,sBAAM,MAAM,QAAQ,YAAY,aAAa,WAAW;AACxD,oBAAI,eAAe,OAAO,gBAAgB,UAAU;AAClD,wBAAM,WAAY,YAAsB;AAAA,gBAC1C;AACA,oBAAI,iBAAiB;AACrB,iCAAiB,OAAO,GAAG;AAAA,cAC7B,WAAW,cAAc;AACvB,sBAAM,aAAa;AACnB,oBAAI,iBAAiB;AACrB,iCAAiB,OAAO,GAAG;AAAA,cAC7B,OAAO;AACL,oBAAI,iBAAiB;AACrB,iCAAiB,OAAO,GAAG;AAAA,cAC7B;AAAA,YACF,SAAS,KAAK;AACZ,sBAAQ,MAAM,qCAAqC,GAAG;AACtD,+BAAiB,GAAY;AAC7B,kBAAI,iBAAiB;AACrB,+BAAiB,OAAO,GAAG;AAAA,YAC7B;AAEA,8BAAkB;AAAA,UACpB,GAAG,CAAC;AAAA,QACN,GAtDe;AAAA,MAuDjB;AAEA,YAAM,QAAQ,MAAM,UAAU,MAAM;AAClC,YAAI,IAAI,YAAY,IAAI,YAAY;AAClC,cAAI,OAAO,mBAAmB,YAAY;AACxC,2BAAe,MAAM,IAAI,SAAU,CAAC;AAAA,UACtC,OAAO;AACL,uBAAW,IAAI,UAAU,CAAC;AAAA,UAC5B;AAAA,QACF;AAAA,MACF,CAAC;AAED,UAAI,eAAe,IAAI,KAAK;AAC5B,UAAI,sBAAsB,KAAK,KAAK;AAAA,IACtC;AAAA,EACF,CAAC;AAED,mBAAiB,IAAI;AACvB;AAlFS;AAoFF,SAAS,gBACd,WACA,QAAa,CAAC,GACP;AACP,QAAM,QAAe,EAAE,MAAM,WAAW,OAAO,KAAK,KAAK;AACzD,QAAM,MAAM,eAAe,KAAK;AAChC,MAAI,YAAY;AAEhB,MAAI,CAAC,IAAI,UAAU;AACjB,QAAI,kBAAyC;AAE7C,QAAI,WAAW,MAAM;AACnB,UAAI,IAAI,kBAAkB,iBAAiB,IAAI,GAAG,EAAG;AAErD,UAAI,iBAAiB;AACnB,qBAAa,eAAe;AAAA,MAC9B;AAEA,wBAAkB,WAAW,YAAY;AACvC,YAAI,IAAI,kBAAkB,CAAC,IAAI,WAAY;AAE3C,YAAI,iBAAiB;AACrB,yBAAiB,IAAI,GAAG;AAExB,YAAI;AACF,6BAAmB;AAEnB,gBAAMA,SAAQ,IAAI;AAClB,gBAAM,cAAcA,OAAM;AAE1B,yBAAeA,MAAK;AACpB,gBAAM,SAAS,IAAI,UAAUA,OAAM,KAAK;AACxC,gBAAM,cAAc,kBAAkB,UAAU,MAAM,SAAS;AAC/D,uBAAa;AAEb,UAAAA,OAAM,YAAY;AAElB,gBAAM,UAAUA,OAAM;AACtB,cAAI,WAAW,QAAQ,YAAY;AACjC,kBAAM,MAAM,QAAQ,YAAY,aAAa,WAAW;AACxD,gBAAI,eAAe,OAAO,gBAAgB,UAAU;AAClD,cAAAA,OAAM,WAAY,YAAsB;AAAA,YAC1C;AACA,gBAAI,iBAAiB;AACrB,6BAAiB,OAAO,GAAG;AAAA,UAC7B,WAAW,cAAc;AACvB,kBAAM,aAAa;AACnB,gBAAI,iBAAiB;AACrB,6BAAiB,OAAO,GAAG;AAAA,UAC7B,OAAO;AACL,gBAAI,iBAAiB;AACrB,6BAAiB,OAAO,GAAG;AAAA,UAC7B;AAAA,QACF,SAAS,KAAK;AACZ,kBAAQ,MAAM,qCAAqC,GAAG;AACtD,2BAAiB,GAAY;AAC7B,cAAI,iBAAiB;AACrB,2BAAiB,OAAO,GAAG;AAAA,QAC7B;AAEA,0BAAkB;AAAA,MACpB,GAAG,CAAC;AAAA,IACN;AAAA,EACF;AAEA,MAAI;AACF,uBAAmB;AACnB,UAAM,SAAS,UAAU,KAAK;AAG9B,QAAI,kBAAkB,SAAS;AAE7B,YAAM,mBAAmB,EAAE,OAAO,MAAM,YAAY;AACpD,UAAI,SAAS;AACb,YAAM,YAAY;AAClB,UAAI,aAAa;AAEjB,aACG,KAAK,CAAC,kBAAkB;AACvB,cAAM,YAAY;AAClB,YAAI,IAAI,UAAU;AAChB,cAAI,SAAS;AAAA,QACf;AAAA,MACF,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,gBAAQ,MAAM,kCAAkC,GAAG;AACnD,yBAAiB,GAAY;AAAA,MAC/B,CAAC;AAEH,aAAO;AAAA,IACT;AAEA,QAAI,SAAS;AACb,UAAM,YAAY;AAClB,QAAI,aAAa;AACjB,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,YAAQ,MAAM,mCAAmC,GAAG;AACpD,qBAAiB,GAAY;AAC7B,WAAO,EAAE,OAAO,EAAE,OAAO,YAAY,GAAG,UAAW,IAAc,OAAO,EAAE;AAAA,EAC5E,UAAE;AACA,iBAAa;AAAA,EACf;AACF;AAvGgB;AA2GhB,MAAM,kBAAkB,oBAAI,IAA6C;AACzE,IAAI,iBAAiB;AAErB,SAAS,gBAAgB,WAAyB;AAChD,MAAI,gBAAgB,IAAI,SAAS,EAAG;AAEpC,kBAAgB,IAAI,WAAW,oBAAI,IAAI,CAAC;AAExC,WAAS,iBAAiB,WAAW,CAAC,MAAa;AACjD,QAAI,MAAmB,EAAE;AAEzB,WAAO,OAAO,QAAQ,UAAU;AAC9B,UAAI,IAAI,aAAa,EAAG;AAExB,YAAM,KAAK;AACX,YAAM,MAAM,GAAG;AACf,YAAM,MAAM,gBAAgB,IAAI,SAAS;AAEzC,UAAI,OAAO,QAAQ,KAAK,IAAI,GAAG,GAAG;AAChC,YAAI,IAAI,GAAG,EAAG,CAAC;AACf;AAAA,MACF;AAEA,YAAO,IAAgB;AAAA,IACzB;AAAA,EACF,CAAC;AACH;AAvBS;AAyBT,SAAS,yBACP,IACA,WACA,IACM;AACN,MAAI,CAAC,MAAM,GAAG,aAAa,EAAG;AAE9B,QAAM,QAAQ;AACd,QAAM,MAAM,MAAM,cAAc,MAAM,YAAY,EAAE;AAEpD,kBAAgB,SAAS;AAEzB,kBAAgB,IAAI,SAAS,EAAG,IAAI,KAAK,CAAC,MAAa;AACrD,QAAI;AACF,SAAG,KAAK,IAAI,CAAC;AAAA,IACf,SAAS,KAAK;AACZ,cAAQ,MAAM,gCAAgC,GAAG;AACjD,uBAAiB,GAAY;AAAA,IAC/B;AAAA,EACF,CAAC;AACH;AApBS;AAwBT,SAAS,YAAY,IAAiB,KAAa,OAAkB;AACnE,QAAM,IAAI,IAAI,YAAY;AAE1B,MAAI,QAAQ,aAAa,QAAQ,MAAM;AACrC,QAAI,OAAO,UAAU,UAAU;AAC7B,SAAG,aAAa,SAAS,KAAK;AAAA,IAChC,WAAW,UAAU,MAAM,eAAe,MAAM,eAAe;AAC7D,SAAG,aAAa,SAAS,MAAM,KAAK;AAEpC,YAAM,QAAQ;AACd,UAAI,CAAC,MAAM,eAAgB,OAAM,iBAAiB,CAAC;AAEnD,YAAM,QAAQ,MAAM;AAAA,QAAU,MAC5B,GAAG,aAAa,SAAS,MAAM,KAAK;AAAA,MACtC;AACA,YAAM,eAAe,KAAK,KAAK;AAAA,IACjC;AACA;AAAA,EACF;AAEA,MAAI,IAAI,WAAW,IAAI,GAAG;AACxB,6BAAyB,IAAI,IAAI,MAAM,CAAC,EAAE,YAAY,GAAG,KAAK;AAC9D;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,OAAO,UAAU,UAAU;AAChD,WAAO,OAAO,GAAG,OAAO,KAAK;AAC7B;AAAA,EACF;AAEA,MAAI,QAAQ,eAAe,QAAQ,aAAa;AAC9C,YAAQ;AAAA,MACN;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,cAAc,IAAI,CAAC,GAAG;AACxB,QAAI,OAAO;AACT,SAAG,aAAa,GAAG,EAAE;AACrB,MAAC,GAAW,CAAC,IAAI;AAAA,IACnB,OAAO;AACL,SAAG,gBAAgB,CAAC;AACpB,MAAC,GAAW,CAAC,IAAI;AAAA,IACnB;AACA;AAAA,EACF;AAEA,MAAI,eAAe,IAAI,GAAG,GAAG;AAC3B,IAAC,GAAW,GAAG,IAAI,SAAS;AAC5B;AAAA,EACF;AAEA,MAAI,IAAI,WAAW,OAAO,KAAK,IAAI,WAAW,OAAO,GAAG;AACtD,QAAI,SAAS,QAAQ,UAAU,OAAO;AACpC,SAAG,aAAa,KAAK,KAAK;AAAA,IAC5B,OAAO;AACL,SAAG,gBAAgB,GAAG;AAAA,IACxB;AACA;AAAA,EACF;AAEA,OAAK,QAAQ,UAAU,QAAQ,UAAU,OAAO,UAAU,UAAU;AAClE,QAAI,MAAM,KAAK,EAAE,YAAY,EAAE,WAAW,aAAa,GAAG;AACxD,cAAQ,KAAK,qDAAqD,GAAG;AACrE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS,QAAQ,UAAU,OAAO;AACpC,OAAG,aAAa,KAAK,KAAK;AAAA,EAC5B;AACF;AAxES;AA4ET,eAAe,UACb,OACA,WAAwB,MACT;AACf,MAAI,SAAS,MAAM;AACjB,WAAO,SAAS,eAAe,EAAE;AAAA,EACnC;AAEA,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC1D,WAAO,SAAS,eAAe,OAAO,KAAK,CAAC;AAAA,EAC9C;AAEA,MAAI,iBAAiB,SAAS;AAC5B,UAAM,cAAc,SAAS,eAAe,YAAY;AAExD,UACG,KAAK,OAAO,aAAa;AACxB,UAAI;AACF,cAAM,MAAM,MAAM,UAAU,QAAQ;AACpC,YAAI,YAAY,YAAY;AAC1B,sBAAY,YAAY,GAAG;AAAA,QAC7B;AAAA,MACF,SAAS,KAAK;AACZ,gBAAQ,MAAM,kCAAkC,GAAG;AACnD,YAAI,YAAY,YAAY;AAC1B,sBAAY,cAAc;AAAA,QAC5B;AAAA,MACF;AAAA,IACF,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,cAAQ,MAAM,0CAA0C,GAAG;AAC3D,UAAI,YAAY,YAAY;AAC1B,oBAAY,cAAc;AAAA,MAC5B;AAAA,IACF,CAAC;AAEH,WAAO;AAAA,EACT;AAEA,QAAM,WAAW;AAEjB,MAAI,SAAS,SAAS,MAAM;AAC1B,UAAM,WACJ,YAAY,SAAS,eAAe,SAAS,MAAM,aAAa,EAAE;AACpE,aAAS,WAAW;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,SAAS,UAAU;AAC9B,UAAM,OAAO,SAAS,uBAAuB;AAC7C,eAAW,SAAS,SAAS,OAAO,YAAY,CAAC,GAAG;AAClD,WAAK,YAAY,MAAM,UAAU,KAAK,CAAC;AAAA,IACzC;AACA,aAAS,WAAW;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAAS,SAAS,YAAY;AACvC,UAAM,WAAW,MAAM;AAAA,MACrB,SAAS;AAAA,MACT,SAAS;AAAA,MACT;AAAA,IACF;AACA,aAAS,YAAY;AACrB,UAAM,MAAM,MAAM,UAAU,QAAQ;AACpC,aAAS,WAAW;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,KAAK,YAAY,SAAS,cAAc,SAAS,IAAc;AAErE,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,SAAS,SAAS,CAAC,CAAC,GAAG;AACzD,QAAI,MAAM,YAAY;AACpB,kBAAY,IAAmB,GAAG,CAAC;AAAA,IACrC;AAAA,EACF;AAEA,aAAW,SAAS,SAAS,OAAO,YAAY,CAAC,GAAG;AAClD,OAAG,YAAY,MAAM,UAAU,KAAK,CAAC;AAAA,EACvC;AAEA,WAAS,WAAW;AACpB,SAAO;AACT;AAnFe;AAuFf,eAAe,0BACb,WACA,OACA,OACuB;AACvB,QAAM,MAAM,eAAe,KAAK;AAChC,qBAAmB;AAEnB,MAAI;AACF,UAAM,SAAS,MAAM,UAAU,KAAK;AACpC,QAAI,SAAS;AACb,UAAM,YAAY;AAClB,QAAI,aAAa;AACjB,iBAAa;AACb,WAAO,UAAU;AAAA,EACnB,SAAS,KAAK;AACZ,YAAQ,MAAM,+BAA+B,GAAG;AAChD,qBAAiB,GAAY;AAC7B,QAAI,aAAa;AACjB,iBAAa;AACb,WAAO,EAAE,OAAO,EAAE,OAAO,YAAY,GAAG,UAAW,IAAc,OAAO,EAAE;AAAA,EAC5E;AACF;AAtBe;AA0Bf,eAAsB,MACpB,QACA,UACA,UACe;AACf,MAAI,EAAE,kBAAkB,OAAO;AAC7B,YAAQ;AAAA,MACN;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,CAAC,YAAY,CAAC,SAAU;AAE5B,MAAI,CAAC,YAAY,UAAU;AACzB,UAAM,UAAW,SAAmB;AACpC,QAAI,SAAS,YAAY;AACvB,cAAQ,WAAW,YAAY,OAAO;AAAA,IACxC;AACA,iBAAa,QAAiB;AAC9B;AAAA,EACF;AAEA,MAAI,YAAY,CAAC,UAAU;AACzB,UAAM,SAAS,MAAM,UAAU,QAAQ;AACvC,QAAI,kBAAkB,MAAM;AAC1B,aAAO,YAAY,MAAM;AAAA,IAC3B;AACA;AAAA,EACF;AAEA,QAAM,iBACJ,OAAO,aAAa,YAAY,OAAO,aAAa;AACtD,QAAM,iBACJ,OAAO,aAAa,YAAY,OAAO,aAAa;AAEtD,MAAI,kBAAkB,gBAAgB;AACpC,QACE,kBACA,kBACA,OAAO,QAAQ,MAAM,OAAO,QAAQ;AAEpC;AAEF,UAAM,SAAS,MAAM,UAAU,QAAQ;AACvC,UAAM,SAAU,UAAoB,YAAY,OAAO;AAEvD,QAAI,QAAQ,cAAc,kBAAkB,MAAM;AAChD,aAAO,WAAW,aAAa,QAAQ,MAAM;AAAA,IAC/C;AAEA,QAAI,YAAY,OAAO,aAAa,UAAU;AAC5C,mBAAa,QAAiB;AAAA,IAChC;AACA;AAAA,EACF;AAEA,QAAM,QAAQ;AACd,QAAM,QAAQ;AAEd,QAAM,UAAU,MAAM;AACtB,QAAM,UAAU,MAAM;AAEtB,MAAI,YAAY,SAAS;AACvB,UAAM,SAAS,MAAM,UAAU,KAAK;AACpC,UAAM,SAAS,MAAM;AAErB,QAAI,QAAQ,cAAc,kBAAkB,MAAM;AAChD,aAAO,WAAW,aAAa,QAAQ,MAAM;AAAA,IAC/C;AAEA,iBAAa,KAAK;AAClB;AAAA,EACF;AAEA,MAAI,YAAY,MAAM;AACpB,UAAM,SAAS,MAAM;AACrB,UAAM,UAAU,MAAM,MAAM,aAAa;AACzC,UAAM,UAAU,MAAM,MAAM,aAAa;AAEzC,QAAI,YAAY,WAAW,QAAQ;AACjC,MAAC,OAAgB,YAAY;AAAA,IAC/B;AAEA,UAAM,WAAW;AACjB;AAAA,EACF;AAEA,MAAI,YAAY,UAAU;AACxB,UAAMC,eAAc,MAAM,OAAO,YAAY,CAAC;AAC9C,UAAMC,eAAc,MAAM,OAAO,YAAY,CAAC;AAC9C,UAAM,cAAc,QAAQD,cAAaC,YAAW;AACpD,UAAM,WAAW,MAAM;AACvB;AAAA,EACF;AAEA,MAAI,OAAO,YAAY,YAAY;AACjC,UAAM,SAAS,mBAAmB,IAAI,KAAK;AAE3C,QAAI,UAAU,YAAY,SAAS;AACjC,yBAAmB,OAAO,KAAK;AAC/B,yBAAmB,IAAI,OAAO,MAAM;AAEpC,aAAO,SAAS;AAEhB,qBAAe,KAAK;AACpB,YAAM,WAAW,MAAM,OAAO,UAAU,MAAM,KAAK;AACnD,mBAAa;AAEb,YAAM,YAAY;AAElB,YAAM,cAAc,MAAM;AAC1B,YAAM,SAAS,MAAM;AAErB,UAAI,QAAQ,sBAAsB,MAAM;AACtC,cAAM,MAAM,OAAO,YAAY,UAAU,WAAW;AACpD,cAAM,WAAY,UAAoB,YAAY;AAAA,MACpD;AAAA,IACF,OAAO;AACL,YAAM,WAAW,MAAM;AAAA,QACrB;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACF;AACA,YAAM,YAAY;AAElB,YAAM,cAAc,MAAM;AAC1B,YAAM,SAAS,MAAM;AAErB,UAAI,QAAQ,sBAAsB,MAAM;AACtC,cAAM,MAAM,OAAO,YAAY,UAAU,WAAW;AACpD,cAAM,WAAY,UAAoB,YAAY;AAAA,MACpD,OAAO;AACL,cAAM,SAAS,MAAM,UAAU,QAAQ;AACvC,YAAI,UAAU,kBAAkB,MAAM;AACpC,iBAAO,YAAY,MAAM;AAAA,QAC3B;AACA,cAAM,WAAW;AAAA,MACnB;AAEA,UAAI,UAAU,YAAY,SAAS;AACjC,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AACA;AAAA,EACF;AAEA,QAAM,KAAK,MAAM;AACjB,MAAI,CAAC,MAAM,GAAG,aAAa,GAAG;AAC5B,UAAM,SAAS,MAAM,UAAU,KAAK;AACpC,QAAI,UAAU,kBAAkB,MAAM;AACpC,aAAO,YAAY,MAAM;AAAA,IAC3B;AACA,iBAAa,KAAK;AAClB;AAAA,EACF;AAEA,cAAY,IAAmB,MAAM,OAAO,MAAM,KAAK;AACvD,QAAM,WAAW;AAEjB,QAAM,cAAc,MAAM,OAAO,YAAY,CAAC;AAC9C,QAAM,cAAc,MAAM,OAAO,YAAY,CAAC;AAC9C,QAAM,cAAc,IAAI,aAAa,WAAW;AAClD;AArKsB;AAuKtB,eAAe,cACb,QACA,aACA,aACe;AACf,MAAI,EAAE,kBAAkB,MAAO;AAE/B,QAAM,UACJ,YAAY,KAAK,CAAC,MAAM,GAAG,OAAO,IAAI,KACtC,YAAY,KAAK,CAAC,MAAM,GAAG,OAAO,IAAI;AAExC,MAAI,CAAC,SAAS;AACZ,UAAM,SAAS,KAAK,IAAI,YAAY,QAAQ,YAAY,MAAM;AAE9D,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,YAAM,WAAW,YAAY,CAAC;AAC9B,YAAM,WAAW,YAAY,CAAC;AAE9B,UAAI,KAAK,YAAY,QAAQ;AAC3B,cAAM,MAAM,UAAU;AACtB,YAAI,KAAK,YAAY;AACnB,cAAI,WAAW,YAAY,GAAG;AAAA,QAChC;AACA,qBAAa,QAAQ;AAAA,MACvB,WAAW,KAAK,YAAY,QAAQ;AAClC,cAAM,SAAS,MAAM,UAAU,QAAQ;AACvC,YAAI,kBAAkB,MAAM;AAC1B,iBAAO,YAAY,MAAM;AAAA,QAC3B;AAAA,MACF,OAAO;AACL,cAAM,MAAM,QAAQ,UAAU,QAAQ;AAAA,MACxC;AAAA,IACF;AACA;AAAA,EACF;AAEA,QAAM,YAAY,oBAAI,IAA4B;AAElD,cAAY,QAAQ,CAAC,UAAU;AAC7B,QAAI,OAAO,OAAO,MAAM;AACtB,gBAAU,IAAI,MAAM,KAAK,KAAK;AAAA,IAChC;AAAA,EACF,CAAC;AAED,QAAM,YAAY,IAAI;AAAA,IACpB,YAAY,OAAO,CAAC,MAAM,GAAG,OAAO,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAI;AAAA,EAC7D;AAEA,cAAY,QAAQ,CAAC,aAAa;AAChC,QAAI,UAAU,OAAO,QAAQ,CAAC,UAAU,IAAI,SAAS,GAAG,GAAG;AACzD,YAAM,MAAM,SAAS;AACrB,UAAI,KAAK,YAAY;AACnB,YAAI,WAAW,YAAY,GAAG;AAAA,MAChC;AACA,mBAAa,QAAQ;AAAA,IACvB;AAAA,EACF,CAAC;AAED,WAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,UAAM,WAAW,YAAY,CAAC;AAC9B,UAAM,MAAM,UAAU;AAEtB,QAAI,OAAO,QAAQ,UAAU,IAAI,GAAG,GAAG;AACrC,YAAM,WAAW,UAAU,IAAI,GAAG;AAClC,YAAM,SAAS,SAAS;AACxB,YAAM,aAAa,MAAM,KAAK,OAAO,UAAU;AAC/C,YAAM,aAAa,WAAW,QAAQ,MAAmB;AACzD,YAAM,aAAa;AAEnB,UAAI,eAAe,YAAY;AAC7B,cAAM,UAAU,WAAW,UAAU,KAAK;AAC1C,YAAI,UAAU,OAAO,eAAe,QAAQ;AAC1C,iBAAO,aAAa,QAAQ,OAA2B;AAAA,QACzD;AAAA,MACF;AAEA,YAAM,MAAM,QAAQ,UAAU,QAAQ;AAAA,IACxC,OAAO;AACL,YAAM,SAAS,MAAM,UAAU,QAAQ;AACvC,UAAI,kBAAkB,MAAM;AAC1B,cAAM,aAAa,MAAM,KAAK,OAAO,UAAU;AAC/C,cAAM,UAAU,WAAW,CAAC,KAAK;AACjC,eAAO,aAAa,QAAQ,OAA2B;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AACF;AAtFe;AA0Ff,SAAS,aAAa,OAA0B;AAC9C,MAAI,CAAC,MAAO;AAEZ,MAAI,MAAM,YAAY,OAAO,MAAM,aAAa,YAAY;AAC1D,QAAI;AACF,YAAM,SAAS;AAAA,IACjB,SAAS,GAAG;AACV,cAAQ,MAAM,qCAAqC,CAAC;AAAA,IACtD;AACA,UAAM,WAAW;AAAA,EACnB;AAEA,MAAI,OAAO,MAAM,SAAS,YAAY;AACpC,UAAM,MAAM,mBAAmB,IAAI,KAAK;AAExC,QAAI,KAAK;AACP,UAAI,aAAa;AAEjB,UAAI,sBAAsB,QAAQ,CAAC,MAAM;AACvC,YAAI;AACF,YAAE;AAAA,QACJ,SAAS,GAAG;AACV,kBAAQ,MAAM,0BAA0B,CAAC;AAAA,QAC3C;AAAA,MACF,CAAC;AAED,UAAI,SAAS,QAAQ,CAAC,MAAM;AAC1B,YAAI;AACF,cAAI;AAAA,QACN,SAAS,GAAG;AACV,kBAAQ,MAAM,iCAAiC,CAAC;AAAA,QAClD;AAAA,MACF,CAAC;AAED,UAAI,eAAe,MAAM;AACzB,UAAI,gBAAgB,MAAM;AAC1B,UAAI,wBAAwB,CAAC;AAC7B,UAAI,WAAW,CAAC;AAChB,UAAI,QAAQ,CAAC;AACb,UAAI,UAAU,CAAC;AACf,UAAI,WAAW;AACf,UAAI,SAAS;AAEb,yBAAmB,OAAO,KAAK;AAC/B,uBAAiB,OAAO,GAAG;AAAA,IAC7B;AAEA,iBAAa,MAAM,SAAS;AAC5B;AAAA,EACF;AAEA,MAAI,MAAM,YAAY,MAAM,SAAS,aAAa,GAAG;AACnD,UAAM,UAAU,MAAM;AACtB,UAAM,MAAM,QAAQ;AAEpB,QAAI,KAAK;AACP,sBAAgB,QAAQ,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC;AAAA,IAClD;AAEA,QAAI,QAAQ,gBAAgB;AAC1B,cAAQ,eAAe,QAAQ,CAAC,YAAwB;AACtD,YAAI;AACF,kBAAQ;AAAA,QACV,SAAS,GAAG;AACV,kBAAQ,MAAM,kCAAkC,CAAC;AAAA,QACnD;AAAA,MACF,CAAC;AACD,cAAQ,iBAAiB;AAAA,IAC3B;AAAA,EACF;AAEA,MAAI,MAAM,OAAO,UAAU;AACzB,UAAM,MAAM,SAAS,QAAQ,CAAC,MAAa,aAAa,CAAC,CAAC;AAAA,EAC5D;AAEA,QAAM,WAAW;AACjB,QAAM,YAAY;AACpB;AA7ES;AAiFT,SAAS,YACP,IACA,WAAuB,CAAC,GACxB,WAAuB,CAAC,GAClB;AACN,MAAI,CAAC,MAAM,GAAG,aAAa,EAAG;AAE9B,aAAW,KAAK,OAAO,KAAK,QAAQ,GAAG;AACrC,QAAI,MAAM,WAAY;AAEtB,QAAI,EAAE,KAAK,WAAW;AACpB,UAAI,EAAE,WAAW,IAAI,GAAG;AACtB,cAAM,QAAQ;AACd,cAAM,MAAM,MAAM;AAClB,YAAI,OAAO,gBAAgB,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,GAAG;AACxD,0BAAgB,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAAG,OAAO,GAAG;AAAA,QAC3D;AAAA,MACF,WAAW,cAAc,IAAI,EAAE,YAAY,CAAC,GAAG;AAC7C,WAAG,gBAAgB,CAAC;AACpB,QAAC,GAAW,CAAC,IAAI;AAAA,MACnB,WAAW,eAAe,IAAI,CAAC,GAAG;AAChC,QAAC,GAAW,CAAC,IAAI;AAAA,MACnB,OAAO;AACL,WAAG,gBAAgB,CAAC;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAEA,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAC7C,QAAI,MAAM,WAAY;AACtB,QAAI,SAAS,CAAC,MAAM,GAAG;AACrB,kBAAY,IAAI,GAAG,CAAC;AAAA,IACtB;AAAA,EACF;AACF;AAlCS;AAsCF,SAAS,MACd,cACA,MACA,QAAa,CAAC,GACR;AACN,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,UAAU,SAAS,cAAc,IAAI;AAC3C,QAAI,CAAC,SAAS;AACZ,cAAQ;AAAA,QACN;AAAA,QACA;AAAA,MACF;AACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI,EAAE,gBAAgB,UAAU;AAC9B,YAAQ,MAAM,6CAA6C,IAAI;AAC/D;AAAA,EACF;AAEA,MAAI,YAAY;AAChB,MAAI,WAAyB;AAC7B,MAAI,eAAe;AACnB,MAAI,WAAyB;AAC7B,MAAI,cAAc;AAElB,iBAAe,YAA2B;AACxC,QAAI,YAAa;AAEjB,kBAAc;AAEd,QAAI;AACF,yBAAmB;AAEnB,YAAMC,OAAM;AACZ,YAAM,aACJA,KAAI,oBAAoBA,KAAI,WAAW,kBAAkB;AAE3D,UAAI,CAAC,UAAU;AACb,mBAAW,EAAE,MAAM,WAAW,OAAO,YAAY,KAAK,KAAK;AAE3D,YAAI,gBAAgB,SAAS;AAC3B,eAAK,YAAY;AACjB,gBAAM,MAAM,MAAM,UAAU,QAAQ;AACpC,cAAI,eAAe,MAAM;AACvB,iBAAK,YAAY,GAAG;AAAA,UACtB;AAAA,QACF,OAAO;AACL,kBAAQ,MAAM,kDAAkD,IAAI;AACpE;AAAA,QACF;AAEA,mBAAW;AAAA,MACb,OAAO;AACL,iBAAS,QAAQ;AAEjB,YAAI,gBAAgB,MAAM;AACxB,gBAAM,MAAM,MAAM,UAAU,QAAQ;AACpC,qBAAW;AAAA,QACb,OAAO;AACL,kBAAQ,MAAM,+CAA+C,IAAI;AACjE;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAM,wBAAwB,GAAG;AACzC,uBAAiB,GAAY;AAAA,IAC/B,UAAE;AACA,oBAAc;AAAA,IAChB;AAAA,EACF;AA5Ce;AA8Cf,iBAAe;AAEf,QAAM,MAAM;AACZ,MAAI,YAAY,IAAI,aAAa,CAAC;AAClC,MAAI,UAAU,WAAW;AAEzB,YAAU;AAEV,MAAI,YAAY,KAAK;AACnB,QAAI,CAAC,IAAI,UAAU,KAAK;AACtB,UAAI,UAAU,MAAM,OAAO,EAAE,IAAI,MAAoB;AACnD,YAAI;AACF,gBAAM,mBAAmB,IAAI,OAAO,IAAI;AACxC,cAAI,kBAAkB;AACpB,wBAAY;AACZ,gBAAI,UAAU;AACZ,uBAAS,OAAO;AAAA,YAClB;AACA,gBAAI,UAAU,WAAW;AAAA,UAC3B;AAAA,QACF,SAAS,KAAK;AACZ,kBAAQ,MAAM,6BAA6B,GAAG;AAC9C,2BAAiB,GAAY;AAAA,QAC/B;AAAA,MACF;AACA,kBAAY,IAAI,OAAO;AAAA,IACzB;AAAA,EACF;AACF;AAtGgB;",
4
+ "sourcesContent": ["/* MIT License\r\n\r\n* Copyright (c) 2026 Resty Gonzales\r\n*\r\n* SECURITY NOTICE:\r\n* This runtime includes built-in XSS protection mechanisms.\r\n* For additional security, consider implementing:\r\n* 1. Content Security Policy (CSP) headers\r\n* 2. Subresource Integrity (SRI) for external scripts\r\n* 3. Regular security audits of your application code\r\n* 4. Input validation on the server side\r\n*\r\n* CSP Header Example:\r\n* Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n* SOFTWARE.\r\n */\r\n\r\n// ---------------------- Types ----------------------\r\n\r\n// Advanced Scheduling Types\r\ntype Priority = \"immediate\" | \"high\" | \"normal\" | \"low\" | \"idle\";\r\ntype UpdateType = \"state\" | \"props\" | \"effect\" | \"layout\";\r\n\r\ninterface Update {\r\n id: string;\r\n type: UpdateType;\r\n priority: Priority;\r\n component?: ComponentContext;\r\n callback: () => void;\r\n timestamp: number;\r\n}\r\n\r\ninterface PriorityQueue<T> {\r\n push(item: T, priority: Priority): void;\r\n pop(): T | undefined;\r\n peek(): T | undefined;\r\n size(): number;\r\n isEmpty(): boolean;\r\n}\r\n\r\ninterface ReactiveScheduler {\r\n schedule(update: Update, priority: Priority): void;\r\n batchUpdates(updates: Update[]): void;\r\n timeSlice(deadline: number): boolean;\r\n flush(): void;\r\n}\r\n\r\n// Fiber Architecture Types\r\ninterface FynixFiber {\r\n type: string | symbol | ComponentFunction;\r\n props: any;\r\n key: string | number | null;\r\n child: FynixFiber | null;\r\n sibling: FynixFiber | null;\r\n parent: FynixFiber | null;\r\n alternate: FynixFiber | null;\r\n effectTag: \"PLACEMENT\" | \"UPDATE\" | \"DELETION\" | null;\r\n updatePriority: Priority;\r\n _domNode?: Node | null;\r\n _rendered?: FynixFiber | null;\r\n hooks?: any[];\r\n context?: ComponentContext;\r\n}\r\n\r\ntype VNodeType = string | symbol | ComponentFunction;\r\ntype VNodeChild = VNode | string | number | boolean | null | undefined;\r\ntype VNodeChildren = VNodeChild | VNodeChild[];\r\n\r\ninterface VNodeProps {\r\n children?: VNode[];\r\n key?: string | number | null;\r\n [key: string]: any;\r\n}\r\n\r\ninterface VNode {\r\n type: VNodeType;\r\n props: VNodeProps;\r\n key: string | number | null;\r\n _domNode?: Node | null;\r\n _rendered?: VNode | null;\r\n _state?: ReactiveState<any> | null;\r\n _cleanup?: (() => void) | null;\r\n}\r\n\r\ninterface ComponentFunction {\r\n (props: any): VNode | Promise<VNode>;\r\n}\r\n\r\ninterface ReactiveState<T> {\r\n value: T;\r\n _isNixState: boolean;\r\n subscribe(callback: () => void): () => void;\r\n}\r\n\r\ninterface ComponentContext {\r\n hooks: any[];\r\n hookIndex: number;\r\n effects: Array<() => void | (() => void)>;\r\n cleanups: Array<() => void>;\r\n _vnode: VNode;\r\n _accessedStates: Set<ReactiveState<any>>;\r\n _subscriptions: Set<ReactiveState<any>>;\r\n _subscriptionCleanups: Array<() => void>;\r\n version: number;\r\n rerender: (() => void) | null;\r\n Component: ComponentFunction;\r\n _isMounted: boolean;\r\n _isRerendering: boolean;\r\n}\r\n\r\n// ---------------------- Imports ----------------------\r\n\r\nimport { activeContext, setActiveContext } from \"./context/context\";\r\nimport { Button, Path } from \"./custom/index\";\r\nimport { removeErrorOverlay, showErrorOverlay } from \"./error/errorOverlay\";\r\nimport { nixAsync } from \"./hooks/nixAsync\";\r\nimport { nixAsyncCached } from \"./hooks/nixAsyncCache\";\r\nimport { nixAsyncDebounce } from \"./hooks/nixAsyncDebounce\";\r\nimport { nixAsyncQuery } from \"./hooks/nixAsyncQuery\";\r\nimport { nixCallback } from \"./hooks/nixCallback\";\r\nimport { nixComputed } from \"./hooks/nixComputed\";\r\nimport { nixDebounce } from \"./hooks/nixDebounce\";\r\nimport { nixEffect, nixEffectAlways, nixEffectOnce } from \"./hooks/nixEffect\";\r\nimport { nixForm } from \"./hooks/nixForm\";\r\nimport { nixFormAsync } from \"./hooks/nixFormAsync\";\r\nimport { nixInterval } from \"./hooks/nixInterval\";\r\nimport { nixLazy, Suspense } from \"./hooks/nixLazy\";\r\nimport { nixLazyAsync } from \"./hooks/nixLazyAsync\";\r\nimport { nixLazyFormAsync } from \"./hooks/nixLazyFormAsync\";\r\nimport { nixLocalStorage } from \"./hooks/nixLocalStorage\";\r\nimport { nixMemo } from \"./hooks/nixMemo\";\r\nimport { nixPrevious } from \"./hooks/nixPrevious\";\r\nimport { nixRef } from \"./hooks/nixRef\";\r\nimport { nixState } from \"./hooks/nixState\";\r\nimport { nixStore } from \"./hooks/nixStore\";\r\nimport createFynix from \"./router/router\";\r\n\r\n// ---------------------- Advanced Scheduling System ----------------------\r\n\r\nclass SimplePriorityQueue<T> implements PriorityQueue<T> {\r\n private items: Array<{ item: T; priority: Priority }> = [];\r\n private priorityOrder: Record<Priority, number> = {\r\n immediate: 0,\r\n high: 1,\r\n normal: 2,\r\n low: 3,\r\n idle: 4,\r\n };\r\n\r\n push(item: T, priority: Priority): void {\r\n this.items.push({ item, priority });\r\n this.items.sort(\r\n (a, b) => this.priorityOrder[a.priority] - this.priorityOrder[b.priority]\r\n );\r\n }\r\n\r\n pop(): T | undefined {\r\n return this.items.shift()?.item;\r\n }\r\n\r\n peek(): T | undefined {\r\n return this.items[0]?.item;\r\n }\r\n\r\n size(): number {\r\n return this.items.length;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.items.length === 0;\r\n }\r\n}\r\n\r\nclass FynixScheduler implements ReactiveScheduler {\r\n private updateQueue = new SimplePriorityQueue<Update>();\r\n private batchedUpdates = new Set<Update>();\r\n private isScheduled = false;\r\n private isWorking = false;\r\n private currentPriority: Priority = \"normal\";\r\n private updateIdCounter = 0;\r\n\r\n schedule(update: Update, priority: Priority = \"normal\"): void {\r\n update.id = `update_${this.updateIdCounter++}`;\r\n update.priority = priority;\r\n update.timestamp = performance.now();\r\n\r\n if (priority === \"immediate\") {\r\n this.flushUpdate(update);\r\n } else {\r\n this.updateQueue.push(update, priority);\r\n this.scheduleWork();\r\n }\r\n }\r\n\r\n batchUpdates(updates: Update[]): void {\r\n updates.forEach((update) => this.batchedUpdates.add(update));\r\n this.scheduleWork();\r\n }\r\n\r\n timeSlice(deadline: number): boolean {\r\n const startTime = performance.now();\r\n const previousPriority = this.currentPriority;\r\n\r\n while (\r\n !this.updateQueue.isEmpty() &&\r\n performance.now() - startTime < deadline\r\n ) {\r\n const update = this.updateQueue.pop();\r\n if (update) {\r\n // Check if we should yield to higher priority work\r\n if (this.shouldYield() && update.priority !== \"immediate\") {\r\n // Put update back and yield\r\n this.updateQueue.push(update, update.priority);\r\n break;\r\n }\r\n\r\n this.flushUpdate(update);\r\n }\r\n }\r\n\r\n this.currentPriority = previousPriority;\r\n return this.updateQueue.isEmpty();\r\n }\r\n\r\n flush(): void {\r\n if (this.isWorking) return;\r\n\r\n this.isWorking = true;\r\n\r\n try {\r\n // Process immediate updates first\r\n while (!this.updateQueue.isEmpty()) {\r\n const update = this.updateQueue.peek();\r\n if (update && update.priority === \"immediate\") {\r\n this.flushUpdate(this.updateQueue.pop()!);\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Process batched updates\r\n this.batchedUpdates.forEach((update) => this.flushUpdate(update));\r\n this.batchedUpdates.clear();\r\n } finally {\r\n this.isWorking = false;\r\n this.isScheduled = false;\r\n }\r\n }\r\n\r\n private flushUpdate(update: Update): void {\r\n const previousPriority = this.currentPriority;\r\n this.currentPriority = update.priority;\r\n\r\n try {\r\n update.callback();\r\n } catch (error) {\r\n console.error(\"[FynixScheduler] Update error:\", error);\r\n showErrorOverlay(error as Error);\r\n } finally {\r\n this.currentPriority = previousPriority;\r\n }\r\n }\r\n\r\n private scheduleWork(): void {\r\n if (this.isScheduled) return;\r\n\r\n this.isScheduled = true;\r\n\r\n // Use different scheduling strategies based on priority\r\n const nextUpdate = this.updateQueue.peek();\r\n if (nextUpdate) {\r\n if (nextUpdate.priority === \"high\") {\r\n // High priority - schedule for next frame\r\n requestAnimationFrame(() => this.workLoop(16.67)); // ~60fps\r\n } else {\r\n // Normal/low priority - use idle time\r\n if (\"requestIdleCallback\" in window) {\r\n requestIdleCallback((deadline) => {\r\n this.workLoop(deadline.timeRemaining());\r\n });\r\n } else {\r\n // Fallback for browsers without requestIdleCallback\r\n setTimeout(() => this.workLoop(5), 0);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private workLoop(deadline: number): void {\r\n const hasMoreWork = !this.timeSlice(deadline);\r\n\r\n if (hasMoreWork) {\r\n // Continue in next frame/idle period\r\n this.isScheduled = false;\r\n this.scheduleWork();\r\n } else {\r\n this.flush();\r\n }\r\n }\r\n\r\n getCurrentPriority(): Priority {\r\n return this.currentPriority;\r\n }\r\n\r\n // Check if current execution should yield to higher priority work\r\n shouldYield(): boolean {\r\n const nextUpdate = this.updateQueue.peek();\r\n if (!nextUpdate) return false;\r\n\r\n const currentPriorityLevel = this.getPriorityLevel(this.currentPriority);\r\n const nextPriorityLevel = this.getPriorityLevel(nextUpdate.priority);\r\n\r\n return nextPriorityLevel < currentPriorityLevel;\r\n }\r\n\r\n private getPriorityLevel(priority: Priority): number {\r\n const levels = { immediate: 0, high: 1, normal: 2, low: 3, idle: 4 };\r\n return levels[priority];\r\n }\r\n}\r\n\r\n// Global scheduler instance\r\nconst scheduler = new FynixScheduler();\r\n\r\n// ---------------------- Fiber Architecture ----------------------\r\n\r\nclass FiberRenderer {\r\n private workInProgressRoot: FynixFiber | null = null;\r\n private nextUnitOfWork: FynixFiber | null = null;\r\n private currentRoot: FynixFiber | null = null;\r\n private deletions: FynixFiber[] = [];\r\n\r\n scheduleWork(fiber: FynixFiber): void {\r\n this.workInProgressRoot = {\r\n ...fiber,\r\n alternate: this.currentRoot,\r\n };\r\n this.nextUnitOfWork = this.workInProgressRoot;\r\n this.deletions = [];\r\n\r\n scheduler.schedule(\r\n {\r\n id: \"\",\r\n type: \"layout\",\r\n priority: \"high\",\r\n callback: () => this.workLoop(5),\r\n timestamp: performance.now(),\r\n },\r\n \"high\"\r\n );\r\n }\r\n\r\n workLoop(deadline: number): void {\r\n const startTime = performance.now();\r\n\r\n while (this.nextUnitOfWork && performance.now() - startTime < deadline) {\r\n this.nextUnitOfWork = this.performUnitOfWork(this.nextUnitOfWork);\r\n }\r\n\r\n if (!this.nextUnitOfWork && this.workInProgressRoot) {\r\n // Commit phase\r\n this.commitRoot();\r\n } else if (this.nextUnitOfWork) {\r\n // Continue work in next frame\r\n scheduler.schedule(\r\n {\r\n id: \"\",\r\n type: \"layout\",\r\n priority: \"normal\",\r\n callback: () => this.workLoop(5),\r\n timestamp: performance.now(),\r\n },\r\n \"normal\"\r\n );\r\n }\r\n }\r\n\r\n performUnitOfWork(fiber: FynixFiber): FynixFiber | null {\r\n // Reconcile children\r\n this.reconcileChildren(fiber, fiber.props?.children || []);\r\n\r\n // Return next unit of work\r\n if (fiber.child) {\r\n return fiber.child;\r\n }\r\n\r\n let nextFiber: FynixFiber | null = fiber;\r\n while (nextFiber) {\r\n if (nextFiber.sibling) {\r\n return nextFiber.sibling;\r\n }\r\n nextFiber = nextFiber.parent;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private reconcileChildren(wipFiber: FynixFiber, elements: any[]): void {\r\n let index = 0;\r\n let oldFiber = wipFiber.alternate?.child;\r\n let prevSibling: FynixFiber | null = null;\r\n\r\n while (index < elements.length || oldFiber != null) {\r\n const element = elements[index];\r\n let newFiber: FynixFiber | null = null;\r\n\r\n const sameType = oldFiber && element && element.type === oldFiber.type;\r\n\r\n if (sameType && oldFiber) {\r\n // Update the fiber\r\n newFiber = {\r\n type: oldFiber.type,\r\n props: element.props,\r\n key: element.key,\r\n _domNode: oldFiber._domNode,\r\n parent: wipFiber,\r\n alternate: oldFiber,\r\n effectTag: \"UPDATE\",\r\n updatePriority: \"normal\",\r\n child: null,\r\n sibling: null,\r\n _rendered: null,\r\n };\r\n }\r\n\r\n if (element && !sameType) {\r\n // Create new fiber\r\n newFiber = {\r\n type: element.type,\r\n props: element.props,\r\n key: element.key,\r\n _domNode: null,\r\n parent: wipFiber,\r\n alternate: null,\r\n effectTag: \"PLACEMENT\",\r\n updatePriority: \"normal\",\r\n child: null,\r\n sibling: null,\r\n _rendered: null,\r\n };\r\n }\r\n\r\n if (oldFiber && !sameType) {\r\n // Delete old fiber\r\n oldFiber.effectTag = \"DELETION\";\r\n this.deletions.push(oldFiber);\r\n }\r\n\r\n if (oldFiber) {\r\n oldFiber = oldFiber.sibling;\r\n }\r\n\r\n if (index === 0) {\r\n wipFiber.child = newFiber;\r\n } else if (newFiber && prevSibling) {\r\n prevSibling.sibling = newFiber;\r\n }\r\n\r\n prevSibling = newFiber;\r\n index++;\r\n }\r\n }\r\n\r\n private commitRoot(): void {\r\n this.deletions.forEach((fiber) => this.commitWork(fiber));\r\n if (this.workInProgressRoot?.child) {\r\n this.commitWork(this.workInProgressRoot.child);\r\n }\r\n this.currentRoot = this.workInProgressRoot;\r\n this.workInProgressRoot = null;\r\n }\r\n\r\n private commitWork(fiber: FynixFiber | null): void {\r\n if (!fiber) return;\r\n\r\n let domParentFiber = fiber.parent;\r\n while (!domParentFiber?._domNode) {\r\n domParentFiber = domParentFiber?.parent || null;\r\n }\r\n\r\n const domParent = domParentFiber?._domNode;\r\n\r\n if (fiber.effectTag === \"PLACEMENT\" && fiber._domNode && domParent) {\r\n domParent.appendChild(fiber._domNode);\r\n } else if (fiber.effectTag === \"UPDATE\" && fiber._domNode) {\r\n // Update DOM properties\r\n this.updateDom(\r\n fiber._domNode as Element,\r\n fiber.alternate?.props || {},\r\n fiber.props\r\n );\r\n } else if (fiber.effectTag === \"DELETION\" && domParent) {\r\n this.commitDeletion(fiber, domParent);\r\n }\r\n\r\n this.commitWork(fiber.child);\r\n this.commitWork(fiber.sibling);\r\n }\r\n\r\n private commitDeletion(fiber: FynixFiber, domParent: Node): void {\r\n if (fiber._domNode) {\r\n domParent.removeChild(fiber._domNode);\r\n } else if (fiber.child) {\r\n this.commitDeletion(fiber.child, domParent);\r\n }\r\n }\r\n\r\n private updateDom(dom: Element, prevProps: any, nextProps: any): void {\r\n // Remove old properties\r\n Object.keys(prevProps)\r\n .filter((key) => key !== \"children\" && !(key in nextProps))\r\n .forEach((name) => {\r\n if (name.startsWith(\"on\")) {\r\n const eventType = name.toLowerCase().substring(2);\r\n (dom as any).removeEventListener(eventType, prevProps[name]);\r\n } else {\r\n (dom as any)[name] = \"\";\r\n }\r\n });\r\n\r\n // Set new properties\r\n Object.keys(nextProps)\r\n .filter((key) => key !== \"children\")\r\n .forEach((name) => {\r\n if (prevProps[name] !== nextProps[name]) {\r\n if (name.startsWith(\"on\")) {\r\n const eventType = name.toLowerCase().substring(2);\r\n (dom as any).addEventListener(eventType, nextProps[name]);\r\n } else {\r\n (dom as any)[name] = nextProps[name];\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\n// Global fiber renderer instance\r\nconst fiberRenderer = new FiberRenderer();\r\n\r\n// Export for use in enhanced rendering\r\nexport function useFiberRenderer(): FiberRenderer {\r\n return fiberRenderer;\r\n}\r\n\r\n// ---------------------- Enhanced State Store ----------------------\r\n\r\ninterface StoreNode<T = any> {\r\n path: string;\r\n value: T;\r\n children: Map<string, StoreNode>;\r\n subscribers: Set<() => void>;\r\n selector?: (state: any) => T;\r\n}\r\n\r\nclass HierarchicalStore {\r\n private root = new Map<string, StoreNode>();\r\n private selectorCache = new Map<string, any>();\r\n private stateSnapshot: any = {};\r\n\r\n select<T>(selector: (state: any) => T): T {\r\n const selectorKey = selector.toString();\r\n\r\n if (this.selectorCache.has(selectorKey)) {\r\n return this.selectorCache.get(selectorKey);\r\n }\r\n\r\n const result = selector(this.getState());\r\n this.selectorCache.set(selectorKey, result);\r\n\r\n return result;\r\n }\r\n\r\n optimisticUpdate<T>(path: string, update: T, rollback?: () => void) {\r\n const original = this.get(path);\r\n this.set(path, update);\r\n\r\n return {\r\n commit: () => this.clearRollback(path),\r\n rollback: () => {\r\n this.set(path, original);\r\n rollback?.();\r\n },\r\n };\r\n }\r\n\r\n private getState(): any {\r\n return this.stateSnapshot;\r\n }\r\n\r\n private get(path: string): any {\r\n return this.root.get(path)?.value;\r\n }\r\n\r\n private set(path: string, value: any): void {\r\n const node = this.root.get(path);\r\n if (node) {\r\n node.value = value;\r\n this.stateSnapshot = { ...this.stateSnapshot, [path]: value };\r\n this.invalidateSelectors();\r\n }\r\n }\r\n\r\n private clearRollback(path: string): void {\r\n // Mark optimistic update as committed - no rollback needed\r\n // This could involve clearing rollback data or updating transaction logs\r\n console.log(\r\n `[HierarchicalStore] Optimistic update committed for path: ${path}`\r\n );\r\n }\r\n\r\n private invalidateSelectors(): void {\r\n this.selectorCache.clear();\r\n }\r\n}\r\n\r\n// Global hierarchical store instance\r\nconst hierarchicalStore = new HierarchicalStore();\r\n\r\n// Export for advanced state management\r\nexport function useHierarchicalStore(): HierarchicalStore {\r\n return hierarchicalStore;\r\n}\r\n// ---------------------- Symbols ----------------------\r\n\r\nexport const TEXT = Symbol(\"text\");\r\nexport const Fragment = Symbol(\"Fragment\");\r\n\r\n// ---------------------- Constants ----------------------\r\n\r\nconst BOOLEAN_ATTRS = new Set([\r\n \"checked\",\r\n \"selected\",\r\n \"disabled\",\r\n \"readonly\",\r\n \"multiple\",\r\n \"autoplay\",\r\n \"controls\",\r\n \"loop\",\r\n \"muted\",\r\n \"open\",\r\n \"required\",\r\n \"reversed\",\r\n \"scoped\",\r\n \"seamless\",\r\n \"autofocus\",\r\n \"novalidate\",\r\n \"formnovalidate\",\r\n]);\r\n\r\nconst DOM_PROPERTIES = new Set([\r\n \"value\",\r\n \"checked\",\r\n \"selected\",\r\n \"selectedIndex\",\r\n \"innerHTML\",\r\n \"textContent\",\r\n \"innerText\",\r\n]);\r\n\r\n// Security: Dangerous HTML properties that should be sanitized\r\nconst DANGEROUS_HTML_PROPS = new Set([\r\n \"innerHTML\",\r\n \"outerHTML\",\r\n \"insertAdjacentHTML\",\r\n \"srcdoc\",\r\n]);\r\n\r\n// Security: Dangerous URL protocols\r\nconst DANGEROUS_PROTOCOLS = new Set([\r\n \"javascript:\",\r\n \"data:\",\r\n \"vbscript:\",\r\n \"file:\",\r\n \"about:\",\r\n]);\r\n\r\n// Security: Allowed URL protocols\r\nconst SAFE_PROTOCOLS = new Set([\r\n \"http:\",\r\n \"https:\",\r\n \"ftp:\",\r\n \"ftps:\",\r\n \"mailto:\",\r\n \"tel:\",\r\n \"#\",\r\n \"/\",\r\n \"./\",\r\n \"../\",\r\n]);\r\n\r\n// ---------------------- Virtual Node Helpers ----------------------\r\n\r\n/**\r\n * Creates a text virtual node from any value\r\n * Handles reactive state values by subscribing to changes\r\n *\r\n * @param text - Any value to convert to text (string, number, reactive state, etc.)\r\n * @returns VNode representing the text content\r\n *\r\n * @example\r\n * ```typescript\r\n * const textNode = createTextVNode(\"Hello World\");\r\n * const reactiveText = createTextVNode(nixState(\"Dynamic Text\"));\r\n * ```\r\n */\r\nexport function createTextVNode(text: any): VNode {\r\n if (text == null || text === false) {\r\n return { type: TEXT, props: { nodeValue: \"\" }, key: null };\r\n }\r\n\r\n if (text && typeof text === \"object\" && text._isNixState) {\r\n const vnode: VNode = {\r\n type: TEXT,\r\n props: { nodeValue: String(text.value) },\r\n key: null,\r\n _state: text,\r\n _cleanup: null,\r\n };\r\n\r\n vnode._cleanup = text.subscribe(() => {\r\n if (vnode._domNode) {\r\n (vnode._domNode as Text).nodeValue = String(text.value);\r\n }\r\n });\r\n\r\n return vnode;\r\n }\r\n\r\n return { type: TEXT, props: { nodeValue: String(text) }, key: null };\r\n}\r\n\r\n/**\r\n * Creates a virtual node (hyperscript function)\r\n * The core function for creating virtual DOM elements\r\n *\r\n * @param type - Element type (string for HTML elements, symbol for special nodes, or component function)\r\n * @param props - Element properties and attributes (can be null)\r\n * @param children - Child elements (can be nested arrays, will be flattened)\r\n * @returns VNode representing the element\r\n *\r\n * @example\r\n * ```typescript\r\n * // HTML element\r\n * const div = h('div', { class: 'container' }, 'Hello');\r\n *\r\n * // Component\r\n * const component = h(MyComponent, { prop: 'value' });\r\n *\r\n * // Fragment\r\n * const fragment = h(Fragment, null, child1, child2);\r\n * ```\r\n */\r\nexport function h(\r\n type: VNodeType,\r\n props: VNodeProps | null = null,\r\n ...children: VNodeChildren[]\r\n): VNode {\r\n const normalizedProps: VNodeProps =\r\n props === null || typeof props !== \"object\" || Array.isArray(props)\r\n ? {}\r\n : props;\r\n\r\n const flatChildren: VNode[] = [];\r\n\r\n for (const c of children.flat(Infinity)) {\r\n if (c == null || c === false) continue;\r\n\r\n if (c && typeof c === \"object\" && \"_isNixState\" in c) {\r\n flatChildren.push(createTextVNode(c));\r\n } else if (typeof c === \"string\" || typeof c === \"number\") {\r\n flatChildren.push(createTextVNode(c));\r\n } else if (c && typeof c === \"object\" && \"type\" in c) {\r\n if (c.type === Fragment) {\r\n const fragmentChildren = (c.props.children || []).filter(\r\n (x: any) => x != null && x !== false\r\n );\r\n flatChildren.push(...fragmentChildren);\r\n } else {\r\n flatChildren.push(c as VNode);\r\n }\r\n } else {\r\n flatChildren.push(createTextVNode(String(c)));\r\n }\r\n }\r\n\r\n const key = normalizedProps.key ?? null;\r\n if (key !== undefined) delete normalizedProps.key;\r\n\r\n if (type === Fragment) {\r\n return { type: Fragment, props: { children: flatChildren }, key };\r\n }\r\n\r\n return {\r\n type,\r\n props: { ...normalizedProps, children: flatChildren },\r\n key,\r\n };\r\n}\r\n\r\nh.Fragment = ({ children }: { children?: VNode[] }) => children || [];\r\n\r\nexport const Fynix = h;\r\nFynix.Fragment = h.Fragment;\r\n\r\n// ---------------------- Component Management ----------------------\r\n\r\nconst componentInstances = new WeakMap<VNode, ComponentContext>();\r\nlet rootRenderFn: (() => Promise<void>) | null = null;\r\nconst pendingRerenders = new WeakSet<ComponentContext>();\r\n\r\n/**\r\n * Initializes or retrieves a component context for rendering\r\n * Sets up the component's hooks, state tracking, and lifecycle management\r\n *\r\n * @param vnode - The virtual node representing the component\r\n * @returns ComponentContext for the component\r\n *\r\n * @internal Used by the runtime for component lifecycle management\r\n */\r\nfunction beginComponent(vnode: VNode): ComponentContext {\r\n let ctx = componentInstances.get(vnode);\r\n\r\n if (!ctx) {\r\n ctx = {\r\n hooks: [],\r\n hookIndex: 0,\r\n effects: [],\r\n cleanups: [],\r\n _vnode: vnode,\r\n _accessedStates: new Set(),\r\n _subscriptions: new Set(),\r\n _subscriptionCleanups: [],\r\n version: 0,\r\n rerender: null,\r\n Component: vnode.type as ComponentFunction,\r\n _isMounted: false,\r\n _isRerendering: false,\r\n };\r\n componentInstances.set(vnode, ctx);\r\n }\r\n\r\n ctx.hookIndex = 0;\r\n ctx._accessedStates.clear();\r\n setActiveContext(ctx);\r\n ctx.version++;\r\n\r\n return ctx;\r\n}\r\n\r\n/**\r\n * Finalizes component rendering and sets up reactive subscriptions\r\n * Handles state change subscriptions and cleanup for component reactivity\r\n *\r\n * @internal Used by the runtime after component rendering\r\n */\r\nfunction endComponent(): void {\r\n const ctx = activeContext as ComponentContext | null;\r\n if (!ctx) return;\r\n\r\n ctx._accessedStates.forEach((state) => {\r\n if (!ctx._subscriptions.has(state)) {\r\n if (!ctx.rerender) {\r\n let rerenderTimeout: NodeJS.Timeout | null = null;\r\n\r\n ctx.rerender = function rerender() {\r\n if (ctx._isRerendering || pendingRerenders.has(ctx)) {\r\n return;\r\n }\r\n\r\n if (rerenderTimeout) {\r\n clearTimeout(rerenderTimeout);\r\n }\r\n\r\n rerenderTimeout = setTimeout(async () => {\r\n if (ctx._isRerendering || !ctx._isMounted) return;\r\n\r\n ctx._isRerendering = true;\r\n pendingRerenders.add(ctx);\r\n\r\n try {\r\n removeErrorOverlay();\r\n\r\n const vnode = ctx._vnode;\r\n const oldRendered = vnode._rendered;\r\n\r\n beginComponent(vnode);\r\n const result = ctx.Component(vnode.props);\r\n const newRendered =\r\n result instanceof Promise ? await result : result;\r\n endComponent();\r\n\r\n vnode._rendered = newRendered;\r\n\r\n const domNode = vnode._domNode;\r\n if (domNode && domNode.parentNode) {\r\n await patch(domNode.parentNode, newRendered, oldRendered);\r\n if (newRendered && typeof newRendered === \"object\") {\r\n vnode._domNode = (newRendered as VNode)._domNode;\r\n }\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n } else if (rootRenderFn) {\r\n await rootRenderFn();\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n } else {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix] Component rerender error:\", err);\r\n showErrorOverlay(err as Error);\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n }\r\n\r\n rerenderTimeout = null;\r\n }, 0);\r\n };\r\n }\r\n\r\n const unsub = state.subscribe(() => {\r\n if (ctx.rerender && ctx._isMounted) {\r\n if (typeof queueMicrotask === \"function\") {\r\n queueMicrotask(() => ctx.rerender!());\r\n } else {\r\n setTimeout(ctx.rerender, 0);\r\n }\r\n }\r\n });\r\n\r\n ctx._subscriptions.add(state);\r\n ctx._subscriptionCleanups.push(unsub);\r\n }\r\n });\r\n\r\n setActiveContext(null);\r\n}\r\n\r\n/**\r\n * Renders a component function with given props\r\n * Handles both synchronous and asynchronous components\r\n *\r\n * @param Component - The component function to render\r\n * @param props - Properties to pass to the component\r\n * @returns VNode result of the component rendering\r\n *\r\n * @example\r\n * ```typescript\r\n * const MyComponent = (props) => h('div', null, props.message);\r\n * const rendered = renderComponent(MyComponent, { message: 'Hello' });\r\n * ```\r\n */\r\nexport function renderComponent(\r\n Component: ComponentFunction,\r\n props: any = {}\r\n): VNode {\r\n const vnode: VNode = { type: Component, props, key: null };\r\n const ctx = beginComponent(vnode);\r\n ctx.Component = Component;\r\n\r\n if (!ctx.rerender) {\r\n let rerenderTimeout: NodeJS.Timeout | null = null;\r\n\r\n ctx.rerender = () => {\r\n if (ctx._isRerendering || pendingRerenders.has(ctx)) return;\r\n\r\n if (rerenderTimeout) {\r\n clearTimeout(rerenderTimeout);\r\n }\r\n\r\n rerenderTimeout = setTimeout(async () => {\r\n if (ctx._isRerendering || !ctx._isMounted) return;\r\n\r\n ctx._isRerendering = true;\r\n pendingRerenders.add(ctx);\r\n\r\n try {\r\n removeErrorOverlay();\r\n\r\n const vnode = ctx._vnode;\r\n const oldRendered = vnode._rendered;\r\n\r\n beginComponent(vnode);\r\n const result = ctx.Component(vnode.props);\r\n const newRendered = result instanceof Promise ? await result : result;\r\n endComponent();\r\n\r\n vnode._rendered = newRendered;\r\n\r\n const domNode = vnode._domNode;\r\n if (domNode && domNode.parentNode) {\r\n await patch(domNode.parentNode, newRendered, oldRendered);\r\n if (newRendered && typeof newRendered === \"object\") {\r\n vnode._domNode = (newRendered as VNode)._domNode;\r\n }\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n } else if (rootRenderFn) {\r\n await rootRenderFn();\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n } else {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix] Component rerender error:\", err);\r\n showErrorOverlay(err as Error);\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n }\r\n\r\n rerenderTimeout = null;\r\n }, 0);\r\n };\r\n }\r\n\r\n try {\r\n removeErrorOverlay();\r\n const result = Component(props);\r\n\r\n // Handle both sync and async components\r\n if (result instanceof Promise) {\r\n // For async components, return a placeholder and handle async rendering\r\n const placeholderVNode = h(\"div\", null, \"Loading...\");\r\n ctx._vnode = vnode;\r\n vnode._rendered = placeholderVNode;\r\n ctx._isMounted = true;\r\n\r\n result\r\n .then((resolvedVNode) => {\r\n vnode._rendered = resolvedVNode;\r\n if (ctx.rerender) {\r\n ctx.rerender();\r\n }\r\n })\r\n .catch((err) => {\r\n console.error(\"[Fynix] Async component error:\", err);\r\n showErrorOverlay(err as Error);\r\n });\r\n\r\n return placeholderVNode;\r\n }\r\n\r\n ctx._vnode = vnode;\r\n vnode._rendered = result;\r\n ctx._isMounted = true;\r\n return result;\r\n } catch (err) {\r\n console.error(\"[Fynix] Component render error:\", err);\r\n showErrorOverlay(err as Error);\r\n return h(\r\n \"div\",\r\n { style: \"color:red\" },\r\n `Error: ${sanitizeErrorMessage(err)}`\r\n );\r\n } finally {\r\n endComponent();\r\n }\r\n}\r\n\r\n// ---------------------- Event Delegation ----------------------\r\n\r\nconst delegatedEvents = new Map<string, Map<number, (e: Event) => void>>();\r\nlet eventIdCounter = 1;\r\n\r\n/**\r\n * Ensures event delegation is set up for a specific event type\r\n * Creates a global event listener that delegates to specific elements\r\n *\r\n * @param eventType - The event type to delegate (e.g., 'click', 'change')\r\n *\r\n * @internal Used by the event system for performance optimization\r\n */\r\nfunction ensureDelegated(eventType: string): void {\r\n if (delegatedEvents.has(eventType)) return;\r\n\r\n delegatedEvents.set(eventType, new Map());\r\n\r\n document.addEventListener(eventType, (e: Event) => {\r\n let cur: Node | null = e.target as Node;\r\n\r\n while (cur && cur !== document) {\r\n if (cur.nodeType !== 1) break;\r\n\r\n const el = cur as any;\r\n const eid = el._rest_eid;\r\n const map = delegatedEvents.get(eventType);\r\n\r\n if (eid != null && map?.has(eid)) {\r\n map.get(eid)!(e);\r\n return;\r\n }\r\n\r\n cur = (cur as Element).parentElement;\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Registers an event handler using the delegation system\r\n * More efficient than individual event listeners on each element\r\n *\r\n * @param el - The HTML element to attach the handler to\r\n * @param eventName - Name of the event (without 'on' prefix)\r\n * @param fn - Event handler function\r\n *\r\n * @internal Used when processing r- prefixed event attributes\r\n */\r\nfunction registerDelegatedHandler(\r\n el: HTMLElement,\r\n eventName: string,\r\n fn: (e: Event) => void\r\n): void {\r\n if (!fn || el.nodeType !== 1) return;\r\n\r\n const anyEl = el as any;\r\n const eid = anyEl._rest_eid ?? (anyEl._rest_eid = ++eventIdCounter);\r\n\r\n ensureDelegated(eventName);\r\n\r\n delegatedEvents.get(eventName)!.set(eid, (e: Event) => {\r\n try {\r\n fn.call(el, e);\r\n } catch (err) {\r\n console.error(\"[Fynix] Event handler error:\", err);\r\n showErrorOverlay(err as Error);\r\n }\r\n });\r\n}\r\n\r\n// ---------------------- Security Helpers ----------------------\r\n\r\n/**\r\n * Sanitizes text content to prevent XSS attacks\r\n */\r\nfunction sanitizeText(text: string): string {\r\n if (typeof text !== \"string\") return String(text);\r\n\r\n // Remove potentially dangerous characters and patterns\r\n return text\r\n .replace(/[<>\"'&]/g, (match) => {\r\n const entityMap: Record<string, string> = {\r\n \"<\": \"&lt;\",\r\n \">\": \"&gt;\",\r\n '\"': \"&quot;\",\r\n \"'\": \"&#x27;\",\r\n \"&\": \"&amp;\",\r\n };\r\n return entityMap[match] || match;\r\n })\r\n .replace(/javascript:/gi, \"blocked:\")\r\n .replace(/data:.*?base64/gi, \"blocked:\");\r\n}\r\n\r\n/**\r\n * Sanitizes attribute values\r\n */\r\nfunction sanitizeAttributeValue(value: string): string {\r\n if (typeof value !== \"string\") return String(value);\r\n\r\n return value\r\n .replace(/[\"'<>]/g, (match) => {\r\n const entityMap: Record<string, string> = {\r\n '\"': \"&quot;\",\r\n \"'\": \"&#x27;\",\r\n \"<\": \"&lt;\",\r\n \">\": \"&gt;\",\r\n };\r\n return entityMap[match] || match;\r\n })\r\n .replace(/javascript:/gi, \"blocked:\")\r\n .replace(/on\\w+=/gi, \"blocked=\");\r\n}\r\n\r\n/**\r\n * Validates and sanitizes error messages to prevent XSS\r\n */\r\nfunction sanitizeErrorMessage(error: any): string {\r\n if (!error) return \"Unknown error\";\r\n\r\n const message = error.message || error.toString() || \"Unknown error\";\r\n return sanitizeText(String(message)).slice(0, 200); // Limit length\r\n}\r\n\r\n// ---------------------- Property Setter ----------------------\r\n\r\n/**\r\n * Sets a property or attribute on an HTML element with security validation\r\n * Handles special cases like reactive classes, events, and dangerous properties\r\n *\r\n * @param el - The HTML element to modify\r\n * @param key - Property/attribute name\r\n * @param value - Value to set\r\n *\r\n * @security Blocks dangerous properties like innerHTML and validates URLs\r\n *\r\n * @internal Used during DOM creation and updates\r\n */\r\nfunction setProperty(el: HTMLElement, key: string, value: any): void {\r\n const k = key.toLowerCase();\r\n\r\n if (key === \"r-class\" || key === \"rc\") {\r\n if (typeof value === \"string\") {\r\n el.setAttribute(\"class\", value);\r\n } else if (value && (value._isNixState || value._isRestState)) {\r\n el.setAttribute(\"class\", value.value);\r\n\r\n const anyEl = el as any;\r\n if (!anyEl._fynixCleanups) anyEl._fynixCleanups = [];\r\n\r\n const unsub = value.subscribe(() =>\r\n el.setAttribute(\"class\", value.value)\r\n );\r\n anyEl._fynixCleanups.push(unsub);\r\n }\r\n return;\r\n }\r\n\r\n if (key.startsWith(\"r-\")) {\r\n registerDelegatedHandler(el, key.slice(2).toLowerCase(), value);\r\n return;\r\n }\r\n\r\n if (key === \"style\" && typeof value === \"object\") {\r\n Object.assign(el.style, value);\r\n return;\r\n }\r\n\r\n // Security: Block dangerous HTML properties completely\r\n if (DANGEROUS_HTML_PROPS.has(key)) {\r\n console.error(\r\n `[Fynix] Security: ${key} is blocked for security reasons. Use textContent or children instead.`\r\n );\r\n return;\r\n }\r\n\r\n // Security: Validate URL attributes more thoroughly\r\n if (\r\n (key === \"href\" ||\r\n key === \"src\" ||\r\n key === \"action\" ||\r\n key === \"formaction\") &&\r\n typeof value === \"string\"\r\n ) {\r\n const normalizedValue = value.trim().toLowerCase();\r\n\r\n // Check for dangerous protocols (blacklist)\r\n for (const protocol of DANGEROUS_PROTOCOLS) {\r\n if (normalizedValue.startsWith(protocol)) {\r\n console.error(\r\n `[Fynix] Security: ${protocol} protocol blocked in ${key}`\r\n );\r\n return;\r\n }\r\n }\r\n\r\n // Validate against safe protocols (whitelist) - more secure approach\r\n if (normalizedValue.includes(\":\")) {\r\n const protocol = normalizedValue.split(\":\")[0] + \":\";\r\n if (\r\n !SAFE_PROTOCOLS.has(protocol) &&\r\n !SAFE_PROTOCOLS.has(normalizedValue.charAt(0))\r\n ) {\r\n console.error(\r\n `[Fynix] Security: Protocol '${protocol}' not in safe list for ${key}`\r\n );\r\n return;\r\n }\r\n }\r\n\r\n // Additional validation for data: URLs (can contain base64 encoded scripts)\r\n if (normalizedValue.startsWith(\"data:\")) {\r\n if (\r\n normalizedValue.includes(\"javascript\") ||\r\n normalizedValue.includes(\"<script\")\r\n ) {\r\n console.error(\r\n `[Fynix] Security: Suspicious data: URL blocked in ${key}`\r\n );\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // Security: Sanitize event handler attributes\r\n if (key.toLowerCase().startsWith(\"on\") && key !== \"open\") {\r\n console.error(\r\n `[Fynix] Security: Inline event handler '${key}' blocked. Use r-${key.slice(2)} instead.`\r\n );\r\n return;\r\n }\r\n\r\n if (BOOLEAN_ATTRS.has(k)) {\r\n if (value) {\r\n el.setAttribute(k, \"\");\r\n (el as any)[k] = true;\r\n } else {\r\n el.removeAttribute(k);\r\n (el as any)[k] = false;\r\n }\r\n return;\r\n }\r\n\r\n if (DOM_PROPERTIES.has(key) && !DANGEROUS_HTML_PROPS.has(key)) {\r\n // Security: Sanitize textContent and innerText\r\n if (key === \"textContent\" || key === \"innerText\") {\r\n (el as any)[key] = sanitizeText(value ?? \"\");\r\n } else {\r\n (el as any)[key] = value ?? \"\";\r\n }\r\n return;\r\n }\r\n\r\n if (key.startsWith(\"data-\") || key.startsWith(\"aria-\")) {\r\n if (value != null && value !== false) {\r\n // Security: Sanitize data and aria attributes\r\n el.setAttribute(key, sanitizeAttributeValue(String(value)));\r\n } else {\r\n el.removeAttribute(key);\r\n }\r\n return;\r\n }\r\n\r\n if (value != null && value !== false) {\r\n el.setAttribute(key, value);\r\n }\r\n}\r\n\r\n// ---------------------- DOM Creation ----------------------\r\n\r\n/**\r\n * Creates actual DOM nodes from virtual nodes\r\n * Handles all types of vnodes including components, text, and fragments\r\n *\r\n * @param vnode - Virtual node or primitive value to create DOM for\r\n * @param existing - Existing DOM node to reuse (optional)\r\n * @returns Promise resolving to the created DOM node\r\n *\r\n * @example\r\n * ```typescript\r\n * const vnode = h('div', { class: 'test' }, 'Hello');\r\n * const domNode = await createDom(vnode);\r\n * document.body.appendChild(domNode);\r\n * ```\r\n *\r\n * @internal Core function for DOM creation\r\n */\r\nasync function createDom(\r\n vnode: VNode | string | number | Promise<any> | null | undefined,\r\n existing: Node | null = null\r\n): Promise<Node> {\r\n if (vnode == null) {\r\n return document.createTextNode(\"\");\r\n }\r\n\r\n if (typeof vnode === \"string\" || typeof vnode === \"number\") {\r\n return document.createTextNode(String(vnode));\r\n }\r\n\r\n if (vnode instanceof Promise) {\r\n const placeholder = document.createTextNode(\"Loading...\");\r\n\r\n vnode\r\n .then(async (resolved) => {\r\n try {\r\n const dom = await createDom(resolved);\r\n if (placeholder.parentNode) {\r\n placeholder.replaceWith(dom);\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix] Async component error:\", err);\r\n if (placeholder.parentNode) {\r\n placeholder.textContent = \"Error loading component\";\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n console.error(\"[Fynix] Async component promise error:\", err);\r\n if (placeholder.parentNode) {\r\n placeholder.textContent = \"Error loading async component\";\r\n }\r\n });\r\n\r\n return placeholder;\r\n }\r\n\r\n const vnodeObj = vnode as VNode;\r\n\r\n if (vnodeObj.type === TEXT) {\r\n const textNode =\r\n existing || document.createTextNode(vnodeObj.props.nodeValue ?? \"\");\r\n vnodeObj._domNode = textNode;\r\n return textNode;\r\n }\r\n\r\n if (vnodeObj.type === Fragment) {\r\n const frag = document.createDocumentFragment();\r\n for (const child of vnodeObj.props?.children || []) {\r\n frag.appendChild(await createDom(child));\r\n }\r\n vnodeObj._domNode = frag;\r\n return frag;\r\n }\r\n\r\n if (typeof vnodeObj.type === \"function\") {\r\n const rendered = await renderMaybeAsyncComponent(\r\n vnodeObj.type as ComponentFunction,\r\n vnodeObj.props,\r\n vnodeObj\r\n );\r\n vnodeObj._rendered = rendered;\r\n const dom = await createDom(rendered);\r\n vnodeObj._domNode = dom;\r\n return dom;\r\n }\r\n\r\n const el = existing || document.createElement(vnodeObj.type as string);\r\n\r\n for (const [k, v] of Object.entries(vnodeObj.props || {})) {\r\n if (k !== \"children\") {\r\n setProperty(el as HTMLElement, k, v);\r\n }\r\n }\r\n\r\n for (const child of vnodeObj.props?.children || []) {\r\n el.appendChild(await createDom(child));\r\n }\r\n\r\n vnodeObj._domNode = el;\r\n return el;\r\n}\r\n\r\n// ---------------------- Async Component Helper ----------------------\r\n\r\n/**\r\n * Renders a component that may be synchronous or asynchronous\r\n * Handles the component lifecycle and error boundaries\r\n *\r\n * @param Component - Component function to render\r\n * @param props - Properties to pass to the component\r\n * @param vnode - Virtual node representing this component\r\n * @returns Promise resolving to the rendered VNode or null on error\r\n *\r\n * @internal Used for rendering components during DOM creation\r\n */\r\nasync function renderMaybeAsyncComponent(\r\n Component: ComponentFunction,\r\n props: any,\r\n vnode: VNode\r\n): Promise<VNode | null> {\r\n const ctx = beginComponent(vnode);\r\n removeErrorOverlay();\r\n\r\n try {\r\n const result = await Component(props);\r\n ctx._vnode = vnode;\r\n vnode._rendered = result;\r\n ctx._isMounted = true;\r\n endComponent();\r\n return result ?? null;\r\n } catch (err) {\r\n console.error(\"[Fynix] async render error:\", err);\r\n showErrorOverlay(err as Error);\r\n ctx._isMounted = false;\r\n endComponent();\r\n return h(\r\n \"div\",\r\n { style: \"color:red\" },\r\n `Error: ${sanitizeErrorMessage(err)}`\r\n );\r\n }\r\n}\r\n\r\n// ---------------------- Patch / Diff ----------------------\r\n\r\n/**\r\n * Efficiently updates the DOM by comparing old and new virtual nodes\r\n * Core diffing algorithm that minimizes DOM manipulations\r\n *\r\n * @param parent - Parent DOM node containing the elements to patch\r\n * @param newVNode - New virtual node or primitive value\r\n * @param oldVNode - Previous virtual node or primitive value\r\n *\r\n * @example\r\n * ```typescript\r\n * const oldVNode = h('div', null, 'Old text');\r\n * const newVNode = h('div', null, 'New text');\r\n * await patch(container, newVNode, oldVNode);\r\n * ```\r\n *\r\n * @public Core API for manual DOM updates\r\n */\r\nexport async function patch(\r\n parent: Node,\r\n newVNode: VNode | string | number | null | undefined,\r\n oldVNode: VNode | string | number | null | undefined\r\n): Promise<void> {\r\n if (!(parent instanceof Node)) {\r\n console.error(\r\n \"[Fynix] patch() expects a DOM Node, got:\",\r\n typeof parent,\r\n parent\r\n );\r\n return;\r\n }\r\n\r\n if (!newVNode && !oldVNode) return;\r\n\r\n if (!newVNode && oldVNode) {\r\n const domNode = (oldVNode as VNode)._domNode;\r\n if (domNode?.parentNode) {\r\n domNode.parentNode.removeChild(domNode);\r\n }\r\n unmountVNode(oldVNode as VNode);\r\n return;\r\n }\r\n\r\n if (newVNode && !oldVNode) {\r\n const newDom = await createDom(newVNode);\r\n if (newDom instanceof Node) {\r\n parent.appendChild(newDom);\r\n }\r\n return;\r\n }\r\n\r\n const newIsPrimitive =\r\n typeof newVNode === \"string\" || typeof newVNode === \"number\";\r\n const oldIsPrimitive =\r\n typeof oldVNode === \"string\" || typeof oldVNode === \"number\";\r\n\r\n if (newIsPrimitive || oldIsPrimitive) {\r\n if (\r\n newIsPrimitive &&\r\n oldIsPrimitive &&\r\n String(newVNode) === String(oldVNode)\r\n )\r\n return;\r\n\r\n const newDom = await createDom(newVNode);\r\n const oldDom = (oldVNode as VNode)?._domNode || parent.firstChild;\r\n\r\n if (oldDom?.parentNode && newDom instanceof Node) {\r\n oldDom.parentNode.replaceChild(newDom, oldDom);\r\n }\r\n\r\n if (oldVNode && typeof oldVNode === \"object\") {\r\n unmountVNode(oldVNode as VNode);\r\n }\r\n return;\r\n }\r\n\r\n const newVN = newVNode as VNode;\r\n const oldVN = oldVNode as VNode;\r\n\r\n const newType = newVN.type;\r\n const oldType = oldVN.type;\r\n\r\n if (newType !== oldType) {\r\n const newDom = await createDom(newVN);\r\n const oldDom = oldVN._domNode;\r\n\r\n if (oldDom?.parentNode && newDom instanceof Node) {\r\n oldDom.parentNode.replaceChild(newDom, oldDom);\r\n }\r\n\r\n unmountVNode(oldVN);\r\n return;\r\n }\r\n\r\n if (newType === TEXT) {\r\n const oldDom = oldVN._domNode;\r\n const newText = newVN.props.nodeValue ?? \"\";\r\n const oldText = oldVN.props.nodeValue ?? \"\";\r\n\r\n if (newText !== oldText && oldDom) {\r\n (oldDom as Text).nodeValue = newText;\r\n }\r\n\r\n newVN._domNode = oldDom;\r\n return;\r\n }\r\n\r\n if (newType === Fragment) {\r\n const newChildren = newVN.props?.children || [];\r\n const oldChildren = oldVN.props?.children || [];\r\n await patchChildren(parent, newChildren, oldChildren);\r\n newVN._domNode = oldVN._domNode;\r\n return;\r\n }\r\n\r\n if (typeof newType === \"function\") {\r\n const oldCtx = componentInstances.get(oldVN);\r\n\r\n if (oldCtx && newType === oldType) {\r\n componentInstances.delete(oldVN);\r\n componentInstances.set(newVN, oldCtx);\r\n\r\n oldCtx._vnode = newVN;\r\n\r\n beginComponent(newVN);\r\n const rendered = await oldCtx.Component(newVN.props);\r\n endComponent();\r\n\r\n newVN._rendered = rendered;\r\n\r\n const oldRendered = oldVN._rendered;\r\n const oldDom = oldVN._domNode;\r\n\r\n if (oldDom?.parentNode instanceof Node) {\r\n await patch(oldDom.parentNode, rendered, oldRendered);\r\n newVN._domNode = (rendered as VNode)?._domNode || oldDom;\r\n }\r\n } else {\r\n const rendered = await renderMaybeAsyncComponent(\r\n newType as ComponentFunction,\r\n newVN.props,\r\n newVN\r\n );\r\n newVN._rendered = rendered;\r\n\r\n const oldRendered = oldVN._rendered;\r\n const oldDom = oldVN._domNode;\r\n\r\n if (oldDom?.parentNode instanceof Node) {\r\n await patch(oldDom.parentNode, rendered, oldRendered);\r\n newVN._domNode = (rendered as VNode)?._domNode || oldDom;\r\n } else {\r\n const newDom = await createDom(rendered);\r\n if (parent && newDom instanceof Node) {\r\n parent.appendChild(newDom);\r\n }\r\n newVN._domNode = newDom;\r\n }\r\n\r\n if (oldCtx && newType !== oldType) {\r\n unmountVNode(oldVN);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n const el = oldVN._domNode;\r\n if (!el || el.nodeType !== 1) {\r\n const newDom = await createDom(newVN);\r\n if (parent && newDom instanceof Node) {\r\n parent.appendChild(newDom);\r\n }\r\n unmountVNode(oldVN);\r\n return;\r\n }\r\n\r\n updateProps(el as HTMLElement, newVN.props, oldVN.props);\r\n newVN._domNode = el;\r\n\r\n const newChildren = newVN.props?.children || [];\r\n const oldChildren = oldVN.props?.children || [];\r\n await patchChildren(el, newChildren, oldChildren);\r\n}\r\n\r\n/**\r\n * Updates child elements using efficient diffing with key-based optimization\r\n * Handles both keyed and non-keyed reconciliation strategies\r\n *\r\n * @param parent - Parent DOM node containing the children\r\n * @param newChildren - Array of new child vnodes\r\n * @param oldChildren - Array of previous child vnodes\r\n *\r\n * @internal Used by the patch function for child reconciliation\r\n */\r\nasync function patchChildren(\r\n parent: Node,\r\n newChildren: VNode[],\r\n oldChildren: VNode[]\r\n): Promise<void> {\r\n if (!(parent instanceof Node)) return;\r\n\r\n const hasKeys =\r\n newChildren.some((c) => c?.key != null) ||\r\n oldChildren.some((c) => c?.key != null);\r\n\r\n if (!hasKeys) {\r\n const maxLen = Math.max(newChildren.length, oldChildren.length);\r\n\r\n for (let i = 0; i < maxLen; i++) {\r\n const newChild = newChildren[i];\r\n const oldChild = oldChildren[i];\r\n\r\n if (i >= newChildren.length) {\r\n const dom = oldChild?._domNode;\r\n if (dom?.parentNode) {\r\n dom.parentNode.removeChild(dom);\r\n }\r\n unmountVNode(oldChild);\r\n } else if (i >= oldChildren.length) {\r\n const newDom = await createDom(newChild);\r\n if (newDom instanceof Node) {\r\n parent.appendChild(newDom);\r\n }\r\n } else {\r\n await patch(parent, newChild, oldChild);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n const oldKeyMap = new Map<string | number, VNode>();\r\n\r\n oldChildren.forEach((child) => {\r\n if (child?.key != null) {\r\n oldKeyMap.set(child.key, child);\r\n }\r\n });\r\n\r\n const newKeySet = new Set(\r\n newChildren.filter((c) => c?.key != null).map((c) => c.key!)\r\n );\r\n\r\n oldChildren.forEach((oldChild) => {\r\n if (oldChild?.key != null && !newKeySet.has(oldChild.key)) {\r\n const dom = oldChild._domNode;\r\n if (dom?.parentNode) {\r\n dom.parentNode.removeChild(dom);\r\n }\r\n unmountVNode(oldChild);\r\n }\r\n });\r\n\r\n for (let i = 0; i < newChildren.length; i++) {\r\n const newChild = newChildren[i];\r\n const key = newChild?.key;\r\n\r\n if (key != null && oldKeyMap.has(key)) {\r\n const oldChild = oldKeyMap.get(key)!;\r\n const oldDom = oldChild._domNode;\r\n const childNodes = Array.from(parent.childNodes);\r\n const currentPos = childNodes.indexOf(oldDom as ChildNode);\r\n const desiredPos = i;\r\n\r\n if (currentPos !== desiredPos) {\r\n const refNode = childNodes[desiredPos] || null;\r\n if (oldDom && oldDom.parentNode === parent) {\r\n parent.insertBefore(oldDom, refNode as ChildNode | null);\r\n }\r\n }\r\n\r\n await patch(parent, newChild, oldChild);\r\n } else {\r\n const newDom = await createDom(newChild);\r\n if (newDom instanceof Node) {\r\n const childNodes = Array.from(parent.childNodes);\r\n const refNode = childNodes[i] || null;\r\n parent.insertBefore(newDom, refNode as ChildNode | null);\r\n }\r\n }\r\n }\r\n}\r\n\r\n// ---------------------- Unmount ----------------------\r\n\r\n/**\r\n * Properly unmounts a virtual node and cleans up all associated resources\r\n * Handles component cleanup, subscriptions, effects, and event listeners\r\n *\r\n * @param vnode - Virtual node to unmount\r\n *\r\n * @example\r\n * ```typescript\r\n * // Cleanup when removing from DOM\r\n * unmountVNode(oldVNode);\r\n * ```\r\n *\r\n * @internal Critical for preventing memory leaks\r\n */\r\nfunction unmountVNode(vnode: VNode | any): void {\r\n if (!vnode) return;\r\n\r\n if (vnode._cleanup && typeof vnode._cleanup === \"function\") {\r\n try {\r\n vnode._cleanup();\r\n } catch (e) {\r\n console.error(\"[Fynix] Text vnode cleanup error:\", e);\r\n }\r\n vnode._cleanup = null;\r\n }\r\n\r\n if (typeof vnode.type === \"function\") {\r\n const ctx = componentInstances.get(vnode);\r\n\r\n if (ctx) {\r\n ctx._isMounted = false;\r\n\r\n ctx._subscriptionCleanups.forEach((u) => {\r\n try {\r\n u();\r\n } catch (e) {\r\n console.error(\"[Fynix] Cleanup error:\", e);\r\n }\r\n });\r\n\r\n ctx.cleanups.forEach((c) => {\r\n try {\r\n c?.();\r\n } catch (e) {\r\n console.error(\"[Fynix] Effect cleanup error:\", e);\r\n }\r\n });\r\n\r\n ctx._subscriptions.clear();\r\n ctx._accessedStates.clear();\r\n ctx._subscriptionCleanups = [];\r\n ctx.cleanups = [];\r\n ctx.hooks = [];\r\n ctx.effects = [];\r\n ctx.rerender = null;\r\n ctx._vnode = null as any;\r\n\r\n componentInstances.delete(vnode);\r\n pendingRerenders.delete(ctx);\r\n }\r\n\r\n unmountVNode(vnode._rendered);\r\n return;\r\n }\r\n\r\n if (vnode._domNode && vnode._domNode.nodeType === 1) {\r\n const anyNode = vnode._domNode as any;\r\n const eid = anyNode._rest_eid;\r\n\r\n if (eid) {\r\n delegatedEvents.forEach((map) => map.delete(eid));\r\n }\r\n\r\n if (anyNode._fynixCleanups) {\r\n anyNode._fynixCleanups.forEach((cleanup: () => void) => {\r\n try {\r\n cleanup();\r\n } catch (e) {\r\n console.error(\"[Fynix] Element cleanup error:\", e);\r\n }\r\n });\r\n anyNode._fynixCleanups = null;\r\n }\r\n }\r\n\r\n if (vnode.props?.children) {\r\n vnode.props.children.forEach((c: VNode) => unmountVNode(c));\r\n }\r\n\r\n vnode._domNode = null;\r\n vnode._rendered = null;\r\n}\r\n\r\n// ---------------------- Update Props ----------------------\r\n\r\n/**\r\n * Updates element properties by comparing old and new props\r\n * Efficiently adds, removes, and modifies attributes and properties\r\n *\r\n * @param el - HTML element to update\r\n * @param newProps - New properties object\r\n * @param oldProps - Previous properties object\r\n *\r\n * @internal Used during DOM patching to sync element state\r\n */\r\nfunction updateProps(\r\n el: HTMLElement,\r\n newProps: VNodeProps = {},\r\n oldProps: VNodeProps = {}\r\n): void {\r\n if (!el || el.nodeType !== 1) return;\r\n\r\n for (const k of Object.keys(oldProps)) {\r\n if (k === \"children\") continue;\r\n\r\n if (!(k in newProps)) {\r\n if (k.startsWith(\"r-\")) {\r\n const anyEl = el as any;\r\n const eid = anyEl._rest_eid;\r\n if (eid && delegatedEvents.has(k.slice(2).toLowerCase())) {\r\n delegatedEvents.get(k.slice(2).toLowerCase())!.delete(eid);\r\n }\r\n } else if (BOOLEAN_ATTRS.has(k.toLowerCase())) {\r\n el.removeAttribute(k);\r\n (el as any)[k] = false;\r\n } else if (DOM_PROPERTIES.has(k)) {\r\n (el as any)[k] = \"\";\r\n } else {\r\n el.removeAttribute(k);\r\n }\r\n }\r\n }\r\n\r\n for (const [k, v] of Object.entries(newProps)) {\r\n if (k === \"children\") continue;\r\n if (oldProps[k] !== v) {\r\n setProperty(el, k, v);\r\n }\r\n }\r\n}\r\n\r\n// ---------------------- Mount ----------------------\r\n\r\n/**\r\n * Mounts a Fynix application to a DOM element\r\n * Sets up the root component, handles HMR, and manages the application lifecycle\r\n *\r\n * @param AppComponent - Root component function for the application\r\n * @param root - CSS selector string or DOM element to mount to\r\n * @param props - Initial properties for the root component\r\n *\r\n * @example\r\n * ```typescript\r\n * const App = () => h('div', null, 'Hello Fynix!');\r\n * mount(App, '#root');\r\n *\r\n * // With props\r\n * mount(App, document.getElementById('app'), { theme: 'dark' });\r\n * ```\r\n *\r\n * @public Main entry point for Fynix applications\r\n */\r\nexport function mount(\r\n AppComponent: ComponentFunction,\r\n root: string | Element,\r\n props: any = {}\r\n): void {\r\n if (typeof root === \"string\") {\r\n const element = document.querySelector(root);\r\n if (!element) {\r\n console.error(\r\n \"[Fynix] Mount error: Element not found for selector:\",\r\n root\r\n );\r\n return;\r\n }\r\n root = element;\r\n }\r\n\r\n if (!(root instanceof Element)) {\r\n console.error(\"[Fynix] Mount error: Invalid root element\", root);\r\n return;\r\n }\r\n\r\n let Component = AppComponent;\r\n let oldVNode: VNode | null = null;\r\n let currentProps = props;\r\n let appVNode: VNode | null = null;\r\n let isRendering = false;\r\n\r\n async function renderApp(): Promise<void> {\r\n if (isRendering) return;\r\n\r\n isRendering = true;\r\n\r\n try {\r\n removeErrorOverlay();\r\n\r\n const win = window as any;\r\n const propsToUse =\r\n win.__lastRouteProps || win.__fynix__?.lastRouteProps || currentProps;\r\n\r\n if (!appVNode) {\r\n appVNode = { type: Component, props: propsToUse, key: null };\r\n\r\n if (root instanceof Element) {\r\n root.innerHTML = \"\";\r\n const dom = await createDom(appVNode);\r\n if (dom instanceof Node) {\r\n root.appendChild(dom);\r\n }\r\n } else {\r\n console.error(\"[Fynix] Mount error: root is not a DOM Element\", root);\r\n return;\r\n }\r\n\r\n oldVNode = appVNode;\r\n } else {\r\n appVNode.props = propsToUse;\r\n\r\n if (root instanceof Node) {\r\n await patch(root, appVNode, oldVNode);\r\n oldVNode = appVNode;\r\n } else {\r\n console.error(\"[Fynix] Patch error: root is not a DOM Node\", root);\r\n return;\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix] Mount error:\", err);\r\n showErrorOverlay(err as Error);\r\n } finally {\r\n isRendering = false;\r\n }\r\n }\r\n\r\n rootRenderFn = renderApp;\r\n\r\n const win = window as any;\r\n win.__fynix__ = win.__fynix__ || {};\r\n win.__fynix__.rerender = renderApp;\r\n\r\n renderApp();\r\n\r\n if (import.meta.hot) {\r\n if (!win.__fynix__.hmr) {\r\n win.__fynix__.hmr = async ({ mod }: { mod: any }) => {\r\n try {\r\n const UpdatedComponent = mod.App || mod.default;\r\n if (UpdatedComponent) {\r\n Component = UpdatedComponent;\r\n if (appVNode) {\r\n appVNode.type = UpdatedComponent;\r\n }\r\n win.__fynix__.rerender?.();\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix HMR] update error:\", err);\r\n showErrorOverlay(err as Error);\r\n }\r\n };\r\n import.meta.hot.accept();\r\n }\r\n }\r\n}\r\n\r\n// ---------------------- Exports ----------------------\r\n\r\nexport {\r\n Button,\r\n createFynix,\r\n nixAsync,\r\n nixAsyncCached,\r\n nixAsyncDebounce,\r\n nixAsyncQuery,\r\n nixCallback,\r\n nixComputed,\r\n nixDebounce,\r\n nixEffect,\r\n nixEffectAlways,\r\n nixEffectOnce,\r\n nixForm,\r\n nixFormAsync,\r\n nixInterval,\r\n nixLazy,\r\n nixLazyAsync,\r\n nixLazyFormAsync,\r\n nixLocalStorage,\r\n nixMemo,\r\n nixPrevious,\r\n nixRef,\r\n nixState,\r\n nixStore,\r\n Path,\r\n Suspense,\r\n};\r\n"],
5
+ "mappings": ";;AAiIA,SAAS,eAAe,wBAAwB;AAChD,SAAS,QAAQ,YAAY;AAC7B,SAAS,oBAAoB,wBAAwB;AACrD,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,WAAW,iBAAiB,qBAAqB;AAC1D,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAC5B,SAAS,SAAS,gBAAgB;AAClC,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAChC,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,SAAS,cAAc;AACvB,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,OAAO,iBAAiB;AAIxB,MAAM,uBAAN,MAAM,qBAAmD;AAAA,EAAzD;AACE,SAAQ,QAAgD,CAAC;AACzD,SAAQ,gBAA0C;AAAA,MAChD,WAAW;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA;AAAA,EAEA,KAAK,MAAS,UAA0B;AACtC,SAAK,MAAM,KAAK,EAAE,MAAM,SAAS,CAAC;AAClC,SAAK,MAAM;AAAA,MACT,CAAC,GAAG,MAAM,KAAK,cAAc,EAAE,QAAQ,IAAI,KAAK,cAAc,EAAE,QAAQ;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,MAAqB;AACnB,WAAO,KAAK,MAAM,MAAM,GAAG;AAAA,EAC7B;AAAA,EAEA,OAAsB;AACpB,WAAO,KAAK,MAAM,CAAC,GAAG;AAAA,EACxB;AAAA,EAEA,OAAe;AACb,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,UAAmB;AACjB,WAAO,KAAK,MAAM,WAAW;AAAA,EAC/B;AACF;AAhCyD;AAAzD,IAAM,sBAAN;AAkCA,MAAM,kBAAN,MAAM,gBAA4C;AAAA,EAAlD;AACE,SAAQ,cAAc,IAAI,oBAA4B;AACtD,SAAQ,iBAAiB,oBAAI,IAAY;AACzC,SAAQ,cAAc;AACtB,SAAQ,YAAY;AACpB,SAAQ,kBAA4B;AACpC,SAAQ,kBAAkB;AAAA;AAAA,EAE1B,SAAS,QAAgB,WAAqB,UAAgB;AAC5D,WAAO,KAAK,UAAU,KAAK,iBAAiB;AAC5C,WAAO,WAAW;AAClB,WAAO,YAAY,YAAY,IAAI;AAEnC,QAAI,aAAa,aAAa;AAC5B,WAAK,YAAY,MAAM;AAAA,IACzB,OAAO;AACL,WAAK,YAAY,KAAK,QAAQ,QAAQ;AACtC,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,aAAa,SAAyB;AACpC,YAAQ,QAAQ,CAAC,WAAW,KAAK,eAAe,IAAI,MAAM,CAAC;AAC3D,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,UAAU,UAA2B;AACnC,UAAM,YAAY,YAAY,IAAI;AAClC,UAAM,mBAAmB,KAAK;AAE9B,WACE,CAAC,KAAK,YAAY,QAAQ,KAC1B,YAAY,IAAI,IAAI,YAAY,UAChC;AACA,YAAM,SAAS,KAAK,YAAY,IAAI;AACpC,UAAI,QAAQ;AAEV,YAAI,KAAK,YAAY,KAAK,OAAO,aAAa,aAAa;AAEzD,eAAK,YAAY,KAAK,QAAQ,OAAO,QAAQ;AAC7C;AAAA,QACF;AAEA,aAAK,YAAY,MAAM;AAAA,MACzB;AAAA,IACF;AAEA,SAAK,kBAAkB;AACvB,WAAO,KAAK,YAAY,QAAQ;AAAA,EAClC;AAAA,EAEA,QAAc;AACZ,QAAI,KAAK,UAAW;AAEpB,SAAK,YAAY;AAEjB,QAAI;AAEF,aAAO,CAAC,KAAK,YAAY,QAAQ,GAAG;AAClC,cAAM,SAAS,KAAK,YAAY,KAAK;AACrC,YAAI,UAAU,OAAO,aAAa,aAAa;AAC7C,eAAK,YAAY,KAAK,YAAY,IAAI,CAAE;AAAA,QAC1C,OAAO;AACL;AAAA,QACF;AAAA,MACF;AAGA,WAAK,eAAe,QAAQ,CAAC,WAAW,KAAK,YAAY,MAAM,CAAC;AAChE,WAAK,eAAe,MAAM;AAAA,IAC5B,UAAE;AACA,WAAK,YAAY;AACjB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEQ,YAAY,QAAsB;AACxC,UAAM,mBAAmB,KAAK;AAC9B,SAAK,kBAAkB,OAAO;AAE9B,QAAI;AACF,aAAO,SAAS;AAAA,IAClB,SAAS,OAAO;AACd,cAAQ,MAAM,kCAAkC,KAAK;AACrD,uBAAiB,KAAc;AAAA,IACjC,UAAE;AACA,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA,EAEQ,eAAqB;AAC3B,QAAI,KAAK,YAAa;AAEtB,SAAK,cAAc;AAGnB,UAAM,aAAa,KAAK,YAAY,KAAK;AACzC,QAAI,YAAY;AACd,UAAI,WAAW,aAAa,QAAQ;AAElC,8BAAsB,MAAM,KAAK,SAAS,KAAK,CAAC;AAAA,MAClD,OAAO;AAEL,YAAI,yBAAyB,QAAQ;AACnC,8BAAoB,CAAC,aAAa;AAChC,iBAAK,SAAS,SAAS,cAAc,CAAC;AAAA,UACxC,CAAC;AAAA,QACH,OAAO;AAEL,qBAAW,MAAM,KAAK,SAAS,CAAC,GAAG,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,SAAS,UAAwB;AACvC,UAAM,cAAc,CAAC,KAAK,UAAU,QAAQ;AAE5C,QAAI,aAAa;AAEf,WAAK,cAAc;AACnB,WAAK,aAAa;AAAA,IACpB,OAAO;AACL,WAAK,MAAM;AAAA,IACb;AAAA,EACF;AAAA,EAEA,qBAA+B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,cAAuB;AACrB,UAAM,aAAa,KAAK,YAAY,KAAK;AACzC,QAAI,CAAC,WAAY,QAAO;AAExB,UAAM,uBAAuB,KAAK,iBAAiB,KAAK,eAAe;AACvE,UAAM,oBAAoB,KAAK,iBAAiB,WAAW,QAAQ;AAEnE,WAAO,oBAAoB;AAAA,EAC7B;AAAA,EAEQ,iBAAiB,UAA4B;AACnD,UAAM,SAAS,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,EAAE;AACnE,WAAO,OAAO,QAAQ;AAAA,EACxB;AACF;AAlJkD;AAAlD,IAAM,iBAAN;AAqJA,MAAM,YAAY,IAAI,eAAe;AAIrC,MAAM,iBAAN,MAAM,eAAc;AAAA,EAApB;AACE,SAAQ,qBAAwC;AAChD,SAAQ,iBAAoC;AAC5C,SAAQ,cAAiC;AACzC,SAAQ,YAA0B,CAAC;AAAA;AAAA,EAEnC,aAAa,OAAyB;AACpC,SAAK,qBAAqB;AAAA,MACxB,GAAG;AAAA,MACH,WAAW,KAAK;AAAA,IAClB;AACA,SAAK,iBAAiB,KAAK;AAC3B,SAAK,YAAY,CAAC;AAElB,cAAU;AAAA,MACR;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,UAAU;AAAA,QACV,UAAU,6BAAM,KAAK,SAAS,CAAC,GAArB;AAAA,QACV,WAAW,YAAY,IAAI;AAAA,MAC7B;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS,UAAwB;AAC/B,UAAM,YAAY,YAAY,IAAI;AAElC,WAAO,KAAK,kBAAkB,YAAY,IAAI,IAAI,YAAY,UAAU;AACtE,WAAK,iBAAiB,KAAK,kBAAkB,KAAK,cAAc;AAAA,IAClE;AAEA,QAAI,CAAC,KAAK,kBAAkB,KAAK,oBAAoB;AAEnD,WAAK,WAAW;AAAA,IAClB,WAAW,KAAK,gBAAgB;AAE9B,gBAAU;AAAA,QACR;AAAA,UACE,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,UAAU;AAAA,UACV,UAAU,6BAAM,KAAK,SAAS,CAAC,GAArB;AAAA,UACV,WAAW,YAAY,IAAI;AAAA,QAC7B;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB,OAAsC;AAEtD,SAAK,kBAAkB,OAAO,MAAM,OAAO,YAAY,CAAC,CAAC;AAGzD,QAAI,MAAM,OAAO;AACf,aAAO,MAAM;AAAA,IACf;AAEA,QAAI,YAA+B;AACnC,WAAO,WAAW;AAChB,UAAI,UAAU,SAAS;AACrB,eAAO,UAAU;AAAA,MACnB;AACA,kBAAY,UAAU;AAAA,IACxB;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,kBAAkB,UAAsB,UAAuB;AACrE,QAAI,QAAQ;AACZ,QAAI,WAAW,SAAS,WAAW;AACnC,QAAI,cAAiC;AAErC,WAAO,QAAQ,SAAS,UAAU,YAAY,MAAM;AAClD,YAAM,UAAU,SAAS,KAAK;AAC9B,UAAI,WAA8B;AAElC,YAAM,WAAW,YAAY,WAAW,QAAQ,SAAS,SAAS;AAElE,UAAI,YAAY,UAAU;AAExB,mBAAW;AAAA,UACT,MAAM,SAAS;AAAA,UACf,OAAO,QAAQ;AAAA,UACf,KAAK,QAAQ;AAAA,UACb,UAAU,SAAS;AAAA,UACnB,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,OAAO;AAAA,UACP,SAAS;AAAA,UACT,WAAW;AAAA,QACb;AAAA,MACF;AAEA,UAAI,WAAW,CAAC,UAAU;AAExB,mBAAW;AAAA,UACT,MAAM,QAAQ;AAAA,UACd,OAAO,QAAQ;AAAA,UACf,KAAK,QAAQ;AAAA,UACb,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,OAAO;AAAA,UACP,SAAS;AAAA,UACT,WAAW;AAAA,QACb;AAAA,MACF;AAEA,UAAI,YAAY,CAAC,UAAU;AAEzB,iBAAS,YAAY;AACrB,aAAK,UAAU,KAAK,QAAQ;AAAA,MAC9B;AAEA,UAAI,UAAU;AACZ,mBAAW,SAAS;AAAA,MACtB;AAEA,UAAI,UAAU,GAAG;AACf,iBAAS,QAAQ;AAAA,MACnB,WAAW,YAAY,aAAa;AAClC,oBAAY,UAAU;AAAA,MACxB;AAEA,oBAAc;AACd;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAmB;AACzB,SAAK,UAAU,QAAQ,CAAC,UAAU,KAAK,WAAW,KAAK,CAAC;AACxD,QAAI,KAAK,oBAAoB,OAAO;AAClC,WAAK,WAAW,KAAK,mBAAmB,KAAK;AAAA,IAC/C;AACA,SAAK,cAAc,KAAK;AACxB,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEQ,WAAW,OAAgC;AACjD,QAAI,CAAC,MAAO;AAEZ,QAAI,iBAAiB,MAAM;AAC3B,WAAO,CAAC,gBAAgB,UAAU;AAChC,uBAAiB,gBAAgB,UAAU;AAAA,IAC7C;AAEA,UAAM,YAAY,gBAAgB;AAElC,QAAI,MAAM,cAAc,eAAe,MAAM,YAAY,WAAW;AAClE,gBAAU,YAAY,MAAM,QAAQ;AAAA,IACtC,WAAW,MAAM,cAAc,YAAY,MAAM,UAAU;AAEzD,WAAK;AAAA,QACH,MAAM;AAAA,QACN,MAAM,WAAW,SAAS,CAAC;AAAA,QAC3B,MAAM;AAAA,MACR;AAAA,IACF,WAAW,MAAM,cAAc,cAAc,WAAW;AACtD,WAAK,eAAe,OAAO,SAAS;AAAA,IACtC;AAEA,SAAK,WAAW,MAAM,KAAK;AAC3B,SAAK,WAAW,MAAM,OAAO;AAAA,EAC/B;AAAA,EAEQ,eAAe,OAAmB,WAAuB;AAC/D,QAAI,MAAM,UAAU;AAClB,gBAAU,YAAY,MAAM,QAAQ;AAAA,IACtC,WAAW,MAAM,OAAO;AACtB,WAAK,eAAe,MAAM,OAAO,SAAS;AAAA,IAC5C;AAAA,EACF;AAAA,EAEQ,UAAU,KAAc,WAAgB,WAAsB;AAEpE,WAAO,KAAK,SAAS,EAClB,OAAO,CAAC,QAAQ,QAAQ,cAAc,EAAE,OAAO,UAAU,EACzD,QAAQ,CAAC,SAAS;AACjB,UAAI,KAAK,WAAW,IAAI,GAAG;AACzB,cAAM,YAAY,KAAK,YAAY,EAAE,UAAU,CAAC;AAChD,QAAC,IAAY,oBAAoB,WAAW,UAAU,IAAI,CAAC;AAAA,MAC7D,OAAO;AACL,QAAC,IAAY,IAAI,IAAI;AAAA,MACvB;AAAA,IACF,CAAC;AAGH,WAAO,KAAK,SAAS,EAClB,OAAO,CAAC,QAAQ,QAAQ,UAAU,EAClC,QAAQ,CAAC,SAAS;AACjB,UAAI,UAAU,IAAI,MAAM,UAAU,IAAI,GAAG;AACvC,YAAI,KAAK,WAAW,IAAI,GAAG;AACzB,gBAAM,YAAY,KAAK,YAAY,EAAE,UAAU,CAAC;AAChD,UAAC,IAAY,iBAAiB,WAAW,UAAU,IAAI,CAAC;AAAA,QAC1D,OAAO;AACL,UAAC,IAAY,IAAI,IAAI,UAAU,IAAI;AAAA,QACrC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACL;AACF;AAhNoB;AAApB,IAAM,gBAAN;AAmNA,MAAM,gBAAgB,IAAI,cAAc;AAGjC,SAAS,mBAAkC;AAChD,SAAO;AACT;AAFgB;AAchB,MAAM,qBAAN,MAAM,mBAAkB;AAAA,EAAxB;AACE,SAAQ,OAAO,oBAAI,IAAuB;AAC1C,SAAQ,gBAAgB,oBAAI,IAAiB;AAC7C,SAAQ,gBAAqB,CAAC;AAAA;AAAA,EAE9B,OAAU,UAAgC;AACxC,UAAM,cAAc,SAAS,SAAS;AAEtC,QAAI,KAAK,cAAc,IAAI,WAAW,GAAG;AACvC,aAAO,KAAK,cAAc,IAAI,WAAW;AAAA,IAC3C;AAEA,UAAM,SAAS,SAAS,KAAK,SAAS,CAAC;AACvC,SAAK,cAAc,IAAI,aAAa,MAAM;AAE1C,WAAO;AAAA,EACT;AAAA,EAEA,iBAAoB,MAAc,QAAW,UAAuB;AAClE,UAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,SAAK,IAAI,MAAM,MAAM;AAErB,WAAO;AAAA,MACL,QAAQ,6BAAM,KAAK,cAAc,IAAI,GAA7B;AAAA,MACR,UAAU,6BAAM;AACd,aAAK,IAAI,MAAM,QAAQ;AACvB,mBAAW;AAAA,MACb,GAHU;AAAA,IAIZ;AAAA,EACF;AAAA,EAEQ,WAAgB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,IAAI,MAAmB;AAC7B,WAAO,KAAK,KAAK,IAAI,IAAI,GAAG;AAAA,EAC9B;AAAA,EAEQ,IAAI,MAAc,OAAkB;AAC1C,UAAM,OAAO,KAAK,KAAK,IAAI,IAAI;AAC/B,QAAI,MAAM;AACR,WAAK,QAAQ;AACb,WAAK,gBAAgB,EAAE,GAAG,KAAK,eAAe,CAAC,IAAI,GAAG,MAAM;AAC5D,WAAK,oBAAoB;AAAA,IAC3B;AAAA,EACF;AAAA,EAEQ,cAAc,MAAoB;AAGxC,YAAQ;AAAA,MACN,6DAA6D,IAAI;AAAA,IACnE;AAAA,EACF;AAAA,EAEQ,sBAA4B;AAClC,SAAK,cAAc,MAAM;AAAA,EAC3B;AACF;AA3DwB;AAAxB,IAAM,oBAAN;AA8DA,MAAM,oBAAoB,IAAI,kBAAkB;AAGzC,SAAS,uBAA0C;AACxD,SAAO;AACT;AAFgB;AAKT,MAAM,OAAO,OAAO,MAAM;AAC1B,MAAM,WAAW,OAAO,UAAU;AAIzC,MAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,MAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,MAAM,uBAAuB,oBAAI,IAAI;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,MAAM,sBAAsB,oBAAI,IAAI;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,MAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAiBM,SAAS,gBAAgB,MAAkB;AAChD,MAAI,QAAQ,QAAQ,SAAS,OAAO;AAClC,WAAO,EAAE,MAAM,MAAM,OAAO,EAAE,WAAW,GAAG,GAAG,KAAK,KAAK;AAAA,EAC3D;AAEA,MAAI,QAAQ,OAAO,SAAS,YAAY,KAAK,aAAa;AACxD,UAAM,QAAe;AAAA,MACnB,MAAM;AAAA,MACN,OAAO,EAAE,WAAW,OAAO,KAAK,KAAK,EAAE;AAAA,MACvC,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,UAAU;AAAA,IACZ;AAEA,UAAM,WAAW,KAAK,UAAU,MAAM;AACpC,UAAI,MAAM,UAAU;AAClB,QAAC,MAAM,SAAkB,YAAY,OAAO,KAAK,KAAK;AAAA,MACxD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,MAAM,MAAM,OAAO,EAAE,WAAW,OAAO,IAAI,EAAE,GAAG,KAAK,KAAK;AACrE;AAxBgB;AA+CT,SAAS,EACd,MACA,QAA2B,SACxB,UACI;AACP,QAAM,kBACJ,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,IAC9D,CAAC,IACD;AAEN,QAAM,eAAwB,CAAC;AAE/B,aAAW,KAAK,SAAS,KAAK,QAAQ,GAAG;AACvC,QAAI,KAAK,QAAQ,MAAM,MAAO;AAE9B,QAAI,KAAK,OAAO,MAAM,YAAY,iBAAiB,GAAG;AACpD,mBAAa,KAAK,gBAAgB,CAAC,CAAC;AAAA,IACtC,WAAW,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AACzD,mBAAa,KAAK,gBAAgB,CAAC,CAAC;AAAA,IACtC,WAAW,KAAK,OAAO,MAAM,YAAY,UAAU,GAAG;AACpD,UAAI,EAAE,SAAS,UAAU;AACvB,cAAM,oBAAoB,EAAE,MAAM,YAAY,CAAC,GAAG;AAAA,UAChD,CAAC,MAAW,KAAK,QAAQ,MAAM;AAAA,QACjC;AACA,qBAAa,KAAK,GAAG,gBAAgB;AAAA,MACvC,OAAO;AACL,qBAAa,KAAK,CAAU;AAAA,MAC9B;AAAA,IACF,OAAO;AACL,mBAAa,KAAK,gBAAgB,OAAO,CAAC,CAAC,CAAC;AAAA,IAC9C;AAAA,EACF;AAEA,QAAM,MAAM,gBAAgB,OAAO;AACnC,MAAI,QAAQ,OAAW,QAAO,gBAAgB;AAE9C,MAAI,SAAS,UAAU;AACrB,WAAO,EAAE,MAAM,UAAU,OAAO,EAAE,UAAU,aAAa,GAAG,IAAI;AAAA,EAClE;AAEA,SAAO;AAAA,IACL;AAAA,IACA,OAAO,EAAE,GAAG,iBAAiB,UAAU,aAAa;AAAA,IACpD;AAAA,EACF;AACF;AA7CgB;AA+ChB,EAAE,WAAW,CAAC,EAAE,SAAS,MAA8B,YAAY,CAAC;AAE7D,MAAM,QAAQ;AACrB,MAAM,WAAW,EAAE;AAInB,MAAM,qBAAqB,oBAAI,QAAiC;AAChE,IAAI,eAA6C;AACjD,MAAM,mBAAmB,oBAAI,QAA0B;AAWvD,SAAS,eAAe,OAAgC;AACtD,MAAI,MAAM,mBAAmB,IAAI,KAAK;AAEtC,MAAI,CAAC,KAAK;AACR,UAAM;AAAA,MACJ,OAAO,CAAC;AAAA,MACR,WAAW;AAAA,MACX,SAAS,CAAC;AAAA,MACV,UAAU,CAAC;AAAA,MACX,QAAQ;AAAA,MACR,iBAAiB,oBAAI,IAAI;AAAA,MACzB,gBAAgB,oBAAI,IAAI;AAAA,MACxB,uBAAuB,CAAC;AAAA,MACxB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,YAAY;AAAA,MACZ,gBAAgB;AAAA,IAClB;AACA,uBAAmB,IAAI,OAAO,GAAG;AAAA,EACnC;AAEA,MAAI,YAAY;AAChB,MAAI,gBAAgB,MAAM;AAC1B,mBAAiB,GAAG;AACpB,MAAI;AAEJ,SAAO;AACT;AA5BS;AAoCT,SAAS,eAAqB;AAC5B,QAAM,MAAM;AACZ,MAAI,CAAC,IAAK;AAEV,MAAI,gBAAgB,QAAQ,CAAC,UAAU;AACrC,QAAI,CAAC,IAAI,eAAe,IAAI,KAAK,GAAG;AAClC,UAAI,CAAC,IAAI,UAAU;AACjB,YAAI,kBAAyC;AAE7C,YAAI,WAAW,gCAAS,WAAW;AACjC,cAAI,IAAI,kBAAkB,iBAAiB,IAAI,GAAG,GAAG;AACnD;AAAA,UACF;AAEA,cAAI,iBAAiB;AACnB,yBAAa,eAAe;AAAA,UAC9B;AAEA,4BAAkB,WAAW,YAAY;AACvC,gBAAI,IAAI,kBAAkB,CAAC,IAAI,WAAY;AAE3C,gBAAI,iBAAiB;AACrB,6BAAiB,IAAI,GAAG;AAExB,gBAAI;AACF,iCAAmB;AAEnB,oBAAM,QAAQ,IAAI;AAClB,oBAAM,cAAc,MAAM;AAE1B,6BAAe,KAAK;AACpB,oBAAM,SAAS,IAAI,UAAU,MAAM,KAAK;AACxC,oBAAM,cACJ,kBAAkB,UAAU,MAAM,SAAS;AAC7C,2BAAa;AAEb,oBAAM,YAAY;AAElB,oBAAM,UAAU,MAAM;AACtB,kBAAI,WAAW,QAAQ,YAAY;AACjC,sBAAM,MAAM,QAAQ,YAAY,aAAa,WAAW;AACxD,oBAAI,eAAe,OAAO,gBAAgB,UAAU;AAClD,wBAAM,WAAY,YAAsB;AAAA,gBAC1C;AACA,oBAAI,iBAAiB;AACrB,iCAAiB,OAAO,GAAG;AAAA,cAC7B,WAAW,cAAc;AACvB,sBAAM,aAAa;AACnB,oBAAI,iBAAiB;AACrB,iCAAiB,OAAO,GAAG;AAAA,cAC7B,OAAO;AACL,oBAAI,iBAAiB;AACrB,iCAAiB,OAAO,GAAG;AAAA,cAC7B;AAAA,YACF,SAAS,KAAK;AACZ,sBAAQ,MAAM,qCAAqC,GAAG;AACtD,+BAAiB,GAAY;AAC7B,kBAAI,iBAAiB;AACrB,+BAAiB,OAAO,GAAG;AAAA,YAC7B;AAEA,8BAAkB;AAAA,UACpB,GAAG,CAAC;AAAA,QACN,GAtDe;AAAA,MAuDjB;AAEA,YAAM,QAAQ,MAAM,UAAU,MAAM;AAClC,YAAI,IAAI,YAAY,IAAI,YAAY;AAClC,cAAI,OAAO,mBAAmB,YAAY;AACxC,2BAAe,MAAM,IAAI,SAAU,CAAC;AAAA,UACtC,OAAO;AACL,uBAAW,IAAI,UAAU,CAAC;AAAA,UAC5B;AAAA,QACF;AAAA,MACF,CAAC;AAED,UAAI,eAAe,IAAI,KAAK;AAC5B,UAAI,sBAAsB,KAAK,KAAK;AAAA,IACtC;AAAA,EACF,CAAC;AAED,mBAAiB,IAAI;AACvB;AAlFS;AAkGF,SAAS,gBACd,WACA,QAAa,CAAC,GACP;AACP,QAAM,QAAe,EAAE,MAAM,WAAW,OAAO,KAAK,KAAK;AACzD,QAAM,MAAM,eAAe,KAAK;AAChC,MAAI,YAAY;AAEhB,MAAI,CAAC,IAAI,UAAU;AACjB,QAAI,kBAAyC;AAE7C,QAAI,WAAW,MAAM;AACnB,UAAI,IAAI,kBAAkB,iBAAiB,IAAI,GAAG,EAAG;AAErD,UAAI,iBAAiB;AACnB,qBAAa,eAAe;AAAA,MAC9B;AAEA,wBAAkB,WAAW,YAAY;AACvC,YAAI,IAAI,kBAAkB,CAAC,IAAI,WAAY;AAE3C,YAAI,iBAAiB;AACrB,yBAAiB,IAAI,GAAG;AAExB,YAAI;AACF,6BAAmB;AAEnB,gBAAMA,SAAQ,IAAI;AAClB,gBAAM,cAAcA,OAAM;AAE1B,yBAAeA,MAAK;AACpB,gBAAM,SAAS,IAAI,UAAUA,OAAM,KAAK;AACxC,gBAAM,cAAc,kBAAkB,UAAU,MAAM,SAAS;AAC/D,uBAAa;AAEb,UAAAA,OAAM,YAAY;AAElB,gBAAM,UAAUA,OAAM;AACtB,cAAI,WAAW,QAAQ,YAAY;AACjC,kBAAM,MAAM,QAAQ,YAAY,aAAa,WAAW;AACxD,gBAAI,eAAe,OAAO,gBAAgB,UAAU;AAClD,cAAAA,OAAM,WAAY,YAAsB;AAAA,YAC1C;AACA,gBAAI,iBAAiB;AACrB,6BAAiB,OAAO,GAAG;AAAA,UAC7B,WAAW,cAAc;AACvB,kBAAM,aAAa;AACnB,gBAAI,iBAAiB;AACrB,6BAAiB,OAAO,GAAG;AAAA,UAC7B,OAAO;AACL,gBAAI,iBAAiB;AACrB,6BAAiB,OAAO,GAAG;AAAA,UAC7B;AAAA,QACF,SAAS,KAAK;AACZ,kBAAQ,MAAM,qCAAqC,GAAG;AACtD,2BAAiB,GAAY;AAC7B,cAAI,iBAAiB;AACrB,2BAAiB,OAAO,GAAG;AAAA,QAC7B;AAEA,0BAAkB;AAAA,MACpB,GAAG,CAAC;AAAA,IACN;AAAA,EACF;AAEA,MAAI;AACF,uBAAmB;AACnB,UAAM,SAAS,UAAU,KAAK;AAG9B,QAAI,kBAAkB,SAAS;AAE7B,YAAM,mBAAmB,EAAE,OAAO,MAAM,YAAY;AACpD,UAAI,SAAS;AACb,YAAM,YAAY;AAClB,UAAI,aAAa;AAEjB,aACG,KAAK,CAAC,kBAAkB;AACvB,cAAM,YAAY;AAClB,YAAI,IAAI,UAAU;AAChB,cAAI,SAAS;AAAA,QACf;AAAA,MACF,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,gBAAQ,MAAM,kCAAkC,GAAG;AACnD,yBAAiB,GAAY;AAAA,MAC/B,CAAC;AAEH,aAAO;AAAA,IACT;AAEA,QAAI,SAAS;AACb,UAAM,YAAY;AAClB,QAAI,aAAa;AACjB,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,YAAQ,MAAM,mCAAmC,GAAG;AACpD,qBAAiB,GAAY;AAC7B,WAAO;AAAA,MACL;AAAA,MACA,EAAE,OAAO,YAAY;AAAA,MACrB,UAAU,qBAAqB,GAAG,CAAC;AAAA,IACrC;AAAA,EACF,UAAE;AACA,iBAAa;AAAA,EACf;AACF;AA3GgB;AA+GhB,MAAM,kBAAkB,oBAAI,IAA6C;AACzE,IAAI,iBAAiB;AAUrB,SAAS,gBAAgB,WAAyB;AAChD,MAAI,gBAAgB,IAAI,SAAS,EAAG;AAEpC,kBAAgB,IAAI,WAAW,oBAAI,IAAI,CAAC;AAExC,WAAS,iBAAiB,WAAW,CAAC,MAAa;AACjD,QAAI,MAAmB,EAAE;AAEzB,WAAO,OAAO,QAAQ,UAAU;AAC9B,UAAI,IAAI,aAAa,EAAG;AAExB,YAAM,KAAK;AACX,YAAM,MAAM,GAAG;AACf,YAAM,MAAM,gBAAgB,IAAI,SAAS;AAEzC,UAAI,OAAO,QAAQ,KAAK,IAAI,GAAG,GAAG;AAChC,YAAI,IAAI,GAAG,EAAG,CAAC;AACf;AAAA,MACF;AAEA,YAAO,IAAgB;AAAA,IACzB;AAAA,EACF,CAAC;AACH;AAvBS;AAmCT,SAAS,yBACP,IACA,WACA,IACM;AACN,MAAI,CAAC,MAAM,GAAG,aAAa,EAAG;AAE9B,QAAM,QAAQ;AACd,QAAM,MAAM,MAAM,cAAc,MAAM,YAAY,EAAE;AAEpD,kBAAgB,SAAS;AAEzB,kBAAgB,IAAI,SAAS,EAAG,IAAI,KAAK,CAAC,MAAa;AACrD,QAAI;AACF,SAAG,KAAK,IAAI,CAAC;AAAA,IACf,SAAS,KAAK;AACZ,cAAQ,MAAM,gCAAgC,GAAG;AACjD,uBAAiB,GAAY;AAAA,IAC/B;AAAA,EACF,CAAC;AACH;AApBS;AA2BT,SAAS,aAAa,MAAsB;AAC1C,MAAI,OAAO,SAAS,SAAU,QAAO,OAAO,IAAI;AAGhD,SAAO,KACJ,QAAQ,YAAY,CAAC,UAAU;AAC9B,UAAM,YAAoC;AAAA,MACxC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,WAAO,UAAU,KAAK,KAAK;AAAA,EAC7B,CAAC,EACA,QAAQ,iBAAiB,UAAU,EACnC,QAAQ,oBAAoB,UAAU;AAC3C;AAjBS;AAsBT,SAAS,uBAAuB,OAAuB;AACrD,MAAI,OAAO,UAAU,SAAU,QAAO,OAAO,KAAK;AAElD,SAAO,MACJ,QAAQ,WAAW,CAAC,UAAU;AAC7B,UAAM,YAAoC;AAAA,MACxC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,WAAO,UAAU,KAAK,KAAK;AAAA,EAC7B,CAAC,EACA,QAAQ,iBAAiB,UAAU,EACnC,QAAQ,YAAY,UAAU;AACnC;AAfS;AAoBT,SAAS,qBAAqB,OAAoB;AAChD,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,UAAU,MAAM,WAAW,MAAM,SAAS,KAAK;AACrD,SAAO,aAAa,OAAO,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG;AACnD;AALS;AAqBT,SAAS,YAAY,IAAiB,KAAa,OAAkB;AACnE,QAAM,IAAI,IAAI,YAAY;AAE1B,MAAI,QAAQ,aAAa,QAAQ,MAAM;AACrC,QAAI,OAAO,UAAU,UAAU;AAC7B,SAAG,aAAa,SAAS,KAAK;AAAA,IAChC,WAAW,UAAU,MAAM,eAAe,MAAM,eAAe;AAC7D,SAAG,aAAa,SAAS,MAAM,KAAK;AAEpC,YAAM,QAAQ;AACd,UAAI,CAAC,MAAM,eAAgB,OAAM,iBAAiB,CAAC;AAEnD,YAAM,QAAQ,MAAM;AAAA,QAAU,MAC5B,GAAG,aAAa,SAAS,MAAM,KAAK;AAAA,MACtC;AACA,YAAM,eAAe,KAAK,KAAK;AAAA,IACjC;AACA;AAAA,EACF;AAEA,MAAI,IAAI,WAAW,IAAI,GAAG;AACxB,6BAAyB,IAAI,IAAI,MAAM,CAAC,EAAE,YAAY,GAAG,KAAK;AAC9D;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,OAAO,UAAU,UAAU;AAChD,WAAO,OAAO,GAAG,OAAO,KAAK;AAC7B;AAAA,EACF;AAGA,MAAI,qBAAqB,IAAI,GAAG,GAAG;AACjC,YAAQ;AAAA,MACN,qBAAqB,GAAG;AAAA,IAC1B;AACA;AAAA,EACF;AAGA,OACG,QAAQ,UACP,QAAQ,SACR,QAAQ,YACR,QAAQ,iBACV,OAAO,UAAU,UACjB;AACA,UAAM,kBAAkB,MAAM,KAAK,EAAE,YAAY;AAGjD,eAAW,YAAY,qBAAqB;AAC1C,UAAI,gBAAgB,WAAW,QAAQ,GAAG;AACxC,gBAAQ;AAAA,UACN,qBAAqB,QAAQ,wBAAwB,GAAG;AAAA,QAC1D;AACA;AAAA,MACF;AAAA,IACF;AAGA,QAAI,gBAAgB,SAAS,GAAG,GAAG;AACjC,YAAM,WAAW,gBAAgB,MAAM,GAAG,EAAE,CAAC,IAAI;AACjD,UACE,CAAC,eAAe,IAAI,QAAQ,KAC5B,CAAC,eAAe,IAAI,gBAAgB,OAAO,CAAC,CAAC,GAC7C;AACA,gBAAQ;AAAA,UACN,+BAA+B,QAAQ,0BAA0B,GAAG;AAAA,QACtE;AACA;AAAA,MACF;AAAA,IACF;AAGA,QAAI,gBAAgB,WAAW,OAAO,GAAG;AACvC,UACE,gBAAgB,SAAS,YAAY,KACrC,gBAAgB,SAAS,SAAS,GAClC;AACA,gBAAQ;AAAA,UACN,qDAAqD,GAAG;AAAA,QAC1D;AACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,IAAI,YAAY,EAAE,WAAW,IAAI,KAAK,QAAQ,QAAQ;AACxD,YAAQ;AAAA,MACN,2CAA2C,GAAG,oBAAoB,IAAI,MAAM,CAAC,CAAC;AAAA,IAChF;AACA;AAAA,EACF;AAEA,MAAI,cAAc,IAAI,CAAC,GAAG;AACxB,QAAI,OAAO;AACT,SAAG,aAAa,GAAG,EAAE;AACrB,MAAC,GAAW,CAAC,IAAI;AAAA,IACnB,OAAO;AACL,SAAG,gBAAgB,CAAC;AACpB,MAAC,GAAW,CAAC,IAAI;AAAA,IACnB;AACA;AAAA,EACF;AAEA,MAAI,eAAe,IAAI,GAAG,KAAK,CAAC,qBAAqB,IAAI,GAAG,GAAG;AAE7D,QAAI,QAAQ,iBAAiB,QAAQ,aAAa;AAChD,MAAC,GAAW,GAAG,IAAI,aAAa,SAAS,EAAE;AAAA,IAC7C,OAAO;AACL,MAAC,GAAW,GAAG,IAAI,SAAS;AAAA,IAC9B;AACA;AAAA,EACF;AAEA,MAAI,IAAI,WAAW,OAAO,KAAK,IAAI,WAAW,OAAO,GAAG;AACtD,QAAI,SAAS,QAAQ,UAAU,OAAO;AAEpC,SAAG,aAAa,KAAK,uBAAuB,OAAO,KAAK,CAAC,CAAC;AAAA,IAC5D,OAAO;AACL,SAAG,gBAAgB,GAAG;AAAA,IACxB;AACA;AAAA,EACF;AAEA,MAAI,SAAS,QAAQ,UAAU,OAAO;AACpC,OAAG,aAAa,KAAK,KAAK;AAAA,EAC5B;AACF;AAhIS;AAqJT,eAAe,UACb,OACA,WAAwB,MACT;AACf,MAAI,SAAS,MAAM;AACjB,WAAO,SAAS,eAAe,EAAE;AAAA,EACnC;AAEA,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC1D,WAAO,SAAS,eAAe,OAAO,KAAK,CAAC;AAAA,EAC9C;AAEA,MAAI,iBAAiB,SAAS;AAC5B,UAAM,cAAc,SAAS,eAAe,YAAY;AAExD,UACG,KAAK,OAAO,aAAa;AACxB,UAAI;AACF,cAAM,MAAM,MAAM,UAAU,QAAQ;AACpC,YAAI,YAAY,YAAY;AAC1B,sBAAY,YAAY,GAAG;AAAA,QAC7B;AAAA,MACF,SAAS,KAAK;AACZ,gBAAQ,MAAM,kCAAkC,GAAG;AACnD,YAAI,YAAY,YAAY;AAC1B,sBAAY,cAAc;AAAA,QAC5B;AAAA,MACF;AAAA,IACF,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,cAAQ,MAAM,0CAA0C,GAAG;AAC3D,UAAI,YAAY,YAAY;AAC1B,oBAAY,cAAc;AAAA,MAC5B;AAAA,IACF,CAAC;AAEH,WAAO;AAAA,EACT;AAEA,QAAM,WAAW;AAEjB,MAAI,SAAS,SAAS,MAAM;AAC1B,UAAM,WACJ,YAAY,SAAS,eAAe,SAAS,MAAM,aAAa,EAAE;AACpE,aAAS,WAAW;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,SAAS,UAAU;AAC9B,UAAM,OAAO,SAAS,uBAAuB;AAC7C,eAAW,SAAS,SAAS,OAAO,YAAY,CAAC,GAAG;AAClD,WAAK,YAAY,MAAM,UAAU,KAAK,CAAC;AAAA,IACzC;AACA,aAAS,WAAW;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAAS,SAAS,YAAY;AACvC,UAAM,WAAW,MAAM;AAAA,MACrB,SAAS;AAAA,MACT,SAAS;AAAA,MACT;AAAA,IACF;AACA,aAAS,YAAY;AACrB,UAAM,MAAM,MAAM,UAAU,QAAQ;AACpC,aAAS,WAAW;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,KAAK,YAAY,SAAS,cAAc,SAAS,IAAc;AAErE,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,SAAS,SAAS,CAAC,CAAC,GAAG;AACzD,QAAI,MAAM,YAAY;AACpB,kBAAY,IAAmB,GAAG,CAAC;AAAA,IACrC;AAAA,EACF;AAEA,aAAW,SAAS,SAAS,OAAO,YAAY,CAAC,GAAG;AAClD,OAAG,YAAY,MAAM,UAAU,KAAK,CAAC;AAAA,EACvC;AAEA,WAAS,WAAW;AACpB,SAAO;AACT;AAnFe;AAkGf,eAAe,0BACb,WACA,OACA,OACuB;AACvB,QAAM,MAAM,eAAe,KAAK;AAChC,qBAAmB;AAEnB,MAAI;AACF,UAAM,SAAS,MAAM,UAAU,KAAK;AACpC,QAAI,SAAS;AACb,UAAM,YAAY;AAClB,QAAI,aAAa;AACjB,iBAAa;AACb,WAAO,UAAU;AAAA,EACnB,SAAS,KAAK;AACZ,YAAQ,MAAM,+BAA+B,GAAG;AAChD,qBAAiB,GAAY;AAC7B,QAAI,aAAa;AACjB,iBAAa;AACb,WAAO;AAAA,MACL;AAAA,MACA,EAAE,OAAO,YAAY;AAAA,MACrB,UAAU,qBAAqB,GAAG,CAAC;AAAA,IACrC;AAAA,EACF;AACF;AA1Be;AA+Cf,eAAsB,MACpB,QACA,UACA,UACe;AACf,MAAI,EAAE,kBAAkB,OAAO;AAC7B,YAAQ;AAAA,MACN;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,CAAC,YAAY,CAAC,SAAU;AAE5B,MAAI,CAAC,YAAY,UAAU;AACzB,UAAM,UAAW,SAAmB;AACpC,QAAI,SAAS,YAAY;AACvB,cAAQ,WAAW,YAAY,OAAO;AAAA,IACxC;AACA,iBAAa,QAAiB;AAC9B;AAAA,EACF;AAEA,MAAI,YAAY,CAAC,UAAU;AACzB,UAAM,SAAS,MAAM,UAAU,QAAQ;AACvC,QAAI,kBAAkB,MAAM;AAC1B,aAAO,YAAY,MAAM;AAAA,IAC3B;AACA;AAAA,EACF;AAEA,QAAM,iBACJ,OAAO,aAAa,YAAY,OAAO,aAAa;AACtD,QAAM,iBACJ,OAAO,aAAa,YAAY,OAAO,aAAa;AAEtD,MAAI,kBAAkB,gBAAgB;AACpC,QACE,kBACA,kBACA,OAAO,QAAQ,MAAM,OAAO,QAAQ;AAEpC;AAEF,UAAM,SAAS,MAAM,UAAU,QAAQ;AACvC,UAAM,SAAU,UAAoB,YAAY,OAAO;AAEvD,QAAI,QAAQ,cAAc,kBAAkB,MAAM;AAChD,aAAO,WAAW,aAAa,QAAQ,MAAM;AAAA,IAC/C;AAEA,QAAI,YAAY,OAAO,aAAa,UAAU;AAC5C,mBAAa,QAAiB;AAAA,IAChC;AACA;AAAA,EACF;AAEA,QAAM,QAAQ;AACd,QAAM,QAAQ;AAEd,QAAM,UAAU,MAAM;AACtB,QAAM,UAAU,MAAM;AAEtB,MAAI,YAAY,SAAS;AACvB,UAAM,SAAS,MAAM,UAAU,KAAK;AACpC,UAAM,SAAS,MAAM;AAErB,QAAI,QAAQ,cAAc,kBAAkB,MAAM;AAChD,aAAO,WAAW,aAAa,QAAQ,MAAM;AAAA,IAC/C;AAEA,iBAAa,KAAK;AAClB;AAAA,EACF;AAEA,MAAI,YAAY,MAAM;AACpB,UAAM,SAAS,MAAM;AACrB,UAAM,UAAU,MAAM,MAAM,aAAa;AACzC,UAAM,UAAU,MAAM,MAAM,aAAa;AAEzC,QAAI,YAAY,WAAW,QAAQ;AACjC,MAAC,OAAgB,YAAY;AAAA,IAC/B;AAEA,UAAM,WAAW;AACjB;AAAA,EACF;AAEA,MAAI,YAAY,UAAU;AACxB,UAAMC,eAAc,MAAM,OAAO,YAAY,CAAC;AAC9C,UAAMC,eAAc,MAAM,OAAO,YAAY,CAAC;AAC9C,UAAM,cAAc,QAAQD,cAAaC,YAAW;AACpD,UAAM,WAAW,MAAM;AACvB;AAAA,EACF;AAEA,MAAI,OAAO,YAAY,YAAY;AACjC,UAAM,SAAS,mBAAmB,IAAI,KAAK;AAE3C,QAAI,UAAU,YAAY,SAAS;AACjC,yBAAmB,OAAO,KAAK;AAC/B,yBAAmB,IAAI,OAAO,MAAM;AAEpC,aAAO,SAAS;AAEhB,qBAAe,KAAK;AACpB,YAAM,WAAW,MAAM,OAAO,UAAU,MAAM,KAAK;AACnD,mBAAa;AAEb,YAAM,YAAY;AAElB,YAAM,cAAc,MAAM;AAC1B,YAAM,SAAS,MAAM;AAErB,UAAI,QAAQ,sBAAsB,MAAM;AACtC,cAAM,MAAM,OAAO,YAAY,UAAU,WAAW;AACpD,cAAM,WAAY,UAAoB,YAAY;AAAA,MACpD;AAAA,IACF,OAAO;AACL,YAAM,WAAW,MAAM;AAAA,QACrB;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACF;AACA,YAAM,YAAY;AAElB,YAAM,cAAc,MAAM;AAC1B,YAAM,SAAS,MAAM;AAErB,UAAI,QAAQ,sBAAsB,MAAM;AACtC,cAAM,MAAM,OAAO,YAAY,UAAU,WAAW;AACpD,cAAM,WAAY,UAAoB,YAAY;AAAA,MACpD,OAAO;AACL,cAAM,SAAS,MAAM,UAAU,QAAQ;AACvC,YAAI,UAAU,kBAAkB,MAAM;AACpC,iBAAO,YAAY,MAAM;AAAA,QAC3B;AACA,cAAM,WAAW;AAAA,MACnB;AAEA,UAAI,UAAU,YAAY,SAAS;AACjC,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AACA;AAAA,EACF;AAEA,QAAM,KAAK,MAAM;AACjB,MAAI,CAAC,MAAM,GAAG,aAAa,GAAG;AAC5B,UAAM,SAAS,MAAM,UAAU,KAAK;AACpC,QAAI,UAAU,kBAAkB,MAAM;AACpC,aAAO,YAAY,MAAM;AAAA,IAC3B;AACA,iBAAa,KAAK;AAClB;AAAA,EACF;AAEA,cAAY,IAAmB,MAAM,OAAO,MAAM,KAAK;AACvD,QAAM,WAAW;AAEjB,QAAM,cAAc,MAAM,OAAO,YAAY,CAAC;AAC9C,QAAM,cAAc,MAAM,OAAO,YAAY,CAAC;AAC9C,QAAM,cAAc,IAAI,aAAa,WAAW;AAClD;AArKsB;AAiLtB,eAAe,cACb,QACA,aACA,aACe;AACf,MAAI,EAAE,kBAAkB,MAAO;AAE/B,QAAM,UACJ,YAAY,KAAK,CAAC,MAAM,GAAG,OAAO,IAAI,KACtC,YAAY,KAAK,CAAC,MAAM,GAAG,OAAO,IAAI;AAExC,MAAI,CAAC,SAAS;AACZ,UAAM,SAAS,KAAK,IAAI,YAAY,QAAQ,YAAY,MAAM;AAE9D,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,YAAM,WAAW,YAAY,CAAC;AAC9B,YAAM,WAAW,YAAY,CAAC;AAE9B,UAAI,KAAK,YAAY,QAAQ;AAC3B,cAAM,MAAM,UAAU;AACtB,YAAI,KAAK,YAAY;AACnB,cAAI,WAAW,YAAY,GAAG;AAAA,QAChC;AACA,qBAAa,QAAQ;AAAA,MACvB,WAAW,KAAK,YAAY,QAAQ;AAClC,cAAM,SAAS,MAAM,UAAU,QAAQ;AACvC,YAAI,kBAAkB,MAAM;AAC1B,iBAAO,YAAY,MAAM;AAAA,QAC3B;AAAA,MACF,OAAO;AACL,cAAM,MAAM,QAAQ,UAAU,QAAQ;AAAA,MACxC;AAAA,IACF;AACA;AAAA,EACF;AAEA,QAAM,YAAY,oBAAI,IAA4B;AAElD,cAAY,QAAQ,CAAC,UAAU;AAC7B,QAAI,OAAO,OAAO,MAAM;AACtB,gBAAU,IAAI,MAAM,KAAK,KAAK;AAAA,IAChC;AAAA,EACF,CAAC;AAED,QAAM,YAAY,IAAI;AAAA,IACpB,YAAY,OAAO,CAAC,MAAM,GAAG,OAAO,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAI;AAAA,EAC7D;AAEA,cAAY,QAAQ,CAAC,aAAa;AAChC,QAAI,UAAU,OAAO,QAAQ,CAAC,UAAU,IAAI,SAAS,GAAG,GAAG;AACzD,YAAM,MAAM,SAAS;AACrB,UAAI,KAAK,YAAY;AACnB,YAAI,WAAW,YAAY,GAAG;AAAA,MAChC;AACA,mBAAa,QAAQ;AAAA,IACvB;AAAA,EACF,CAAC;AAED,WAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,UAAM,WAAW,YAAY,CAAC;AAC9B,UAAM,MAAM,UAAU;AAEtB,QAAI,OAAO,QAAQ,UAAU,IAAI,GAAG,GAAG;AACrC,YAAM,WAAW,UAAU,IAAI,GAAG;AAClC,YAAM,SAAS,SAAS;AACxB,YAAM,aAAa,MAAM,KAAK,OAAO,UAAU;AAC/C,YAAM,aAAa,WAAW,QAAQ,MAAmB;AACzD,YAAM,aAAa;AAEnB,UAAI,eAAe,YAAY;AAC7B,cAAM,UAAU,WAAW,UAAU,KAAK;AAC1C,YAAI,UAAU,OAAO,eAAe,QAAQ;AAC1C,iBAAO,aAAa,QAAQ,OAA2B;AAAA,QACzD;AAAA,MACF;AAEA,YAAM,MAAM,QAAQ,UAAU,QAAQ;AAAA,IACxC,OAAO;AACL,YAAM,SAAS,MAAM,UAAU,QAAQ;AACvC,UAAI,kBAAkB,MAAM;AAC1B,cAAM,aAAa,MAAM,KAAK,OAAO,UAAU;AAC/C,cAAM,UAAU,WAAW,CAAC,KAAK;AACjC,eAAO,aAAa,QAAQ,OAA2B;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AACF;AAtFe;AAwGf,SAAS,aAAa,OAA0B;AAC9C,MAAI,CAAC,MAAO;AAEZ,MAAI,MAAM,YAAY,OAAO,MAAM,aAAa,YAAY;AAC1D,QAAI;AACF,YAAM,SAAS;AAAA,IACjB,SAAS,GAAG;AACV,cAAQ,MAAM,qCAAqC,CAAC;AAAA,IACtD;AACA,UAAM,WAAW;AAAA,EACnB;AAEA,MAAI,OAAO,MAAM,SAAS,YAAY;AACpC,UAAM,MAAM,mBAAmB,IAAI,KAAK;AAExC,QAAI,KAAK;AACP,UAAI,aAAa;AAEjB,UAAI,sBAAsB,QAAQ,CAAC,MAAM;AACvC,YAAI;AACF,YAAE;AAAA,QACJ,SAAS,GAAG;AACV,kBAAQ,MAAM,0BAA0B,CAAC;AAAA,QAC3C;AAAA,MACF,CAAC;AAED,UAAI,SAAS,QAAQ,CAAC,MAAM;AAC1B,YAAI;AACF,cAAI;AAAA,QACN,SAAS,GAAG;AACV,kBAAQ,MAAM,iCAAiC,CAAC;AAAA,QAClD;AAAA,MACF,CAAC;AAED,UAAI,eAAe,MAAM;AACzB,UAAI,gBAAgB,MAAM;AAC1B,UAAI,wBAAwB,CAAC;AAC7B,UAAI,WAAW,CAAC;AAChB,UAAI,QAAQ,CAAC;AACb,UAAI,UAAU,CAAC;AACf,UAAI,WAAW;AACf,UAAI,SAAS;AAEb,yBAAmB,OAAO,KAAK;AAC/B,uBAAiB,OAAO,GAAG;AAAA,IAC7B;AAEA,iBAAa,MAAM,SAAS;AAC5B;AAAA,EACF;AAEA,MAAI,MAAM,YAAY,MAAM,SAAS,aAAa,GAAG;AACnD,UAAM,UAAU,MAAM;AACtB,UAAM,MAAM,QAAQ;AAEpB,QAAI,KAAK;AACP,sBAAgB,QAAQ,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC;AAAA,IAClD;AAEA,QAAI,QAAQ,gBAAgB;AAC1B,cAAQ,eAAe,QAAQ,CAAC,YAAwB;AACtD,YAAI;AACF,kBAAQ;AAAA,QACV,SAAS,GAAG;AACV,kBAAQ,MAAM,kCAAkC,CAAC;AAAA,QACnD;AAAA,MACF,CAAC;AACD,cAAQ,iBAAiB;AAAA,IAC3B;AAAA,EACF;AAEA,MAAI,MAAM,OAAO,UAAU;AACzB,UAAM,MAAM,SAAS,QAAQ,CAAC,MAAa,aAAa,CAAC,CAAC;AAAA,EAC5D;AAEA,QAAM,WAAW;AACjB,QAAM,YAAY;AACpB;AA7ES;AA2FT,SAAS,YACP,IACA,WAAuB,CAAC,GACxB,WAAuB,CAAC,GAClB;AACN,MAAI,CAAC,MAAM,GAAG,aAAa,EAAG;AAE9B,aAAW,KAAK,OAAO,KAAK,QAAQ,GAAG;AACrC,QAAI,MAAM,WAAY;AAEtB,QAAI,EAAE,KAAK,WAAW;AACpB,UAAI,EAAE,WAAW,IAAI,GAAG;AACtB,cAAM,QAAQ;AACd,cAAM,MAAM,MAAM;AAClB,YAAI,OAAO,gBAAgB,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,GAAG;AACxD,0BAAgB,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAAG,OAAO,GAAG;AAAA,QAC3D;AAAA,MACF,WAAW,cAAc,IAAI,EAAE,YAAY,CAAC,GAAG;AAC7C,WAAG,gBAAgB,CAAC;AACpB,QAAC,GAAW,CAAC,IAAI;AAAA,MACnB,WAAW,eAAe,IAAI,CAAC,GAAG;AAChC,QAAC,GAAW,CAAC,IAAI;AAAA,MACnB,OAAO;AACL,WAAG,gBAAgB,CAAC;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAEA,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAC7C,QAAI,MAAM,WAAY;AACtB,QAAI,SAAS,CAAC,MAAM,GAAG;AACrB,kBAAY,IAAI,GAAG,CAAC;AAAA,IACtB;AAAA,EACF;AACF;AAlCS;AAyDF,SAAS,MACd,cACA,MACA,QAAa,CAAC,GACR;AACN,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,UAAU,SAAS,cAAc,IAAI;AAC3C,QAAI,CAAC,SAAS;AACZ,cAAQ;AAAA,QACN;AAAA,QACA;AAAA,MACF;AACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI,EAAE,gBAAgB,UAAU;AAC9B,YAAQ,MAAM,6CAA6C,IAAI;AAC/D;AAAA,EACF;AAEA,MAAI,YAAY;AAChB,MAAI,WAAyB;AAC7B,MAAI,eAAe;AACnB,MAAI,WAAyB;AAC7B,MAAI,cAAc;AAElB,iBAAe,YAA2B;AACxC,QAAI,YAAa;AAEjB,kBAAc;AAEd,QAAI;AACF,yBAAmB;AAEnB,YAAMC,OAAM;AACZ,YAAM,aACJA,KAAI,oBAAoBA,KAAI,WAAW,kBAAkB;AAE3D,UAAI,CAAC,UAAU;AACb,mBAAW,EAAE,MAAM,WAAW,OAAO,YAAY,KAAK,KAAK;AAE3D,YAAI,gBAAgB,SAAS;AAC3B,eAAK,YAAY;AACjB,gBAAM,MAAM,MAAM,UAAU,QAAQ;AACpC,cAAI,eAAe,MAAM;AACvB,iBAAK,YAAY,GAAG;AAAA,UACtB;AAAA,QACF,OAAO;AACL,kBAAQ,MAAM,kDAAkD,IAAI;AACpE;AAAA,QACF;AAEA,mBAAW;AAAA,MACb,OAAO;AACL,iBAAS,QAAQ;AAEjB,YAAI,gBAAgB,MAAM;AACxB,gBAAM,MAAM,MAAM,UAAU,QAAQ;AACpC,qBAAW;AAAA,QACb,OAAO;AACL,kBAAQ,MAAM,+CAA+C,IAAI;AACjE;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAM,wBAAwB,GAAG;AACzC,uBAAiB,GAAY;AAAA,IAC/B,UAAE;AACA,oBAAc;AAAA,IAChB;AAAA,EACF;AA5Ce;AA8Cf,iBAAe;AAEf,QAAM,MAAM;AACZ,MAAI,YAAY,IAAI,aAAa,CAAC;AAClC,MAAI,UAAU,WAAW;AAEzB,YAAU;AAEV,MAAI,YAAY,KAAK;AACnB,QAAI,CAAC,IAAI,UAAU,KAAK;AACtB,UAAI,UAAU,MAAM,OAAO,EAAE,IAAI,MAAoB;AACnD,YAAI;AACF,gBAAM,mBAAmB,IAAI,OAAO,IAAI;AACxC,cAAI,kBAAkB;AACpB,wBAAY;AACZ,gBAAI,UAAU;AACZ,uBAAS,OAAO;AAAA,YAClB;AACA,gBAAI,UAAU,WAAW;AAAA,UAC3B;AAAA,QACF,SAAS,KAAK;AACZ,kBAAQ,MAAM,6BAA6B,GAAG;AAC9C,2BAAiB,GAAY;AAAA,QAC/B;AAAA,MACF;AACA,kBAAY,IAAI,OAAO;AAAA,IACzB;AAAA,EACF;AACF;AAtGgB;",
6
6
  "names": ["vnode", "newChildren", "oldChildren", "win"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fynixorg/ui",
3
- "version": "1.0.13",
3
+ "version": "1.0.14",
4
4
  "type": "module",
5
5
  "description": "Core package for Fynix UI framework - A lightweight, reactive UI framework with TypeScript support.",
6
6
  "main": "./dist/fynix/index.js",