@fynixorg/ui 1.0.10 → 1.0.12

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.
Files changed (127) hide show
  1. package/LICENSE +21 -0
  2. package/dist/README.md +36 -0
  3. package/dist/context/context.d.ts +19 -0
  4. package/dist/context/context.d.ts.map +1 -0
  5. package/dist/context/context.js +3 -11
  6. package/dist/context/context.js.map +3 -3
  7. package/dist/custom/button.d.ts +2 -0
  8. package/dist/custom/button.d.ts.map +1 -0
  9. package/dist/custom/button.js +2 -9
  10. package/dist/custom/button.js.map +3 -3
  11. package/dist/custom/index.d.ts +3 -0
  12. package/dist/custom/index.d.ts.map +1 -0
  13. package/dist/custom/index.js +2 -7
  14. package/dist/custom/index.js.map +3 -3
  15. package/dist/custom/path.d.ts +14 -0
  16. package/dist/custom/path.d.ts.map +1 -0
  17. package/dist/custom/path.js +17 -34
  18. package/dist/custom/path.js.map +3 -3
  19. package/dist/error/errorOverlay.d.ts +3 -0
  20. package/dist/error/errorOverlay.d.ts.map +1 -0
  21. package/dist/error/errorOverlay.js +82 -91
  22. package/dist/error/errorOverlay.js.map +3 -3
  23. package/dist/fynix/index.d.ts +5 -0
  24. package/dist/fynix/index.d.ts.map +1 -0
  25. package/dist/fynix/index.js +2 -7
  26. package/dist/fynix/index.js.map +3 -3
  27. package/dist/hooks/nixAsync.d.ts +14 -0
  28. package/dist/hooks/nixAsync.d.ts.map +1 -0
  29. package/dist/hooks/nixAsync.js +38 -43
  30. package/dist/hooks/nixAsync.js.map +3 -3
  31. package/dist/hooks/nixAsyncCache.d.ts +14 -0
  32. package/dist/hooks/nixAsyncCache.d.ts.map +1 -0
  33. package/dist/hooks/nixAsyncCache.js +57 -59
  34. package/dist/hooks/nixAsyncCache.js.map +3 -3
  35. package/dist/hooks/nixAsyncDebounce.d.ts +22 -0
  36. package/dist/hooks/nixAsyncDebounce.d.ts.map +1 -0
  37. package/dist/hooks/nixAsyncDebounce.js +74 -85
  38. package/dist/hooks/nixAsyncDebounce.js.map +3 -3
  39. package/dist/hooks/nixAsyncQuery.d.ts +16 -0
  40. package/dist/hooks/nixAsyncQuery.d.ts.map +1 -0
  41. package/dist/hooks/nixAsyncQuery.js +85 -79
  42. package/dist/hooks/nixAsyncQuery.js.map +3 -3
  43. package/dist/hooks/nixCallback.d.ts +2 -0
  44. package/dist/hooks/nixCallback.d.ts.map +1 -0
  45. package/dist/hooks/nixCallback.js +30 -40
  46. package/dist/hooks/nixCallback.js.map +3 -3
  47. package/dist/hooks/nixComputed.d.ts +16 -0
  48. package/dist/hooks/nixComputed.d.ts.map +1 -0
  49. package/dist/hooks/nixComputed.js +166 -198
  50. package/dist/hooks/nixComputed.js.map +4 -4
  51. package/dist/hooks/nixDebounce.d.ts +11 -0
  52. package/dist/hooks/nixDebounce.d.ts.map +1 -0
  53. package/dist/hooks/nixDebounce.js +53 -58
  54. package/dist/hooks/nixDebounce.js.map +3 -3
  55. package/dist/hooks/nixEffect.d.ts +4 -0
  56. package/dist/hooks/nixEffect.d.ts.map +1 -0
  57. package/dist/hooks/nixEffect.js +65 -75
  58. package/dist/hooks/nixEffect.js.map +3 -3
  59. package/dist/hooks/nixForm.d.ts +33 -0
  60. package/dist/hooks/nixForm.d.ts.map +1 -0
  61. package/dist/hooks/nixForm.js +110 -120
  62. package/dist/hooks/nixForm.js.map +3 -3
  63. package/dist/hooks/nixFormAsync.d.ts +42 -0
  64. package/dist/hooks/nixFormAsync.d.ts.map +1 -0
  65. package/dist/hooks/nixFormAsync.js +158 -167
  66. package/dist/hooks/nixFormAsync.js.map +3 -3
  67. package/dist/hooks/nixInterval.d.ts +2 -0
  68. package/dist/hooks/nixInterval.d.ts.map +1 -0
  69. package/dist/hooks/nixInterval.js +21 -27
  70. package/dist/hooks/nixInterval.js.map +3 -3
  71. package/dist/hooks/nixLazy.d.ts +8 -0
  72. package/dist/hooks/nixLazy.d.ts.map +1 -0
  73. package/dist/hooks/nixLazy.js +53 -58
  74. package/dist/hooks/nixLazy.js.map +3 -3
  75. package/dist/hooks/nixLazyAsync.d.ts +10 -0
  76. package/dist/hooks/nixLazyAsync.d.ts.map +1 -0
  77. package/dist/hooks/nixLazyAsync.js +65 -71
  78. package/dist/hooks/nixLazyAsync.js.map +3 -3
  79. package/dist/hooks/nixLazyFormAsync.d.ts +50 -0
  80. package/dist/hooks/nixLazyFormAsync.d.ts.map +1 -0
  81. package/dist/hooks/nixLazyFormAsync.js +209 -213
  82. package/dist/hooks/nixLazyFormAsync.js.map +3 -3
  83. package/dist/hooks/nixLocalStorage.d.ts +5 -0
  84. package/dist/hooks/nixLocalStorage.d.ts.map +1 -0
  85. package/dist/hooks/nixLocalStorage.js +21 -25
  86. package/dist/hooks/nixLocalStorage.js.map +3 -3
  87. package/dist/hooks/nixMemo.d.ts +2 -0
  88. package/dist/hooks/nixMemo.d.ts.map +1 -0
  89. package/dist/hooks/nixMemo.js +27 -31
  90. package/dist/hooks/nixMemo.js.map +3 -3
  91. package/dist/hooks/nixPrevious.d.ts +2 -0
  92. package/dist/hooks/nixPrevious.d.ts.map +1 -0
  93. package/dist/hooks/nixPrevious.js +13 -19
  94. package/dist/hooks/nixPrevious.js.map +3 -3
  95. package/dist/hooks/nixRef.d.ts +4 -0
  96. package/dist/hooks/nixRef.d.ts.map +1 -0
  97. package/dist/hooks/nixRef.js +14 -20
  98. package/dist/hooks/nixRef.js.map +3 -3
  99. package/dist/hooks/nixState.d.ts +15 -0
  100. package/dist/hooks/nixState.d.ts.map +1 -0
  101. package/dist/hooks/nixState.js +120 -173
  102. package/dist/hooks/nixState.js.map +3 -3
  103. package/dist/hooks/nixStore.d.ts +7 -0
  104. package/dist/hooks/nixStore.d.ts.map +1 -0
  105. package/dist/hooks/nixStore.js +48 -54
  106. package/dist/hooks/nixStore.js.map +3 -3
  107. package/dist/package.json +213 -0
  108. package/dist/plugins/vite-plugin-res.d.ts +41 -0
  109. package/dist/plugins/vite-plugin-res.d.ts.map +1 -0
  110. package/dist/plugins/vite-plugin-res.js +620 -33
  111. package/dist/plugins/vite-plugin-res.js.map +4 -4
  112. package/dist/router/router.d.ts +35 -0
  113. package/dist/router/router.d.ts.map +1 -0
  114. package/dist/router/router.js +520 -486
  115. package/dist/router/router.js.map +3 -3
  116. package/dist/runtime.d.ts +62 -0
  117. package/dist/runtime.d.ts.map +1 -0
  118. package/dist/runtime.js +833 -820
  119. package/dist/runtime.js.map +4 -4
  120. package/package.json +226 -43
  121. package/types/fnx.d.ts +72 -0
  122. package/types/fynix-ui.d.ts +323 -0
  123. package/types/global.d.ts +46 -6
  124. package/types/index.d.ts +37 -0
  125. package/types/vite-env.d.ts +553 -0
  126. package/runtime.d.ts +0 -83
  127. package/types/jsx.d.ts +0 -692
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 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 /** @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
- "names": ["vnode", "newChildren", "oldChildren"]
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": "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",
6
+ "names": ["vnode", "newChildren", "oldChildren", "win"]
7
7
  }
package/package.json CHANGED
@@ -1,63 +1,246 @@
1
1
  {
2
2
  "name": "@fynixorg/ui",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "type": "module",
5
- "description": "Core package for Fynix UI framework.",
6
- "main": "dist/fynix/index.js",
7
- "types": "runtime.d.ts",
5
+ "description": "Core package for Fynix UI framework - A lightweight, reactive UI framework with TypeScript support.",
6
+ "main": "./dist/fynix/index.js",
7
+ "module": "./dist/fynix/index.js",
8
+ "types": "./dist/fynix/index.d.ts",
8
9
  "exports": {
9
- ".": "./dist/runtime.js",
10
- "./context": "./dist/context/context.js",
11
- "./custom": "./dist/custom/index.js",
12
- "./custom/button": "./dist/custom/button.js",
13
- "./custom/path": "./dist/custom/path.js",
14
- "./error": "./dist/error/errorOverlay.js",
15
- "./fynix": "./dist/fynix/index.js",
16
- "./hooks/nixAsync": "./dist/hooks/nixAsync.js",
17
- "./hooks/nixAsyncCache": "./dist/hooks/nixAsyncCache.js",
18
- "./hooks/nixAsyncDebounce": "./dist/hooks/nixAsyncDebounce.js",
19
- "./hooks/nixAsyncQuery": "./dist/hooks/nixAsyncQuery.js",
20
- "./hooks/nixCallback": "./dist/hooks/nixCallback.js",
21
- "./hooks/nixComputed": "./dist/hooks/nixComputed.js",
22
- "./hooks/nixDebounce": "./dist/hooks/nixDebounce.js",
23
- "./hooks/nixEffect": "./dist/hooks/nixEffect.js",
24
- "./hooks/nixForm": "./dist/hooks/nixForm.js",
25
- "./hooks/nixFormAsync": "./dist/hooks/nixFormAsync.js",
26
- "./hooks/nixInterval": "./dist/hooks/nixInterval.js",
27
- "./hooks/nixLazy": "./dist/hooks/nixLazy.js",
28
- "./hooks/nixLazyAsync": "./dist/hooks/nixLazyAsync.js",
29
- "./hooks/nixLazyFormAsync": "./dist/hooks/nixLazyFormAsync.js",
30
- "./hooks/nixLocalStorage": "./dist/hooks/nixLocalStorage.js",
31
- "./hooks/nixMemo": "./dist/hooks/nixMemo.js",
32
- "./hooks/nixPrevious": "./dist/hooks/nixPrevious.js",
33
- "./hooks/nixRef": "./dist/hooks/nixRef.js",
34
- "./hooks/nixState": "./dist/hooks/nixState.js",
35
- "./hooks/nixStore": "./dist/hooks/nixStore.js",
36
- "./plugins/vite-plugin-res": "./dist/plugins/vite-plugin-res.js",
37
- "./router": "./dist/router/router.js",
38
- "./types/jsx": "./types/jsx.d.ts",
39
- "./types/global": "./types/global.d.ts"
10
+ ".": {
11
+ "types": "./dist/fynix/index.d.ts",
12
+ "import": "./dist/fynix/index.js",
13
+ "default": "./dist/fynix/index.js"
14
+ },
15
+ "./runtime": {
16
+ "types": "./dist/runtime.d.ts",
17
+ "import": "./dist/runtime.js"
18
+ },
19
+ "./context": {
20
+ "types": "./dist/context/context.d.ts",
21
+ "import": "./dist/context/context.js"
22
+ },
23
+ "./custom": {
24
+ "types": "./dist/custom/index.d.ts",
25
+ "import": "./dist/custom/index.js"
26
+ },
27
+ "./custom/button": {
28
+ "types": "./dist/custom/button.d.ts",
29
+ "import": "./dist/custom/button.js"
30
+ },
31
+ "./custom/path": {
32
+ "types": "./dist/custom/path.d.ts",
33
+ "import": "./dist/custom/path.js"
34
+ },
35
+ "./error": {
36
+ "types": "./dist/error/errorOverlay.d.ts",
37
+ "import": "./dist/error/errorOverlay.js"
38
+ },
39
+ "./router": {
40
+ "types": "./dist/router/router.d.ts",
41
+ "import": "./dist/router/router.js"
42
+ },
43
+ "./hooks/nixState": {
44
+ "types": "./dist/hooks/nixState.d.ts",
45
+ "import": "./dist/hooks/nixState.js"
46
+ },
47
+ "./hooks/nixStore": {
48
+ "types": "./dist/hooks/nixStore.d.ts",
49
+ "import": "./dist/hooks/nixStore.js"
50
+ },
51
+ "./hooks/nixEffect": {
52
+ "types": "./dist/hooks/nixEffect.d.ts",
53
+ "import": "./dist/hooks/nixEffect.js"
54
+ },
55
+ "./hooks/nixAsync": {
56
+ "types": "./dist/hooks/nixAsync.d.ts",
57
+ "import": "./dist/hooks/nixAsync.js"
58
+ },
59
+ "./hooks/nixAsyncCache": {
60
+ "types": "./dist/hooks/nixAsyncCache.d.ts",
61
+ "import": "./dist/hooks/nixAsyncCache.js"
62
+ },
63
+ "./hooks/nixAsyncDebounce": {
64
+ "types": "./dist/hooks/nixAsyncDebounce.d.ts",
65
+ "import": "./dist/hooks/nixAsyncDebounce.js"
66
+ },
67
+ "./hooks/nixAsyncQuery": {
68
+ "types": "./dist/hooks/nixAsyncQuery.d.ts",
69
+ "import": "./dist/hooks/nixAsyncQuery.js"
70
+ },
71
+ "./hooks/nixCallback": {
72
+ "types": "./dist/hooks/nixCallback.d.ts",
73
+ "import": "./dist/hooks/nixCallback.js"
74
+ },
75
+ "./hooks/nixComputed": {
76
+ "types": "./dist/hooks/nixComputed.d.ts",
77
+ "import": "./dist/hooks/nixComputed.js"
78
+ },
79
+ "./hooks/nixDebounce": {
80
+ "types": "./dist/hooks/nixDebounce.d.ts",
81
+ "import": "./dist/hooks/nixDebounce.js"
82
+ },
83
+ "./hooks/nixForm": {
84
+ "types": "./dist/hooks/nixForm.d.ts",
85
+ "import": "./dist/hooks/nixForm.js"
86
+ },
87
+ "./hooks/nixFormAsync": {
88
+ "types": "./dist/hooks/nixFormAsync.d.ts",
89
+ "import": "./dist/hooks/nixFormAsync.js"
90
+ },
91
+ "./hooks/nixInterval": {
92
+ "types": "./dist/hooks/nixInterval.d.ts",
93
+ "import": "./dist/hooks/nixInterval.js"
94
+ },
95
+ "./hooks/nixLazy": {
96
+ "types": "./dist/hooks/nixLazy.d.ts",
97
+ "import": "./dist/hooks/nixLazy.js"
98
+ },
99
+ "./hooks/nixLazyAsync": {
100
+ "types": "./dist/hooks/nixLazyAsync.d.ts",
101
+ "import": "./dist/hooks/nixLazyAsync.js"
102
+ },
103
+ "./hooks/nixLazyFormAsync": {
104
+ "types": "./dist/hooks/nixLazyFormAsync.d.ts",
105
+ "import": "./dist/hooks/nixLazyFormAsync.js"
106
+ },
107
+ "./hooks/nixLocalStorage": {
108
+ "types": "./dist/hooks/nixLocalStorage.d.ts",
109
+ "import": "./dist/hooks/nixLocalStorage.js"
110
+ },
111
+ "./hooks/nixMemo": {
112
+ "types": "./dist/hooks/nixMemo.d.ts",
113
+ "import": "./dist/hooks/nixMemo.js"
114
+ },
115
+ "./hooks/nixPrevious": {
116
+ "types": "./dist/hooks/nixPrevious.d.ts",
117
+ "import": "./dist/hooks/nixPrevious.js"
118
+ },
119
+ "./hooks/nixRef": {
120
+ "types": "./dist/hooks/nixRef.d.ts",
121
+ "import": "./dist/hooks/nixRef.js"
122
+ },
123
+ "./plugins/vite-plugin-res": {
124
+ "types": "./dist/plugins/vite-plugin-res.d.ts",
125
+ "import": "./dist/plugins/vite-plugin-res.js"
126
+ },
127
+ "./types": {
128
+ "types": "./types/index.d.ts"
129
+ },
130
+ "./types/jsx": {
131
+ "types": "./types/jsx.d.ts"
132
+ },
133
+ "./types/global": {
134
+ "types": "./types/global.d.ts"
135
+ },
136
+ "./types/fnx": {
137
+ "types": "./types/fnx.d.ts"
138
+ },
139
+ "./package.json": "./package.json"
40
140
  },
41
141
  "files": [
42
142
  "dist/",
43
143
  "types/",
44
- "runtime.d.ts"
144
+ "README.md",
145
+ "LICENSE"
45
146
  ],
46
147
  "keywords": [
47
148
  "fynix",
48
149
  "ui",
49
150
  "framework",
50
- "core"
151
+ "reactive",
152
+ "typescript",
153
+ "jsx",
154
+ "virtual-dom",
155
+ "hooks",
156
+ "router",
157
+ "state-management"
51
158
  ],
52
- "author": "Resty Gonzales",
159
+ "author": {
160
+ "name": "Resty Gonzales",
161
+ "email": "restygonzales749@gmail.com"
162
+ },
163
+ "repository": {
164
+ "type": "git",
165
+ "url": "https://github.com/fynixorg/ui.git"
166
+ },
167
+ "bugs": {
168
+ "url": "https://github.com/fynixorg/ui/issues"
169
+ },
170
+ "homepage": "https://github.com/fynixorg/ui#readme",
53
171
  "license": "MIT",
172
+ "engines": {
173
+ "node": ">=18.0.0",
174
+ "npm": ">=9.0.0"
175
+ },
176
+ "publishConfig": {
177
+ "access": "public",
178
+ "registry": "https://registry.npmjs.org/"
179
+ },
180
+ "scripts": {
181
+ "dev": "vite",
182
+ "build": "npm run clean && npm run type-check && npm run build:esbuild && npm run build:types",
183
+ "build:esbuild": "node build.js",
184
+ "build:types": "tsc --project tsconfig.build.json",
185
+ "type-check": "tsc --noEmit",
186
+ "type-check:watch": "tsc --noEmit --watch",
187
+ "clean": "rimraf dist",
188
+ "lint": "eslint . --ext .fnx,.ts,.tsx,.js,.jsx --max-warnings 0",
189
+ "lint:fix": "eslint . --ext .fnx,.ts,.tsx,.js,.jsx --fix",
190
+ "format": "prettier --write \"**/*.{.fnx,ts,tsx,js,jsx,json,css,md}\"",
191
+ "format:check": "prettier --check \"**/*.{.fnx,ts,tsx,js,jsx,json,css,md}\"",
192
+ "test": "vitest run",
193
+ "test:watch": "vitest",
194
+ "test:coverage": "vitest run --coverage",
195
+ "prepublishOnly": "npm run build",
196
+ "prepack": "npm run build",
197
+ "version": "npm run format && git add -A",
198
+ "postversion": "git push && git push --tags"
199
+ },
54
200
  "devDependencies": {
55
- "@types/node": "^25.0.3",
56
- "esbuild": "^0.20.0",
201
+ "@types/node": "^22.10.2",
202
+ "@typescript-eslint/eslint-plugin": "^8.19.1",
203
+ "@typescript-eslint/parser": "^8.19.1",
204
+ "@vitest/coverage-v8": "^2.1.8",
205
+ "esbuild": "^0.24.2",
206
+ "eslint": "^9.18.0",
207
+ "prettier": "^3.4.2",
208
+ "rimraf": "^6.1.2",
57
209
  "typescript": "^5.9.3",
58
- "vite": "^7.3.0"
210
+ "vitest": "^2.1.8",
211
+ "vite": "^7.1.11"
59
212
  },
