@fynixorg/ui 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/context/context.d.ts +99 -2
- package/dist/context/context.js.map +2 -2
- package/dist/custom/Outlet.d.ts +0 -0
- package/dist/custom/button.d.ts +50 -7
- package/dist/custom/button.js.map +2 -2
- package/dist/custom/index.js.map +2 -2
- package/dist/custom/path.d.ts +58 -7
- package/dist/custom/path.js.map +2 -2
- package/dist/error/errorOverlay.d.ts +25 -1
- package/dist/error/errorOverlay.js.map +2 -2
- package/dist/hooks/nixComputed.d.ts +15 -16
- package/dist/hooks/nixComputed.js.map +2 -2
- package/dist/hooks/nixDebounce.d.ts +12 -8
- package/dist/hooks/nixDebounce.js.map +2 -2
- package/dist/hooks/nixInterval.d.ts +12 -5
- package/dist/hooks/nixInterval.js.map +2 -2
- package/dist/hooks/nixLocalStorage.d.ts +16 -5
- package/dist/hooks/nixLocalStorage.js.map +2 -2
- package/dist/hooks/nixPrevious.d.ts +14 -3
- package/dist/hooks/nixPrevious.js.map +2 -2
- package/dist/plugins/vite-plugin-res.d.ts +16 -12
- package/dist/plugins/vite-plugin-res.js +77 -17
- package/dist/plugins/vite-plugin-res.js.map +2 -2
- package/dist/router/router.js +30 -6
- package/dist/router/router.js.map +2 -2
- package/dist/runtime.js +5 -4
- package/dist/runtime.js.map +2 -2
- package/package.json +3 -5
- package/types/global.d.ts +4 -1
- package/router/router.d.ts +0 -21
- package/router/router.js +0 -678
- package/runtime.d.ts +0 -83
package/dist/runtime.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../runtime.js"],
|
|
4
|
-
"sourcesContent": ["import { removeErrorOverlay, showErrorOverlay } from \"./error/errorOverlay\";\r\nimport { setActiveContext, activeContext } from \"./context/context.js\";\r\nimport { nixStore } from \"./hooks/nixStore\";\r\nimport { nixState } from \"./hooks/nixState\";\r\nimport { nixEffect } from \"./hooks/nixEffect\";\r\nimport { nixAsync } from \"./hooks/nixAsync\";\r\nimport { nixMemo } from \"./hooks/nixMemo\";\r\nimport { nixCallback } from \"./hooks/nixCallback\";\r\nimport { nixComputed } from \"./hooks/nixComputed\";\r\nimport { nixDebounce } from \"./hooks/nixDebounce\";\r\nimport { nixInterval } from \"./hooks/nixInterval\";\r\nimport { nixRef } from \"./hooks/nixRef\";\r\nimport { nixLocalStorage } from \"./hooks/nixLocalStorage\";\r\nimport { nixPrevious } from \"./hooks/nixPrevious\";\r\nimport { nixLazy, Suspense } from \"./hooks/nixLazy.js\";\r\nimport { nixForm } from \"./hooks/nixForm.js\";\r\nimport { Path, Button } from \"./custom/index.js\";\r\n\r\n//new imports\r\nimport { nixAsyncCached } from \"./hooks/nixAsyncCache\";\r\nimport { nixAsyncDebounce } from \"./hooks/nixAsyncDebounce\";\r\nimport { nixAsyncQuery } from \"./hooks/nixAsyncQuery\";\r\nimport { nixEffectAlways } from \"./hooks/nixEffect\";\r\nimport { nixEffectOnce } from \"./hooks/nixEffect\";\r\nimport { nixFormAsync } from \"./hooks/nixFormAsync\";\r\nimport { nixLazyAsync } from \"./hooks/nixLazyAsync\";\r\nimport { nixLazyFormAsync } from \"./hooks/nixLazyFormAsync\";\r\nimport createFynix from \"./router/router.js\";\r\n/**\r\n * Symbol for text nodes\r\n * @type {symbol}\r\n */\r\nexport const TEXT = Symbol(\"text\");\r\n\r\n/**\r\n * Symbol for fragments\r\n * @type {symbol}\r\n */\r\nexport const Fragment = Symbol(\"Fragment\");\r\n\r\n/* ---------------------- Constants ---------------------- */\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\n/**\r\n * Create a virtual text node, supporting reactive state.\r\n * @param {string|number|object} text\r\n * @returns {object} vnode\r\n */\r\nexport function createTextVNode(text) {\r\n if (text == null || text === false)\r\n return { type: TEXT, props: { nodeValue: \"\" }, key: null };\r\n\r\n if (text && typeof text === \"object\" && text._isNixState) {\r\n const vnode = {\r\n type: TEXT,\r\n props: { nodeValue: String(text.value) },\r\n key: null,\r\n _state: text,\r\n _cleanup: null, // FIX: Track subscription cleanup\r\n };\r\n\r\n // FIX: Store unsubscribe function for cleanup\r\n vnode._cleanup = text.subscribe(() => {\r\n if (vnode._domNode) vnode._domNode.nodeValue = String(text.value);\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 * Create a virtual DOM node (element, fragment, or component).\r\n * @param {string|function|symbol} type\r\n * @param {object} [props={}]\r\n * @param {...any} children\r\n * @returns {object} vnode\r\n */\r\nexport function h(type, props = {}, ...children) {\r\n if (props === null || typeof props !== \"object\" || Array.isArray(props))\r\n props = {};\r\n const flatChildren = [];\r\n\r\n for (const c of children.flat(Infinity)) {\r\n if (c == null || c === false) continue;\r\n if (c && typeof c === \"object\" && c._isNixState)\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?.type === Fragment)\r\n flatChildren.push(\r\n ...(c.props.children || []).filter((x) => x != null && x !== false)\r\n );\r\n else if (c?.type) flatChildren.push(c);\r\n else flatChildren.push(createTextVNode(String(c)));\r\n }\r\n\r\n const key = props.key ?? null;\r\n if (key) delete props.key;\r\n\r\n if (type === Fragment)\r\n return { type: Fragment, props: { children: flatChildren }, key };\r\n return { type, props: { ...props, children: flatChildren }, key };\r\n}\r\n\r\nh.Fragment = ({ children }) => children;\r\nexport const Fynix = h;\r\nFynix.Fragment = h.Fragment;\r\n\r\n/* ---------------------- Component & Hooks ---------------------- */\r\n\r\n// FIX 1: Use WeakMap for automatic garbage collection\r\nconst componentInstances = new WeakMap();\r\nlet rootRenderFn = null;\r\n\r\n// FIX 2: Track pending rerenders to prevent race conditions\r\nconst pendingRerenders = new WeakSet();\r\n\r\n/**\r\n * Begin component context\r\n * @param {object} vnode\r\n * @returns {object} ctx\r\n */\r\nfunction beginComponent(vnode) {\r\n let ctx = componentInstances.get(vnode);\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,\r\n _isMounted: false,\r\n _isRerendering: false,\r\n };\r\n componentInstances.set(vnode, ctx);\r\n }\r\n ctx.hookIndex = 0;\r\n ctx._accessedStates.clear();\r\n setActiveContext(ctx);\r\n ctx.version++;\r\n return ctx;\r\n}\r\n\r\n/**\r\n * End component context\r\n */\r\nfunction endComponent() {\r\n const ctx = activeContext;\r\n if (!ctx) return;\r\n\r\n ctx._accessedStates.forEach((state) => {\r\n if (!ctx._subscriptions.has(state)) {\r\n // FIX 3: Debounced rerender with race condition prevention\r\n if (!ctx.rerender) {\r\n let rerenderTimeout = null;\r\n\r\n ctx.rerender = () => {\r\n // Prevent multiple simultaneous rerenders\r\n if (ctx._isRerendering || pendingRerenders.has(ctx)) {\r\n return;\r\n }\r\n\r\n // Clear any pending timeout\r\n if (rerenderTimeout) {\r\n clearTimeout(rerenderTimeout);\r\n }\r\n\r\n // Debounce rerenders\r\n rerenderTimeout = setTimeout(() => {\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 newRendered = ctx.Component(vnode.props);\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 patch(domNode.parentNode, newRendered, oldRendered)\r\n .then(() => {\r\n vnode._domNode = newRendered?._domNode;\r\n })\r\n .finally(() => {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n });\r\n } else if (rootRenderFn) {\r\n rootRenderFn().finally(() => {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n });\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);\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 setTimeout(ctx.rerender, 0);\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 * Safely render a component\r\n * @param {function} Component\r\n * @param {object} props\r\n * @returns {object} vnode\r\n */\r\nexport function renderComponent(Component, props = {}) {\r\n const vnode = { type: Component, props };\r\n const ctx = beginComponent(vnode);\r\n ctx.Component = Component;\r\n\r\n // FIX 4: Same debounced rerender pattern\r\n if (!ctx.rerender) {\r\n let rerenderTimeout = 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(() => {\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 newRendered = ctx.Component(vnode.props);\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 patch(domNode.parentNode, newRendered, oldRendered)\r\n .then(() => {\r\n vnode._domNode = newRendered?._domNode;\r\n })\r\n .finally(() => {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n });\r\n } else if (rootRenderFn) {\r\n rootRenderFn().finally(() => {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n });\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);\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 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);\r\n return h(\"div\", { style: \"color:red\" }, `Error: ${err.message}`);\r\n } finally {\r\n endComponent();\r\n }\r\n}\r\n\r\n/* ---------------------- Event Delegation ---------------------- */\r\n\r\nconst delegatedEvents = new Map();\r\nlet eventIdCounter = 1;\r\n\r\nfunction ensureDelegated(eventType) {\r\n if (delegatedEvents.has(eventType)) return;\r\n delegatedEvents.set(eventType, new Map());\r\n document.addEventListener(eventType, (e) => {\r\n let cur = e.target;\r\n while (cur && cur !== document) {\r\n if (cur.nodeType !== 1) break;\r\n const eid = cur._rest_eid;\r\n const map = delegatedEvents.get(eventType);\r\n if (eid != null && map?.has(eid)) {\r\n map.get(eid)(e);\r\n return;\r\n }\r\n cur = cur.parentElement;\r\n }\r\n });\r\n}\r\n\r\nfunction registerDelegatedHandler(el, eventName, fn) {\r\n if (!fn || el.nodeType !== 1) return;\r\n const eid = el._rest_eid ?? (el._rest_eid = ++eventIdCounter);\r\n ensureDelegated(eventName);\r\n delegatedEvents.get(eventName).set(eid, (e) => {\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);\r\n }\r\n });\r\n}\r\n\r\n/* ---------------------- Property Setter ---------------------- */\r\n\r\n/**\r\n * Set element property or attribute\r\n * @param {HTMLElement} el\r\n * @param {string} key\r\n * @param {*} value\r\n */\r\nfunction setProperty(el, key, value) {\r\n const k = key.toLowerCase();\r\n\r\n if (key === \"r-class\" || key === \"rc\") {\r\n if (typeof value === \"string\") el.setAttribute(\"class\", value);\r\n else if (value && (value._isNixState || value._isRestState)) {\r\n el.setAttribute(\"class\", value.value);\r\n\r\n // FIX: Track subscription for cleanup\r\n if (!el._fynixCleanups) el._fynixCleanups = [];\r\n const unsub = value.subscribe(() =>\r\n el.setAttribute(\"class\", value.value)\r\n );\r\n el._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 if (key === \"style\" && typeof value === \"object\") {\r\n Object.assign(el.style, value);\r\n return;\r\n }\r\n\r\n // Security: Prevent dangerous attributes\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[k] = true;\r\n } else {\r\n el.removeAttribute(k);\r\n el[k] = false;\r\n }\r\n return;\r\n }\r\n if (DOM_PROPERTIES.has(key)) {\r\n el[key] = value ?? \"\";\r\n return;\r\n }\r\n if (key.startsWith(\"data-\") || key.startsWith(\"aria-\")) {\r\n if (value != null && value !== false) el.setAttribute(key, value);\r\n else el.removeAttribute(key);\r\n return;\r\n }\r\n\r\n // Security: Sanitize href and src attributes\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) el.setAttribute(key, value);\r\n}\r\n\r\n/* ---------------------- DOM Creation ---------------------- */\r\n\r\n/**\r\n * Create DOM from vnode\r\n * @param {object|string|number|Promise} vnode\r\n * @param {Node} [existing=null]\r\n * @returns {Promise<Node>}\r\n */\r\nasync function createDom(vnode, existing = null) {\r\n if (vnode == null || vnode === false) return document.createTextNode(\"\");\r\n if (typeof vnode === \"string\" || typeof vnode === \"number\")\r\n return document.createTextNode(String(vnode));\r\n\r\n if (vnode.type === TEXT) {\r\n const textNode =\r\n existing || document.createTextNode(vnode.props.nodeValue ?? \"\");\r\n vnode._domNode = textNode;\r\n return textNode;\r\n }\r\n\r\n // FIX 5: Better async component error handling\r\n if (vnode instanceof Promise) {\r\n const placeholder = document.createTextNode(\"Loading...\");\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 return placeholder;\r\n }\r\n\r\n if (vnode.type === Fragment) {\r\n const frag = document.createDocumentFragment();\r\n for (const child of vnode.props?.children || [])\r\n frag.appendChild(await createDom(child));\r\n vnode._domNode = frag;\r\n return frag;\r\n }\r\n\r\n if (typeof vnode.type === \"function\") {\r\n const rendered = await renderMaybeAsyncComponent(\r\n vnode.type,\r\n vnode.props,\r\n vnode\r\n );\r\n vnode._rendered = rendered;\r\n const dom = await createDom(rendered);\r\n vnode._domNode = dom;\r\n return dom;\r\n }\r\n\r\n const el = existing || document.createElement(vnode.type);\r\n for (const [k, v] of Object.entries(vnode.props || {}))\r\n if (k !== \"children\") setProperty(el, k, v);\r\n for (const child of vnode.props?.children || [])\r\n el.appendChild(await createDom(child));\r\n vnode._domNode = el;\r\n return el;\r\n}\r\n\r\n/* ---------------------- Async Component Helper ---------------------- */\r\n\r\n/**\r\n * Render async component safely\r\n * @param {function} Component\r\n * @param {object} props\r\n * @param {object} vnode\r\n * @returns {Promise<object>}\r\n */\r\nasync function renderMaybeAsyncComponent(Component, props, vnode) {\r\n const ctx = beginComponent(vnode);\r\n removeErrorOverlay();\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);\r\n ctx._isMounted = false;\r\n endComponent();\r\n return h(\"div\", { style: \"color:red\" }, `Error: ${err.message}`);\r\n }\r\n}\r\n\r\n/* ---------------------- Patch / Diff ---------------------- */\r\n\r\n/**\r\n * Patch a parent DOM node based on oldVNode -> newVNode changes\r\n * @param {Node} parent\r\n * @param {object|string|number} newVNode\r\n * @param {object|string|number} oldVNode\r\n * @returns {Promise<void>}\r\n */\r\nexport async function patch(parent, newVNode, oldVNode) {\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._domNode;\r\n if (domNode?.parentNode) domNode.parentNode.removeChild(domNode);\r\n unmountVNode(oldVNode);\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 (newIsPrimitive && oldIsPrimitive && newVNode === oldVNode) return;\r\n const newDom = await createDom(newVNode);\r\n const oldDom = oldVNode._domNode || parent.firstChild;\r\n if (oldDom?.parentNode && newDom instanceof Node) {\r\n oldDom.parentNode.replaceChild(newDom, oldDom);\r\n }\r\n if (oldVNode && typeof oldVNode === \"object\") {\r\n unmountVNode(oldVNode);\r\n }\r\n return;\r\n }\r\n\r\n const newType = newVNode.type;\r\n const oldType = oldVNode.type;\r\n\r\n if (newType !== oldType) {\r\n const newDom = await createDom(newVNode);\r\n const oldDom = oldVNode._domNode;\r\n if (oldDom?.parentNode && newDom instanceof Node) {\r\n oldDom.parentNode.replaceChild(newDom, oldDom);\r\n }\r\n unmountVNode(oldVNode);\r\n return;\r\n }\r\n\r\n if (newType === TEXT) {\r\n const oldDom = oldVNode._domNode;\r\n const newText = newVNode.props.nodeValue ?? \"\";\r\n const oldText = oldVNode.props.nodeValue ?? \"\";\r\n if (newText !== oldText && oldDom) {\r\n oldDom.nodeValue = newText;\r\n }\r\n newVNode._domNode = oldDom;\r\n return;\r\n }\r\n\r\n if (newType === Fragment) {\r\n const newChildren = newVNode.props?.children || [];\r\n const oldChildren = oldVNode.props?.children || [];\r\n await patchChildren(parent, newChildren, oldChildren);\r\n newVNode._domNode = oldVNode._domNode;\r\n return;\r\n }\r\n\r\n // FIX 6: Better component reuse and cleanup\r\n if (typeof newType === \"function\") {\r\n const oldCtx = componentInstances.get(oldVNode);\r\n\r\n if (oldCtx && newType === oldType) {\r\n componentInstances.delete(oldVNode);\r\n componentInstances.set(newVNode, oldCtx);\r\n\r\n oldCtx._vnode = newVNode;\r\n\r\n beginComponent(newVNode);\r\n const rendered = await oldCtx.Component(newVNode.props);\r\n endComponent();\r\n\r\n newVNode._rendered = rendered;\r\n\r\n const oldRendered = oldVNode._rendered;\r\n const oldDom = oldVNode._domNode;\r\n\r\n if (oldDom?.parentNode instanceof Node) {\r\n await patch(oldDom.parentNode, rendered, oldRendered);\r\n newVNode._domNode = rendered?._domNode || oldDom;\r\n }\r\n } else {\r\n const rendered = await renderMaybeAsyncComponent(\r\n newType,\r\n newVNode.props,\r\n newVNode\r\n );\r\n newVNode._rendered = rendered;\r\n\r\n const oldRendered = oldVNode._rendered;\r\n const oldDom = oldVNode._domNode;\r\n\r\n if (oldDom?.parentNode instanceof Node) {\r\n await patch(oldDom.parentNode, rendered, oldRendered);\r\n newVNode._domNode = rendered?._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 newVNode._domNode = newDom;\r\n }\r\n\r\n if (oldCtx && newType !== oldType) {\r\n unmountVNode(oldVNode);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n const el = oldVNode._domNode;\r\n if (!el || el.nodeType !== 1) {\r\n const newDom = await createDom(newVNode);\r\n if (parent && newDom instanceof Node) {\r\n parent.appendChild(newDom);\r\n }\r\n unmountVNode(oldVNode);\r\n return;\r\n }\r\n\r\n updateProps(el, newVNode.props, oldVNode.props);\r\n newVNode._domNode = el;\r\n\r\n const newChildren = newVNode.props?.children || [];\r\n const oldChildren = oldVNode.props?.children || [];\r\n await patchChildren(el, newChildren, oldChildren);\r\n}\r\n\r\n/**\r\n * Patch children with keyed reconciliation\r\n * @param {Node} parent\r\n * @param {Array} newChildren\r\n * @param {Array} oldChildren\r\n */\r\nasync function patchChildren(parent, newChildren, oldChildren) {\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 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) dom.parentNode.removeChild(dom);\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();\r\n const oldIndexMap = new Map();\r\n\r\n oldChildren.forEach((child, idx) => {\r\n if (child?.key != null) {\r\n oldKeyMap.set(child.key, child);\r\n oldIndexMap.set(child.key, idx);\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) dom.parentNode.removeChild(dom);\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);\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);\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);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/* ---------------------- Unmount ---------------------- */\r\n\r\n/**\r\n * Unmount vnode recursively and cleanup\r\n * @param {object} vnode\r\n */\r\nfunction unmountVNode(vnode) {\r\n if (!vnode) return;\r\n\r\n // FIX: Clean up text node subscription\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 if (ctx) {\r\n // FIX 7: Mark as unmounted to prevent rerender attempts\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;\r\n\r\n componentInstances.delete(vnode);\r\n pendingRerenders.delete(ctx);\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 eid = vnode._domNode._rest_eid;\r\n if (eid) {\r\n delegatedEvents.forEach((map) => map.delete(eid));\r\n }\r\n\r\n // FIX: Clean up reactive class subscriptions\r\n if (vnode._domNode._fynixCleanups) {\r\n vnode._domNode._fynixCleanups.forEach((cleanup) => {\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 vnode._domNode._fynixCleanups = null;\r\n }\r\n }\r\n\r\n if (vnode.props?.children)\r\n vnode.props.children.forEach((c) => unmountVNode(c));\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 * Update DOM props\r\n * @param {HTMLElement} el\r\n * @param {object} newProps\r\n * @param {object} oldProps\r\n */\r\nfunction updateProps(el, newProps = {}, oldProps = {}) {\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 if (!(k in newProps)) {\r\n if (k.startsWith(\"r-\")) {\r\n const eid = el._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[k] = false;\r\n } else if (DOM_PROPERTIES.has(k)) el[k] = \"\";\r\n else el.removeAttribute(k);\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) setProperty(el, k, v);\r\n }\r\n}\r\n\r\n/* ---------------------- Mount ---------------------- */\r\n\r\n/**\r\n * Mount the app component to a root DOM node\r\n * @param {function} AppComponent\r\n * @param {string|Element} root\r\n * @param {boolean} [hydrate=false]\r\n * @param {object} [props={}]\r\n */\r\nexport function mount(AppComponent, root, hydrate = false, props = {}) {\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 = null;\r\n let currentProps = props;\r\n let appVNode = null;\r\n let isRendering = false;\r\n\r\n async function renderApp() {\r\n // FIX 8: Prevent concurrent renders\r\n if (isRendering) {\r\n return;\r\n }\r\n\r\n isRendering = true;\r\n\r\n try {\r\n removeErrorOverlay();\r\n const propsToUse =\r\n window.__lastRouteProps ||\r\n window.__fynix__?.lastRouteProps ||\r\n 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);\r\n } finally {\r\n isRendering = false;\r\n }\r\n }\r\n\r\n rootRenderFn = renderApp;\r\n window.__fynix__ = window.__fynix__ || {};\r\n window.__fynix__.rerender = renderApp;\r\n renderApp();\r\n\r\n if (import.meta.hot) {\r\n if (!window.__fynix__.hmr) {\r\n window.__fynix__.hmr = async ({ mod }) => {\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 window.__fynix__.rerender?.();\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix HMR] update error:\", err);\r\n showErrorOverlay(err);\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 nixState,\r\n nixEffect,\r\n nixStore,\r\n nixInterval,\r\n nixAsync,\r\n nixCallback,\r\n nixComputed,\r\n nixMemo,\r\n nixDebounce,\r\n nixPrevious,\r\n nixLocalStorage,\r\n nixRef,\r\n nixLazy,\r\n Suspense,\r\n nixForm,\r\n nixAsyncCached,\r\n nixAsyncDebounce,\r\n nixAsyncQuery,\r\n nixEffectAlways,\r\n nixEffectOnce,\r\n nixFormAsync,\r\n nixLazyAsync,\r\n nixLazyFormAsync,\r\n Path,\r\n Button,\r\n createFynix,\r\n};\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { removeErrorOverlay, showErrorOverlay } from \"./error/errorOverlay\";\r\nimport { setActiveContext, activeContext } from \"./context/context.js\";\r\nimport { nixStore } from \"./hooks/nixStore\";\r\nimport { nixState } from \"./hooks/nixState\";\r\nimport { nixEffect } from \"./hooks/nixEffect\";\r\nimport { nixAsync } from \"./hooks/nixAsync\";\r\nimport { nixMemo } from \"./hooks/nixMemo\";\r\nimport { nixCallback } from \"./hooks/nixCallback\";\r\nimport { nixComputed } from \"./hooks/nixComputed\";\r\nimport { nixDebounce } from \"./hooks/nixDebounce\";\r\nimport { nixInterval } from \"./hooks/nixInterval\";\r\nimport { nixRef } from \"./hooks/nixRef\";\r\nimport { nixLocalStorage } from \"./hooks/nixLocalStorage\";\r\nimport { nixPrevious } from \"./hooks/nixPrevious\";\r\nimport { nixLazy, Suspense } from \"./hooks/nixLazy.js\";\r\nimport { nixForm } from \"./hooks/nixForm.js\";\r\nimport { Path, Button } from \"./custom/index.js\";\r\n\r\n//new imports\r\nimport { nixAsyncCached } from \"./hooks/nixAsyncCache\";\r\nimport { nixAsyncDebounce } from \"./hooks/nixAsyncDebounce\";\r\nimport { nixAsyncQuery } from \"./hooks/nixAsyncQuery\";\r\nimport { nixEffectAlways } from \"./hooks/nixEffect\";\r\nimport { nixEffectOnce } from \"./hooks/nixEffect\";\r\nimport { nixFormAsync } from \"./hooks/nixFormAsync\";\r\nimport { nixLazyAsync } from \"./hooks/nixLazyAsync\";\r\nimport { nixLazyFormAsync } from \"./hooks/nixLazyFormAsync\";\r\nimport createFynix from \"./router/router.js\";\r\n/**\r\n * Symbol for text nodes\r\n * @type {symbol}\r\n */\r\nexport const TEXT = Symbol(\"text\");\r\n\r\n/**\r\n * Symbol for fragments\r\n * @type {symbol}\r\n */\r\nexport const Fragment = Symbol(\"Fragment\");\r\n\r\n/* ---------------------- Constants ---------------------- */\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\n/**\r\n * Create a virtual text node, supporting reactive state.\r\n * @param {string|number|object} text\r\n * @returns {object} vnode\r\n */\r\nexport function createTextVNode(text) {\r\n if (text == null || text === false)\r\n return { type: TEXT, props: { nodeValue: \"\" }, key: null };\r\n\r\n if (text && typeof text === \"object\" && text._isNixState) {\r\n const vnode = {\r\n type: TEXT,\r\n props: { nodeValue: String(text.value) },\r\n key: null,\r\n _state: text,\r\n _cleanup: null, // FIX: Track subscription cleanup\r\n };\r\n\r\n // FIX: Store unsubscribe function for cleanup\r\n vnode._cleanup = text.subscribe(() => {\r\n if (vnode._domNode) vnode._domNode.nodeValue = String(text.value);\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 * Create a virtual DOM node (element, fragment, or component).\r\n * @param {string|function|symbol} type\r\n * @param {object} [props={}]\r\n * @param {...any} children\r\n * @returns {object} vnode\r\n */\r\nexport function h(type, props = {}, ...children) {\r\n if (props === null || typeof props !== \"object\" || Array.isArray(props))\r\n props = {};\r\n const flatChildren = [];\r\n\r\n for (const c of children.flat(Infinity)) {\r\n if (c == null || c === false) continue;\r\n if (c && typeof c === \"object\" && c._isNixState)\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?.type === Fragment)\r\n flatChildren.push(\r\n ...(c.props.children || []).filter((x) => x != null && x !== false),\r\n );\r\n else if (c?.type) flatChildren.push(c);\r\n else flatChildren.push(createTextVNode(String(c)));\r\n }\r\n\r\n const key = props.key ?? null;\r\n if (key) delete props.key;\r\n\r\n if (type === Fragment)\r\n return { type: Fragment, props: { children: flatChildren }, key };\r\n return { type, props: { ...props, children: flatChildren }, key };\r\n}\r\n\r\nh.Fragment = ({ children }) => children;\r\nexport const Fynix = h;\r\nFynix.Fragment = h.Fragment;\r\n\r\n/* ---------------------- Component & Hooks ---------------------- */\r\n\r\n// FIX 1: Use WeakMap for automatic garbage collection\r\nconst componentInstances = new WeakMap();\r\nlet rootRenderFn = null;\r\n\r\n// FIX 2: Track pending rerenders to prevent race conditions\r\nconst pendingRerenders = new WeakSet();\r\n\r\n/**\r\n * Begin component context\r\n * @param {object} vnode\r\n * @returns {object} ctx\r\n */\r\nfunction beginComponent(vnode) {\r\n let ctx = componentInstances.get(vnode);\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 /** @type {undefined | (() => void)} */\r\n rerender: undefined,\r\n Component: vnode.type,\r\n _isMounted: false,\r\n _isRerendering: false,\r\n };\r\n componentInstances.set(vnode, ctx);\r\n }\r\n ctx.hookIndex = 0;\r\n ctx._accessedStates.clear();\r\n setActiveContext(ctx);\r\n ctx.version++;\r\n return ctx;\r\n}\r\n\r\n/**\r\n * End component context\r\n */\r\nfunction endComponent() {\r\n const ctx = activeContext;\r\n if (!ctx) return;\r\n\r\n ctx._accessedStates.forEach((state) => {\r\n if (!ctx._subscriptions.has(state)) {\r\n // FIX 3: Debounced rerender with race condition prevention\r\n if (!ctx.rerender) {\r\n let rerenderTimeout = null;\r\n /**\r\n * @type {() => void}\r\n */\r\n ctx.rerender = function rerender() {\r\n // Prevent multiple simultaneous rerenders\r\n if (ctx._isRerendering || pendingRerenders.has(ctx)) {\r\n return;\r\n }\r\n\r\n // Clear any pending timeout\r\n if (rerenderTimeout) {\r\n clearTimeout(rerenderTimeout);\r\n }\r\n\r\n // Debounce rerenders\r\n rerenderTimeout = setTimeout(() => {\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 newRendered = ctx.Component(vnode.props);\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 patch(domNode.parentNode, newRendered, oldRendered)\r\n .then(() => {\r\n vnode._domNode = newRendered?._domNode;\r\n })\r\n .finally(() => {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n });\r\n } else if (rootRenderFn) {\r\n rootRenderFn().finally(() => {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n });\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);\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 setTimeout(ctx.rerender, 0);\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 * Safely render a component\r\n * @param {function} Component\r\n * @param {object} props\r\n * @returns {object} vnode\r\n */\r\nexport function renderComponent(Component, props = {}) {\r\n const vnode = { type: Component, props };\r\n const ctx = beginComponent(vnode);\r\n ctx.Component = Component;\r\n\r\n // FIX 4: Same debounced rerender pattern\r\n if (!ctx.rerender) {\r\n let rerenderTimeout = 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(() => {\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 newRendered = ctx.Component(vnode.props);\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 patch(domNode.parentNode, newRendered, oldRendered)\r\n .then(() => {\r\n vnode._domNode = newRendered?._domNode;\r\n })\r\n .finally(() => {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n });\r\n } else if (rootRenderFn) {\r\n rootRenderFn().finally(() => {\r\n ctx._isRerendering = false;\r\n pendingRerenders.delete(ctx);\r\n });\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);\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 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);\r\n return h(\"div\", { style: \"color:red\" }, `Error: ${err.message}`);\r\n } finally {\r\n endComponent();\r\n }\r\n}\r\n\r\n/* ---------------------- Event Delegation ---------------------- */\r\n\r\nconst delegatedEvents = new Map();\r\nlet eventIdCounter = 1;\r\n\r\nfunction ensureDelegated(eventType) {\r\n if (delegatedEvents.has(eventType)) return;\r\n delegatedEvents.set(eventType, new Map());\r\n document.addEventListener(eventType, (e) => {\r\n let cur = e.target;\r\n while (cur && cur !== document) {\r\n if (cur.nodeType !== 1) break;\r\n const eid = cur._rest_eid;\r\n const map = delegatedEvents.get(eventType);\r\n if (eid != null && map?.has(eid)) {\r\n map.get(eid)(e);\r\n return;\r\n }\r\n cur = cur.parentElement;\r\n }\r\n });\r\n}\r\n\r\nfunction registerDelegatedHandler(el, eventName, fn) {\r\n if (!fn || el.nodeType !== 1) return;\r\n const eid = el._rest_eid ?? (el._rest_eid = ++eventIdCounter);\r\n ensureDelegated(eventName);\r\n delegatedEvents.get(eventName).set(eid, (e) => {\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);\r\n }\r\n });\r\n}\r\n\r\n/* ---------------------- Property Setter ---------------------- */\r\n\r\n/**\r\n * Set element property or attribute\r\n * @param {HTMLElement} el\r\n * @param {string} key\r\n * @param {*} value\r\n */\r\nfunction setProperty(el, key, value) {\r\n const k = key.toLowerCase();\r\n\r\n if (key === \"r-class\" || key === \"rc\") {\r\n if (typeof value === \"string\") el.setAttribute(\"class\", value);\r\n else if (value && (value._isNixState || value._isRestState)) {\r\n el.setAttribute(\"class\", value.value);\r\n\r\n // FIX: Track subscription for cleanup\r\n if (!el._fynixCleanups) el._fynixCleanups = [];\r\n const unsub = value.subscribe(() =>\r\n el.setAttribute(\"class\", value.value),\r\n );\r\n el._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 if (key === \"style\" && typeof value === \"object\") {\r\n Object.assign(el.style, value);\r\n return;\r\n }\r\n\r\n // Security: Prevent dangerous attributes\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[k] = true;\r\n } else {\r\n el.removeAttribute(k);\r\n el[k] = false;\r\n }\r\n return;\r\n }\r\n if (DOM_PROPERTIES.has(key)) {\r\n el[key] = value ?? \"\";\r\n return;\r\n }\r\n if (key.startsWith(\"data-\") || key.startsWith(\"aria-\")) {\r\n if (value != null && value !== false) el.setAttribute(key, value);\r\n else el.removeAttribute(key);\r\n return;\r\n }\r\n\r\n // Security: Sanitize href and src attributes\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) el.setAttribute(key, value);\r\n}\r\n\r\n/* ---------------------- DOM Creation ---------------------- */\r\n\r\n/**\r\n * Create DOM from vnode\r\n * @param {object|string|number|Promise} vnode\r\n * @param {Node} [existing=null]\r\n * @returns {Promise<Node>}\r\n */\r\nasync function createDom(vnode, existing = null) {\r\n if (vnode == null || vnode === false) return document.createTextNode(\"\");\r\n if (typeof vnode === \"string\" || typeof vnode === \"number\")\r\n return document.createTextNode(String(vnode));\r\n\r\n if (vnode.type === TEXT) {\r\n const textNode =\r\n existing || document.createTextNode(vnode.props.nodeValue ?? \"\");\r\n vnode._domNode = textNode;\r\n return textNode;\r\n }\r\n\r\n // FIX 5: Better async component error handling\r\n if (vnode instanceof Promise) {\r\n const placeholder = document.createTextNode(\"Loading...\");\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 return placeholder;\r\n }\r\n\r\n if (vnode.type === Fragment) {\r\n const frag = document.createDocumentFragment();\r\n for (const child of vnode.props?.children || [])\r\n frag.appendChild(await createDom(child));\r\n vnode._domNode = frag;\r\n return frag;\r\n }\r\n\r\n if (typeof vnode.type === \"function\") {\r\n const rendered = await renderMaybeAsyncComponent(\r\n vnode.type,\r\n vnode.props,\r\n vnode,\r\n );\r\n vnode._rendered = rendered;\r\n const dom = await createDom(rendered);\r\n vnode._domNode = dom;\r\n return dom;\r\n }\r\n\r\n const el = existing || document.createElement(vnode.type);\r\n for (const [k, v] of Object.entries(vnode.props || {}))\r\n if (k !== \"children\") setProperty(el, k, v);\r\n for (const child of vnode.props?.children || [])\r\n el.appendChild(await createDom(child));\r\n vnode._domNode = el;\r\n return el;\r\n}\r\n\r\n/* ---------------------- Async Component Helper ---------------------- */\r\n\r\n/**\r\n * Render async component safely\r\n * @param {function} Component\r\n * @param {object} props\r\n * @param {object} vnode\r\n * @returns {Promise<object>}\r\n */\r\nasync function renderMaybeAsyncComponent(Component, props, vnode) {\r\n const ctx = beginComponent(vnode);\r\n removeErrorOverlay();\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);\r\n ctx._isMounted = false;\r\n endComponent();\r\n return h(\"div\", { style: \"color:red\" }, `Error: ${err.message}`);\r\n }\r\n}\r\n\r\n/* ---------------------- Patch / Diff ---------------------- */\r\n\r\n/**\r\n * Patch a parent DOM node based on oldVNode -> newVNode changes\r\n * @param {Node} parent\r\n * @param {object|string|number} newVNode\r\n * @param {object|string|number} oldVNode\r\n * @returns {Promise<void>}\r\n */\r\nexport async function patch(parent, newVNode, oldVNode) {\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._domNode;\r\n if (domNode?.parentNode) domNode.parentNode.removeChild(domNode);\r\n unmountVNode(oldVNode);\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 (newIsPrimitive && oldIsPrimitive && newVNode === oldVNode) return;\r\n const newDom = await createDom(newVNode);\r\n const oldDom = oldVNode._domNode || parent.firstChild;\r\n if (oldDom?.parentNode && newDom instanceof Node) {\r\n oldDom.parentNode.replaceChild(newDom, oldDom);\r\n }\r\n if (oldVNode && typeof oldVNode === \"object\") {\r\n unmountVNode(oldVNode);\r\n }\r\n return;\r\n }\r\n\r\n const newType = newVNode.type;\r\n const oldType = oldVNode.type;\r\n\r\n if (newType !== oldType) {\r\n const newDom = await createDom(newVNode);\r\n const oldDom = oldVNode._domNode;\r\n if (oldDom?.parentNode && newDom instanceof Node) {\r\n oldDom.parentNode.replaceChild(newDom, oldDom);\r\n }\r\n unmountVNode(oldVNode);\r\n return;\r\n }\r\n\r\n if (newType === TEXT) {\r\n const oldDom = oldVNode._domNode;\r\n const newText = newVNode.props.nodeValue ?? \"\";\r\n const oldText = oldVNode.props.nodeValue ?? \"\";\r\n if (newText !== oldText && oldDom) {\r\n oldDom.nodeValue = newText;\r\n }\r\n newVNode._domNode = oldDom;\r\n return;\r\n }\r\n\r\n if (newType === Fragment) {\r\n const newChildren = newVNode.props?.children || [];\r\n const oldChildren = oldVNode.props?.children || [];\r\n await patchChildren(parent, newChildren, oldChildren);\r\n newVNode._domNode = oldVNode._domNode;\r\n return;\r\n }\r\n\r\n // FIX 6: Better component reuse and cleanup\r\n if (typeof newType === \"function\") {\r\n const oldCtx = componentInstances.get(oldVNode);\r\n\r\n if (oldCtx && newType === oldType) {\r\n componentInstances.delete(oldVNode);\r\n componentInstances.set(newVNode, oldCtx);\r\n\r\n oldCtx._vnode = newVNode;\r\n\r\n beginComponent(newVNode);\r\n const rendered = await oldCtx.Component(newVNode.props);\r\n endComponent();\r\n\r\n newVNode._rendered = rendered;\r\n\r\n const oldRendered = oldVNode._rendered;\r\n const oldDom = oldVNode._domNode;\r\n\r\n if (oldDom?.parentNode instanceof Node) {\r\n await patch(oldDom.parentNode, rendered, oldRendered);\r\n newVNode._domNode = rendered?._domNode || oldDom;\r\n }\r\n } else {\r\n const rendered = await renderMaybeAsyncComponent(\r\n newType,\r\n newVNode.props,\r\n newVNode,\r\n );\r\n newVNode._rendered = rendered;\r\n\r\n const oldRendered = oldVNode._rendered;\r\n const oldDom = oldVNode._domNode;\r\n\r\n if (oldDom?.parentNode instanceof Node) {\r\n await patch(oldDom.parentNode, rendered, oldRendered);\r\n newVNode._domNode = rendered?._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 newVNode._domNode = newDom;\r\n }\r\n\r\n if (oldCtx && newType !== oldType) {\r\n unmountVNode(oldVNode);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n const el = oldVNode._domNode;\r\n if (!el || el.nodeType !== 1) {\r\n const newDom = await createDom(newVNode);\r\n if (parent && newDom instanceof Node) {\r\n parent.appendChild(newDom);\r\n }\r\n unmountVNode(oldVNode);\r\n return;\r\n }\r\n\r\n updateProps(el, newVNode.props, oldVNode.props);\r\n newVNode._domNode = el;\r\n\r\n const newChildren = newVNode.props?.children || [];\r\n const oldChildren = oldVNode.props?.children || [];\r\n await patchChildren(el, newChildren, oldChildren);\r\n}\r\n\r\n/**\r\n * Patch children with keyed reconciliation\r\n * @param {Node} parent\r\n * @param {Array} newChildren\r\n * @param {Array} oldChildren\r\n */\r\nasync function patchChildren(parent, newChildren, oldChildren) {\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 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) dom.parentNode.removeChild(dom);\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();\r\n const oldIndexMap = new Map();\r\n\r\n oldChildren.forEach((child, idx) => {\r\n if (child?.key != null) {\r\n oldKeyMap.set(child.key, child);\r\n oldIndexMap.set(child.key, idx);\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) dom.parentNode.removeChild(dom);\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);\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);\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);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/* ---------------------- Unmount ---------------------- */\r\n\r\n/**\r\n * Unmount vnode recursively and cleanup\r\n * @param {object} vnode\r\n */\r\nfunction unmountVNode(vnode) {\r\n if (!vnode) return;\r\n\r\n // FIX: Clean up text node subscription\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 if (ctx) {\r\n // FIX 7: Mark as unmounted to prevent rerender attempts\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;\r\n\r\n componentInstances.delete(vnode);\r\n pendingRerenders.delete(ctx);\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 eid = vnode._domNode._rest_eid;\r\n if (eid) {\r\n delegatedEvents.forEach((map) => map.delete(eid));\r\n }\r\n\r\n // FIX: Clean up reactive class subscriptions\r\n if (vnode._domNode._fynixCleanups) {\r\n vnode._domNode._fynixCleanups.forEach((cleanup) => {\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 vnode._domNode._fynixCleanups = null;\r\n }\r\n }\r\n\r\n if (vnode.props?.children)\r\n vnode.props.children.forEach((c) => unmountVNode(c));\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 * Update DOM props\r\n * @param {HTMLElement} el\r\n * @param {object} newProps\r\n * @param {object} oldProps\r\n */\r\nfunction updateProps(el, newProps = {}, oldProps = {}) {\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 if (!(k in newProps)) {\r\n if (k.startsWith(\"r-\")) {\r\n const eid = el._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[k] = false;\r\n } else if (DOM_PROPERTIES.has(k)) el[k] = \"\";\r\n else el.removeAttribute(k);\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) setProperty(el, k, v);\r\n }\r\n}\r\n\r\n/* ---------------------- Mount ---------------------- */\r\n\r\n/**\r\n * Mount the app component to a root DOM node\r\n * @param {function} AppComponent\r\n * @param {string|Element} root\r\n * @param {boolean} [hydrate=false]\r\n * @param {object} [props={}]\r\n */\r\nexport function mount(AppComponent, root, hydrate = false, props = {}) {\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 = null;\r\n let currentProps = props;\r\n let appVNode = null;\r\n let isRendering = false;\r\n\r\n async function renderApp() {\r\n // FIX 8: Prevent concurrent renders\r\n if (isRendering) {\r\n return;\r\n }\r\n\r\n isRendering = true;\r\n\r\n try {\r\n removeErrorOverlay();\r\n const propsToUse =\r\n window.__lastRouteProps ||\r\n window.__fynix__?.lastRouteProps ||\r\n 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);\r\n } finally {\r\n isRendering = false;\r\n }\r\n }\r\n\r\n rootRenderFn = renderApp;\r\n window.__fynix__ = window.__fynix__ || {};\r\n window.__fynix__.rerender = renderApp;\r\n renderApp();\r\n\r\n if (import.meta.hot) {\r\n if (!window.__fynix__.hmr) {\r\n window.__fynix__.hmr = async ({ mod }) => {\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 window.__fynix__.rerender?.();\r\n }\r\n } catch (err) {\r\n console.error(\"[Fynix HMR] update error:\", err);\r\n showErrorOverlay(err);\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 nixState,\r\n nixEffect,\r\n nixStore,\r\n nixInterval,\r\n nixAsync,\r\n nixCallback,\r\n nixComputed,\r\n nixMemo,\r\n nixDebounce,\r\n nixPrevious,\r\n nixLocalStorage,\r\n nixRef,\r\n nixLazy,\r\n Suspense,\r\n nixForm,\r\n nixAsyncCached,\r\n nixAsyncDebounce,\r\n nixAsyncQuery,\r\n nixEffectAlways,\r\n nixEffectOnce,\r\n nixFormAsync,\r\n nixLazyAsync,\r\n nixLazyFormAsync,\r\n Path,\r\n Button,\r\n createFynix,\r\n};\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["vnode", "newChildren", "oldChildren"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fynixorg/ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Core package for Fynix UI framework.",
|
|
6
6
|
"main": "dist/fynix/index.js",
|
|
7
|
-
"types": "runtime.d.ts",
|
|
7
|
+
"types": "dist/runtime.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": "./dist/runtime.js",
|
|
10
10
|
"./context": "./dist/context/context.js",
|
|
@@ -40,9 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
42
|
"dist/",
|
|
43
|
-
"types/"
|
|
44
|
-
"runtime.d.ts",
|
|
45
|
-
"router/"
|
|
43
|
+
"types/"
|
|
46
44
|
],
|
|
47
45
|
"keywords": [
|
|
48
46
|
"fynix",
|
package/types/global.d.ts
CHANGED
package/router/router.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// Type definitions for Fynix Router
|
|
2
|
-
|
|
3
|
-
export interface FynixRouter {
|
|
4
|
-
mountRouter(selector?: string): void;
|
|
5
|
-
navigate(path: string, props?: Record<string, any>): void;
|
|
6
|
-
replace(path: string, props?: Record<string, any>): void;
|
|
7
|
-
back(): void;
|
|
8
|
-
cleanup(): void;
|
|
9
|
-
routes: Record<string, any>;
|
|
10
|
-
dynamicRoutes: Array<{
|
|
11
|
-
pattern: string;
|
|
12
|
-
regex: RegExp;
|
|
13
|
-
component: any;
|
|
14
|
-
params: string[];
|
|
15
|
-
}>;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export default function createFynix(): FynixRouter;
|
|
19
|
-
|
|
20
|
-
export function setLinkProps(key: string, props: Record<string, any>): void;
|
|
21
|
-
export function clearLinkProps(key: string): void;
|