60
- "scripts": {
61
- "build": "node build.js"
213
+ "peerDependencies": {
214
+ "typescript": ">=5.0.0",
215
+ "vite": "^6.0.0 || ^7.0.0"
216
+ },
217
+ "peerDependenciesMeta": {
218
+ "typescript": {
219
+ "optional": true
220
+ },
221
+ "vite": {
222
+ "optional": true
223
+ }
224
+ },
225
+ "sideEffects": false,
226
+ "typesVersions": {
227
+ "*": {
228
+ "*": [
229
+ "./dist/*"
230
+ ],
231
+ "types": [
232
+ "./types/index.d.ts"
233
+ ],
234
+ "types/jsx": [
235
+ "./types/jsx.d.ts"
236
+ ],
237
+ "types/global": [
238
+ "./types/global.d.ts"
239
+ ]
240
+ }
241
+ },
242
+ "dependencies": {
243
+ "fdir": "^6.5.0",
244
+ "rollup": "^4.56.0"
62
245
  }
63
246
  }
package/types/fnx.d.ts ADDED
@@ -0,0 +1,72 @@
1
+ /* MIT License
2
+
3
+ * Copyright (c) 2026 Resty Gonzales
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ * SOFTWARE.
22
+ */
23
+
24
+ /**
25
+ * Virtual DOM node type for Fynix
26
+ */
27
+ export interface VNode {
28
+ type: string | symbol | ((props: any) => any);
29
+ props: Record<string, any>;
30
+ key: string | number | null;
31
+ _domNode?: Node;
32
+ _rendered?: VNode;
33
+ _state?: any;
34
+ }
35
+
36
+ /**
37
+ * Props type for Fynix components
38
+ */
39
+ export interface FynixComponentProps {
40
+ children?: VNode | VNode[];
41
+ key?: string | number;
42
+ [prop: string]: any;
43
+ }
44
+
45
+ /**
46
+ * Fynix component function type
47
+ */
48
+ export type FynixComponent<
49
+ P extends FynixComponentProps = FynixComponentProps,
50
+ > = (props: P) => VNode | Promise<VNode>;
51
+
52
+ /**
53
+ * Parsed SFC structure for .fnx files
54
+ */
55
+ export interface ParsedFnxFile {
56
+ /** The <logic> block content */
57
+ logic: string;
58
+ /** The <view> block content (JSX) */
59
+ view: string;
60
+ /** The <style> block content */
61
+ style: string;
62
+ /** Whether the style is scoped */
63
+ isScoped: boolean;
64
+ }
65
+
66
+ /**
67
+ * Module declaration for .fnx files with enhanced typing
68
+ */
69
+ declare module "*.fnx" {
70
+ const Component: FynixComponent;
71
+ export default Component;
72
+ }