flexium 0.12.9 → 0.12.11

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.
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunk7BXR4ZFD_js=require('./chunk-7BXR4ZFD.js'),chunkENWGYQNU_js=require('./chunk-ENWGYQNU.js');var y=new Map;function h(o){return JSON.stringify(o)}function R(o,a){if(a?.key&&!Array.isArray(a.key))throw new Error("State key must be an array");let u=chunkENWGYQNU_js.h(()=>chunk7BXR4ZFD_js.a({container:void 0,serializedKey:void 0})),p=a?.key,i=p?h(p):void 0,v=i!==u.serializedKey;if(typeof o=="function"&&a?.deps!==void 0){let s=o,t=chunkENWGYQNU_js.h(()=>({value:void 0,prevDeps:void 0,hasRun:false})),e=true;if(t.hasRun&&t.prevDeps&&(e=a.deps.length!==t.prevDeps.length||a.deps.some((n,l)=>n!==t.prevDeps[l])),e){let n=s();if(n instanceof Promise)throw new Error("deps option is not supported with async functions");t.value=n,t.prevDeps=[...a.deps],t.hasRun=true;}let c={refetch:async()=>{},get loading(){return false},get error(){return null},get status(){return "success"}};return [t.value,c]}if(!u.container||v)if(u.serializedKey=i,i&&y.has(i))u.container=y.get(i);else {let s;if(typeof o=="function"){let t=o,e=chunk7BXR4ZFD_js.a({type:"resource",value:void 0,loading:true,error:null,status:"idle",run:()=>{}}),c=()=>{try{let n=t();n instanceof Promise?(e.loading=!0,e.status="loading",e.error=null,n.then(l=>{e.value=l,e.status="success",e.loading=!1;}).catch(l=>{e.error=l,e.status="error",e.loading=!1;})):(e.value=n,e.status="success",e.loading=!1,e.error=null);}catch(n){e.error=n,e.status="error",e.loading=false;}};e.run=c,chunkENWGYQNU_js.b(c),s=e;}else s=chunk7BXR4ZFD_js.a({type:"signal",value:o});i&&y.set(i,s),u.container=s;}let r=u.container,g=r.value;return r.type==="signal"?[g,t=>{typeof t=="function"?r.value=t(r.value):r.value=t;}]:[g,{refetch:async()=>{r.run();},get loading(){return r.loading},get error(){return r.error},get status(){return r.status}}]}exports.a=R;//# sourceMappingURL=chunk-APAMPY43.js.map
2
+ //# sourceMappingURL=chunk-APAMPY43.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/state.ts"],"names":["globalRegistry","serializeKey","key","state","input","options","stateRef","hook","reactive","currentKey","serializedKey","keyChanged","fn","memoState","hasChanged","d","i","result","control","newContainer","run","data","err","unsafeEffect","container","currentValue","newValue"],"mappings":"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","file":"chunk-APAMPY43.js","sourcesContent":["\nimport { reactive } from './reactive'\nimport { unsafeEffect } from './effect'\nimport { hook } from './hook'\n\nexport type StateSetter<T> = (newValue: T | ((prev: T) => T)) => void\n\nexport type ResourceControl = {\n refetch: () => Promise<void>\n readonly loading: boolean\n readonly error: unknown\n readonly status: 'idle' | 'loading' | 'success' | 'error'\n}\n\nexport type StateAction<T> = StateSetter<T> | ResourceControl\n\nexport interface StateOptions {\n key?: unknown[]\n deps?: any[]\n}\n\n// Global State Registry\nconst globalRegistry = new Map<string, any>()\n\nfunction serializeKey(key: unknown[]): string {\n return JSON.stringify(key)\n}\n\n// Overloads\nexport function state<T>(fn: () => Promise<T>, options?: StateOptions): [T | undefined, ResourceControl]\nexport function state<T>(fn: () => T, options?: StateOptions): [T, ResourceControl]\nexport function state<T>(initialValue: T extends Function ? never : T, options?: StateOptions): [T, StateSetter<T>]\nexport function state<T>(input: T | (() => T) | (() => Promise<T>), options?: StateOptions): any {\n // 0. Validate key if provided\n if (options?.key && !Array.isArray(options.key)) {\n throw new Error('State key must be an array')\n }\n\n // Hook Wrapper: Store container reference and track key\n const stateRef = hook(() => {\n return reactive({\n container: undefined as any,\n serializedKey: undefined as any\n })\n })\n\n // Compute serialized key\n const currentKey = options?.key\n const serializedKey = currentKey ? serializeKey(currentKey) : undefined\n\n // Check if key has changed by comparing serialized strings\n const keyChanged = serializedKey !== stateRef.serializedKey\n\n // DEPS MODE: Handle separately - always check deps on every render\n if (typeof input === 'function' && options?.deps !== undefined) {\n const fn = input as Function\n const memoState = hook(() => ({\n value: undefined as T | undefined,\n prevDeps: undefined as any[] | undefined,\n hasRun: false\n }))\n\n let hasChanged = true\n if (memoState.hasRun && memoState.prevDeps) {\n hasChanged = options.deps.length !== memoState.prevDeps.length ||\n options.deps.some((d, i) => d !== memoState.prevDeps![i])\n }\n\n if (hasChanged) {\n const result = fn()\n if (result instanceof Promise) {\n throw new Error('deps option is not supported with async functions')\n }\n memoState.value = result\n memoState.prevDeps = [...options.deps]\n memoState.hasRun = true\n }\n\n const control: ResourceControl = {\n refetch: async () => { },\n get loading() { return false },\n get error() { return null },\n get status() { return 'success' as const }\n }\n return [memoState.value, control]\n }\n\n // If key changed or first time, get/create container\n if (!stateRef.container || keyChanged) {\n stateRef.serializedKey = serializedKey\n\n // Check Registry FIRST\n if (serializedKey && globalRegistry.has(serializedKey)) {\n stateRef.container = globalRegistry.get(serializedKey)\n } else {\n let newContainer: any\n\n // 1. Function (Computed or Resource) - only async functions reach here now\n if (typeof input === 'function') {\n const fn = input as Function\n\n // REACTIVE MODE: Automatic tracking for async functions\n const state = reactive({\n type: 'resource',\n value: undefined as T | undefined,\n loading: true,\n error: null as any,\n status: 'idle' as 'idle' | 'loading' | 'success' | 'error',\n run: () => { }\n })\n\n const run = () => {\n try {\n const result = fn()\n\n if (result instanceof Promise) {\n state.loading = true\n state.status = 'loading'\n state.error = null\n\n result\n .then(data => {\n state.value = data\n state.status = 'success'\n state.loading = false\n })\n .catch(err => {\n state.error = err\n state.status = 'error'\n state.loading = false\n })\n } else {\n state.value = result\n state.status = 'success'\n state.loading = false\n state.error = null\n }\n } catch (err) {\n state.error = err\n state.status = 'error'\n state.loading = false\n }\n }\n\n state.run = run\n\n // Make it reactive!\n unsafeEffect(run)\n\n newContainer = state\n } else {\n // 2. Value (Signal)\n // We return the reactive proxy itself as the container\n newContainer = reactive({\n type: 'signal',\n value: input\n })\n }\n\n // Register in global registry if needed\n if (serializedKey) {\n globalRegistry.set(serializedKey, newContainer)\n }\n\n stateRef.container = newContainer\n }\n }\n\n const container = stateRef.container\n\n // --- RETURN LOGIC ---\n // Access container.value to track dependency in the component's effect\n const currentValue = container.value\n\n if (container.type === 'signal') {\n const setter = (newValue: T | ((prev: T) => T)) => {\n if (typeof newValue === 'function') {\n container.value = (newValue as Function)(container.value)\n } else {\n container.value = newValue\n }\n }\n return [currentValue, setter]\n } else {\n // Resource / Computed\n const control = {\n refetch: async () => { container.run() },\n get loading() { return container.loading },\n get error() { return container.error },\n get status() { return container.status }\n }\n return [currentValue, control]\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {a}from'./chunk-CPJRQL2C.mjs';import {h as h$1,b}from'./chunk-44RZHCII.mjs';var y=new Map;function h(o){return JSON.stringify(o)}function R(o,a$1){if(a$1?.key&&!Array.isArray(a$1.key))throw new Error("State key must be an array");let u=h$1(()=>a({container:void 0,serializedKey:void 0})),p=a$1?.key,i=p?h(p):void 0,v=i!==u.serializedKey;if(typeof o=="function"&&a$1?.deps!==void 0){let s=o,t=h$1(()=>({value:void 0,prevDeps:void 0,hasRun:false})),e=true;if(t.hasRun&&t.prevDeps&&(e=a$1.deps.length!==t.prevDeps.length||a$1.deps.some((n,l)=>n!==t.prevDeps[l])),e){let n=s();if(n instanceof Promise)throw new Error("deps option is not supported with async functions");t.value=n,t.prevDeps=[...a$1.deps],t.hasRun=true;}let c={refetch:async()=>{},get loading(){return false},get error(){return null},get status(){return "success"}};return [t.value,c]}if(!u.container||v)if(u.serializedKey=i,i&&y.has(i))u.container=y.get(i);else {let s;if(typeof o=="function"){let t=o,e=a({type:"resource",value:void 0,loading:true,error:null,status:"idle",run:()=>{}}),c=()=>{try{let n=t();n instanceof Promise?(e.loading=!0,e.status="loading",e.error=null,n.then(l=>{e.value=l,e.status="success",e.loading=!1;}).catch(l=>{e.error=l,e.status="error",e.loading=!1;})):(e.value=n,e.status="success",e.loading=!1,e.error=null);}catch(n){e.error=n,e.status="error",e.loading=false;}};e.run=c,b(c),s=e;}else s=a({type:"signal",value:o});i&&y.set(i,s),u.container=s;}let r=u.container,g=r.value;return r.type==="signal"?[g,t=>{typeof t=="function"?r.value=t(r.value):r.value=t;}]:[g,{refetch:async()=>{r.run();},get loading(){return r.loading},get error(){return r.error},get status(){return r.status}}]}export{R as a};//# sourceMappingURL=chunk-ECB5HZOQ.mjs.map
2
+ //# sourceMappingURL=chunk-ECB5HZOQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/state.ts"],"names":["globalRegistry","serializeKey","key","state","input","options","stateRef","hook","reactive","currentKey","serializedKey","keyChanged","fn","memoState","hasChanged","d","i","result","control","newContainer","run","data","err","unsafeEffect","container","currentValue","newValue"],"mappings":"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","file":"chunk-ECB5HZOQ.mjs","sourcesContent":["\nimport { reactive } from './reactive'\nimport { unsafeEffect } from './effect'\nimport { hook } from './hook'\n\nexport type StateSetter<T> = (newValue: T | ((prev: T) => T)) => void\n\nexport type ResourceControl = {\n refetch: () => Promise<void>\n readonly loading: boolean\n readonly error: unknown\n readonly status: 'idle' | 'loading' | 'success' | 'error'\n}\n\nexport type StateAction<T> = StateSetter<T> | ResourceControl\n\nexport interface StateOptions {\n key?: unknown[]\n deps?: any[]\n}\n\n// Global State Registry\nconst globalRegistry = new Map<string, any>()\n\nfunction serializeKey(key: unknown[]): string {\n return JSON.stringify(key)\n}\n\n// Overloads\nexport function state<T>(fn: () => Promise<T>, options?: StateOptions): [T | undefined, ResourceControl]\nexport function state<T>(fn: () => T, options?: StateOptions): [T, ResourceControl]\nexport function state<T>(initialValue: T extends Function ? never : T, options?: StateOptions): [T, StateSetter<T>]\nexport function state<T>(input: T | (() => T) | (() => Promise<T>), options?: StateOptions): any {\n // 0. Validate key if provided\n if (options?.key && !Array.isArray(options.key)) {\n throw new Error('State key must be an array')\n }\n\n // Hook Wrapper: Store container reference and track key\n const stateRef = hook(() => {\n return reactive({\n container: undefined as any,\n serializedKey: undefined as any\n })\n })\n\n // Compute serialized key\n const currentKey = options?.key\n const serializedKey = currentKey ? serializeKey(currentKey) : undefined\n\n // Check if key has changed by comparing serialized strings\n const keyChanged = serializedKey !== stateRef.serializedKey\n\n // DEPS MODE: Handle separately - always check deps on every render\n if (typeof input === 'function' && options?.deps !== undefined) {\n const fn = input as Function\n const memoState = hook(() => ({\n value: undefined as T | undefined,\n prevDeps: undefined as any[] | undefined,\n hasRun: false\n }))\n\n let hasChanged = true\n if (memoState.hasRun && memoState.prevDeps) {\n hasChanged = options.deps.length !== memoState.prevDeps.length ||\n options.deps.some((d, i) => d !== memoState.prevDeps![i])\n }\n\n if (hasChanged) {\n const result = fn()\n if (result instanceof Promise) {\n throw new Error('deps option is not supported with async functions')\n }\n memoState.value = result\n memoState.prevDeps = [...options.deps]\n memoState.hasRun = true\n }\n\n const control: ResourceControl = {\n refetch: async () => { },\n get loading() { return false },\n get error() { return null },\n get status() { return 'success' as const }\n }\n return [memoState.value, control]\n }\n\n // If key changed or first time, get/create container\n if (!stateRef.container || keyChanged) {\n stateRef.serializedKey = serializedKey\n\n // Check Registry FIRST\n if (serializedKey && globalRegistry.has(serializedKey)) {\n stateRef.container = globalRegistry.get(serializedKey)\n } else {\n let newContainer: any\n\n // 1. Function (Computed or Resource) - only async functions reach here now\n if (typeof input === 'function') {\n const fn = input as Function\n\n // REACTIVE MODE: Automatic tracking for async functions\n const state = reactive({\n type: 'resource',\n value: undefined as T | undefined,\n loading: true,\n error: null as any,\n status: 'idle' as 'idle' | 'loading' | 'success' | 'error',\n run: () => { }\n })\n\n const run = () => {\n try {\n const result = fn()\n\n if (result instanceof Promise) {\n state.loading = true\n state.status = 'loading'\n state.error = null\n\n result\n .then(data => {\n state.value = data\n state.status = 'success'\n state.loading = false\n })\n .catch(err => {\n state.error = err\n state.status = 'error'\n state.loading = false\n })\n } else {\n state.value = result\n state.status = 'success'\n state.loading = false\n state.error = null\n }\n } catch (err) {\n state.error = err\n state.status = 'error'\n state.loading = false\n }\n }\n\n state.run = run\n\n // Make it reactive!\n unsafeEffect(run)\n\n newContainer = state\n } else {\n // 2. Value (Signal)\n // We return the reactive proxy itself as the container\n newContainer = reactive({\n type: 'signal',\n value: input\n })\n }\n\n // Register in global registry if needed\n if (serializedKey) {\n globalRegistry.set(serializedKey, newContainer)\n }\n\n stateRef.container = newContainer\n }\n }\n\n const container = stateRef.container\n\n // --- RETURN LOGIC ---\n // Access container.value to track dependency in the component's effect\n const currentValue = container.value\n\n if (container.type === 'signal') {\n const setter = (newValue: T | ((prev: T) => T)) => {\n if (typeof newValue === 'function') {\n container.value = (newValue as Function)(container.value)\n } else {\n container.value = newValue\n }\n }\n return [currentValue, setter]\n } else {\n // Resource / Computed\n const control = {\n refetch: async () => { container.run() },\n get loading() { return container.loading },\n get error() { return container.error },\n get status() { return container.status }\n }\n return [currentValue, control]\n }\n}\n"]}
package/dist/core.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkLUW7DIEW_js=require('./chunk-LUW7DIEW.js'),chunkIA4FEBFE_js=require('./chunk-IA4FEBFE.js'),chunkKBUONZI2_js=require('./chunk-KBUONZI2.js');require('./chunk-7BXR4ZFD.js'),require('./chunk-ENWGYQNU.js');Object.defineProperty(exports,"context",{enumerable:true,get:function(){return chunkLUW7DIEW_js.b}});Object.defineProperty(exports,"createContext",{enumerable:true,get:function(){return chunkLUW7DIEW_js.a}});Object.defineProperty(exports,"popContext",{enumerable:true,get:function(){return chunkLUW7DIEW_js.d}});Object.defineProperty(exports,"pushContext",{enumerable:true,get:function(){return chunkLUW7DIEW_js.c}});Object.defineProperty(exports,"runWithContext",{enumerable:true,get:function(){return chunkLUW7DIEW_js.f}});Object.defineProperty(exports,"snapshotContext",{enumerable:true,get:function(){return chunkLUW7DIEW_js.e}});Object.defineProperty(exports,"batch",{enumerable:true,get:function(){return chunkIA4FEBFE_js.c}});Object.defineProperty(exports,"effect",{enumerable:true,get:function(){return chunkIA4FEBFE_js.a}});Object.defineProperty(exports,"sync",{enumerable:true,get:function(){return chunkIA4FEBFE_js.b}});Object.defineProperty(exports,"state",{enumerable:true,get:function(){return chunkKBUONZI2_js.a}});//# sourceMappingURL=core.js.map
1
+ 'use strict';var chunkLUW7DIEW_js=require('./chunk-LUW7DIEW.js'),chunkIA4FEBFE_js=require('./chunk-IA4FEBFE.js'),chunkAPAMPY43_js=require('./chunk-APAMPY43.js');require('./chunk-7BXR4ZFD.js'),require('./chunk-ENWGYQNU.js');Object.defineProperty(exports,"context",{enumerable:true,get:function(){return chunkLUW7DIEW_js.b}});Object.defineProperty(exports,"createContext",{enumerable:true,get:function(){return chunkLUW7DIEW_js.a}});Object.defineProperty(exports,"popContext",{enumerable:true,get:function(){return chunkLUW7DIEW_js.d}});Object.defineProperty(exports,"pushContext",{enumerable:true,get:function(){return chunkLUW7DIEW_js.c}});Object.defineProperty(exports,"runWithContext",{enumerable:true,get:function(){return chunkLUW7DIEW_js.f}});Object.defineProperty(exports,"snapshotContext",{enumerable:true,get:function(){return chunkLUW7DIEW_js.e}});Object.defineProperty(exports,"batch",{enumerable:true,get:function(){return chunkIA4FEBFE_js.c}});Object.defineProperty(exports,"effect",{enumerable:true,get:function(){return chunkIA4FEBFE_js.a}});Object.defineProperty(exports,"sync",{enumerable:true,get:function(){return chunkIA4FEBFE_js.b}});Object.defineProperty(exports,"state",{enumerable:true,get:function(){return chunkAPAMPY43_js.a}});//# sourceMappingURL=core.js.map
2
2
  //# sourceMappingURL=core.js.map
package/dist/core.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export{b as context,a as createContext,d as popContext,c as pushContext,f as runWithContext,e as snapshotContext}from'./chunk-LUREDEUB.mjs';export{c as batch,a as effect,b as sync}from'./chunk-S6WF3XNF.mjs';export{a as state}from'./chunk-IOF6L2BT.mjs';import'./chunk-CPJRQL2C.mjs';import'./chunk-44RZHCII.mjs';//# sourceMappingURL=core.mjs.map
1
+ export{b as context,a as createContext,d as popContext,c as pushContext,f as runWithContext,e as snapshotContext}from'./chunk-LUREDEUB.mjs';export{c as batch,a as effect,b as sync}from'./chunk-S6WF3XNF.mjs';export{a as state}from'./chunk-ECB5HZOQ.mjs';import'./chunk-CPJRQL2C.mjs';import'./chunk-44RZHCII.mjs';//# sourceMappingURL=core.mjs.map
2
2
  //# sourceMappingURL=core.mjs.map
package/dist/dom.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkLUW7DIEW_js=require('./chunk-LUW7DIEW.js'),chunkENWGYQNU_js=require('./chunk-ENWGYQNU.js');var m=new WeakMap,h=null;function _(e){e.children.forEach(n=>{_(n);}),e.nodes.forEach(n=>{n.parentNode&&n.parentNode.removeChild(n);}),e.children.clear(),e.parentInstance&&e.parentInstance.children.delete(e);}function b(e,n,a){let f=a||n,s=c=>{let u={...c.props};return c.children&&c.children.length>0&&(u.children=c.children.length===1?c.children[0]:c.children),u},o=e.key!==void 0;m.has(f)||m.set(f,new Map);let t=m.get(f),i;if(o)i=e.key;else {let c=0,u=e.type.name||"anonymous";t.forEach((x,y)=>{typeof y=="string"&&y.startsWith(`__auto_${u}_`)&&c++;}),i=`__auto_${u}_${c}`;}if(t.has(i)){let c=t.get(i);c.vnode=e;let u=s(e);return c.props=u,c.children.clear(),c.renderFn&&c.renderFn(),c.nodes}let r={hooks:[],hookIndex:0,nodes:[],parent:n,vnode:e,props:s(e),key:i,children:new Set,parentInstance:h||void 0};h&&h.children.add(r),t.set(i,r);let d=true,v=()=>{let c=r.vnode,u=r.props;c.type._contextId!==void 0&&chunkLUW7DIEW_js.c(c.type._contextId,u.value);let y=h;h=r;let E=chunkENWGYQNU_js.g(r,()=>c.type(u));if(d){let l=g(E,n);r.nodes=l?Array.isArray(l)?l:[l]:[],d=false;}else {if(r.nodes.length===0){let p=g(E,n);r.nodes=p?Array.isArray(p)?p:[p]:[],h=y;return}let l=r.nodes[0],N=l.parentNode;if(!N){h=y;return}let T=document.createComment("flexium-marker");N.insertBefore(T,l),r.children.forEach(p=>{_(p);}),r.children.clear(),r.nodes.forEach(p=>{p.parentNode&&p.parentNode.removeChild(p);});let O=document.createElement("div"),C=g(E,O,N),M=C?Array.isArray(C)?C:[C]:[];M.forEach(p=>{N.insertBefore(p,T);}),N.removeChild(T),r.nodes=M;}h=y;};return r.renderFn=v,chunkENWGYQNU_js.b(v),r.nodes}function g(e,n,a){let f=a||n;if(e==null||typeof e=="boolean"){let s=document.createTextNode("");return n.appendChild(s),s}if(typeof e=="string"||typeof e=="number"){let s=document.createTextNode(String(e));return n.appendChild(s),s}if(Array.isArray(e)){let s=new Set;m.has(f)&&m.get(f).forEach((r,d)=>s.add(d));let o=[];e.forEach(i=>{let r=g(i,n,a);r&&(Array.isArray(r)?o.push(...r):o.push(r));});let t=new Set;if(m.has(f)&&m.get(f).forEach((r,d)=>t.add(d)),m.has(f)){let i=m.get(f),r=[];s.forEach(d=>{if(!t.has(d)){let v=i.get(d);v&&(_(v),r.push(d));}}),r.forEach(d=>i.delete(d));}return o}if(typeof e=="object"){if(typeof e.type=="string"){let s=document.createElement(e.type);return e.props&&Object.entries(e.props).forEach(([o,t])=>{if(o.startsWith("on")&&typeof t=="function"){let i=o.slice(2).toLowerCase();s.addEventListener(i,t),s.__eventHandlers||(s.__eventHandlers={}),s.__eventHandlers[i]=t;}else R(s,o,t);}),e.children&&e.children.length>0&&e.children.forEach(o=>{g(o,s);}),n.appendChild(s),s}if(typeof e.type=="function")return e.type._contextId!==void 0,b(e,n,a)}return null}function V(e,n){n.innerHTML="",g(e,n);}function W(e,n,...a){return {type:e,props:n||{},children:a,key:n?.key}}function R(e,n,a){a==null?e.removeAttribute(n):n==="style"&&typeof a=="object"?Object.assign(e.style,a):n==="class"?e.className=String(a):n in e&&typeof e[n]!="function"?e[n]=a:e.setAttribute(n,String(a));}function F(e,n){return e.nodeType!==n.nodeType?false:e.nodeType===Node.ELEMENT_NODE&&n.nodeType===Node.ELEMENT_NODE?e.tagName===n.tagName:true}function D(e,n){Array.from(e.attributes).forEach(t=>{n.hasAttribute(t.name)||e.removeAttribute(t.name);}),Array.from(n.attributes).forEach(t=>{e.getAttribute(t.name)!==t.value&&e.setAttribute(t.name,t.value);});let s=e.__eventHandlers||{},o=n.__eventHandlers||{};Object.keys(s).forEach(t=>{o[t]||e.removeEventListener(t,s[t]);}),Object.keys(o).forEach(t=>{s[t]!==o[t]&&(s[t]&&e.removeEventListener(t,s[t]),e.addEventListener(t,o[t]));}),Object.keys(o).length>0?e.__eventHandlers=o:delete e.__eventHandlers,e instanceof HTMLInputElement&&n instanceof HTMLInputElement&&(e.value!==n.value&&(e.value=n.value),e.checked!==n.checked&&(e.checked=n.checked)),e instanceof HTMLTextAreaElement&&n instanceof HTMLTextAreaElement&&e.value!==n.value&&(e.value=n.value),e instanceof HTMLSelectElement&&n instanceof HTMLSelectElement&&e.value!==n.value&&(e.value=n.value);}function S(e,n){let a=Array.from(e.childNodes),f=Array.from(n.childNodes),s=Math.max(a.length,f.length);for(let o=0;o<s;o++){let t=a[o],i=f[o];!t&&i?e.appendChild(i):t&&!i?e.removeChild(t):t&&i&&I(t,i,e);}}function I(e,n,a){F(e,n)?e.nodeType===Node.TEXT_NODE?e.nodeValue!==n.nodeValue&&(e.nodeValue=n.nodeValue):e.nodeType===Node.ELEMENT_NODE&&(D(e,n),S(e,n)):a.replaceChild(n,e);}function B(e,n,a,f){let s=Math.max(e.length,n.length),o=[];for(let t=0;t<s;t++){let i=e[t],r=n[t];!i&&r?(a.insertBefore(r,f),o.push(r)):i&&!r?i.parentNode&&a.removeChild(i):i&&r&&(I(i,r,a),o.push(i));}return o}exports.f=W;exports.reconcile=B;exports.render=V;//# sourceMappingURL=dom.js.map
1
+ 'use strict';var chunkLUW7DIEW_js=require('./chunk-LUW7DIEW.js'),chunkENWGYQNU_js=require('./chunk-ENWGYQNU.js');var l=new WeakMap,m=null;function H(e){e.children.forEach(n=>{H(n);}),e.nodes.forEach(n=>{n.parentNode&&n.parentNode.removeChild(n);}),e.children.clear(),e.parentInstance&&e.parentInstance.children.delete(e);}function E(e,n,o){let c=o||n,r=f=>{let u={...f.props};return f.children&&f.children.length>0&&(u.children=f.children.length===1?f.children[0]:f.children),u},a=e.key!==void 0;l.has(c)||l.set(c,new Map);let t=l.get(c),i;if(a)i=e.key;else {let f=0,u=e.type.name||"anonymous";t.forEach((b,y)=>{typeof y=="string"&&y.startsWith(`__auto_${u}_`)&&f++;}),i=`__auto_${u}_${f}`;}if(t.has(i)){let f=t.get(i);f.vnode=e;let u=r(e);return f.props=u,f.children.clear(),f.renderFn&&f.renderFn(),f.nodes}let s={hooks:[],hookIndex:0,nodes:[],parent:n,vnode:e,props:r(e),key:i,children:new Set,parentInstance:m||void 0};m&&m.children.add(s),t.set(i,s);let d=true,v=()=>{let f=s.vnode,u=s.props;f.type._contextId!==void 0&&chunkLUW7DIEW_js.c(f.type._contextId,u.value);let y=m;m=s;let M=chunkENWGYQNU_js.g(s,()=>f.type(u));if(d){let g=h(M,n);s.nodes=g?Array.isArray(g)?g:[g]:[],s.nodes.forEach(p=>{p.__ownerInstance||(p.__ownerInstance=s);}),d=false;}else {if(s.nodes.length===0){let N=h(M,n);s.nodes=N?Array.isArray(N)?N:[N]:[],m=y;return}let p=s.nodes[0].parentNode;if(!p){m=y;return}let _=document.createComment("flexium-marker"),T=s.nodes[s.nodes.length-1];T.nextSibling?p.insertBefore(_,T.nextSibling):p.appendChild(_),s.children.clear();let O=document.createElement("div"),C=h(M,O,p),R=C?Array.isArray(C)?C:[C]:[],F=P(s.nodes,R,p,_);p.removeChild(_),s.nodes=F;}m=y;};return s.renderFn=v,chunkENWGYQNU_js.b(v),s.nodes}function h(e,n,o){let c=o||n;if(e==null||typeof e=="boolean"){let r=document.createTextNode("");return n.appendChild(r),r}if(typeof e=="string"||typeof e=="number"){let r=document.createTextNode(String(e));return n.appendChild(r),r}if(Array.isArray(e)){let r=new Set;l.has(c)&&l.get(c).forEach((s,d)=>r.add(d));let a=[];e.forEach(i=>{let s=h(i,n,o);s&&(Array.isArray(s)?a.push(...s):a.push(s));});let t=new Set;if(l.has(c)&&l.get(c).forEach((s,d)=>t.add(d)),l.has(c)){let i=l.get(c),s=[];r.forEach(d=>{if(!t.has(d)){let v=i.get(d);v&&(H(v),s.push(d));}}),s.forEach(d=>i.delete(d));}return a}if(typeof e=="object"){if(typeof e.type=="string"){let r=document.createElement(e.type);return e.props&&Object.entries(e.props).forEach(([a,t])=>{if(a.startsWith("on")&&typeof t=="function"){let i=a.slice(2).toLowerCase();r.addEventListener(i,t),r.__eventHandlers||(r.__eventHandlers={}),r.__eventHandlers[i]=t;}else k(r,a,t);}),e.children&&e.children.length>0&&e.children.forEach(a=>{h(a,r);}),n.appendChild(r),r}if(typeof e.type=="function")return e.type._contextId!==void 0,E(e,n,o)}return null}function $(e,n){n.innerHTML="",typeof e=="function"&&(e={type:e,props:{},children:[],key:void 0}),h(e,n);}function B(e,n,...o){return {type:e,props:n||{},children:o,key:n?.key}}function k(e,n,o){o==null?e.removeAttribute(n):n==="style"&&typeof o=="object"?Object.assign(e.style,o):n==="class"?e.className=String(o):n in e&&typeof e[n]!="function"?e[n]=o:e.setAttribute(n,String(o));}function S(e,n){return e.nodeType!==n.nodeType?false:e.nodeType===Node.ELEMENT_NODE&&n.nodeType===Node.ELEMENT_NODE?e.tagName===n.tagName:true}function D(e,n){Array.from(e.attributes).forEach(t=>{n.hasAttribute(t.name)||e.removeAttribute(t.name);}),Array.from(n.attributes).forEach(t=>{e.getAttribute(t.name)!==t.value&&(t.name==="value"&&"value"in e?e.value=t.value:t.name==="checked"&&"checked"in e?e.checked=t.value==="true"||t.value==="":e.setAttribute(t.name,t.value));});let r=e.__eventHandlers||{},a=n.__eventHandlers||{};Object.keys(r).forEach(t=>{a[t]||e.removeEventListener(t,r[t]);}),Object.keys(a).forEach(t=>{r[t]!==a[t]&&(r[t]&&e.removeEventListener(t,r[t]),e.addEventListener(t,a[t]));}),Object.keys(a).length>0?e.__eventHandlers=a:delete e.__eventHandlers,e instanceof HTMLInputElement&&n instanceof HTMLInputElement&&(e.value!==n.value&&(e.value=n.value),e.checked!==n.checked&&(e.checked=n.checked)),e instanceof HTMLTextAreaElement&&n instanceof HTMLTextAreaElement&&e.value!==n.value&&(e.value=n.value),e instanceof HTMLSelectElement&&n instanceof HTMLSelectElement&&e.value!==n.value&&(e.value=n.value);}function j(e,n){let o=Array.from(e.childNodes),c=Array.from(n.childNodes),r=Math.max(o.length,c.length);for(let a=0;a<r;a++){let t=o[a],i=c[a];!t&&i?e.appendChild(i):t&&!i?e.removeChild(t):t&&i&&x(t,i,e);}}function x(e,n,o){if(S(e,n)){let c=n.__ownerInstance;if(c){let r=c.nodes.indexOf(n);r!==-1&&(c.nodes[r]=e),e.__ownerInstance=c,delete n.__ownerInstance;}e.nodeType===Node.TEXT_NODE?e.nodeValue!==n.nodeValue&&(e.nodeValue=n.nodeValue):e.nodeType===Node.ELEMENT_NODE&&(D(e,n),j(e,n));}else o.replaceChild(n,e);}function P(e,n,o,c){let r=Math.max(e.length,n.length),a=[];for(let t=0;t<r;t++){let i=e[t],s=n[t];!i&&s?(o.insertBefore(s,c),a.push(s)):i&&!s?i.parentNode&&o.removeChild(i):i&&s&&(x(i,s,o),a.push(i));}return a}exports.f=B;exports.reconcile=P;exports.render=$;//# sourceMappingURL=dom.js.map
2
2
  //# sourceMappingURL=dom.js.map
package/dist/dom.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dom/index.ts"],"names":["instanceRegistry","currentRenderingInstance","removeComponentInstance","instance","child","node","renderComponent","fnode","parent","registryParent","effectiveRegistryParent","mergeProps","props","hasExplicitKey","parentRegistry","key","instanceCount","componentName","_","k","newProps","isFirstRender","renderFn","currentVnode","currentProps","pushContext","previousRenderingInstance","result","runWithComponent","newNodes","renderNode","firstNode","nodeParent","marker","tempContainer","newNodesArray","unsafeEffect","oldKeysSet","nodes","newKeysSet","keysToRemove","dom","value","eventName","setAttribute","render","app","container","f","type","children","el","canReuse","oldNode","newNode","updateAttributes","oldEl","newEl","attr","oldHandlers","newHandlers","event","reconcileChildren","oldChildren","newChildren","maxLen","i","oldChild","newChild","patchNode","reconcile","oldNodes","beforeMarker","resultNodes"],"mappings":"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","file":"dom.js","sourcesContent":["\nimport { pushContext } from '../core/context'\nimport { runWithComponent, type ComponentInstance } from '../core/hook'\nimport { unsafeEffect } from '../core/effect'\n\n// Types\nexport type FNodeChild = FNode | string | number | boolean | null | undefined | FNodeChild[] | (() => FNode)\n\nexport interface FNode {\n type: string | Function\n props: Record<string, any>\n children: FNodeChild[]\n key?: any\n}\n\n// Extended ComponentInstance for DOM tracking\ninterface DOMComponentInstance extends ComponentInstance {\n nodes: Node[]\n parent: HTMLElement\n vnode: any\n props: any\n key?: any\n renderFn?: () => void // Store render function for manual updates\n children: Set<DOMComponentInstance> // Track child component instances\n parentInstance?: DOMComponentInstance // Track parent component instance\n}\n\n// Registry to store component instances by parent and key\nconst instanceRegistry = new WeakMap<HTMLElement, Map<any, DOMComponentInstance>>()\n\n// Current rendering component instance (for tracking parent-child relationships)\nlet currentRenderingInstance: DOMComponentInstance | null = null\n\n// Recursively remove component instance and all its children\nfunction removeComponentInstance(instance: DOMComponentInstance): void {\n // First, recursively remove all child instances\n instance.children.forEach(child => {\n removeComponentInstance(child)\n })\n\n // Remove DOM nodes created by this instance\n instance.nodes.forEach(node => {\n if (node.parentNode) {\n node.parentNode.removeChild(node)\n }\n })\n\n // Clear the children set\n instance.children.clear()\n\n // Remove from parent's children set\n if (instance.parentInstance) {\n instance.parentInstance.children.delete(instance)\n }\n}\n\n// Render a function component with reactive re-rendering\nfunction renderComponent(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node[] {\n const effectiveRegistryParent = registryParent || parent\n // Merge props with children\n const mergeProps = (node: any) => {\n const props = { ...node.props }\n if (node.children && node.children.length > 0) {\n props.children = node.children.length === 1\n ? node.children[0]\n : node.children\n }\n return props\n }\n\n // Generate key for this component\n // Use explicit key if provided, otherwise generate auto-key based on render order\n const hasExplicitKey = fnode.key !== undefined\n\n // Get or create registry for this parent\n // Always use the effectiveRegistryParent for registry, not a temp container\n if (!instanceRegistry.has(effectiveRegistryParent)) {\n instanceRegistry.set(effectiveRegistryParent, new Map())\n }\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n\n // Generate key: explicit key, or auto-increment based on component type\n let key: any\n if (hasExplicitKey) {\n key = fnode.key\n } else {\n // Auto-generate unique key: componentType + instance number\n // Count how many instances of this type already exist\n let instanceCount = 0\n const componentName = fnode.type.name || 'anonymous'\n parentRegistry.forEach((_, k) => {\n if (typeof k === 'string' && k.startsWith(`__auto_${componentName}_`)) {\n instanceCount++\n }\n })\n key = `__auto_${componentName}_${instanceCount}`\n }\n\n // Try to reuse existing instance with same key\n if (parentRegistry.has(key)) {\n const instance = parentRegistry.get(key)!\n\n // Update vnode\n instance.vnode = fnode\n\n // Update props (non-reactive) - we'll trigger re-render manually\n const newProps = mergeProps(fnode)\n\n // Always update props (including children)\n instance.props = newProps\n\n // Always clear old children before re-rendering (they will be re-added during render)\n // This must be done BEFORE renderFn is called\n instance.children.clear()\n\n // Manually trigger re-render by calling renderFn\n if (instance.renderFn) {\n instance.renderFn()\n }\n\n return instance.nodes\n }\n\n // Create component instance with regular props (not reactive)\n const instance: DOMComponentInstance = {\n hooks: [],\n hookIndex: 0,\n nodes: [],\n parent,\n vnode: fnode,\n props: mergeProps(fnode), // Regular props, we handle updates manually\n key,\n children: new Set(),\n parentInstance: currentRenderingInstance || undefined\n }\n\n // Register this instance as a child of the current rendering instance\n if (currentRenderingInstance) {\n currentRenderingInstance.children.add(instance)\n }\n\n // Store instance in registry\n parentRegistry.set(key, instance)\n\n // Track if this is the first render\n let isFirstRender = true\n\n // Function to render the component\n const renderFn = () => {\n const currentVnode = instance.vnode\n const currentProps = instance.props\n\n // Check if this is a Context Provider\n const isProvider = (currentVnode.type as any)._contextId !== undefined\n if (isProvider) {\n // Set context value before rendering\n pushContext((currentVnode.type as any)._contextId, currentProps.value)\n }\n\n // Set this instance as the current rendering instance\n const previousRenderingInstance = currentRenderingInstance\n currentRenderingInstance = instance\n\n // Render component with hook context\n const result = runWithComponent(instance, () => currentVnode.type(currentProps))\n\n // DON'T restore currentRenderingInstance yet - we need it for renderNode calls below\n // It will be restored at the end of this function\n\n if (isFirstRender) {\n // First render: create new DOM nodes\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n isFirstRender = false\n } else {\n // Re-render: reconcile with existing DOM\n // Don't early return if nodes is empty - component might render other components\n if (instance.nodes.length === 0) {\n // Component has no DOM nodes yet, might be rendering other components\n // Just re-render without reconciliation\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n // Restore previous rendering instance before returning\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n const firstNode = instance.nodes[0]\n const nodeParent = firstNode.parentNode as HTMLElement\n\n if (!nodeParent) {\n // Restore previous rendering instance before returning\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n // Create marker to know where to insert\n const marker = document.createComment('flexium-marker')\n nodeParent.insertBefore(marker, firstNode)\n\n // Remove all child instances recursively before re-rendering\n instance.children.forEach(child => {\n removeComponentInstance(child)\n })\n instance.children.clear()\n\n // Remove old nodes\n instance.nodes.forEach(node => {\n if (node.parentNode) {\n node.parentNode.removeChild(node)\n }\n })\n\n // Create temporary container for collecting new nodes\n const tempContainer = document.createElement('div')\n\n // Render into temp container, but use actual parent for registry\n const newNodes = renderNode(result, tempContainer, nodeParent)\n const newNodesArray = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n\n // Move nodes from temp container to actual parent before marker\n newNodesArray.forEach(node => {\n nodeParent.insertBefore(node, marker)\n })\n\n // Remove marker\n nodeParent.removeChild(marker)\n\n instance.nodes = newNodesArray\n }\n\n // Restore previous rendering instance after all renderNode calls are done\n currentRenderingInstance = previousRenderingInstance\n }\n\n // Store renderFn for manual updates\n instance.renderFn = renderFn\n\n // Wrap in effect for reactive re-rendering\n unsafeEffect(renderFn)\n\n return instance.nodes\n}\n\nfunction renderNode(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node | Node[] | null {\n // Use registryParent for instance lookups if provided, otherwise use parent\n const effectiveRegistryParent = registryParent || parent\n // 1. null/undefined/boolean -> empty text\n if (fnode === null || fnode === undefined || typeof fnode === 'boolean') {\n const node = document.createTextNode('');\n parent.appendChild(node);\n return node;\n }\n\n // 2. Primitive (string/number) -> Text\n if (typeof fnode === 'string' || typeof fnode === 'number') {\n const node = document.createTextNode(String(fnode));\n parent.appendChild(node);\n return node;\n }\n\n // 3. Array -> render each item with key-based reconciliation\n if (Array.isArray(fnode)) {\n // Store old registry keys before rendering\n const oldKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => oldKeysSet.add(key))\n }\n\n // Render all children\n const nodes: Node[] = [];\n fnode.forEach((child) => {\n const result = renderNode(child, parent, registryParent);\n if (result) {\n if (Array.isArray(result)) {\n nodes.push(...result);\n } else {\n nodes.push(result);\n }\n }\n });\n\n // After rendering, check which keys are still in the registry (= were reused or created)\n const newKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => newKeysSet.add(key))\n }\n\n // Remove instances that existed before but don't exist now\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n const keysToRemove: any[] = []\n\n oldKeysSet.forEach(key => {\n if (!newKeysSet.has(key)) {\n const instance = parentRegistry.get(key)\n if (instance) {\n // Recursively remove component instance and all its children\n removeComponentInstance(instance)\n keysToRemove.push(key)\n }\n }\n })\n\n // Clean up registry\n keysToRemove.forEach(key => parentRegistry.delete(key))\n }\n\n return nodes;\n }\n\n // 4. Object (VNode)\n if (typeof fnode === 'object') {\n // 4a. HTML Element (intrinsic)\n if (typeof fnode.type === 'string') {\n const dom = document.createElement(fnode.type);\n\n // Set props/attributes\n if (fnode.props) {\n Object.entries(fnode.props).forEach(([key, value]) => {\n if (key.startsWith('on') && typeof value === 'function') {\n // Event handler: onClick -> click\n const eventName = key.slice(2).toLowerCase();\n dom.addEventListener(eventName, value as EventListener);\n\n // Store handlers for cleanup/reconciliation\n if (!(dom as any).__eventHandlers) {\n (dom as any).__eventHandlers = {};\n }\n (dom as any).__eventHandlers[eventName] = value;\n } else {\n // Regular attribute\n setAttribute(dom, key, value);\n }\n });\n }\n\n // Render children\n if (fnode.children && fnode.children.length > 0) {\n fnode.children.forEach((child: any) => {\n renderNode(child, dom);\n });\n }\n\n parent.appendChild(dom);\n return dom;\n }\n\n // 4b. Function Component\n if (typeof fnode.type === 'function') {\n // Check if this is a Context Provider\n const isProvider = (fnode.type as any)._contextId !== undefined;\n\n if (isProvider) {\n // Context Provider: treat like regular component for reactivity\n // This ensures providers re-render when their children change\n return renderComponent(fnode, parent, registryParent);\n } else {\n // Regular component: use reactive rendering\n return renderComponent(fnode, parent, registryParent);\n }\n }\n }\n\n // Fallback: unknown type\n return null;\n}\n\nexport function render(app: any, container: HTMLElement) {\n container.innerHTML = ''\n\n renderNode(app, container);\n}\n\n// f() - Create FNodes without JSX\nexport function f(\n type: string | Function,\n props?: any,\n ...children: any[]\n): any {\n return {\n type,\n props: props || {},\n children,\n key: props?.key\n }\n}\n\nfunction setAttribute(el: Element, key: string, value: any) {\n if (value === null || value === undefined) {\n el.removeAttribute(key)\n } else if (key === 'style' && typeof value === 'object') {\n // Handle style object\n Object.assign((el as HTMLElement).style, value)\n } else if (key === 'class') {\n // Handle class specially (className property)\n el.className = String(value)\n } else if (key in el && typeof (el as any)[key] !== 'function') {\n // Property-first approach: use DOM property if available\n // This automatically handles: disabled, checked, value, readonly, etc.\n (el as any)[key] = value\n } else {\n // Fallback to setAttribute for custom/data attributes\n el.setAttribute(key, String(value))\n }\n}\n\n// Reconciliation helpers\nfunction canReuse(oldNode: Node, newNode: Node): boolean {\n if (oldNode.nodeType !== newNode.nodeType) return false\n if (oldNode.nodeType === Node.ELEMENT_NODE && newNode.nodeType === Node.ELEMENT_NODE) {\n return (oldNode as Element).tagName === (newNode as Element).tagName\n }\n return true\n}\n\nfunction updateAttributes(oldEl: Element, newEl: Element): void {\n // Remove old attributes\n const oldAttrs = Array.from(oldEl.attributes)\n oldAttrs.forEach(attr => {\n if (!newEl.hasAttribute(attr.name)) {\n oldEl.removeAttribute(attr.name)\n }\n })\n\n // Set/update new attributes\n const newAttrs = Array.from(newEl.attributes)\n newAttrs.forEach(attr => {\n if (oldEl.getAttribute(attr.name) !== attr.value) {\n oldEl.setAttribute(attr.name, attr.value)\n }\n })\n\n // Update event handlers\n const oldHandlers = (oldEl as any).__eventHandlers || {}\n const newHandlers = (newEl as any).__eventHandlers || {}\n\n // Remove old handlers\n Object.keys(oldHandlers).forEach(event => {\n if (!newHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n })\n\n // Add/update new handlers\n Object.keys(newHandlers).forEach(event => {\n if (oldHandlers[event] !== newHandlers[event]) {\n if (oldHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n oldEl.addEventListener(event, newHandlers[event])\n }\n })\n\n // Update stored handlers\n if (Object.keys(newHandlers).length > 0) {\n (oldEl as any).__eventHandlers = newHandlers\n } else {\n delete (oldEl as any).__eventHandlers\n }\n\n // Special handling for form input values\n if (oldEl instanceof HTMLInputElement && newEl instanceof HTMLInputElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n if (oldEl.checked !== newEl.checked) {\n oldEl.checked = newEl.checked\n }\n }\n if (oldEl instanceof HTMLTextAreaElement && newEl instanceof HTMLTextAreaElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n if (oldEl instanceof HTMLSelectElement && newEl instanceof HTMLSelectElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n}\n\nfunction reconcileChildren(oldEl: Element, newEl: Element): void {\n const oldChildren = Array.from(oldEl.childNodes)\n const newChildren = Array.from(newEl.childNodes)\n const maxLen = Math.max(oldChildren.length, newChildren.length)\n\n for (let i = 0; i < maxLen; i++) {\n const oldChild = oldChildren[i]\n const newChild = newChildren[i]\n\n if (!oldChild && newChild) {\n // Add new child\n oldEl.appendChild(newChild)\n } else if (oldChild && !newChild) {\n // Remove old child\n oldEl.removeChild(oldChild)\n } else if (oldChild && newChild) {\n // Patch child\n patchNode(oldChild, newChild, oldEl)\n }\n }\n}\n\nfunction patchNode(oldNode: Node, newNode: Node, parent: Element): void {\n if (canReuse(oldNode, newNode)) {\n // Reuse node\n if (oldNode.nodeType === Node.TEXT_NODE) {\n // Update text content\n if (oldNode.nodeValue !== newNode.nodeValue) {\n oldNode.nodeValue = newNode.nodeValue\n }\n } else if (oldNode.nodeType === Node.ELEMENT_NODE) {\n // Update element\n updateAttributes(oldNode as Element, newNode as Element)\n reconcileChildren(oldNode as Element, newNode as Element)\n }\n } else {\n // Different type, replace\n parent.replaceChild(newNode, oldNode)\n }\n}\n\n// Exported for future use (Phase 2: Reactive rendering)\nexport function reconcile(oldNodes: Node[], newNodes: Node[], parent: Node, beforeMarker: Node): Node[] {\n const maxLen = Math.max(oldNodes.length, newNodes.length)\n const resultNodes: Node[] = []\n\n for (let i = 0; i < maxLen; i++) {\n const oldNode = oldNodes[i]\n const newNode = newNodes[i]\n\n if (!oldNode && newNode) {\n // Add new node\n parent.insertBefore(newNode, beforeMarker)\n resultNodes.push(newNode)\n } else if (oldNode && !newNode) {\n // Remove old node\n if (oldNode.parentNode) {\n parent.removeChild(oldNode)\n }\n } else if (oldNode && newNode) {\n // Patch node\n patchNode(oldNode, newNode, parent as Element)\n resultNodes.push(oldNode)\n }\n }\n\n return resultNodes\n}\n"]}
1
+ {"version":3,"sources":["../src/dom/index.ts"],"names":["instanceRegistry","currentRenderingInstance","removeComponentInstance","instance","child","node","renderComponent","fnode","parent","registryParent","effectiveRegistryParent","mergeProps","props","hasExplicitKey","parentRegistry","key","instanceCount","componentName","_","k","newProps","isFirstRender","renderFn","currentVnode","currentProps","pushContext","previousRenderingInstance","result","runWithComponent","newNodes","renderNode","nodeParent","marker","lastNode","tempContainer","newNodesArray","reconciledNodes","reconcile","unsafeEffect","oldKeysSet","nodes","newKeysSet","keysToRemove","dom","value","eventName","setAttribute","render","app","container","f","type","children","el","canReuse","oldNode","newNode","updateAttributes","oldEl","newEl","attr","oldHandlers","newHandlers","event","reconcileChildren","oldChildren","newChildren","maxLen","i","oldChild","newChild","patchNode","ownerInstance","idx","oldNodes","beforeMarker","resultNodes"],"mappings":"iHA4BA,IAAMA,CAAAA,CAAmB,IAAI,OAAA,CAGzBC,CAAAA,CAAwD,KAG5D,SAASC,CAAAA,CAAwBC,CAAAA,CAAsC,CAEnEA,EAAS,QAAA,CAAS,OAAA,CAAQC,CAAAA,EAAS,CAC/BF,EAAwBE,CAAK,EACjC,CAAC,CAAA,CAGDD,EAAS,KAAA,CAAM,OAAA,CAAQE,CAAAA,EAAQ,CACvBA,EAAK,UAAA,EACLA,CAAAA,CAAK,UAAA,CAAW,WAAA,CAAYA,CAAI,EAExC,CAAC,CAAA,CAGDF,CAAAA,CAAS,SAAS,KAAA,EAAM,CAGpBA,CAAAA,CAAS,cAAA,EACTA,CAAAA,CAAS,cAAA,CAAe,QAAA,CAAS,MAAA,CAAOA,CAAQ,EAExD,CAGA,SAASG,CAAAA,CAAgBC,EAAYC,CAAAA,CAAqBC,CAAAA,CAAsC,CAC5F,IAAMC,EAA0BD,CAAAA,EAAkBD,CAAAA,CAE5CG,CAAAA,CAAcN,CAAAA,EAAc,CAC9B,IAAMO,CAAAA,CAAQ,CAAE,GAAGP,EAAK,KAAM,CAAA,CAC9B,OAAIA,CAAAA,CAAK,UAAYA,CAAAA,CAAK,QAAA,CAAS,MAAA,CAAS,CAAA,GACxCO,EAAM,QAAA,CAAWP,CAAAA,CAAK,QAAA,CAAS,MAAA,GAAW,CAAA,CACpCA,CAAAA,CAAK,QAAA,CAAS,CAAC,EACfA,CAAAA,CAAK,QAAA,CAAA,CAERO,CACX,CAAA,CAIMC,EAAiBN,CAAAA,CAAM,GAAA,GAAQ,MAAA,CAIhCP,CAAAA,CAAiB,IAAIU,CAAuB,CAAA,EAC7CV,CAAAA,CAAiB,GAAA,CAAIU,EAAyB,IAAI,GAAK,CAAA,CAE3D,IAAMI,EAAiBd,CAAAA,CAAiB,GAAA,CAAIU,CAAuB,CAAA,CAG/DK,EACJ,GAAIF,CAAAA,CACAE,CAAAA,CAAMR,CAAAA,CAAM,SACT,CAGH,IAAIS,CAAAA,CAAgB,CAAA,CACdC,CAAAA,CAAgBV,CAAAA,CAAM,IAAA,CAAK,IAAA,EAAQ,YACzCO,CAAAA,CAAe,OAAA,CAAQ,CAACI,CAAAA,CAAGC,IAAM,CACzB,OAAOA,CAAAA,EAAM,QAAA,EAAYA,EAAE,UAAA,CAAW,CAAA,OAAA,EAAUF,CAAa,CAAA,CAAA,CAAG,GAChED,CAAAA,GAER,CAAC,CAAA,CACDD,CAAAA,CAAM,UAAUE,CAAa,CAAA,CAAA,EAAID,CAAa,CAAA,EAClD,CAGA,GAAIF,CAAAA,CAAe,GAAA,CAAIC,CAAG,EAAG,CACzB,IAAMZ,CAAAA,CAAWW,CAAAA,CAAe,GAAA,CAAIC,CAAG,CAAA,CAGvCZ,CAAAA,CAAS,MAAQI,CAAAA,CAGjB,IAAMa,CAAAA,CAAWT,CAAAA,CAAWJ,CAAK,CAAA,CAGjC,OAAAJ,CAAAA,CAAS,KAAA,CAAQiB,EAIjBjB,CAAAA,CAAS,QAAA,CAAS,KAAA,EAAM,CAGpBA,EAAS,QAAA,EACTA,CAAAA,CAAS,QAAA,EAAS,CAGfA,EAAS,KACpB,CAGA,IAAMA,CAAAA,CAAiC,CACnC,KAAA,CAAO,EAAC,CACR,SAAA,CAAW,EACX,KAAA,CAAO,EAAC,CACR,MAAA,CAAAK,CAAAA,CACA,KAAA,CAAOD,CAAAA,CACP,KAAA,CAAOI,EAAWJ,CAAK,CAAA,CACvB,GAAA,CAAAQ,CAAAA,CACA,SAAU,IAAI,GAAA,CACd,cAAA,CAAgBd,CAAAA,EAA4B,MAChD,CAAA,CAGIA,CAAAA,EACAA,CAAAA,CAAyB,QAAA,CAAS,IAAIE,CAAQ,CAAA,CAIlDW,CAAAA,CAAe,GAAA,CAAIC,EAAKZ,CAAQ,CAAA,CAGhC,IAAIkB,CAAAA,CAAgB,KAGdC,CAAAA,CAAW,IAAM,CACnB,IAAMC,EAAepB,CAAAA,CAAS,KAAA,CACxBqB,CAAAA,CAAerB,CAAAA,CAAS,KAAA,CAGVoB,CAAAA,CAAa,IAAA,CAAa,UAAA,GAAe,QAGzDE,kBAAAA,CAAaF,CAAAA,CAAa,IAAA,CAAa,UAAA,CAAYC,EAAa,KAAK,CAAA,CAIzE,IAAME,CAAAA,CAA4BzB,EAClCA,CAAAA,CAA2BE,CAAAA,CAG3B,IAAMwB,CAAAA,CAASC,mBAAiBzB,CAAAA,CAAU,IAAMoB,CAAAA,CAAa,IAAA,CAAKC,CAAY,CAAC,CAAA,CAK/E,GAAIH,CAAAA,CAAe,CAEf,IAAMQ,CAAAA,CAAWC,CAAAA,CAAWH,CAAAA,CAAQnB,CAAM,CAAA,CAC1CL,CAAAA,CAAS,KAAA,CAAQ0B,CAAAA,CAAY,MAAM,OAAA,CAAQA,CAAQ,CAAA,CAAIA,CAAAA,CAAW,CAACA,CAAQ,CAAA,CAAK,EAAC,CAGjF1B,EAAS,KAAA,CAAM,OAAA,CAAQE,CAAAA,EAAQ,CACrBA,EAAa,eAAA,GACdA,CAAAA,CAAa,eAAA,CAAkBF,CAAAA,EAExC,CAAC,CAAA,CACDkB,CAAAA,CAAgB,MACpB,CAAA,KAAO,CAGH,GAAIlB,CAAAA,CAAS,KAAA,CAAM,MAAA,GAAW,EAAG,CAG7B,IAAM0B,CAAAA,CAAWC,CAAAA,CAAWH,EAAQnB,CAAM,CAAA,CAC1CL,CAAAA,CAAS,KAAA,CAAQ0B,CAAAA,CAAY,KAAA,CAAM,OAAA,CAAQA,CAAQ,EAAIA,CAAAA,CAAW,CAACA,CAAQ,CAAA,CAAK,EAAC,CAEjF5B,CAAAA,CAA2ByB,CAAAA,CAC3B,MACJ,CAGA,IAAMK,CAAAA,CADY5B,CAAAA,CAAS,KAAA,CAAM,CAAC,CAAA,CACL,UAAA,CAE7B,GAAI,CAAC4B,EAAY,CAEb9B,CAAAA,CAA2ByB,CAAAA,CAC3B,MACJ,CAGA,IAAMM,CAAAA,CAAS,QAAA,CAAS,aAAA,CAAc,gBAAgB,CAAA,CAChDC,CAAAA,CAAW9B,CAAAA,CAAS,KAAA,CAAMA,CAAAA,CAAS,KAAA,CAAM,MAAA,CAAS,CAAC,EACrD8B,CAAAA,CAAS,WAAA,CACTF,CAAAA,CAAW,YAAA,CAAaC,EAAQC,CAAAA,CAAS,WAAW,CAAA,CAEpDF,CAAAA,CAAW,YAAYC,CAAM,CAAA,CAKjC7B,CAAAA,CAAS,QAAA,CAAS,OAAM,CAGxB,IAAM+B,CAAAA,CAAgB,QAAA,CAAS,cAAc,KAAK,CAAA,CAG5CL,CAAAA,CAAWC,CAAAA,CAAWH,EAAQO,CAAAA,CAAeH,CAAU,CAAA,CACvDI,CAAAA,CAAgBN,EAAY,KAAA,CAAM,OAAA,CAAQA,CAAQ,CAAA,CAAIA,CAAAA,CAAW,CAACA,CAAQ,CAAA,CAAK,EAAC,CAGhFO,CAAAA,CAAkBC,CAAAA,CAAUlC,CAAAA,CAAS,MAAOgC,CAAAA,CAAeJ,CAAAA,CAAYC,CAAM,CAAA,CAGnFD,EAAW,WAAA,CAAYC,CAAM,CAAA,CAE7B7B,CAAAA,CAAS,MAAQiC,EACrB,CAGAnC,CAAAA,CAA2ByB,EAC/B,EAGA,OAAAvB,CAAAA,CAAS,QAAA,CAAWmB,CAAAA,CAGpBgB,mBAAahB,CAAQ,CAAA,CAEdnB,CAAAA,CAAS,KACpB,CAEA,SAAS2B,CAAAA,CAAWvB,CAAAA,CAAYC,CAAAA,CAAqBC,CAAAA,CAAoD,CAErG,IAAMC,CAAAA,CAA0BD,GAAkBD,CAAAA,CAElD,GAAID,CAAAA,EAAU,IAAA,EAA+B,OAAOA,CAAAA,EAAU,SAAA,CAAW,CACrE,IAAMF,EAAO,QAAA,CAAS,cAAA,CAAe,EAAE,CAAA,CACvC,OAAAG,CAAAA,CAAO,WAAA,CAAYH,CAAI,CAAA,CAChBA,CACX,CAGA,GAAI,OAAOE,CAAAA,EAAU,UAAY,OAAOA,CAAAA,EAAU,QAAA,CAAU,CACxD,IAAMF,CAAAA,CAAO,QAAA,CAAS,cAAA,CAAe,MAAA,CAAOE,CAAK,CAAC,CAAA,CAClD,OAAAC,EAAO,WAAA,CAAYH,CAAI,CAAA,CAChBA,CACX,CAGA,GAAI,KAAA,CAAM,OAAA,CAAQE,CAAK,EAAG,CAEtB,IAAMgC,CAAAA,CAAa,IAAI,IACnBvC,CAAAA,CAAiB,GAAA,CAAIU,CAAuB,CAAA,EACrBV,EAAiB,GAAA,CAAIU,CAAuB,CAAA,CACpD,OAAA,CAAQ,CAACQ,CAAAA,CAAGH,CAAAA,GAAQwB,CAAAA,CAAW,GAAA,CAAIxB,CAAG,CAAC,CAAA,CAI1D,IAAMyB,CAAAA,CAAgB,EAAC,CACvBjC,CAAAA,CAAM,OAAA,CAASH,GAAU,CACrB,IAAMuB,CAAAA,CAASG,CAAAA,CAAW1B,EAAOI,CAAAA,CAAQC,CAAc,CAAA,CACnDkB,CAAAA,GACI,MAAM,OAAA,CAAQA,CAAM,CAAA,CACpBa,CAAAA,CAAM,KAAK,GAAGb,CAAM,CAAA,CAEpBa,CAAAA,CAAM,KAAKb,CAAM,CAAA,EAG7B,CAAC,CAAA,CAGD,IAAMc,CAAAA,CAAa,IAAI,GAAA,CAOvB,GANIzC,EAAiB,GAAA,CAAIU,CAAuB,CAAA,EACrBV,CAAAA,CAAiB,GAAA,CAAIU,CAAuB,CAAA,CACpD,OAAA,CAAQ,CAACQ,CAAAA,CAAGH,CAAAA,GAAQ0B,CAAAA,CAAW,GAAA,CAAI1B,CAAG,CAAC,CAAA,CAItDf,CAAAA,CAAiB,GAAA,CAAIU,CAAuB,CAAA,CAAG,CAC/C,IAAMI,CAAAA,CAAiBd,EAAiB,GAAA,CAAIU,CAAuB,CAAA,CAC7DgC,CAAAA,CAAsB,EAAC,CAE7BH,CAAAA,CAAW,OAAA,CAAQxB,CAAAA,EAAO,CACtB,GAAI,CAAC0B,CAAAA,CAAW,GAAA,CAAI1B,CAAG,CAAA,CAAG,CACtB,IAAMZ,CAAAA,CAAWW,EAAe,GAAA,CAAIC,CAAG,CAAA,CACnCZ,CAAAA,GAEAD,EAAwBC,CAAQ,CAAA,CAChCuC,CAAAA,CAAa,IAAA,CAAK3B,CAAG,CAAA,EAE7B,CACJ,CAAC,CAAA,CAGD2B,EAAa,OAAA,CAAQ3B,CAAAA,EAAOD,CAAAA,CAAe,MAAA,CAAOC,CAAG,CAAC,EAC1D,CAEA,OAAOyB,CACX,CAGA,GAAI,OAAOjC,CAAAA,EAAU,SAAU,CAE3B,GAAI,OAAOA,CAAAA,CAAM,MAAS,QAAA,CAAU,CAChC,IAAMoC,CAAAA,CAAM,QAAA,CAAS,aAAA,CAAcpC,CAAAA,CAAM,IAAI,EAG7C,OAAIA,CAAAA,CAAM,KAAA,EACN,MAAA,CAAO,QAAQA,CAAAA,CAAM,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAACQ,CAAAA,CAAK6B,CAAK,CAAA,GAAM,CAClD,GAAI7B,CAAAA,CAAI,UAAA,CAAW,IAAI,GAAK,OAAO6B,CAAAA,EAAU,UAAA,CAAY,CAErD,IAAMC,CAAAA,CAAY9B,CAAAA,CAAI,KAAA,CAAM,CAAC,EAAE,WAAA,EAAY,CAC3C4B,CAAAA,CAAI,gBAAA,CAAiBE,CAAAA,CAAWD,CAAsB,CAAA,CAGhDD,CAAAA,CAAY,kBACbA,CAAAA,CAAY,eAAA,CAAkB,EAAC,CAAA,CAEnCA,EAAY,eAAA,CAAgBE,CAAS,CAAA,CAAID,EAC9C,MAEIE,CAAAA,CAAaH,CAAAA,CAAK5B,CAAAA,CAAK6B,CAAK,EAEpC,CAAC,CAAA,CAIDrC,CAAAA,CAAM,QAAA,EAAYA,EAAM,QAAA,CAAS,MAAA,CAAS,CAAA,EAC1CA,CAAAA,CAAM,SAAS,OAAA,CAASH,CAAAA,EAAe,CACnC0B,CAAAA,CAAW1B,EAAOuC,CAAG,EACzB,CAAC,CAAA,CAGLnC,CAAAA,CAAO,WAAA,CAAYmC,CAAG,CAAA,CACfA,CACX,CAGA,GAAI,OAAOpC,CAAAA,CAAM,MAAS,UAAA,CAItB,OAFoBA,CAAAA,CAAM,IAAA,CAAa,aAAe,MAAA,CAK3CD,CAAAA,CAAgBC,CAAAA,CAAOC,CAAAA,CAAQC,CAAc,CAMhE,CAGA,OAAO,IACX,CAEO,SAASsC,CAAAA,CAAOC,CAAAA,CAAUC,CAAAA,CAAwB,CACrDA,CAAAA,CAAU,SAAA,CAAY,EAAA,CAGlB,OAAOD,GAAQ,UAAA,GACfA,CAAAA,CAAM,CAAE,IAAA,CAAMA,CAAAA,CAAK,KAAA,CAAO,EAAC,CAAG,SAAU,EAAC,CAAG,GAAA,CAAK,MAAU,GAG/DlB,CAAAA,CAAWkB,CAAAA,CAAKC,CAAS,EAC7B,CAGO,SAASC,CAAAA,CACZC,CAAAA,CACAvC,CAAAA,CAAAA,GACGwC,EACA,CACH,OAAO,CACH,IAAA,CAAAD,EACA,KAAA,CAAOvC,CAAAA,EAAS,EAAC,CACjB,SAAAwC,CAAAA,CACA,GAAA,CAAKxC,CAAAA,EAAO,GAChB,CACJ,CAEA,SAASkC,CAAAA,CAAaO,CAAAA,CAAatC,CAAAA,CAAa6B,CAAAA,CAAY,CACpDA,CAAAA,EAAU,KACVS,CAAAA,CAAG,eAAA,CAAgBtC,CAAG,CAAA,CACfA,IAAQ,OAAA,EAAW,OAAO6B,CAAAA,EAAU,QAAA,CAE3C,OAAO,MAAA,CAAQS,CAAAA,CAAmB,KAAA,CAAOT,CAAK,EACvC7B,CAAAA,GAAQ,OAAA,CAEfsC,CAAAA,CAAG,SAAA,CAAY,OAAOT,CAAK,CAAA,CACpB7B,CAAAA,IAAOsC,CAAAA,EAAM,OAAQA,CAAAA,CAAWtC,CAAG,CAAA,EAAM,UAAA,CAG/CsC,EAAWtC,CAAG,CAAA,CAAI6B,CAAAA,CAGnBS,CAAAA,CAAG,YAAA,CAAatC,CAAAA,CAAK,MAAA,CAAO6B,CAAK,CAAC,EAE1C,CAGA,SAASU,CAAAA,CAASC,EAAeC,CAAAA,CAAwB,CACrD,OAAID,CAAAA,CAAQ,WAAaC,CAAAA,CAAQ,QAAA,CAAiB,KAAA,CAC9CD,CAAAA,CAAQ,WAAa,IAAA,CAAK,YAAA,EAAgBC,CAAAA,CAAQ,QAAA,GAAa,KAAK,YAAA,CAC5DD,CAAAA,CAAoB,OAAA,GAAaC,CAAAA,CAAoB,QAE1D,IACX,CAEA,SAASC,CAAAA,CAAiBC,EAAgBC,CAAAA,CAAsB,CAE3C,KAAA,CAAM,IAAA,CAAKD,CAAAA,CAAM,UAAU,CAAA,CACnC,OAAA,CAAQE,GAAQ,CAChBD,CAAAA,CAAM,YAAA,CAAaC,CAAAA,CAAK,IAAI,CAAA,EAC7BF,CAAAA,CAAM,eAAA,CAAgBE,CAAAA,CAAK,IAAI,EAEvC,CAAC,CAAA,CAGgB,KAAA,CAAM,KAAKD,CAAAA,CAAM,UAAU,CAAA,CACnC,OAAA,CAAQC,GAAQ,CACjBF,CAAAA,CAAM,YAAA,CAAaE,CAAAA,CAAK,IAAI,CAAA,GAAMA,CAAAA,CAAK,KAAA,GAEnCA,CAAAA,CAAK,OAAS,OAAA,EAAW,OAAA,GAAWF,CAAAA,CACnCA,CAAAA,CAA2B,MAAQE,CAAAA,CAAK,KAAA,CAClCA,CAAAA,CAAK,IAAA,GAAS,WAAa,SAAA,GAAaF,CAAAA,CAC9CA,CAAAA,CAA2B,OAAA,CAAUE,EAAK,KAAA,GAAU,MAAA,EAAUA,CAAAA,CAAK,KAAA,GAAU,GAE9EF,CAAAA,CAAM,YAAA,CAAaE,CAAAA,CAAK,IAAA,CAAMA,EAAK,KAAK,CAAA,EAGpD,CAAC,CAAA,CAGD,IAAMC,CAAAA,CAAeH,CAAAA,CAAc,eAAA,EAAmB,GAChDI,CAAAA,CAAeH,CAAAA,CAAc,eAAA,EAAmB,GAGtD,MAAA,CAAO,IAAA,CAAKE,CAAW,CAAA,CAAE,OAAA,CAAQE,CAAAA,EAAS,CACjCD,CAAAA,CAAYC,CAAK,CAAA,EAClBL,CAAAA,CAAM,mBAAA,CAAoBK,CAAAA,CAAOF,EAAYE,CAAK,CAAC,EAE3D,CAAC,EAGD,MAAA,CAAO,IAAA,CAAKD,CAAW,CAAA,CAAE,QAAQC,CAAAA,EAAS,CAClCF,CAAAA,CAAYE,CAAK,IAAMD,CAAAA,CAAYC,CAAK,CAAA,GACpCF,CAAAA,CAAYE,CAAK,CAAA,EACjBL,CAAAA,CAAM,mBAAA,CAAoBK,CAAAA,CAAOF,EAAYE,CAAK,CAAC,CAAA,CAEvDL,CAAAA,CAAM,gBAAA,CAAiBK,CAAAA,CAAOD,CAAAA,CAAYC,CAAK,CAAC,CAAA,EAExD,CAAC,CAAA,CAGG,MAAA,CAAO,KAAKD,CAAW,CAAA,CAAE,MAAA,CAAS,CAAA,CACjCJ,EAAc,eAAA,CAAkBI,CAAAA,CAEjC,OAAQJ,CAAAA,CAAc,gBAItBA,CAAAA,YAAiB,gBAAA,EAAoBC,CAAAA,YAAiB,gBAAA,GAClDD,EAAM,KAAA,GAAUC,CAAAA,CAAM,KAAA,GACtBD,CAAAA,CAAM,MAAQC,CAAAA,CAAM,KAAA,CAAA,CAEpBD,CAAAA,CAAM,OAAA,GAAYC,EAAM,OAAA,GACxBD,CAAAA,CAAM,OAAA,CAAUC,CAAAA,CAAM,OAAA,CAAA,CAAA,CAG1BD,CAAAA,YAAiB,mBAAA,EAAuBC,CAAAA,YAAiB,qBACrDD,CAAAA,CAAM,KAAA,GAAUC,CAAAA,CAAM,KAAA,GACtBD,EAAM,KAAA,CAAQC,CAAAA,CAAM,KAAA,CAAA,CAGxBD,CAAAA,YAAiB,mBAAqBC,CAAAA,YAAiB,iBAAA,EACnDD,CAAAA,CAAM,KAAA,GAAUC,EAAM,KAAA,GACtBD,CAAAA,CAAM,KAAA,CAAQC,CAAAA,CAAM,OAGhC,CAEA,SAASK,CAAAA,CAAkBN,CAAAA,CAAgBC,EAAsB,CAC7D,IAAMM,CAAAA,CAAc,KAAA,CAAM,KAAKP,CAAAA,CAAM,UAAU,CAAA,CACzCQ,CAAAA,CAAc,KAAA,CAAM,IAAA,CAAKP,CAAAA,CAAM,UAAU,EACzCQ,CAAAA,CAAS,IAAA,CAAK,GAAA,CAAIF,CAAAA,CAAY,OAAQC,CAAAA,CAAY,MAAM,CAAA,CAE9D,IAAA,IAASE,EAAI,CAAA,CAAGA,CAAAA,CAAID,CAAAA,CAAQC,CAAAA,EAAAA,CAAK,CAC7B,IAAMC,CAAAA,CAAWJ,CAAAA,CAAYG,CAAC,EACxBE,CAAAA,CAAWJ,CAAAA,CAAYE,CAAC,CAAA,CAE1B,CAACC,CAAAA,EAAYC,CAAAA,CAEbZ,CAAAA,CAAM,WAAA,CAAYY,CAAQ,CAAA,CACnBD,CAAAA,EAAY,CAACC,CAAAA,CAEpBZ,CAAAA,CAAM,WAAA,CAAYW,CAAQ,CAAA,CACnBA,GAAYC,CAAAA,EAEnBC,CAAAA,CAAUF,CAAAA,CAAUC,CAAAA,CAAUZ,CAAK,EAE3C,CACJ,CAEA,SAASa,EAAUhB,CAAAA,CAAeC,CAAAA,CAAehD,CAAAA,CAAuB,CACpE,GAAI8C,CAAAA,CAASC,CAAAA,CAASC,CAAO,CAAA,CAAG,CAG5B,IAAMgB,CAAAA,CAAiBhB,CAAAA,CAAgB,eAAA,CACvC,GAAIgB,CAAAA,CAAe,CACf,IAAMC,CAAAA,CAAMD,EAAc,KAAA,CAAM,OAAA,CAAQhB,CAAO,CAAA,CAC3CiB,CAAAA,GAAQ,EAAA,GACRD,CAAAA,CAAc,KAAA,CAAMC,CAAG,CAAA,CAAIlB,CAAAA,CAAAA,CAE7BA,CAAAA,CAAgB,eAAA,CAAkBiB,EACpC,OAAQhB,CAAAA,CAAgB,gBAC5B,CAEID,EAAQ,QAAA,GAAa,IAAA,CAAK,SAAA,CAEtBA,CAAAA,CAAQ,YAAcC,CAAAA,CAAQ,SAAA,GAC9BD,CAAAA,CAAQ,SAAA,CAAYC,EAAQ,SAAA,CAAA,CAEzBD,CAAAA,CAAQ,QAAA,GAAa,IAAA,CAAK,eAEjCE,CAAAA,CAAiBF,CAAAA,CAAoBC,CAAkB,CAAA,CACvDQ,EAAkBT,CAAAA,CAAoBC,CAAkB,CAAA,EAEhE,CAAA,KAEIhD,CAAAA,CAAO,YAAA,CAAagD,CAAAA,CAASD,CAAO,EAE5C,CAGO,SAASlB,CAAAA,CAAUqC,CAAAA,CAAkB7C,EAAkBrB,CAAAA,CAAcmE,CAAAA,CAA4B,CACpG,IAAMR,EAAS,IAAA,CAAK,GAAA,CAAIO,CAAAA,CAAS,MAAA,CAAQ7C,EAAS,MAAM,CAAA,CAClD+C,CAAAA,CAAsB,GAE5B,IAAA,IAASR,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAID,EAAQC,CAAAA,EAAAA,CAAK,CAC7B,IAAMb,CAAAA,CAAUmB,EAASN,CAAC,CAAA,CACpBZ,CAAAA,CAAU3B,CAAAA,CAASuC,CAAC,CAAA,CAEtB,CAACb,CAAAA,EAAWC,CAAAA,EAEZhD,EAAO,YAAA,CAAagD,CAAAA,CAASmB,CAAY,CAAA,CACzCC,EAAY,IAAA,CAAKpB,CAAO,CAAA,EACjBD,CAAAA,EAAW,CAACC,CAAAA,CAEfD,CAAAA,CAAQ,UAAA,EACR/C,CAAAA,CAAO,YAAY+C,CAAO,CAAA,CAEvBA,CAAAA,EAAWC,CAAAA,GAElBe,EAAUhB,CAAAA,CAASC,CAAAA,CAAShD,CAAiB,CAAA,CAC7CoE,EAAY,IAAA,CAAKrB,CAAO,CAAA,EAEhC,CAEA,OAAOqB,CACX","file":"dom.js","sourcesContent":["\nimport { pushContext } from '../core/context'\nimport { runWithComponent, type ComponentInstance } from '../core/hook'\nimport { unsafeEffect } from '../core/effect'\n\n// Types\nexport type FNodeChild = FNode | string | number | boolean | null | undefined | FNodeChild[] | (() => FNode)\n\nexport interface FNode {\n type: string | Function\n props: Record<string, any>\n children: FNodeChild[]\n key?: any\n}\n\n// Extended ComponentInstance for DOM tracking\ninterface DOMComponentInstance extends ComponentInstance {\n nodes: Node[]\n parent: HTMLElement\n vnode: any\n props: any\n key?: any\n renderFn?: () => void // Store render function for manual updates\n children: Set<DOMComponentInstance> // Track child component instances\n parentInstance?: DOMComponentInstance // Track parent component instance\n}\n\n// Registry to store component instances by parent and key\nconst instanceRegistry = new WeakMap<HTMLElement, Map<any, DOMComponentInstance>>()\n\n// Current rendering component instance (for tracking parent-child relationships)\nlet currentRenderingInstance: DOMComponentInstance | null = null\n\n// Recursively remove component instance and all its children\nfunction removeComponentInstance(instance: DOMComponentInstance): void {\n // First, recursively remove all child instances\n instance.children.forEach(child => {\n removeComponentInstance(child)\n })\n\n // Remove DOM nodes created by this instance\n instance.nodes.forEach(node => {\n if (node.parentNode) {\n node.parentNode.removeChild(node)\n }\n })\n\n // Clear the children set\n instance.children.clear()\n\n // Remove from parent's children set\n if (instance.parentInstance) {\n instance.parentInstance.children.delete(instance)\n }\n}\n\n// Render a function component with reactive re-rendering\nfunction renderComponent(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node[] {\n const effectiveRegistryParent = registryParent || parent\n // Merge props with children\n const mergeProps = (node: any) => {\n const props = { ...node.props }\n if (node.children && node.children.length > 0) {\n props.children = node.children.length === 1\n ? node.children[0]\n : node.children\n }\n return props\n }\n\n // Generate key for this component\n // Use explicit key if provided, otherwise generate auto-key based on render order\n const hasExplicitKey = fnode.key !== undefined\n\n // Get or create registry for this parent\n // Always use the effectiveRegistryParent for registry, not a temp container\n if (!instanceRegistry.has(effectiveRegistryParent)) {\n instanceRegistry.set(effectiveRegistryParent, new Map())\n }\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n\n // Generate key: explicit key, or auto-increment based on component type\n let key: any\n if (hasExplicitKey) {\n key = fnode.key\n } else {\n // Auto-generate unique key: componentType + instance number\n // Count how many instances of this type already exist\n let instanceCount = 0\n const componentName = fnode.type.name || 'anonymous'\n parentRegistry.forEach((_, k) => {\n if (typeof k === 'string' && k.startsWith(`__auto_${componentName}_`)) {\n instanceCount++\n }\n })\n key = `__auto_${componentName}_${instanceCount}`\n }\n\n // Try to reuse existing instance with same key\n if (parentRegistry.has(key)) {\n const instance = parentRegistry.get(key)!\n\n // Update vnode\n instance.vnode = fnode\n\n // Update props (non-reactive) - we'll trigger re-render manually\n const newProps = mergeProps(fnode)\n\n // Always update props (including children)\n instance.props = newProps\n\n // Always clear old children before re-rendering (they will be re-added during render)\n // This must be done BEFORE renderFn is called\n instance.children.clear()\n\n // Manually trigger re-render by calling renderFn\n if (instance.renderFn) {\n instance.renderFn()\n }\n\n return instance.nodes\n }\n\n // Create component instance with regular props (not reactive)\n const instance: DOMComponentInstance = {\n hooks: [],\n hookIndex: 0,\n nodes: [],\n parent,\n vnode: fnode,\n props: mergeProps(fnode), // Regular props, we handle updates manually\n key,\n children: new Set(),\n parentInstance: currentRenderingInstance || undefined\n }\n\n // Register this instance as a child of the current rendering instance\n if (currentRenderingInstance) {\n currentRenderingInstance.children.add(instance)\n }\n\n // Store instance in registry\n parentRegistry.set(key, instance)\n\n // Track if this is the first render\n let isFirstRender = true\n\n // Function to render the component\n const renderFn = () => {\n const currentVnode = instance.vnode\n const currentProps = instance.props\n\n // Check if this is a Context Provider\n const isProvider = (currentVnode.type as any)._contextId !== undefined\n if (isProvider) {\n // Set context value before rendering\n pushContext((currentVnode.type as any)._contextId, currentProps.value)\n }\n\n // Set this instance as the current rendering instance\n const previousRenderingInstance = currentRenderingInstance\n currentRenderingInstance = instance\n\n // Render component with hook context\n const result = runWithComponent(instance, () => currentVnode.type(currentProps))\n\n // DON'T restore currentRenderingInstance yet - we need it for renderNode calls below\n // It will be restored at the end of this function\n\n if (isFirstRender) {\n // First render: create new DOM nodes\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n // Mark nodes as owned by this instance (for reconciliation)\n // Only set ownership if not already owned (child components set ownership first)\n instance.nodes.forEach(node => {\n if (!(node as any).__ownerInstance) {\n (node as any).__ownerInstance = instance\n }\n })\n isFirstRender = false\n } else {\n // Re-render: reconcile with existing DOM\n // Don't early return if nodes is empty - component might render other components\n if (instance.nodes.length === 0) {\n // Component has no DOM nodes yet, might be rendering other components\n // Just re-render without reconciliation\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n // Restore previous rendering instance before returning\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n const firstNode = instance.nodes[0]\n const nodeParent = firstNode.parentNode as HTMLElement\n\n if (!nodeParent) {\n // Restore previous rendering instance before returning\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n // Create marker to know where to insert new nodes\n const marker = document.createComment('flexium-marker')\n const lastNode = instance.nodes[instance.nodes.length - 1]\n if (lastNode.nextSibling) {\n nodeParent.insertBefore(marker, lastNode.nextSibling)\n } else {\n nodeParent.appendChild(marker)\n }\n\n // Clear children references - actual cleanup happens via key-based registry\n // Don't call removeComponentInstance here as it removes DOM nodes that reconcile needs\n instance.children.clear()\n\n // Create temporary container for collecting new nodes\n const tempContainer = document.createElement('div')\n\n // Render into temp container, but use actual parent for registry\n const newNodes = renderNode(result, tempContainer, nodeParent)\n const newNodesArray = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n\n // Use reconcile to patch existing nodes instead of replacing\n const reconciledNodes = reconcile(instance.nodes, newNodesArray, nodeParent, marker)\n\n // Remove marker\n nodeParent.removeChild(marker)\n\n instance.nodes = reconciledNodes\n }\n\n // Restore previous rendering instance after all renderNode calls are done\n currentRenderingInstance = previousRenderingInstance\n }\n\n // Store renderFn for manual updates\n instance.renderFn = renderFn\n\n // Wrap in effect for reactive re-rendering\n unsafeEffect(renderFn)\n\n return instance.nodes\n}\n\nfunction renderNode(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node | Node[] | null {\n // Use registryParent for instance lookups if provided, otherwise use parent\n const effectiveRegistryParent = registryParent || parent\n // 1. null/undefined/boolean -> empty text\n if (fnode === null || fnode === undefined || typeof fnode === 'boolean') {\n const node = document.createTextNode('');\n parent.appendChild(node);\n return node;\n }\n\n // 2. Primitive (string/number) -> Text\n if (typeof fnode === 'string' || typeof fnode === 'number') {\n const node = document.createTextNode(String(fnode));\n parent.appendChild(node);\n return node;\n }\n\n // 3. Array -> render each item with key-based reconciliation\n if (Array.isArray(fnode)) {\n // Store old registry keys before rendering\n const oldKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => oldKeysSet.add(key))\n }\n\n // Render all children\n const nodes: Node[] = [];\n fnode.forEach((child) => {\n const result = renderNode(child, parent, registryParent);\n if (result) {\n if (Array.isArray(result)) {\n nodes.push(...result);\n } else {\n nodes.push(result);\n }\n }\n });\n\n // After rendering, check which keys are still in the registry (= were reused or created)\n const newKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => newKeysSet.add(key))\n }\n\n // Remove instances that existed before but don't exist now\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n const keysToRemove: any[] = []\n\n oldKeysSet.forEach(key => {\n if (!newKeysSet.has(key)) {\n const instance = parentRegistry.get(key)\n if (instance) {\n // Recursively remove component instance and all its children\n removeComponentInstance(instance)\n keysToRemove.push(key)\n }\n }\n })\n\n // Clean up registry\n keysToRemove.forEach(key => parentRegistry.delete(key))\n }\n\n return nodes;\n }\n\n // 4. Object (VNode)\n if (typeof fnode === 'object') {\n // 4a. HTML Element (intrinsic)\n if (typeof fnode.type === 'string') {\n const dom = document.createElement(fnode.type);\n\n // Set props/attributes\n if (fnode.props) {\n Object.entries(fnode.props).forEach(([key, value]) => {\n if (key.startsWith('on') && typeof value === 'function') {\n // Event handler: onClick -> click\n const eventName = key.slice(2).toLowerCase();\n dom.addEventListener(eventName, value as EventListener);\n\n // Store handlers for cleanup/reconciliation\n if (!(dom as any).__eventHandlers) {\n (dom as any).__eventHandlers = {};\n }\n (dom as any).__eventHandlers[eventName] = value;\n } else {\n // Regular attribute\n setAttribute(dom, key, value);\n }\n });\n }\n\n // Render children\n if (fnode.children && fnode.children.length > 0) {\n fnode.children.forEach((child: any) => {\n renderNode(child, dom);\n });\n }\n\n parent.appendChild(dom);\n return dom;\n }\n\n // 4b. Function Component\n if (typeof fnode.type === 'function') {\n // Check if this is a Context Provider\n const isProvider = (fnode.type as any)._contextId !== undefined;\n\n if (isProvider) {\n // Context Provider: treat like regular component for reactivity\n // This ensures providers re-render when their children change\n return renderComponent(fnode, parent, registryParent);\n } else {\n // Regular component: use reactive rendering\n return renderComponent(fnode, parent, registryParent);\n }\n }\n }\n\n // Fallback: unknown type\n return null;\n}\n\nexport function render(app: any, container: HTMLElement) {\n container.innerHTML = ''\n\n // Handle raw function components by wrapping them in an FNode\n if (typeof app === 'function') {\n app = { type: app, props: {}, children: [], key: undefined }\n }\n\n renderNode(app, container);\n}\n\n// f() - Create FNodes without JSX\nexport function f(\n type: string | Function,\n props?: any,\n ...children: any[]\n): any {\n return {\n type,\n props: props || {},\n children,\n key: props?.key\n }\n}\n\nfunction setAttribute(el: Element, key: string, value: any) {\n if (value === null || value === undefined) {\n el.removeAttribute(key)\n } else if (key === 'style' && typeof value === 'object') {\n // Handle style object\n Object.assign((el as HTMLElement).style, value)\n } else if (key === 'class') {\n // Handle class specially (className property)\n el.className = String(value)\n } else if (key in el && typeof (el as any)[key] !== 'function') {\n // Property-first approach: use DOM property if available\n // This automatically handles: disabled, checked, value, readonly, etc.\n (el as any)[key] = value\n } else {\n // Fallback to setAttribute for custom/data attributes\n el.setAttribute(key, String(value))\n }\n}\n\n// Reconciliation helpers\nfunction canReuse(oldNode: Node, newNode: Node): boolean {\n if (oldNode.nodeType !== newNode.nodeType) return false\n if (oldNode.nodeType === Node.ELEMENT_NODE && newNode.nodeType === Node.ELEMENT_NODE) {\n return (oldNode as Element).tagName === (newNode as Element).tagName\n }\n return true\n}\n\nfunction updateAttributes(oldEl: Element, newEl: Element): void {\n // Remove old attributes\n const oldAttrs = Array.from(oldEl.attributes)\n oldAttrs.forEach(attr => {\n if (!newEl.hasAttribute(attr.name)) {\n oldEl.removeAttribute(attr.name)\n }\n })\n\n // Set/update new attributes\n const newAttrs = Array.from(newEl.attributes)\n newAttrs.forEach(attr => {\n if (oldEl.getAttribute(attr.name) !== attr.value) {\n // Use DOM property for value/checked to preserve focus\n if (attr.name === 'value' && 'value' in oldEl) {\n (oldEl as HTMLInputElement).value = attr.value\n } else if (attr.name === 'checked' && 'checked' in oldEl) {\n (oldEl as HTMLInputElement).checked = attr.value === 'true' || attr.value === ''\n } else {\n oldEl.setAttribute(attr.name, attr.value)\n }\n }\n })\n\n // Update event handlers\n const oldHandlers = (oldEl as any).__eventHandlers || {}\n const newHandlers = (newEl as any).__eventHandlers || {}\n\n // Remove old handlers\n Object.keys(oldHandlers).forEach(event => {\n if (!newHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n })\n\n // Add/update new handlers\n Object.keys(newHandlers).forEach(event => {\n if (oldHandlers[event] !== newHandlers[event]) {\n if (oldHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n oldEl.addEventListener(event, newHandlers[event])\n }\n })\n\n // Update stored handlers\n if (Object.keys(newHandlers).length > 0) {\n (oldEl as any).__eventHandlers = newHandlers\n } else {\n delete (oldEl as any).__eventHandlers\n }\n\n // Special handling for form input values\n if (oldEl instanceof HTMLInputElement && newEl instanceof HTMLInputElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n if (oldEl.checked !== newEl.checked) {\n oldEl.checked = newEl.checked\n }\n }\n if (oldEl instanceof HTMLTextAreaElement && newEl instanceof HTMLTextAreaElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n if (oldEl instanceof HTMLSelectElement && newEl instanceof HTMLSelectElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n}\n\nfunction reconcileChildren(oldEl: Element, newEl: Element): void {\n const oldChildren = Array.from(oldEl.childNodes)\n const newChildren = Array.from(newEl.childNodes)\n const maxLen = Math.max(oldChildren.length, newChildren.length)\n\n for (let i = 0; i < maxLen; i++) {\n const oldChild = oldChildren[i]\n const newChild = newChildren[i]\n\n if (!oldChild && newChild) {\n // Add new child\n oldEl.appendChild(newChild)\n } else if (oldChild && !newChild) {\n // Remove old child\n oldEl.removeChild(oldChild)\n } else if (oldChild && newChild) {\n // Patch child\n patchNode(oldChild, newChild, oldEl)\n }\n }\n}\n\nfunction patchNode(oldNode: Node, newNode: Node, parent: Element): void {\n if (canReuse(oldNode, newNode)) {\n // Transfer component instance ownership from newNode to oldNode\n // This ensures component instances reference actual DOM nodes after reconciliation\n const ownerInstance = (newNode as any).__ownerInstance as DOMComponentInstance | undefined\n if (ownerInstance) {\n const idx = ownerInstance.nodes.indexOf(newNode)\n if (idx !== -1) {\n ownerInstance.nodes[idx] = oldNode\n }\n ;(oldNode as any).__ownerInstance = ownerInstance\n delete (newNode as any).__ownerInstance\n }\n // Reuse node\n if (oldNode.nodeType === Node.TEXT_NODE) {\n // Update text content\n if (oldNode.nodeValue !== newNode.nodeValue) {\n oldNode.nodeValue = newNode.nodeValue\n }\n } else if (oldNode.nodeType === Node.ELEMENT_NODE) {\n // Update element\n updateAttributes(oldNode as Element, newNode as Element)\n reconcileChildren(oldNode as Element, newNode as Element)\n }\n } else {\n // Different type, replace\n parent.replaceChild(newNode, oldNode)\n }\n}\n\n// Exported for future use (Phase 2: Reactive rendering)\nexport function reconcile(oldNodes: Node[], newNodes: Node[], parent: Node, beforeMarker: Node): Node[] {\n const maxLen = Math.max(oldNodes.length, newNodes.length)\n const resultNodes: Node[] = []\n\n for (let i = 0; i < maxLen; i++) {\n const oldNode = oldNodes[i]\n const newNode = newNodes[i]\n\n if (!oldNode && newNode) {\n // Add new node\n parent.insertBefore(newNode, beforeMarker)\n resultNodes.push(newNode)\n } else if (oldNode && !newNode) {\n // Remove old node\n if (oldNode.parentNode) {\n parent.removeChild(oldNode)\n }\n } else if (oldNode && newNode) {\n // Patch node\n patchNode(oldNode, newNode, parent as Element)\n resultNodes.push(oldNode)\n }\n }\n\n return resultNodes\n}\n"]}
package/dist/dom.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import {c}from'./chunk-LUREDEUB.mjs';import {b as b$1,g as g$1}from'./chunk-44RZHCII.mjs';var m=new WeakMap,h=null;function _(e){e.children.forEach(n=>{_(n);}),e.nodes.forEach(n=>{n.parentNode&&n.parentNode.removeChild(n);}),e.children.clear(),e.parentInstance&&e.parentInstance.children.delete(e);}function b(e,n,a){let f=a||n,s=c=>{let u={...c.props};return c.children&&c.children.length>0&&(u.children=c.children.length===1?c.children[0]:c.children),u},o=e.key!==void 0;m.has(f)||m.set(f,new Map);let t=m.get(f),i;if(o)i=e.key;else {let c=0,u=e.type.name||"anonymous";t.forEach((x,y)=>{typeof y=="string"&&y.startsWith(`__auto_${u}_`)&&c++;}),i=`__auto_${u}_${c}`;}if(t.has(i)){let c=t.get(i);c.vnode=e;let u=s(e);return c.props=u,c.children.clear(),c.renderFn&&c.renderFn(),c.nodes}let r={hooks:[],hookIndex:0,nodes:[],parent:n,vnode:e,props:s(e),key:i,children:new Set,parentInstance:h||void 0};h&&h.children.add(r),t.set(i,r);let d=true,v=()=>{let c$1=r.vnode,u=r.props;c$1.type._contextId!==void 0&&c(c$1.type._contextId,u.value);let y=h;h=r;let E=g$1(r,()=>c$1.type(u));if(d){let l=g(E,n);r.nodes=l?Array.isArray(l)?l:[l]:[],d=false;}else {if(r.nodes.length===0){let p=g(E,n);r.nodes=p?Array.isArray(p)?p:[p]:[],h=y;return}let l=r.nodes[0],N=l.parentNode;if(!N){h=y;return}let T=document.createComment("flexium-marker");N.insertBefore(T,l),r.children.forEach(p=>{_(p);}),r.children.clear(),r.nodes.forEach(p=>{p.parentNode&&p.parentNode.removeChild(p);});let O=document.createElement("div"),C=g(E,O,N),M=C?Array.isArray(C)?C:[C]:[];M.forEach(p=>{N.insertBefore(p,T);}),N.removeChild(T),r.nodes=M;}h=y;};return r.renderFn=v,b$1(v),r.nodes}function g(e,n,a){let f=a||n;if(e==null||typeof e=="boolean"){let s=document.createTextNode("");return n.appendChild(s),s}if(typeof e=="string"||typeof e=="number"){let s=document.createTextNode(String(e));return n.appendChild(s),s}if(Array.isArray(e)){let s=new Set;m.has(f)&&m.get(f).forEach((r,d)=>s.add(d));let o=[];e.forEach(i=>{let r=g(i,n,a);r&&(Array.isArray(r)?o.push(...r):o.push(r));});let t=new Set;if(m.has(f)&&m.get(f).forEach((r,d)=>t.add(d)),m.has(f)){let i=m.get(f),r=[];s.forEach(d=>{if(!t.has(d)){let v=i.get(d);v&&(_(v),r.push(d));}}),r.forEach(d=>i.delete(d));}return o}if(typeof e=="object"){if(typeof e.type=="string"){let s=document.createElement(e.type);return e.props&&Object.entries(e.props).forEach(([o,t])=>{if(o.startsWith("on")&&typeof t=="function"){let i=o.slice(2).toLowerCase();s.addEventListener(i,t),s.__eventHandlers||(s.__eventHandlers={}),s.__eventHandlers[i]=t;}else R(s,o,t);}),e.children&&e.children.length>0&&e.children.forEach(o=>{g(o,s);}),n.appendChild(s),s}if(typeof e.type=="function")return e.type._contextId!==void 0,b(e,n,a)}return null}function V(e,n){n.innerHTML="",g(e,n);}function W(e,n,...a){return {type:e,props:n||{},children:a,key:n?.key}}function R(e,n,a){a==null?e.removeAttribute(n):n==="style"&&typeof a=="object"?Object.assign(e.style,a):n==="class"?e.className=String(a):n in e&&typeof e[n]!="function"?e[n]=a:e.setAttribute(n,String(a));}function F(e,n){return e.nodeType!==n.nodeType?false:e.nodeType===Node.ELEMENT_NODE&&n.nodeType===Node.ELEMENT_NODE?e.tagName===n.tagName:true}function D(e,n){Array.from(e.attributes).forEach(t=>{n.hasAttribute(t.name)||e.removeAttribute(t.name);}),Array.from(n.attributes).forEach(t=>{e.getAttribute(t.name)!==t.value&&e.setAttribute(t.name,t.value);});let s=e.__eventHandlers||{},o=n.__eventHandlers||{};Object.keys(s).forEach(t=>{o[t]||e.removeEventListener(t,s[t]);}),Object.keys(o).forEach(t=>{s[t]!==o[t]&&(s[t]&&e.removeEventListener(t,s[t]),e.addEventListener(t,o[t]));}),Object.keys(o).length>0?e.__eventHandlers=o:delete e.__eventHandlers,e instanceof HTMLInputElement&&n instanceof HTMLInputElement&&(e.value!==n.value&&(e.value=n.value),e.checked!==n.checked&&(e.checked=n.checked)),e instanceof HTMLTextAreaElement&&n instanceof HTMLTextAreaElement&&e.value!==n.value&&(e.value=n.value),e instanceof HTMLSelectElement&&n instanceof HTMLSelectElement&&e.value!==n.value&&(e.value=n.value);}function S(e,n){let a=Array.from(e.childNodes),f=Array.from(n.childNodes),s=Math.max(a.length,f.length);for(let o=0;o<s;o++){let t=a[o],i=f[o];!t&&i?e.appendChild(i):t&&!i?e.removeChild(t):t&&i&&I(t,i,e);}}function I(e,n,a){F(e,n)?e.nodeType===Node.TEXT_NODE?e.nodeValue!==n.nodeValue&&(e.nodeValue=n.nodeValue):e.nodeType===Node.ELEMENT_NODE&&(D(e,n),S(e,n)):a.replaceChild(n,e);}function B(e,n,a,f){let s=Math.max(e.length,n.length),o=[];for(let t=0;t<s;t++){let i=e[t],r=n[t];!i&&r?(a.insertBefore(r,f),o.push(r)):i&&!r?i.parentNode&&a.removeChild(i):i&&r&&(I(i,r,a),o.push(i));}return o}export{W as f,B as reconcile,V as render};//# sourceMappingURL=dom.mjs.map
1
+ import {c}from'./chunk-LUREDEUB.mjs';import {b,g}from'./chunk-44RZHCII.mjs';var l=new WeakMap,m=null;function H(e){e.children.forEach(n=>{H(n);}),e.nodes.forEach(n=>{n.parentNode&&n.parentNode.removeChild(n);}),e.children.clear(),e.parentInstance&&e.parentInstance.children.delete(e);}function E(e,n,o){let c$1=o||n,r=f=>{let u={...f.props};return f.children&&f.children.length>0&&(u.children=f.children.length===1?f.children[0]:f.children),u},a=e.key!==void 0;l.has(c$1)||l.set(c$1,new Map);let t=l.get(c$1),i;if(a)i=e.key;else {let f=0,u=e.type.name||"anonymous";t.forEach((b,y)=>{typeof y=="string"&&y.startsWith(`__auto_${u}_`)&&f++;}),i=`__auto_${u}_${f}`;}if(t.has(i)){let f=t.get(i);f.vnode=e;let u=r(e);return f.props=u,f.children.clear(),f.renderFn&&f.renderFn(),f.nodes}let s={hooks:[],hookIndex:0,nodes:[],parent:n,vnode:e,props:r(e),key:i,children:new Set,parentInstance:m||void 0};m&&m.children.add(s),t.set(i,s);let d=true,v=()=>{let f=s.vnode,u=s.props;f.type._contextId!==void 0&&c(f.type._contextId,u.value);let y=m;m=s;let M=g(s,()=>f.type(u));if(d){let g=h(M,n);s.nodes=g?Array.isArray(g)?g:[g]:[],s.nodes.forEach(p=>{p.__ownerInstance||(p.__ownerInstance=s);}),d=false;}else {if(s.nodes.length===0){let N=h(M,n);s.nodes=N?Array.isArray(N)?N:[N]:[],m=y;return}let p=s.nodes[0].parentNode;if(!p){m=y;return}let _=document.createComment("flexium-marker"),T=s.nodes[s.nodes.length-1];T.nextSibling?p.insertBefore(_,T.nextSibling):p.appendChild(_),s.children.clear();let O=document.createElement("div"),C=h(M,O,p),R=C?Array.isArray(C)?C:[C]:[],F=P(s.nodes,R,p,_);p.removeChild(_),s.nodes=F;}m=y;};return s.renderFn=v,b(v),s.nodes}function h(e,n,o){let c=o||n;if(e==null||typeof e=="boolean"){let r=document.createTextNode("");return n.appendChild(r),r}if(typeof e=="string"||typeof e=="number"){let r=document.createTextNode(String(e));return n.appendChild(r),r}if(Array.isArray(e)){let r=new Set;l.has(c)&&l.get(c).forEach((s,d)=>r.add(d));let a=[];e.forEach(i=>{let s=h(i,n,o);s&&(Array.isArray(s)?a.push(...s):a.push(s));});let t=new Set;if(l.has(c)&&l.get(c).forEach((s,d)=>t.add(d)),l.has(c)){let i=l.get(c),s=[];r.forEach(d=>{if(!t.has(d)){let v=i.get(d);v&&(H(v),s.push(d));}}),s.forEach(d=>i.delete(d));}return a}if(typeof e=="object"){if(typeof e.type=="string"){let r=document.createElement(e.type);return e.props&&Object.entries(e.props).forEach(([a,t])=>{if(a.startsWith("on")&&typeof t=="function"){let i=a.slice(2).toLowerCase();r.addEventListener(i,t),r.__eventHandlers||(r.__eventHandlers={}),r.__eventHandlers[i]=t;}else k(r,a,t);}),e.children&&e.children.length>0&&e.children.forEach(a=>{h(a,r);}),n.appendChild(r),r}if(typeof e.type=="function")return e.type._contextId!==void 0,E(e,n,o)}return null}function $(e,n){n.innerHTML="",typeof e=="function"&&(e={type:e,props:{},children:[],key:void 0}),h(e,n);}function B(e,n,...o){return {type:e,props:n||{},children:o,key:n?.key}}function k(e,n,o){o==null?e.removeAttribute(n):n==="style"&&typeof o=="object"?Object.assign(e.style,o):n==="class"?e.className=String(o):n in e&&typeof e[n]!="function"?e[n]=o:e.setAttribute(n,String(o));}function S(e,n){return e.nodeType!==n.nodeType?false:e.nodeType===Node.ELEMENT_NODE&&n.nodeType===Node.ELEMENT_NODE?e.tagName===n.tagName:true}function D(e,n){Array.from(e.attributes).forEach(t=>{n.hasAttribute(t.name)||e.removeAttribute(t.name);}),Array.from(n.attributes).forEach(t=>{e.getAttribute(t.name)!==t.value&&(t.name==="value"&&"value"in e?e.value=t.value:t.name==="checked"&&"checked"in e?e.checked=t.value==="true"||t.value==="":e.setAttribute(t.name,t.value));});let r=e.__eventHandlers||{},a=n.__eventHandlers||{};Object.keys(r).forEach(t=>{a[t]||e.removeEventListener(t,r[t]);}),Object.keys(a).forEach(t=>{r[t]!==a[t]&&(r[t]&&e.removeEventListener(t,r[t]),e.addEventListener(t,a[t]));}),Object.keys(a).length>0?e.__eventHandlers=a:delete e.__eventHandlers,e instanceof HTMLInputElement&&n instanceof HTMLInputElement&&(e.value!==n.value&&(e.value=n.value),e.checked!==n.checked&&(e.checked=n.checked)),e instanceof HTMLTextAreaElement&&n instanceof HTMLTextAreaElement&&e.value!==n.value&&(e.value=n.value),e instanceof HTMLSelectElement&&n instanceof HTMLSelectElement&&e.value!==n.value&&(e.value=n.value);}function j(e,n){let o=Array.from(e.childNodes),c=Array.from(n.childNodes),r=Math.max(o.length,c.length);for(let a=0;a<r;a++){let t=o[a],i=c[a];!t&&i?e.appendChild(i):t&&!i?e.removeChild(t):t&&i&&x(t,i,e);}}function x(e,n,o){if(S(e,n)){let c=n.__ownerInstance;if(c){let r=c.nodes.indexOf(n);r!==-1&&(c.nodes[r]=e),e.__ownerInstance=c,delete n.__ownerInstance;}e.nodeType===Node.TEXT_NODE?e.nodeValue!==n.nodeValue&&(e.nodeValue=n.nodeValue):e.nodeType===Node.ELEMENT_NODE&&(D(e,n),j(e,n));}else o.replaceChild(n,e);}function P(e,n,o,c){let r=Math.max(e.length,n.length),a=[];for(let t=0;t<r;t++){let i=e[t],s=n[t];!i&&s?(o.insertBefore(s,c),a.push(s)):i&&!s?i.parentNode&&o.removeChild(i):i&&s&&(x(i,s,o),a.push(i));}return a}export{B as f,P as reconcile,$ as render};//# sourceMappingURL=dom.mjs.map
2
2
  //# sourceMappingURL=dom.mjs.map
package/dist/dom.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dom/index.ts"],"names":["instanceRegistry","currentRenderingInstance","removeComponentInstance","instance","child","node","renderComponent","fnode","parent","registryParent","effectiveRegistryParent","mergeProps","props","hasExplicitKey","parentRegistry","key","instanceCount","componentName","_","k","newProps","isFirstRender","renderFn","currentVnode","currentProps","pushContext","previousRenderingInstance","result","runWithComponent","newNodes","renderNode","firstNode","nodeParent","marker","tempContainer","newNodesArray","unsafeEffect","oldKeysSet","nodes","newKeysSet","keysToRemove","dom","value","eventName","setAttribute","render","app","container","f","type","children","el","canReuse","oldNode","newNode","updateAttributes","oldEl","newEl","attr","oldHandlers","newHandlers","event","reconcileChildren","oldChildren","newChildren","maxLen","i","oldChild","newChild","patchNode","reconcile","oldNodes","beforeMarker","resultNodes"],"mappings":"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","file":"dom.mjs","sourcesContent":["\nimport { pushContext } from '../core/context'\nimport { runWithComponent, type ComponentInstance } from '../core/hook'\nimport { unsafeEffect } from '../core/effect'\n\n// Types\nexport type FNodeChild = FNode | string | number | boolean | null | undefined | FNodeChild[] | (() => FNode)\n\nexport interface FNode {\n type: string | Function\n props: Record<string, any>\n children: FNodeChild[]\n key?: any\n}\n\n// Extended ComponentInstance for DOM tracking\ninterface DOMComponentInstance extends ComponentInstance {\n nodes: Node[]\n parent: HTMLElement\n vnode: any\n props: any\n key?: any\n renderFn?: () => void // Store render function for manual updates\n children: Set<DOMComponentInstance> // Track child component instances\n parentInstance?: DOMComponentInstance // Track parent component instance\n}\n\n// Registry to store component instances by parent and key\nconst instanceRegistry = new WeakMap<HTMLElement, Map<any, DOMComponentInstance>>()\n\n// Current rendering component instance (for tracking parent-child relationships)\nlet currentRenderingInstance: DOMComponentInstance | null = null\n\n// Recursively remove component instance and all its children\nfunction removeComponentInstance(instance: DOMComponentInstance): void {\n // First, recursively remove all child instances\n instance.children.forEach(child => {\n removeComponentInstance(child)\n })\n\n // Remove DOM nodes created by this instance\n instance.nodes.forEach(node => {\n if (node.parentNode) {\n node.parentNode.removeChild(node)\n }\n })\n\n // Clear the children set\n instance.children.clear()\n\n // Remove from parent's children set\n if (instance.parentInstance) {\n instance.parentInstance.children.delete(instance)\n }\n}\n\n// Render a function component with reactive re-rendering\nfunction renderComponent(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node[] {\n const effectiveRegistryParent = registryParent || parent\n // Merge props with children\n const mergeProps = (node: any) => {\n const props = { ...node.props }\n if (node.children && node.children.length > 0) {\n props.children = node.children.length === 1\n ? node.children[0]\n : node.children\n }\n return props\n }\n\n // Generate key for this component\n // Use explicit key if provided, otherwise generate auto-key based on render order\n const hasExplicitKey = fnode.key !== undefined\n\n // Get or create registry for this parent\n // Always use the effectiveRegistryParent for registry, not a temp container\n if (!instanceRegistry.has(effectiveRegistryParent)) {\n instanceRegistry.set(effectiveRegistryParent, new Map())\n }\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n\n // Generate key: explicit key, or auto-increment based on component type\n let key: any\n if (hasExplicitKey) {\n key = fnode.key\n } else {\n // Auto-generate unique key: componentType + instance number\n // Count how many instances of this type already exist\n let instanceCount = 0\n const componentName = fnode.type.name || 'anonymous'\n parentRegistry.forEach((_, k) => {\n if (typeof k === 'string' && k.startsWith(`__auto_${componentName}_`)) {\n instanceCount++\n }\n })\n key = `__auto_${componentName}_${instanceCount}`\n }\n\n // Try to reuse existing instance with same key\n if (parentRegistry.has(key)) {\n const instance = parentRegistry.get(key)!\n\n // Update vnode\n instance.vnode = fnode\n\n // Update props (non-reactive) - we'll trigger re-render manually\n const newProps = mergeProps(fnode)\n\n // Always update props (including children)\n instance.props = newProps\n\n // Always clear old children before re-rendering (they will be re-added during render)\n // This must be done BEFORE renderFn is called\n instance.children.clear()\n\n // Manually trigger re-render by calling renderFn\n if (instance.renderFn) {\n instance.renderFn()\n }\n\n return instance.nodes\n }\n\n // Create component instance with regular props (not reactive)\n const instance: DOMComponentInstance = {\n hooks: [],\n hookIndex: 0,\n nodes: [],\n parent,\n vnode: fnode,\n props: mergeProps(fnode), // Regular props, we handle updates manually\n key,\n children: new Set(),\n parentInstance: currentRenderingInstance || undefined\n }\n\n // Register this instance as a child of the current rendering instance\n if (currentRenderingInstance) {\n currentRenderingInstance.children.add(instance)\n }\n\n // Store instance in registry\n parentRegistry.set(key, instance)\n\n // Track if this is the first render\n let isFirstRender = true\n\n // Function to render the component\n const renderFn = () => {\n const currentVnode = instance.vnode\n const currentProps = instance.props\n\n // Check if this is a Context Provider\n const isProvider = (currentVnode.type as any)._contextId !== undefined\n if (isProvider) {\n // Set context value before rendering\n pushContext((currentVnode.type as any)._contextId, currentProps.value)\n }\n\n // Set this instance as the current rendering instance\n const previousRenderingInstance = currentRenderingInstance\n currentRenderingInstance = instance\n\n // Render component with hook context\n const result = runWithComponent(instance, () => currentVnode.type(currentProps))\n\n // DON'T restore currentRenderingInstance yet - we need it for renderNode calls below\n // It will be restored at the end of this function\n\n if (isFirstRender) {\n // First render: create new DOM nodes\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n isFirstRender = false\n } else {\n // Re-render: reconcile with existing DOM\n // Don't early return if nodes is empty - component might render other components\n if (instance.nodes.length === 0) {\n // Component has no DOM nodes yet, might be rendering other components\n // Just re-render without reconciliation\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n // Restore previous rendering instance before returning\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n const firstNode = instance.nodes[0]\n const nodeParent = firstNode.parentNode as HTMLElement\n\n if (!nodeParent) {\n // Restore previous rendering instance before returning\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n // Create marker to know where to insert\n const marker = document.createComment('flexium-marker')\n nodeParent.insertBefore(marker, firstNode)\n\n // Remove all child instances recursively before re-rendering\n instance.children.forEach(child => {\n removeComponentInstance(child)\n })\n instance.children.clear()\n\n // Remove old nodes\n instance.nodes.forEach(node => {\n if (node.parentNode) {\n node.parentNode.removeChild(node)\n }\n })\n\n // Create temporary container for collecting new nodes\n const tempContainer = document.createElement('div')\n\n // Render into temp container, but use actual parent for registry\n const newNodes = renderNode(result, tempContainer, nodeParent)\n const newNodesArray = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n\n // Move nodes from temp container to actual parent before marker\n newNodesArray.forEach(node => {\n nodeParent.insertBefore(node, marker)\n })\n\n // Remove marker\n nodeParent.removeChild(marker)\n\n instance.nodes = newNodesArray\n }\n\n // Restore previous rendering instance after all renderNode calls are done\n currentRenderingInstance = previousRenderingInstance\n }\n\n // Store renderFn for manual updates\n instance.renderFn = renderFn\n\n // Wrap in effect for reactive re-rendering\n unsafeEffect(renderFn)\n\n return instance.nodes\n}\n\nfunction renderNode(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node | Node[] | null {\n // Use registryParent for instance lookups if provided, otherwise use parent\n const effectiveRegistryParent = registryParent || parent\n // 1. null/undefined/boolean -> empty text\n if (fnode === null || fnode === undefined || typeof fnode === 'boolean') {\n const node = document.createTextNode('');\n parent.appendChild(node);\n return node;\n }\n\n // 2. Primitive (string/number) -> Text\n if (typeof fnode === 'string' || typeof fnode === 'number') {\n const node = document.createTextNode(String(fnode));\n parent.appendChild(node);\n return node;\n }\n\n // 3. Array -> render each item with key-based reconciliation\n if (Array.isArray(fnode)) {\n // Store old registry keys before rendering\n const oldKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => oldKeysSet.add(key))\n }\n\n // Render all children\n const nodes: Node[] = [];\n fnode.forEach((child) => {\n const result = renderNode(child, parent, registryParent);\n if (result) {\n if (Array.isArray(result)) {\n nodes.push(...result);\n } else {\n nodes.push(result);\n }\n }\n });\n\n // After rendering, check which keys are still in the registry (= were reused or created)\n const newKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => newKeysSet.add(key))\n }\n\n // Remove instances that existed before but don't exist now\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n const keysToRemove: any[] = []\n\n oldKeysSet.forEach(key => {\n if (!newKeysSet.has(key)) {\n const instance = parentRegistry.get(key)\n if (instance) {\n // Recursively remove component instance and all its children\n removeComponentInstance(instance)\n keysToRemove.push(key)\n }\n }\n })\n\n // Clean up registry\n keysToRemove.forEach(key => parentRegistry.delete(key))\n }\n\n return nodes;\n }\n\n // 4. Object (VNode)\n if (typeof fnode === 'object') {\n // 4a. HTML Element (intrinsic)\n if (typeof fnode.type === 'string') {\n const dom = document.createElement(fnode.type);\n\n // Set props/attributes\n if (fnode.props) {\n Object.entries(fnode.props).forEach(([key, value]) => {\n if (key.startsWith('on') && typeof value === 'function') {\n // Event handler: onClick -> click\n const eventName = key.slice(2).toLowerCase();\n dom.addEventListener(eventName, value as EventListener);\n\n // Store handlers for cleanup/reconciliation\n if (!(dom as any).__eventHandlers) {\n (dom as any).__eventHandlers = {};\n }\n (dom as any).__eventHandlers[eventName] = value;\n } else {\n // Regular attribute\n setAttribute(dom, key, value);\n }\n });\n }\n\n // Render children\n if (fnode.children && fnode.children.length > 0) {\n fnode.children.forEach((child: any) => {\n renderNode(child, dom);\n });\n }\n\n parent.appendChild(dom);\n return dom;\n }\n\n // 4b. Function Component\n if (typeof fnode.type === 'function') {\n // Check if this is a Context Provider\n const isProvider = (fnode.type as any)._contextId !== undefined;\n\n if (isProvider) {\n // Context Provider: treat like regular component for reactivity\n // This ensures providers re-render when their children change\n return renderComponent(fnode, parent, registryParent);\n } else {\n // Regular component: use reactive rendering\n return renderComponent(fnode, parent, registryParent);\n }\n }\n }\n\n // Fallback: unknown type\n return null;\n}\n\nexport function render(app: any, container: HTMLElement) {\n container.innerHTML = ''\n\n renderNode(app, container);\n}\n\n// f() - Create FNodes without JSX\nexport function f(\n type: string | Function,\n props?: any,\n ...children: any[]\n): any {\n return {\n type,\n props: props || {},\n children,\n key: props?.key\n }\n}\n\nfunction setAttribute(el: Element, key: string, value: any) {\n if (value === null || value === undefined) {\n el.removeAttribute(key)\n } else if (key === 'style' && typeof value === 'object') {\n // Handle style object\n Object.assign((el as HTMLElement).style, value)\n } else if (key === 'class') {\n // Handle class specially (className property)\n el.className = String(value)\n } else if (key in el && typeof (el as any)[key] !== 'function') {\n // Property-first approach: use DOM property if available\n // This automatically handles: disabled, checked, value, readonly, etc.\n (el as any)[key] = value\n } else {\n // Fallback to setAttribute for custom/data attributes\n el.setAttribute(key, String(value))\n }\n}\n\n// Reconciliation helpers\nfunction canReuse(oldNode: Node, newNode: Node): boolean {\n if (oldNode.nodeType !== newNode.nodeType) return false\n if (oldNode.nodeType === Node.ELEMENT_NODE && newNode.nodeType === Node.ELEMENT_NODE) {\n return (oldNode as Element).tagName === (newNode as Element).tagName\n }\n return true\n}\n\nfunction updateAttributes(oldEl: Element, newEl: Element): void {\n // Remove old attributes\n const oldAttrs = Array.from(oldEl.attributes)\n oldAttrs.forEach(attr => {\n if (!newEl.hasAttribute(attr.name)) {\n oldEl.removeAttribute(attr.name)\n }\n })\n\n // Set/update new attributes\n const newAttrs = Array.from(newEl.attributes)\n newAttrs.forEach(attr => {\n if (oldEl.getAttribute(attr.name) !== attr.value) {\n oldEl.setAttribute(attr.name, attr.value)\n }\n })\n\n // Update event handlers\n const oldHandlers = (oldEl as any).__eventHandlers || {}\n const newHandlers = (newEl as any).__eventHandlers || {}\n\n // Remove old handlers\n Object.keys(oldHandlers).forEach(event => {\n if (!newHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n })\n\n // Add/update new handlers\n Object.keys(newHandlers).forEach(event => {\n if (oldHandlers[event] !== newHandlers[event]) {\n if (oldHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n oldEl.addEventListener(event, newHandlers[event])\n }\n })\n\n // Update stored handlers\n if (Object.keys(newHandlers).length > 0) {\n (oldEl as any).__eventHandlers = newHandlers\n } else {\n delete (oldEl as any).__eventHandlers\n }\n\n // Special handling for form input values\n if (oldEl instanceof HTMLInputElement && newEl instanceof HTMLInputElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n if (oldEl.checked !== newEl.checked) {\n oldEl.checked = newEl.checked\n }\n }\n if (oldEl instanceof HTMLTextAreaElement && newEl instanceof HTMLTextAreaElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n if (oldEl instanceof HTMLSelectElement && newEl instanceof HTMLSelectElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n}\n\nfunction reconcileChildren(oldEl: Element, newEl: Element): void {\n const oldChildren = Array.from(oldEl.childNodes)\n const newChildren = Array.from(newEl.childNodes)\n const maxLen = Math.max(oldChildren.length, newChildren.length)\n\n for (let i = 0; i < maxLen; i++) {\n const oldChild = oldChildren[i]\n const newChild = newChildren[i]\n\n if (!oldChild && newChild) {\n // Add new child\n oldEl.appendChild(newChild)\n } else if (oldChild && !newChild) {\n // Remove old child\n oldEl.removeChild(oldChild)\n } else if (oldChild && newChild) {\n // Patch child\n patchNode(oldChild, newChild, oldEl)\n }\n }\n}\n\nfunction patchNode(oldNode: Node, newNode: Node, parent: Element): void {\n if (canReuse(oldNode, newNode)) {\n // Reuse node\n if (oldNode.nodeType === Node.TEXT_NODE) {\n // Update text content\n if (oldNode.nodeValue !== newNode.nodeValue) {\n oldNode.nodeValue = newNode.nodeValue\n }\n } else if (oldNode.nodeType === Node.ELEMENT_NODE) {\n // Update element\n updateAttributes(oldNode as Element, newNode as Element)\n reconcileChildren(oldNode as Element, newNode as Element)\n }\n } else {\n // Different type, replace\n parent.replaceChild(newNode, oldNode)\n }\n}\n\n// Exported for future use (Phase 2: Reactive rendering)\nexport function reconcile(oldNodes: Node[], newNodes: Node[], parent: Node, beforeMarker: Node): Node[] {\n const maxLen = Math.max(oldNodes.length, newNodes.length)\n const resultNodes: Node[] = []\n\n for (let i = 0; i < maxLen; i++) {\n const oldNode = oldNodes[i]\n const newNode = newNodes[i]\n\n if (!oldNode && newNode) {\n // Add new node\n parent.insertBefore(newNode, beforeMarker)\n resultNodes.push(newNode)\n } else if (oldNode && !newNode) {\n // Remove old node\n if (oldNode.parentNode) {\n parent.removeChild(oldNode)\n }\n } else if (oldNode && newNode) {\n // Patch node\n patchNode(oldNode, newNode, parent as Element)\n resultNodes.push(oldNode)\n }\n }\n\n return resultNodes\n}\n"]}
1
+ {"version":3,"sources":["../src/dom/index.ts"],"names":["instanceRegistry","currentRenderingInstance","removeComponentInstance","instance","child","node","renderComponent","fnode","parent","registryParent","effectiveRegistryParent","mergeProps","props","hasExplicitKey","parentRegistry","key","instanceCount","componentName","_","k","newProps","isFirstRender","renderFn","currentVnode","currentProps","pushContext","previousRenderingInstance","result","runWithComponent","newNodes","renderNode","nodeParent","marker","lastNode","tempContainer","newNodesArray","reconciledNodes","reconcile","unsafeEffect","oldKeysSet","nodes","newKeysSet","keysToRemove","dom","value","eventName","setAttribute","render","app","container","f","type","children","el","canReuse","oldNode","newNode","updateAttributes","oldEl","newEl","attr","oldHandlers","newHandlers","event","reconcileChildren","oldChildren","newChildren","maxLen","i","oldChild","newChild","patchNode","ownerInstance","idx","oldNodes","beforeMarker","resultNodes"],"mappings":"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","file":"dom.mjs","sourcesContent":["\nimport { pushContext } from '../core/context'\nimport { runWithComponent, type ComponentInstance } from '../core/hook'\nimport { unsafeEffect } from '../core/effect'\n\n// Types\nexport type FNodeChild = FNode | string | number | boolean | null | undefined | FNodeChild[] | (() => FNode)\n\nexport interface FNode {\n type: string | Function\n props: Record<string, any>\n children: FNodeChild[]\n key?: any\n}\n\n// Extended ComponentInstance for DOM tracking\ninterface DOMComponentInstance extends ComponentInstance {\n nodes: Node[]\n parent: HTMLElement\n vnode: any\n props: any\n key?: any\n renderFn?: () => void // Store render function for manual updates\n children: Set<DOMComponentInstance> // Track child component instances\n parentInstance?: DOMComponentInstance // Track parent component instance\n}\n\n// Registry to store component instances by parent and key\nconst instanceRegistry = new WeakMap<HTMLElement, Map<any, DOMComponentInstance>>()\n\n// Current rendering component instance (for tracking parent-child relationships)\nlet currentRenderingInstance: DOMComponentInstance | null = null\n\n// Recursively remove component instance and all its children\nfunction removeComponentInstance(instance: DOMComponentInstance): void {\n // First, recursively remove all child instances\n instance.children.forEach(child => {\n removeComponentInstance(child)\n })\n\n // Remove DOM nodes created by this instance\n instance.nodes.forEach(node => {\n if (node.parentNode) {\n node.parentNode.removeChild(node)\n }\n })\n\n // Clear the children set\n instance.children.clear()\n\n // Remove from parent's children set\n if (instance.parentInstance) {\n instance.parentInstance.children.delete(instance)\n }\n}\n\n// Render a function component with reactive re-rendering\nfunction renderComponent(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node[] {\n const effectiveRegistryParent = registryParent || parent\n // Merge props with children\n const mergeProps = (node: any) => {\n const props = { ...node.props }\n if (node.children && node.children.length > 0) {\n props.children = node.children.length === 1\n ? node.children[0]\n : node.children\n }\n return props\n }\n\n // Generate key for this component\n // Use explicit key if provided, otherwise generate auto-key based on render order\n const hasExplicitKey = fnode.key !== undefined\n\n // Get or create registry for this parent\n // Always use the effectiveRegistryParent for registry, not a temp container\n if (!instanceRegistry.has(effectiveRegistryParent)) {\n instanceRegistry.set(effectiveRegistryParent, new Map())\n }\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n\n // Generate key: explicit key, or auto-increment based on component type\n let key: any\n if (hasExplicitKey) {\n key = fnode.key\n } else {\n // Auto-generate unique key: componentType + instance number\n // Count how many instances of this type already exist\n let instanceCount = 0\n const componentName = fnode.type.name || 'anonymous'\n parentRegistry.forEach((_, k) => {\n if (typeof k === 'string' && k.startsWith(`__auto_${componentName}_`)) {\n instanceCount++\n }\n })\n key = `__auto_${componentName}_${instanceCount}`\n }\n\n // Try to reuse existing instance with same key\n if (parentRegistry.has(key)) {\n const instance = parentRegistry.get(key)!\n\n // Update vnode\n instance.vnode = fnode\n\n // Update props (non-reactive) - we'll trigger re-render manually\n const newProps = mergeProps(fnode)\n\n // Always update props (including children)\n instance.props = newProps\n\n // Always clear old children before re-rendering (they will be re-added during render)\n // This must be done BEFORE renderFn is called\n instance.children.clear()\n\n // Manually trigger re-render by calling renderFn\n if (instance.renderFn) {\n instance.renderFn()\n }\n\n return instance.nodes\n }\n\n // Create component instance with regular props (not reactive)\n const instance: DOMComponentInstance = {\n hooks: [],\n hookIndex: 0,\n nodes: [],\n parent,\n vnode: fnode,\n props: mergeProps(fnode), // Regular props, we handle updates manually\n key,\n children: new Set(),\n parentInstance: currentRenderingInstance || undefined\n }\n\n // Register this instance as a child of the current rendering instance\n if (currentRenderingInstance) {\n currentRenderingInstance.children.add(instance)\n }\n\n // Store instance in registry\n parentRegistry.set(key, instance)\n\n // Track if this is the first render\n let isFirstRender = true\n\n // Function to render the component\n const renderFn = () => {\n const currentVnode = instance.vnode\n const currentProps = instance.props\n\n // Check if this is a Context Provider\n const isProvider = (currentVnode.type as any)._contextId !== undefined\n if (isProvider) {\n // Set context value before rendering\n pushContext((currentVnode.type as any)._contextId, currentProps.value)\n }\n\n // Set this instance as the current rendering instance\n const previousRenderingInstance = currentRenderingInstance\n currentRenderingInstance = instance\n\n // Render component with hook context\n const result = runWithComponent(instance, () => currentVnode.type(currentProps))\n\n // DON'T restore currentRenderingInstance yet - we need it for renderNode calls below\n // It will be restored at the end of this function\n\n if (isFirstRender) {\n // First render: create new DOM nodes\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n // Mark nodes as owned by this instance (for reconciliation)\n // Only set ownership if not already owned (child components set ownership first)\n instance.nodes.forEach(node => {\n if (!(node as any).__ownerInstance) {\n (node as any).__ownerInstance = instance\n }\n })\n isFirstRender = false\n } else {\n // Re-render: reconcile with existing DOM\n // Don't early return if nodes is empty - component might render other components\n if (instance.nodes.length === 0) {\n // Component has no DOM nodes yet, might be rendering other components\n // Just re-render without reconciliation\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n // Restore previous rendering instance before returning\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n const firstNode = instance.nodes[0]\n const nodeParent = firstNode.parentNode as HTMLElement\n\n if (!nodeParent) {\n // Restore previous rendering instance before returning\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n // Create marker to know where to insert new nodes\n const marker = document.createComment('flexium-marker')\n const lastNode = instance.nodes[instance.nodes.length - 1]\n if (lastNode.nextSibling) {\n nodeParent.insertBefore(marker, lastNode.nextSibling)\n } else {\n nodeParent.appendChild(marker)\n }\n\n // Clear children references - actual cleanup happens via key-based registry\n // Don't call removeComponentInstance here as it removes DOM nodes that reconcile needs\n instance.children.clear()\n\n // Create temporary container for collecting new nodes\n const tempContainer = document.createElement('div')\n\n // Render into temp container, but use actual parent for registry\n const newNodes = renderNode(result, tempContainer, nodeParent)\n const newNodesArray = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n\n // Use reconcile to patch existing nodes instead of replacing\n const reconciledNodes = reconcile(instance.nodes, newNodesArray, nodeParent, marker)\n\n // Remove marker\n nodeParent.removeChild(marker)\n\n instance.nodes = reconciledNodes\n }\n\n // Restore previous rendering instance after all renderNode calls are done\n currentRenderingInstance = previousRenderingInstance\n }\n\n // Store renderFn for manual updates\n instance.renderFn = renderFn\n\n // Wrap in effect for reactive re-rendering\n unsafeEffect(renderFn)\n\n return instance.nodes\n}\n\nfunction renderNode(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node | Node[] | null {\n // Use registryParent for instance lookups if provided, otherwise use parent\n const effectiveRegistryParent = registryParent || parent\n // 1. null/undefined/boolean -> empty text\n if (fnode === null || fnode === undefined || typeof fnode === 'boolean') {\n const node = document.createTextNode('');\n parent.appendChild(node);\n return node;\n }\n\n // 2. Primitive (string/number) -> Text\n if (typeof fnode === 'string' || typeof fnode === 'number') {\n const node = document.createTextNode(String(fnode));\n parent.appendChild(node);\n return node;\n }\n\n // 3. Array -> render each item with key-based reconciliation\n if (Array.isArray(fnode)) {\n // Store old registry keys before rendering\n const oldKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => oldKeysSet.add(key))\n }\n\n // Render all children\n const nodes: Node[] = [];\n fnode.forEach((child) => {\n const result = renderNode(child, parent, registryParent);\n if (result) {\n if (Array.isArray(result)) {\n nodes.push(...result);\n } else {\n nodes.push(result);\n }\n }\n });\n\n // After rendering, check which keys are still in the registry (= were reused or created)\n const newKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => newKeysSet.add(key))\n }\n\n // Remove instances that existed before but don't exist now\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n const keysToRemove: any[] = []\n\n oldKeysSet.forEach(key => {\n if (!newKeysSet.has(key)) {\n const instance = parentRegistry.get(key)\n if (instance) {\n // Recursively remove component instance and all its children\n removeComponentInstance(instance)\n keysToRemove.push(key)\n }\n }\n })\n\n // Clean up registry\n keysToRemove.forEach(key => parentRegistry.delete(key))\n }\n\n return nodes;\n }\n\n // 4. Object (VNode)\n if (typeof fnode === 'object') {\n // 4a. HTML Element (intrinsic)\n if (typeof fnode.type === 'string') {\n const dom = document.createElement(fnode.type);\n\n // Set props/attributes\n if (fnode.props) {\n Object.entries(fnode.props).forEach(([key, value]) => {\n if (key.startsWith('on') && typeof value === 'function') {\n // Event handler: onClick -> click\n const eventName = key.slice(2).toLowerCase();\n dom.addEventListener(eventName, value as EventListener);\n\n // Store handlers for cleanup/reconciliation\n if (!(dom as any).__eventHandlers) {\n (dom as any).__eventHandlers = {};\n }\n (dom as any).__eventHandlers[eventName] = value;\n } else {\n // Regular attribute\n setAttribute(dom, key, value);\n }\n });\n }\n\n // Render children\n if (fnode.children && fnode.children.length > 0) {\n fnode.children.forEach((child: any) => {\n renderNode(child, dom);\n });\n }\n\n parent.appendChild(dom);\n return dom;\n }\n\n // 4b. Function Component\n if (typeof fnode.type === 'function') {\n // Check if this is a Context Provider\n const isProvider = (fnode.type as any)._contextId !== undefined;\n\n if (isProvider) {\n // Context Provider: treat like regular component for reactivity\n // This ensures providers re-render when their children change\n return renderComponent(fnode, parent, registryParent);\n } else {\n // Regular component: use reactive rendering\n return renderComponent(fnode, parent, registryParent);\n }\n }\n }\n\n // Fallback: unknown type\n return null;\n}\n\nexport function render(app: any, container: HTMLElement) {\n container.innerHTML = ''\n\n // Handle raw function components by wrapping them in an FNode\n if (typeof app === 'function') {\n app = { type: app, props: {}, children: [], key: undefined }\n }\n\n renderNode(app, container);\n}\n\n// f() - Create FNodes without JSX\nexport function f(\n type: string | Function,\n props?: any,\n ...children: any[]\n): any {\n return {\n type,\n props: props || {},\n children,\n key: props?.key\n }\n}\n\nfunction setAttribute(el: Element, key: string, value: any) {\n if (value === null || value === undefined) {\n el.removeAttribute(key)\n } else if (key === 'style' && typeof value === 'object') {\n // Handle style object\n Object.assign((el as HTMLElement).style, value)\n } else if (key === 'class') {\n // Handle class specially (className property)\n el.className = String(value)\n } else if (key in el && typeof (el as any)[key] !== 'function') {\n // Property-first approach: use DOM property if available\n // This automatically handles: disabled, checked, value, readonly, etc.\n (el as any)[key] = value\n } else {\n // Fallback to setAttribute for custom/data attributes\n el.setAttribute(key, String(value))\n }\n}\n\n// Reconciliation helpers\nfunction canReuse(oldNode: Node, newNode: Node): boolean {\n if (oldNode.nodeType !== newNode.nodeType) return false\n if (oldNode.nodeType === Node.ELEMENT_NODE && newNode.nodeType === Node.ELEMENT_NODE) {\n return (oldNode as Element).tagName === (newNode as Element).tagName\n }\n return true\n}\n\nfunction updateAttributes(oldEl: Element, newEl: Element): void {\n // Remove old attributes\n const oldAttrs = Array.from(oldEl.attributes)\n oldAttrs.forEach(attr => {\n if (!newEl.hasAttribute(attr.name)) {\n oldEl.removeAttribute(attr.name)\n }\n })\n\n // Set/update new attributes\n const newAttrs = Array.from(newEl.attributes)\n newAttrs.forEach(attr => {\n if (oldEl.getAttribute(attr.name) !== attr.value) {\n // Use DOM property for value/checked to preserve focus\n if (attr.name === 'value' && 'value' in oldEl) {\n (oldEl as HTMLInputElement).value = attr.value\n } else if (attr.name === 'checked' && 'checked' in oldEl) {\n (oldEl as HTMLInputElement).checked = attr.value === 'true' || attr.value === ''\n } else {\n oldEl.setAttribute(attr.name, attr.value)\n }\n }\n })\n\n // Update event handlers\n const oldHandlers = (oldEl as any).__eventHandlers || {}\n const newHandlers = (newEl as any).__eventHandlers || {}\n\n // Remove old handlers\n Object.keys(oldHandlers).forEach(event => {\n if (!newHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n })\n\n // Add/update new handlers\n Object.keys(newHandlers).forEach(event => {\n if (oldHandlers[event] !== newHandlers[event]) {\n if (oldHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n oldEl.addEventListener(event, newHandlers[event])\n }\n })\n\n // Update stored handlers\n if (Object.keys(newHandlers).length > 0) {\n (oldEl as any).__eventHandlers = newHandlers\n } else {\n delete (oldEl as any).__eventHandlers\n }\n\n // Special handling for form input values\n if (oldEl instanceof HTMLInputElement && newEl instanceof HTMLInputElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n if (oldEl.checked !== newEl.checked) {\n oldEl.checked = newEl.checked\n }\n }\n if (oldEl instanceof HTMLTextAreaElement && newEl instanceof HTMLTextAreaElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n if (oldEl instanceof HTMLSelectElement && newEl instanceof HTMLSelectElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n}\n\nfunction reconcileChildren(oldEl: Element, newEl: Element): void {\n const oldChildren = Array.from(oldEl.childNodes)\n const newChildren = Array.from(newEl.childNodes)\n const maxLen = Math.max(oldChildren.length, newChildren.length)\n\n for (let i = 0; i < maxLen; i++) {\n const oldChild = oldChildren[i]\n const newChild = newChildren[i]\n\n if (!oldChild && newChild) {\n // Add new child\n oldEl.appendChild(newChild)\n } else if (oldChild && !newChild) {\n // Remove old child\n oldEl.removeChild(oldChild)\n } else if (oldChild && newChild) {\n // Patch child\n patchNode(oldChild, newChild, oldEl)\n }\n }\n}\n\nfunction patchNode(oldNode: Node, newNode: Node, parent: Element): void {\n if (canReuse(oldNode, newNode)) {\n // Transfer component instance ownership from newNode to oldNode\n // This ensures component instances reference actual DOM nodes after reconciliation\n const ownerInstance = (newNode as any).__ownerInstance as DOMComponentInstance | undefined\n if (ownerInstance) {\n const idx = ownerInstance.nodes.indexOf(newNode)\n if (idx !== -1) {\n ownerInstance.nodes[idx] = oldNode\n }\n ;(oldNode as any).__ownerInstance = ownerInstance\n delete (newNode as any).__ownerInstance\n }\n // Reuse node\n if (oldNode.nodeType === Node.TEXT_NODE) {\n // Update text content\n if (oldNode.nodeValue !== newNode.nodeValue) {\n oldNode.nodeValue = newNode.nodeValue\n }\n } else if (oldNode.nodeType === Node.ELEMENT_NODE) {\n // Update element\n updateAttributes(oldNode as Element, newNode as Element)\n reconcileChildren(oldNode as Element, newNode as Element)\n }\n } else {\n // Different type, replace\n parent.replaceChild(newNode, oldNode)\n }\n}\n\n// Exported for future use (Phase 2: Reactive rendering)\nexport function reconcile(oldNodes: Node[], newNodes: Node[], parent: Node, beforeMarker: Node): Node[] {\n const maxLen = Math.max(oldNodes.length, newNodes.length)\n const resultNodes: Node[] = []\n\n for (let i = 0; i < maxLen; i++) {\n const oldNode = oldNodes[i]\n const newNode = newNodes[i]\n\n if (!oldNode && newNode) {\n // Add new node\n parent.insertBefore(newNode, beforeMarker)\n resultNodes.push(newNode)\n } else if (oldNode && !newNode) {\n // Remove old node\n if (oldNode.parentNode) {\n parent.removeChild(oldNode)\n }\n } else if (oldNode && newNode) {\n // Patch node\n patchNode(oldNode, newNode, parent as Element)\n resultNodes.push(oldNode)\n }\n }\n\n return resultNodes\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,3 +1,3 @@
1
- declare const VERSION = "0.12.9";
1
+ declare const VERSION = "0.12.11";
2
2
 
3
3
  export { VERSION };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- declare const VERSION = "0.12.9";
1
+ declare const VERSION = "0.12.11";
2
2
 
3
3
  export { VERSION };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var o="0.12.9";exports.VERSION=o;//# sourceMappingURL=index.js.map
1
+ 'use strict';var o="0.12.11";exports.VERSION=o;//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["VERSION"],"mappings":"aAAO,IAAMA,CAAAA,CAAU","file":"index.js","sourcesContent":["export const VERSION = '0.12.9' // Bump version to signify rebuild\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["VERSION"],"mappings":"aAAO,IAAMA,CAAAA,CAAU","file":"index.js","sourcesContent":["export const VERSION = '0.12.11' // Bump version to signify rebuild\n"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var o="0.12.9";export{o as VERSION};//# sourceMappingURL=index.mjs.map
1
+ var o="0.12.11";export{o as VERSION};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["VERSION"],"mappings":"AAAO,IAAMA,CAAAA,CAAU","file":"index.mjs","sourcesContent":["export const VERSION = '0.12.9' // Bump version to signify rebuild\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["VERSION"],"mappings":"AAAO,IAAMA,CAAAA,CAAU","file":"index.mjs","sourcesContent":["export const VERSION = '0.12.11' // Bump version to signify rebuild\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkKBUONZI2_js=require('./chunk-KBUONZI2.js');require('./chunk-7BXR4ZFD.js'),require('./chunk-ENWGYQNU.js');function F(a){let{fixedFps:n=60,onUpdate:b,onFixedUpdate:r,onRender:w}=a,g=1/n,S=.25,l=false,m=0,t=0,s=0,i=0,u=0,o=null;function d(h){if(!l)return;let E=Math.min((h-m)/1e3,S);if(m=h,b&&b(E),r)for(t+=E;t>=g;)r(g),t-=g;if(w){let y=t/g;w(y);}i++,h-u>=1e3&&(s=i,i=0,u=h),o=requestAnimationFrame(d);}return {start:()=>{l||(l=true,m=performance.now(),t=0,o=requestAnimationFrame(d));},stop:()=>{l=false,o!==null&&(cancelAnimationFrame(o),o=null);},isRunning:()=>l,getFps:()=>s}}var k=(e=>(e.ArrowUp="ArrowUp",e.ArrowDown="ArrowDown",e.ArrowLeft="ArrowLeft",e.ArrowRight="ArrowRight",e.KeyW="KeyW",e.KeyA="KeyA",e.KeyS="KeyS",e.KeyD="KeyD",e.Space="Space",e.Enter="Enter",e.Escape="Escape",e.Tab="Tab",e.ShiftLeft="ShiftLeft",e.ShiftRight="ShiftRight",e.ControlLeft="ControlLeft",e.ControlRight="ControlRight",e.AltLeft="AltLeft",e.AltRight="AltRight",e.Digit0="Digit0",e.Digit1="Digit1",e.Digit2="Digit2",e.Digit3="Digit3",e.Digit4="Digit4",e.Digit5="Digit5",e.Digit6="Digit6",e.Digit7="Digit7",e.Digit8="Digit8",e.Digit9="Digit9",e.KeyE="KeyE",e.KeyQ="KeyQ",e.KeyR="KeyR",e.KeyF="KeyF",e))(k||{});function C(a=window){let[n,b]=chunkKBUONZI2_js.a(new Set,{key:["keyboard","pressed"]}),[r,w]=chunkKBUONZI2_js.a(new Set,{key:["keyboard","justPressed"]}),[g,S]=chunkKBUONZI2_js.a(new Set,{key:["keyboard","justReleased"]}),l=t=>{let s=t.code,i=n;if(!i.has(s)){let u=new Set(i);u.add(s),b(u);let o=r,d=new Set(o);d.add(s),w(d);}},m=t=>{let s=t.code,i=n,u=new Set(i);u.delete(s),b(u);let o=g,d=new Set(o);d.add(s),S(d);};return a.addEventListener("keydown",l),a.addEventListener("keyup",m),{isPressed:t=>n?.has(t)||false,isJustPressed:t=>r?.has(t)||false,isJustReleased:t=>g?.has(t)||false,getPressedKeys:()=>Array.from(n||[]),clearFrameState:()=>{w(new Set),S(new Set);},dispose:()=>{a.removeEventListener("keydown",l),a.removeEventListener("keyup",m);}}}var M=(r=>(r[r.Left=0]="Left",r[r.Middle=1]="Middle",r[r.Right=2]="Right",r))(M||{});function J(a={}){let n=a.target||window,b=typeof a.canvas=="function"?a.canvas:()=>a.canvas,[r,w]=chunkKBUONZI2_js.a({x:0,y:0},{key:["mouse","position"]}),[g,S]=chunkKBUONZI2_js.a({x:0,y:0},{key:["mouse","delta"]}),[l,m]=chunkKBUONZI2_js.a(0,{key:["mouse","wheel"]}),[t,s]=chunkKBUONZI2_js.a(new Set,{key:["mouse","buttons"]}),i=0,u=0,o=p=>{let f=p,D=b(),c=f.clientX,L=f.clientY;if(D){let R=D.getBoundingClientRect();c=f.clientX-R.left,L=f.clientY-R.top;}w({x:c,y:L}),S({x:c-i,y:L-u}),i=c,u=L;},d=p=>{let f=p.button,D=t,c=new Set(D);c.add(f),s(c);},h=p=>{let f=p.button,D=t,c=new Set(D);c.delete(f),s(c);},E=p=>{m(p.deltaY);};n.addEventListener("mousemove",o),n.addEventListener("mousedown",d),n.addEventListener("mouseup",h),n.addEventListener("wheel",E);let y=t,x=r,P=g,A=l;return {get x(){return x.x},get y(){return x.y},get deltaX(){return P.x},get deltaY(){return P.y},get wheelDelta(){return A},isPressed:p=>y?.has(p)||false,isLeftPressed:()=>y?.has(0)||false,isRightPressed:()=>y?.has(2)||false,isMiddlePressed:()=>y?.has(1)||false,clearFrameState:()=>{S({x:0,y:0}),m(0);},dispose:()=>{n.removeEventListener("mousemove",o),n.removeEventListener("mousedown",d),n.removeEventListener("mouseup",h),n.removeEventListener("wheel",E);}}}exports.Keys=k;exports.MouseButton=M;exports.keyboard=C;exports.loop=F;exports.mouse=J;//# sourceMappingURL=interactive.js.map
1
+ 'use strict';var chunkAPAMPY43_js=require('./chunk-APAMPY43.js');require('./chunk-7BXR4ZFD.js'),require('./chunk-ENWGYQNU.js');function F(a){let{fixedFps:n=60,onUpdate:b,onFixedUpdate:r,onRender:w}=a,g=1/n,S=.25,l=false,m=0,t=0,s=0,i=0,u=0,o=null;function d(h){if(!l)return;let E=Math.min((h-m)/1e3,S);if(m=h,b&&b(E),r)for(t+=E;t>=g;)r(g),t-=g;if(w){let y=t/g;w(y);}i++,h-u>=1e3&&(s=i,i=0,u=h),o=requestAnimationFrame(d);}return {start:()=>{l||(l=true,m=performance.now(),t=0,o=requestAnimationFrame(d));},stop:()=>{l=false,o!==null&&(cancelAnimationFrame(o),o=null);},isRunning:()=>l,getFps:()=>s}}var k=(e=>(e.ArrowUp="ArrowUp",e.ArrowDown="ArrowDown",e.ArrowLeft="ArrowLeft",e.ArrowRight="ArrowRight",e.KeyW="KeyW",e.KeyA="KeyA",e.KeyS="KeyS",e.KeyD="KeyD",e.Space="Space",e.Enter="Enter",e.Escape="Escape",e.Tab="Tab",e.ShiftLeft="ShiftLeft",e.ShiftRight="ShiftRight",e.ControlLeft="ControlLeft",e.ControlRight="ControlRight",e.AltLeft="AltLeft",e.AltRight="AltRight",e.Digit0="Digit0",e.Digit1="Digit1",e.Digit2="Digit2",e.Digit3="Digit3",e.Digit4="Digit4",e.Digit5="Digit5",e.Digit6="Digit6",e.Digit7="Digit7",e.Digit8="Digit8",e.Digit9="Digit9",e.KeyE="KeyE",e.KeyQ="KeyQ",e.KeyR="KeyR",e.KeyF="KeyF",e))(k||{});function C(a=window){let[n,b]=chunkAPAMPY43_js.a(new Set,{key:["keyboard","pressed"]}),[r,w]=chunkAPAMPY43_js.a(new Set,{key:["keyboard","justPressed"]}),[g,S]=chunkAPAMPY43_js.a(new Set,{key:["keyboard","justReleased"]}),l=t=>{let s=t.code,i=n;if(!i.has(s)){let u=new Set(i);u.add(s),b(u);let o=r,d=new Set(o);d.add(s),w(d);}},m=t=>{let s=t.code,i=n,u=new Set(i);u.delete(s),b(u);let o=g,d=new Set(o);d.add(s),S(d);};return a.addEventListener("keydown",l),a.addEventListener("keyup",m),{isPressed:t=>n?.has(t)||false,isJustPressed:t=>r?.has(t)||false,isJustReleased:t=>g?.has(t)||false,getPressedKeys:()=>Array.from(n||[]),clearFrameState:()=>{w(new Set),S(new Set);},dispose:()=>{a.removeEventListener("keydown",l),a.removeEventListener("keyup",m);}}}var M=(r=>(r[r.Left=0]="Left",r[r.Middle=1]="Middle",r[r.Right=2]="Right",r))(M||{});function J(a={}){let n=a.target||window,b=typeof a.canvas=="function"?a.canvas:()=>a.canvas,[r,w]=chunkAPAMPY43_js.a({x:0,y:0},{key:["mouse","position"]}),[g,S]=chunkAPAMPY43_js.a({x:0,y:0},{key:["mouse","delta"]}),[l,m]=chunkAPAMPY43_js.a(0,{key:["mouse","wheel"]}),[t,s]=chunkAPAMPY43_js.a(new Set,{key:["mouse","buttons"]}),i=0,u=0,o=p=>{let f=p,D=b(),c=f.clientX,L=f.clientY;if(D){let R=D.getBoundingClientRect();c=f.clientX-R.left,L=f.clientY-R.top;}w({x:c,y:L}),S({x:c-i,y:L-u}),i=c,u=L;},d=p=>{let f=p.button,D=t,c=new Set(D);c.add(f),s(c);},h=p=>{let f=p.button,D=t,c=new Set(D);c.delete(f),s(c);},E=p=>{m(p.deltaY);};n.addEventListener("mousemove",o),n.addEventListener("mousedown",d),n.addEventListener("mouseup",h),n.addEventListener("wheel",E);let y=t,x=r,P=g,A=l;return {get x(){return x.x},get y(){return x.y},get deltaX(){return P.x},get deltaY(){return P.y},get wheelDelta(){return A},isPressed:p=>y?.has(p)||false,isLeftPressed:()=>y?.has(0)||false,isRightPressed:()=>y?.has(2)||false,isMiddlePressed:()=>y?.has(1)||false,clearFrameState:()=>{S({x:0,y:0}),m(0);},dispose:()=>{n.removeEventListener("mousemove",o),n.removeEventListener("mousedown",d),n.removeEventListener("mouseup",h),n.removeEventListener("wheel",E);}}}exports.Keys=k;exports.MouseButton=M;exports.keyboard=C;exports.loop=F;exports.mouse=J;//# sourceMappingURL=interactive.js.map
2
2
  //# sourceMappingURL=interactive.js.map
@@ -1,2 +1,2 @@
1
- import {a}from'./chunk-IOF6L2BT.mjs';import'./chunk-CPJRQL2C.mjs';import'./chunk-44RZHCII.mjs';function F(a){let{fixedFps:n=60,onUpdate:b,onFixedUpdate:r,onRender:w}=a,g=1/n,S=.25,l=false,m=0,t=0,s=0,i=0,u=0,o=null;function d(h){if(!l)return;let E=Math.min((h-m)/1e3,S);if(m=h,b&&b(E),r)for(t+=E;t>=g;)r(g),t-=g;if(w){let y=t/g;w(y);}i++,h-u>=1e3&&(s=i,i=0,u=h),o=requestAnimationFrame(d);}return {start:()=>{l||(l=true,m=performance.now(),t=0,o=requestAnimationFrame(d));},stop:()=>{l=false,o!==null&&(cancelAnimationFrame(o),o=null);},isRunning:()=>l,getFps:()=>s}}var k=(e=>(e.ArrowUp="ArrowUp",e.ArrowDown="ArrowDown",e.ArrowLeft="ArrowLeft",e.ArrowRight="ArrowRight",e.KeyW="KeyW",e.KeyA="KeyA",e.KeyS="KeyS",e.KeyD="KeyD",e.Space="Space",e.Enter="Enter",e.Escape="Escape",e.Tab="Tab",e.ShiftLeft="ShiftLeft",e.ShiftRight="ShiftRight",e.ControlLeft="ControlLeft",e.ControlRight="ControlRight",e.AltLeft="AltLeft",e.AltRight="AltRight",e.Digit0="Digit0",e.Digit1="Digit1",e.Digit2="Digit2",e.Digit3="Digit3",e.Digit4="Digit4",e.Digit5="Digit5",e.Digit6="Digit6",e.Digit7="Digit7",e.Digit8="Digit8",e.Digit9="Digit9",e.KeyE="KeyE",e.KeyQ="KeyQ",e.KeyR="KeyR",e.KeyF="KeyF",e))(k||{});function C(a$1=window){let[n,b]=a(new Set,{key:["keyboard","pressed"]}),[r,w]=a(new Set,{key:["keyboard","justPressed"]}),[g,S]=a(new Set,{key:["keyboard","justReleased"]}),l=t=>{let s=t.code,i=n;if(!i.has(s)){let u=new Set(i);u.add(s),b(u);let o=r,d=new Set(o);d.add(s),w(d);}},m=t=>{let s=t.code,i=n,u=new Set(i);u.delete(s),b(u);let o=g,d=new Set(o);d.add(s),S(d);};return a$1.addEventListener("keydown",l),a$1.addEventListener("keyup",m),{isPressed:t=>n?.has(t)||false,isJustPressed:t=>r?.has(t)||false,isJustReleased:t=>g?.has(t)||false,getPressedKeys:()=>Array.from(n||[]),clearFrameState:()=>{w(new Set),S(new Set);},dispose:()=>{a$1.removeEventListener("keydown",l),a$1.removeEventListener("keyup",m);}}}var M=(r=>(r[r.Left=0]="Left",r[r.Middle=1]="Middle",r[r.Right=2]="Right",r))(M||{});function J(a$1={}){let n=a$1.target||window,b=typeof a$1.canvas=="function"?a$1.canvas:()=>a$1.canvas,[r,w]=a({x:0,y:0},{key:["mouse","position"]}),[g,S]=a({x:0,y:0},{key:["mouse","delta"]}),[l,m]=a(0,{key:["mouse","wheel"]}),[t,s]=a(new Set,{key:["mouse","buttons"]}),i=0,u=0,o=p=>{let f=p,D=b(),c=f.clientX,L=f.clientY;if(D){let R=D.getBoundingClientRect();c=f.clientX-R.left,L=f.clientY-R.top;}w({x:c,y:L}),S({x:c-i,y:L-u}),i=c,u=L;},d=p=>{let f=p.button,D=t,c=new Set(D);c.add(f),s(c);},h=p=>{let f=p.button,D=t,c=new Set(D);c.delete(f),s(c);},E=p=>{m(p.deltaY);};n.addEventListener("mousemove",o),n.addEventListener("mousedown",d),n.addEventListener("mouseup",h),n.addEventListener("wheel",E);let y=t,x=r,P=g,A=l;return {get x(){return x.x},get y(){return x.y},get deltaX(){return P.x},get deltaY(){return P.y},get wheelDelta(){return A},isPressed:p=>y?.has(p)||false,isLeftPressed:()=>y?.has(0)||false,isRightPressed:()=>y?.has(2)||false,isMiddlePressed:()=>y?.has(1)||false,clearFrameState:()=>{S({x:0,y:0}),m(0);},dispose:()=>{n.removeEventListener("mousemove",o),n.removeEventListener("mousedown",d),n.removeEventListener("mouseup",h),n.removeEventListener("wheel",E);}}}export{k as Keys,M as MouseButton,C as keyboard,F as loop,J as mouse};//# sourceMappingURL=interactive.mjs.map
1
+ import {a}from'./chunk-ECB5HZOQ.mjs';import'./chunk-CPJRQL2C.mjs';import'./chunk-44RZHCII.mjs';function F(a){let{fixedFps:n=60,onUpdate:b,onFixedUpdate:r,onRender:w}=a,g=1/n,S=.25,l=false,m=0,t=0,s=0,i=0,u=0,o=null;function d(h){if(!l)return;let E=Math.min((h-m)/1e3,S);if(m=h,b&&b(E),r)for(t+=E;t>=g;)r(g),t-=g;if(w){let y=t/g;w(y);}i++,h-u>=1e3&&(s=i,i=0,u=h),o=requestAnimationFrame(d);}return {start:()=>{l||(l=true,m=performance.now(),t=0,o=requestAnimationFrame(d));},stop:()=>{l=false,o!==null&&(cancelAnimationFrame(o),o=null);},isRunning:()=>l,getFps:()=>s}}var k=(e=>(e.ArrowUp="ArrowUp",e.ArrowDown="ArrowDown",e.ArrowLeft="ArrowLeft",e.ArrowRight="ArrowRight",e.KeyW="KeyW",e.KeyA="KeyA",e.KeyS="KeyS",e.KeyD="KeyD",e.Space="Space",e.Enter="Enter",e.Escape="Escape",e.Tab="Tab",e.ShiftLeft="ShiftLeft",e.ShiftRight="ShiftRight",e.ControlLeft="ControlLeft",e.ControlRight="ControlRight",e.AltLeft="AltLeft",e.AltRight="AltRight",e.Digit0="Digit0",e.Digit1="Digit1",e.Digit2="Digit2",e.Digit3="Digit3",e.Digit4="Digit4",e.Digit5="Digit5",e.Digit6="Digit6",e.Digit7="Digit7",e.Digit8="Digit8",e.Digit9="Digit9",e.KeyE="KeyE",e.KeyQ="KeyQ",e.KeyR="KeyR",e.KeyF="KeyF",e))(k||{});function C(a$1=window){let[n,b]=a(new Set,{key:["keyboard","pressed"]}),[r,w]=a(new Set,{key:["keyboard","justPressed"]}),[g,S]=a(new Set,{key:["keyboard","justReleased"]}),l=t=>{let s=t.code,i=n;if(!i.has(s)){let u=new Set(i);u.add(s),b(u);let o=r,d=new Set(o);d.add(s),w(d);}},m=t=>{let s=t.code,i=n,u=new Set(i);u.delete(s),b(u);let o=g,d=new Set(o);d.add(s),S(d);};return a$1.addEventListener("keydown",l),a$1.addEventListener("keyup",m),{isPressed:t=>n?.has(t)||false,isJustPressed:t=>r?.has(t)||false,isJustReleased:t=>g?.has(t)||false,getPressedKeys:()=>Array.from(n||[]),clearFrameState:()=>{w(new Set),S(new Set);},dispose:()=>{a$1.removeEventListener("keydown",l),a$1.removeEventListener("keyup",m);}}}var M=(r=>(r[r.Left=0]="Left",r[r.Middle=1]="Middle",r[r.Right=2]="Right",r))(M||{});function J(a$1={}){let n=a$1.target||window,b=typeof a$1.canvas=="function"?a$1.canvas:()=>a$1.canvas,[r,w]=a({x:0,y:0},{key:["mouse","position"]}),[g,S]=a({x:0,y:0},{key:["mouse","delta"]}),[l,m]=a(0,{key:["mouse","wheel"]}),[t,s]=a(new Set,{key:["mouse","buttons"]}),i=0,u=0,o=p=>{let f=p,D=b(),c=f.clientX,L=f.clientY;if(D){let R=D.getBoundingClientRect();c=f.clientX-R.left,L=f.clientY-R.top;}w({x:c,y:L}),S({x:c-i,y:L-u}),i=c,u=L;},d=p=>{let f=p.button,D=t,c=new Set(D);c.add(f),s(c);},h=p=>{let f=p.button,D=t,c=new Set(D);c.delete(f),s(c);},E=p=>{m(p.deltaY);};n.addEventListener("mousemove",o),n.addEventListener("mousedown",d),n.addEventListener("mouseup",h),n.addEventListener("wheel",E);let y=t,x=r,P=g,A=l;return {get x(){return x.x},get y(){return x.y},get deltaX(){return P.x},get deltaY(){return P.y},get wheelDelta(){return A},isPressed:p=>y?.has(p)||false,isLeftPressed:()=>y?.has(0)||false,isRightPressed:()=>y?.has(2)||false,isMiddlePressed:()=>y?.has(1)||false,clearFrameState:()=>{S({x:0,y:0}),m(0);},dispose:()=>{n.removeEventListener("mousemove",o),n.removeEventListener("mousedown",d),n.removeEventListener("mouseup",h),n.removeEventListener("wheel",E);}}}export{k as Keys,M as MouseButton,C as keyboard,F as loop,J as mouse};//# sourceMappingURL=interactive.mjs.map
2
2
  //# sourceMappingURL=interactive.mjs.map
@@ -1 +1 @@
1
- {"inputs":{"src/index.ts":{"bytes":67,"imports":[],"format":"esm"},"src/core/effect.ts":{"bytes":2302,"imports":[],"format":"esm"},"src/core/reactive.ts":{"bytes":2077,"imports":[{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"}],"format":"esm"},"src/core/hook.ts":{"bytes":986,"imports":[],"format":"esm"},"src/core/state.ts":{"bytes":5856,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"./reactive"},{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"},{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"}],"format":"esm"},"src/core/lifecycle.ts":{"bytes":1649,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"},{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"}],"format":"esm"},"src/core/context.ts":{"bytes":1461,"imports":[],"format":"esm"},"src/core/index.ts":{"bytes":166,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"./state"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"},{"path":"src/core/context.ts","kind":"import-statement","original":"./context"}],"format":"esm"},"src/dom/index.ts":{"bytes":19543,"imports":[{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/effect.ts","kind":"import-statement","original":"../core/effect"}],"format":"esm"},"src/router/types.ts":{"bytes":807,"imports":[],"format":"esm"},"src/router/utils.ts":{"bytes":3745,"imports":[{"path":"./types","kind":"import-statement","external":true}],"format":"esm"},"src/router/router.ts":{"bytes":2599,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"../core/reactive"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/router/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"src/jsx-runtime.ts":{"bytes":727,"imports":[],"format":"esm"},"src/router/dom/Route.tsx":{"bytes":106,"imports":[],"format":"esm"},"src/router/dom/Routes.tsx":{"bytes":2578,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"},{"path":"src/router/utils.ts","kind":"import-statement","original":"../utils"},{"path":"src/router/dom/Route.tsx","kind":"import-statement","original":"./Route"}],"format":"esm"},"src/router/dom/Outlet.tsx":{"bytes":769,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/context.ts","kind":"import-statement","original":"../../core/context"},{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"}],"format":"esm"},"src/router/dom/Link.tsx":{"bytes":441,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"}],"format":"esm"},"src/router/index.ts":{"bytes":259,"imports":[{"path":"src/router/types.ts","kind":"import-statement","original":"./types"},{"path":"src/router/router.ts","kind":"import-statement","original":"./router"},{"path":"src/router/dom/Routes.tsx","kind":"import-statement","original":"./dom/Routes"},{"path":"src/router/dom/Route.tsx","kind":"import-statement","original":"./dom/Route"},{"path":"src/router/dom/Outlet.tsx","kind":"import-statement","original":"./dom/Outlet"},{"path":"src/router/dom/Link.tsx","kind":"import-statement","original":"./dom/Link"}],"format":"esm"},"src/canvas/Canvas.tsx":{"bytes":5692,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"},{"path":"src/core/reactive.ts","kind":"import-statement","original":"../core/reactive"},{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"flexium/jsx-runtime"}],"format":"esm"},"src/canvas/dom/DrawRect.tsx":{"bytes":533,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawCircle.tsx":{"bytes":508,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawArc.tsx":{"bytes":599,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawLine.tsx":{"bytes":495,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawText.tsx":{"bytes":580,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawPath.tsx":{"bytes":437,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/index.ts":{"bytes":427,"imports":[{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"./Canvas"},{"path":"src/canvas/dom/DrawRect.tsx","kind":"import-statement","original":"./dom/DrawRect"},{"path":"src/canvas/dom/DrawCircle.tsx","kind":"import-statement","original":"./dom/DrawCircle"},{"path":"src/canvas/dom/DrawArc.tsx","kind":"import-statement","original":"./dom/DrawArc"},{"path":"src/canvas/dom/DrawLine.tsx","kind":"import-statement","original":"./dom/DrawLine"},{"path":"src/canvas/dom/DrawText.tsx","kind":"import-statement","original":"./dom/DrawText"},{"path":"src/canvas/dom/DrawPath.tsx","kind":"import-statement","original":"./dom/DrawPath"}],"format":"esm"},"src/interactive/loop.ts":{"bytes":1888,"imports":[],"format":"esm"},"src/interactive/keyboard.ts":{"bytes":3391,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"}],"format":"esm"},"src/interactive/mouse.ts":{"bytes":3563,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"}],"format":"esm"},"src/interactive/index.ts":{"bytes":206,"imports":[{"path":"src/interactive/loop.ts","kind":"import-statement","original":"./loop"},{"path":"src/interactive/keyboard.ts","kind":"import-statement","original":"./keyboard"},{"path":"src/interactive/mouse.ts","kind":"import-statement","original":"./mouse"}],"format":"esm"},"src/jsx-dev-runtime.ts":{"bytes":211,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"./jsx-runtime"}],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":204},"dist/index.js":{"imports":[],"exports":["VERSION"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":15}},"bytes":37},"dist/core.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/core.js":{"imports":[{"path":"dist/chunk-LUW7DIEW.js","kind":"import-statement"},{"path":"dist/chunk-IA4FEBFE.js","kind":"import-statement"},{"path":"dist/chunk-KBUONZI2.js","kind":"import-statement"},{"path":"dist/chunk-7BXR4ZFD.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["batch","context","createContext","effect","popContext","pushContext","runWithContext","snapshotContext","state","sync"],"entryPoint":"src/core/index.ts","inputs":{"src/core/index.ts":{"bytesInOutput":0}},"bytes":384},"dist/dom.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":28085},"dist/dom.js":{"imports":[{"path":"dist/chunk-LUW7DIEW.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["f","reconcile","render"],"entryPoint":"src/dom/index.ts","inputs":{"src/dom/index.ts":{"bytesInOutput":4502}},"bytes":4632},"dist/router.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":16422},"dist/router.js":{"imports":[{"path":"dist/chunk-LUW7DIEW.js","kind":"import-statement"},{"path":"dist/chunk-KBUONZI2.js","kind":"import-statement"},{"path":"dist/chunk-7BXR4ZFD.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"},{"path":"dist/chunk-EXLNKYSH.js","kind":"import-statement"}],"exports":["Link","Outlet","Route","Routes","router"],"entryPoint":"src/router/index.ts","inputs":{"src/router/index.ts":{"bytesInOutput":0},"src/router/utils.ts":{"bytesInOutput":1073},"src/router/router.ts":{"bytesInOutput":743},"src/router/dom/Route.tsx":{"bytesInOutput":26},"src/router/dom/Routes.tsx":{"bytesInOutput":638},"src/router/dom/Outlet.tsx":{"bytesInOutput":238},"src/router/dom/Link.tsx":{"bytesInOutput":133}},"bytes":3107},"dist/chunk-LUW7DIEW.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":2664},"dist/chunk-LUW7DIEW.js":{"imports":[],"exports":["a","b","c","d","e","f"],"inputs":{"src/core/context.ts":{"bytesInOutput":450}},"bytes":501},"dist/canvas.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":14321},"dist/canvas.js":{"imports":[{"path":"dist/chunk-IA4FEBFE.js","kind":"import-statement"},{"path":"dist/chunk-7BXR4ZFD.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"},{"path":"dist/chunk-EXLNKYSH.js","kind":"import-statement"}],"exports":["Canvas","DrawArc","DrawCircle","DrawLine","DrawPath","DrawRect","DrawText"],"entryPoint":"src/canvas/index.ts","inputs":{"src/canvas/Canvas.tsx":{"bytesInOutput":1875},"src/canvas/index.ts":{"bytesInOutput":0},"src/canvas/dom/DrawRect.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawCircle.tsx":{"bytesInOutput":62},"src/canvas/dom/DrawArc.tsx":{"bytesInOutput":59},"src/canvas/dom/DrawLine.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawText.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawPath.tsx":{"bytesInOutput":60}},"bytes":2490},"dist/chunk-IA4FEBFE.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":2516},"dist/chunk-IA4FEBFE.js":{"imports":[{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["a","b","c"],"inputs":{"src/core/lifecycle.ts":{"bytesInOutput":340}},"bytes":424},"dist/interactive.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":14770},"dist/interactive.js":{"imports":[{"path":"dist/chunk-KBUONZI2.js","kind":"import-statement"},{"path":"dist/chunk-7BXR4ZFD.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["Keys","MouseButton","keyboard","loop","mouse"],"entryPoint":"src/interactive/index.ts","inputs":{"src/interactive/loop.ts":{"bytesInOutput":459},"src/interactive/index.ts":{"bytesInOutput":0},"src/interactive/keyboard.ts":{"bytesInOutput":1309},"src/interactive/mouse.ts":{"bytesInOutput":1235}},"bytes":3170},"dist/chunk-KBUONZI2.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":8480},"dist/chunk-KBUONZI2.js":{"imports":[{"path":"dist/chunk-7BXR4ZFD.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["a"],"inputs":{"src/core/state.ts":{"bytesInOutput":1461}},"bytes":1564},"dist/chunk-7BXR4ZFD.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":3712},"dist/chunk-7BXR4ZFD.js":{"imports":[{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/core/reactive.ts":{"bytesInOutput":590}},"bytes":667},"dist/chunk-ENWGYQNU.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":5647},"dist/chunk-ENWGYQNU.js":{"imports":[],"exports":["a","b","c","d","e","f","g","h"],"inputs":{"src/core/effect.ts":{"bytesInOutput":751},"src/core/hook.ts":{"bytesInOutput":227}},"bytes":1038},"dist/jsx-runtime.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/jsx-runtime.js":{"imports":[{"path":"dist/chunk-EXLNKYSH.js","kind":"import-statement"}],"exports":["Fragment","jsx","jsxs"],"entryPoint":"src/jsx-runtime.ts","inputs":{},"bytes":81},"dist/jsx-dev-runtime.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":510},"dist/jsx-dev-runtime.js":{"imports":[{"path":"dist/chunk-EXLNKYSH.js","kind":"import-statement"}],"exports":["Fragment","jsxDEV"],"entryPoint":"src/jsx-dev-runtime.ts","inputs":{"src/jsx-dev-runtime.ts":{"bytesInOutput":40}},"bytes":122},"dist/chunk-EXLNKYSH.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1278},"dist/chunk-EXLNKYSH.js":{"imports":[],"exports":["a","b","c"],"inputs":{"src/jsx-runtime.ts":{"bytesInOutput":177}},"bytes":207}}}
1
+ {"inputs":{"src/index.ts":{"bytes":68,"imports":[],"format":"esm"},"src/core/effect.ts":{"bytes":2302,"imports":[],"format":"esm"},"src/core/reactive.ts":{"bytes":2077,"imports":[{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"}],"format":"esm"},"src/core/hook.ts":{"bytes":986,"imports":[],"format":"esm"},"src/core/state.ts":{"bytes":5773,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"./reactive"},{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"},{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"}],"format":"esm"},"src/core/lifecycle.ts":{"bytes":1649,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"},{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"}],"format":"esm"},"src/core/context.ts":{"bytes":1461,"imports":[],"format":"esm"},"src/core/index.ts":{"bytes":166,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"./state"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"},{"path":"src/core/context.ts","kind":"import-statement","original":"./context"}],"format":"esm"},"src/dom/index.ts":{"bytes":21057,"imports":[{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/effect.ts","kind":"import-statement","original":"../core/effect"}],"format":"esm"},"src/router/types.ts":{"bytes":807,"imports":[],"format":"esm"},"src/router/utils.ts":{"bytes":3745,"imports":[{"path":"./types","kind":"import-statement","external":true}],"format":"esm"},"src/router/router.ts":{"bytes":2599,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"../core/reactive"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/router/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"src/jsx-runtime.ts":{"bytes":727,"imports":[],"format":"esm"},"src/router/dom/Route.tsx":{"bytes":106,"imports":[],"format":"esm"},"src/router/dom/Routes.tsx":{"bytes":2578,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"},{"path":"src/router/utils.ts","kind":"import-statement","original":"../utils"},{"path":"src/router/dom/Route.tsx","kind":"import-statement","original":"./Route"}],"format":"esm"},"src/router/dom/Outlet.tsx":{"bytes":769,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/context.ts","kind":"import-statement","original":"../../core/context"},{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"}],"format":"esm"},"src/router/dom/Link.tsx":{"bytes":441,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"}],"format":"esm"},"src/router/index.ts":{"bytes":259,"imports":[{"path":"src/router/types.ts","kind":"import-statement","original":"./types"},{"path":"src/router/router.ts","kind":"import-statement","original":"./router"},{"path":"src/router/dom/Routes.tsx","kind":"import-statement","original":"./dom/Routes"},{"path":"src/router/dom/Route.tsx","kind":"import-statement","original":"./dom/Route"},{"path":"src/router/dom/Outlet.tsx","kind":"import-statement","original":"./dom/Outlet"},{"path":"src/router/dom/Link.tsx","kind":"import-statement","original":"./dom/Link"}],"format":"esm"},"src/canvas/Canvas.tsx":{"bytes":5692,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"},{"path":"src/core/reactive.ts","kind":"import-statement","original":"../core/reactive"},{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"flexium/jsx-runtime"}],"format":"esm"},"src/canvas/dom/DrawRect.tsx":{"bytes":533,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawCircle.tsx":{"bytes":508,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawArc.tsx":{"bytes":599,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawLine.tsx":{"bytes":495,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawText.tsx":{"bytes":580,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawPath.tsx":{"bytes":437,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/index.ts":{"bytes":427,"imports":[{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"./Canvas"},{"path":"src/canvas/dom/DrawRect.tsx","kind":"import-statement","original":"./dom/DrawRect"},{"path":"src/canvas/dom/DrawCircle.tsx","kind":"import-statement","original":"./dom/DrawCircle"},{"path":"src/canvas/dom/DrawArc.tsx","kind":"import-statement","original":"./dom/DrawArc"},{"path":"src/canvas/dom/DrawLine.tsx","kind":"import-statement","original":"./dom/DrawLine"},{"path":"src/canvas/dom/DrawText.tsx","kind":"import-statement","original":"./dom/DrawText"},{"path":"src/canvas/dom/DrawPath.tsx","kind":"import-statement","original":"./dom/DrawPath"}],"format":"esm"},"src/interactive/loop.ts":{"bytes":1888,"imports":[],"format":"esm"},"src/interactive/keyboard.ts":{"bytes":3391,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"}],"format":"esm"},"src/interactive/mouse.ts":{"bytes":3563,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"}],"format":"esm"},"src/interactive/index.ts":{"bytes":206,"imports":[{"path":"src/interactive/loop.ts","kind":"import-statement","original":"./loop"},{"path":"src/interactive/keyboard.ts","kind":"import-statement","original":"./keyboard"},{"path":"src/interactive/mouse.ts","kind":"import-statement","original":"./mouse"}],"format":"esm"},"src/jsx-dev-runtime.ts":{"bytes":211,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"./jsx-runtime"}],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":205},"dist/index.js":{"imports":[],"exports":["VERSION"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":16}},"bytes":38},"dist/core.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/core.js":{"imports":[{"path":"dist/chunk-LUW7DIEW.js","kind":"import-statement"},{"path":"dist/chunk-IA4FEBFE.js","kind":"import-statement"},{"path":"dist/chunk-APAMPY43.js","kind":"import-statement"},{"path":"dist/chunk-7BXR4ZFD.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["batch","context","createContext","effect","popContext","pushContext","runWithContext","snapshotContext","state","sync"],"entryPoint":"src/core/index.ts","inputs":{"src/core/index.ts":{"bytesInOutput":0}},"bytes":384},"dist/dom.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":30059},"dist/dom.js":{"imports":[{"path":"dist/chunk-LUW7DIEW.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["f","reconcile","render"],"entryPoint":"src/dom/index.ts","inputs":{"src/dom/index.ts":{"bytesInOutput":4843}},"bytes":4973},"dist/router.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":16422},"dist/router.js":{"imports":[{"path":"dist/chunk-LUW7DIEW.js","kind":"import-statement"},{"path":"dist/chunk-APAMPY43.js","kind":"import-statement"},{"path":"dist/chunk-7BXR4ZFD.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"},{"path":"dist/chunk-EXLNKYSH.js","kind":"import-statement"}],"exports":["Link","Outlet","Route","Routes","router"],"entryPoint":"src/router/index.ts","inputs":{"src/router/index.ts":{"bytesInOutput":0},"src/router/utils.ts":{"bytesInOutput":1073},"src/router/router.ts":{"bytesInOutput":743},"src/router/dom/Route.tsx":{"bytesInOutput":26},"src/router/dom/Routes.tsx":{"bytesInOutput":638},"src/router/dom/Outlet.tsx":{"bytesInOutput":238},"src/router/dom/Link.tsx":{"bytesInOutput":133}},"bytes":3107},"dist/chunk-LUW7DIEW.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":2664},"dist/chunk-LUW7DIEW.js":{"imports":[],"exports":["a","b","c","d","e","f"],"inputs":{"src/core/context.ts":{"bytesInOutput":450}},"bytes":501},"dist/canvas.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":14321},"dist/canvas.js":{"imports":[{"path":"dist/chunk-IA4FEBFE.js","kind":"import-statement"},{"path":"dist/chunk-7BXR4ZFD.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"},{"path":"dist/chunk-EXLNKYSH.js","kind":"import-statement"}],"exports":["Canvas","DrawArc","DrawCircle","DrawLine","DrawPath","DrawRect","DrawText"],"entryPoint":"src/canvas/index.ts","inputs":{"src/canvas/Canvas.tsx":{"bytesInOutput":1875},"src/canvas/index.ts":{"bytesInOutput":0},"src/canvas/dom/DrawRect.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawCircle.tsx":{"bytesInOutput":62},"src/canvas/dom/DrawArc.tsx":{"bytesInOutput":59},"src/canvas/dom/DrawLine.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawText.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawPath.tsx":{"bytesInOutput":60}},"bytes":2490},"dist/chunk-IA4FEBFE.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":2516},"dist/chunk-IA4FEBFE.js":{"imports":[{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["a","b","c"],"inputs":{"src/core/lifecycle.ts":{"bytesInOutput":340}},"bytes":424},"dist/interactive.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":14770},"dist/interactive.js":{"imports":[{"path":"dist/chunk-APAMPY43.js","kind":"import-statement"},{"path":"dist/chunk-7BXR4ZFD.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["Keys","MouseButton","keyboard","loop","mouse"],"entryPoint":"src/interactive/index.ts","inputs":{"src/interactive/loop.ts":{"bytesInOutput":459},"src/interactive/index.ts":{"bytesInOutput":0},"src/interactive/keyboard.ts":{"bytesInOutput":1309},"src/interactive/mouse.ts":{"bytesInOutput":1235}},"bytes":3170},"dist/chunk-APAMPY43.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":8537},"dist/chunk-APAMPY43.js":{"imports":[{"path":"dist/chunk-7BXR4ZFD.js","kind":"import-statement"},{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["a"],"inputs":{"src/core/state.ts":{"bytesInOutput":1555}},"bytes":1658},"dist/chunk-7BXR4ZFD.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":3712},"dist/chunk-7BXR4ZFD.js":{"imports":[{"path":"dist/chunk-ENWGYQNU.js","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/core/reactive.ts":{"bytesInOutput":590}},"bytes":667},"dist/chunk-ENWGYQNU.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":5647},"dist/chunk-ENWGYQNU.js":{"imports":[],"exports":["a","b","c","d","e","f","g","h"],"inputs":{"src/core/effect.ts":{"bytesInOutput":751},"src/core/hook.ts":{"bytesInOutput":227}},"bytes":1038},"dist/jsx-runtime.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/jsx-runtime.js":{"imports":[{"path":"dist/chunk-EXLNKYSH.js","kind":"import-statement"}],"exports":["Fragment","jsx","jsxs"],"entryPoint":"src/jsx-runtime.ts","inputs":{},"bytes":81},"dist/jsx-dev-runtime.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":510},"dist/jsx-dev-runtime.js":{"imports":[{"path":"dist/chunk-EXLNKYSH.js","kind":"import-statement"}],"exports":["Fragment","jsxDEV"],"entryPoint":"src/jsx-dev-runtime.ts","inputs":{"src/jsx-dev-runtime.ts":{"bytesInOutput":40}},"bytes":122},"dist/chunk-EXLNKYSH.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1278},"dist/chunk-EXLNKYSH.js":{"imports":[],"exports":["a","b","c"],"inputs":{"src/jsx-runtime.ts":{"bytesInOutput":177}},"bytes":207}}}
@@ -1 +1 @@
1
- {"inputs":{"src/index.ts":{"bytes":67,"imports":[],"format":"esm"},"src/core/effect.ts":{"bytes":2302,"imports":[],"format":"esm"},"src/core/reactive.ts":{"bytes":2077,"imports":[{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"}],"format":"esm"},"src/core/hook.ts":{"bytes":986,"imports":[],"format":"esm"},"src/core/state.ts":{"bytes":5856,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"./reactive"},{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"},{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"}],"format":"esm"},"src/core/lifecycle.ts":{"bytes":1649,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"},{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"}],"format":"esm"},"src/core/context.ts":{"bytes":1461,"imports":[],"format":"esm"},"src/core/index.ts":{"bytes":166,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"./state"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"},{"path":"src/core/context.ts","kind":"import-statement","original":"./context"}],"format":"esm"},"src/dom/index.ts":{"bytes":19543,"imports":[{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/effect.ts","kind":"import-statement","original":"../core/effect"}],"format":"esm"},"src/router/types.ts":{"bytes":807,"imports":[],"format":"esm"},"src/router/utils.ts":{"bytes":3745,"imports":[{"path":"./types","kind":"import-statement","external":true}],"format":"esm"},"src/router/router.ts":{"bytes":2599,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"../core/reactive"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/router/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"src/jsx-runtime.ts":{"bytes":727,"imports":[],"format":"esm"},"src/router/dom/Route.tsx":{"bytes":106,"imports":[],"format":"esm"},"src/router/dom/Routes.tsx":{"bytes":2578,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"},{"path":"src/router/utils.ts","kind":"import-statement","original":"../utils"},{"path":"src/router/dom/Route.tsx","kind":"import-statement","original":"./Route"}],"format":"esm"},"src/router/dom/Outlet.tsx":{"bytes":769,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/context.ts","kind":"import-statement","original":"../../core/context"},{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"}],"format":"esm"},"src/router/dom/Link.tsx":{"bytes":441,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"}],"format":"esm"},"src/router/index.ts":{"bytes":259,"imports":[{"path":"src/router/types.ts","kind":"import-statement","original":"./types"},{"path":"src/router/router.ts","kind":"import-statement","original":"./router"},{"path":"src/router/dom/Routes.tsx","kind":"import-statement","original":"./dom/Routes"},{"path":"src/router/dom/Route.tsx","kind":"import-statement","original":"./dom/Route"},{"path":"src/router/dom/Outlet.tsx","kind":"import-statement","original":"./dom/Outlet"},{"path":"src/router/dom/Link.tsx","kind":"import-statement","original":"./dom/Link"}],"format":"esm"},"src/canvas/Canvas.tsx":{"bytes":5692,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"},{"path":"src/core/reactive.ts","kind":"import-statement","original":"../core/reactive"},{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"flexium/jsx-runtime"}],"format":"esm"},"src/canvas/dom/DrawRect.tsx":{"bytes":533,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawCircle.tsx":{"bytes":508,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawArc.tsx":{"bytes":599,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawLine.tsx":{"bytes":495,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawText.tsx":{"bytes":580,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawPath.tsx":{"bytes":437,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/index.ts":{"bytes":427,"imports":[{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"./Canvas"},{"path":"src/canvas/dom/DrawRect.tsx","kind":"import-statement","original":"./dom/DrawRect"},{"path":"src/canvas/dom/DrawCircle.tsx","kind":"import-statement","original":"./dom/DrawCircle"},{"path":"src/canvas/dom/DrawArc.tsx","kind":"import-statement","original":"./dom/DrawArc"},{"path":"src/canvas/dom/DrawLine.tsx","kind":"import-statement","original":"./dom/DrawLine"},{"path":"src/canvas/dom/DrawText.tsx","kind":"import-statement","original":"./dom/DrawText"},{"path":"src/canvas/dom/DrawPath.tsx","kind":"import-statement","original":"./dom/DrawPath"}],"format":"esm"},"src/interactive/loop.ts":{"bytes":1888,"imports":[],"format":"esm"},"src/interactive/keyboard.ts":{"bytes":3391,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"}],"format":"esm"},"src/interactive/mouse.ts":{"bytes":3563,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"}],"format":"esm"},"src/interactive/index.ts":{"bytes":206,"imports":[{"path":"src/interactive/loop.ts","kind":"import-statement","original":"./loop"},{"path":"src/interactive/keyboard.ts","kind":"import-statement","original":"./keyboard"},{"path":"src/interactive/mouse.ts","kind":"import-statement","original":"./mouse"}],"format":"esm"},"src/jsx-dev-runtime.ts":{"bytes":211,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"./jsx-runtime"}],"format":"esm"}},"outputs":{"dist/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":204},"dist/index.mjs":{"imports":[],"exports":["VERSION"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":15}},"bytes":37},"dist/core.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/core.mjs":{"imports":[{"path":"dist/chunk-LUREDEUB.mjs","kind":"import-statement"},{"path":"dist/chunk-S6WF3XNF.mjs","kind":"import-statement"},{"path":"dist/chunk-IOF6L2BT.mjs","kind":"import-statement"},{"path":"dist/chunk-CPJRQL2C.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["batch","context","createContext","effect","popContext","pushContext","runWithContext","snapshotContext","state","sync"],"entryPoint":"src/core/index.ts","inputs":{"src/core/index.ts":{"bytesInOutput":0}},"bytes":389},"dist/dom.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":28085},"dist/dom.mjs":{"imports":[{"path":"dist/chunk-LUREDEUB.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["f","reconcile","render"],"entryPoint":"src/dom/index.ts","inputs":{"src/dom/index.ts":{"bytesInOutput":4502}},"bytes":4634},"dist/router.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":16422},"dist/router.mjs":{"imports":[{"path":"dist/chunk-LUREDEUB.mjs","kind":"import-statement"},{"path":"dist/chunk-IOF6L2BT.mjs","kind":"import-statement"},{"path":"dist/chunk-CPJRQL2C.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"},{"path":"dist/chunk-ZCO4NIGC.mjs","kind":"import-statement"}],"exports":["Link","Outlet","Route","Routes","router"],"entryPoint":"src/router/index.ts","inputs":{"src/router/index.ts":{"bytesInOutput":0},"src/router/utils.ts":{"bytesInOutput":1073},"src/router/router.ts":{"bytesInOutput":743},"src/router/dom/Route.tsx":{"bytesInOutput":26},"src/router/dom/Routes.tsx":{"bytesInOutput":638},"src/router/dom/Outlet.tsx":{"bytesInOutput":238},"src/router/dom/Link.tsx":{"bytesInOutput":133}},"bytes":3112},"dist/chunk-LUREDEUB.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2664},"dist/chunk-LUREDEUB.mjs":{"imports":[],"exports":["a","b","c","d","e","f"],"inputs":{"src/core/context.ts":{"bytesInOutput":450}},"bytes":501},"dist/canvas.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":14321},"dist/canvas.mjs":{"imports":[{"path":"dist/chunk-S6WF3XNF.mjs","kind":"import-statement"},{"path":"dist/chunk-CPJRQL2C.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"},{"path":"dist/chunk-ZCO4NIGC.mjs","kind":"import-statement"}],"exports":["Canvas","DrawArc","DrawCircle","DrawLine","DrawPath","DrawRect","DrawText"],"entryPoint":"src/canvas/index.ts","inputs":{"src/canvas/Canvas.tsx":{"bytesInOutput":1875},"src/canvas/index.ts":{"bytesInOutput":0},"src/canvas/dom/DrawRect.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawCircle.tsx":{"bytesInOutput":62},"src/canvas/dom/DrawArc.tsx":{"bytesInOutput":59},"src/canvas/dom/DrawLine.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawText.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawPath.tsx":{"bytesInOutput":60}},"bytes":2494},"dist/chunk-S6WF3XNF.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2516},"dist/chunk-S6WF3XNF.mjs":{"imports":[{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["a","b","c"],"inputs":{"src/core/lifecycle.ts":{"bytesInOutput":340}},"bytes":425},"dist/interactive.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":14770},"dist/interactive.mjs":{"imports":[{"path":"dist/chunk-IOF6L2BT.mjs","kind":"import-statement"},{"path":"dist/chunk-CPJRQL2C.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["Keys","MouseButton","keyboard","loop","mouse"],"entryPoint":"src/interactive/index.ts","inputs":{"src/interactive/loop.ts":{"bytesInOutput":459},"src/interactive/index.ts":{"bytesInOutput":0},"src/interactive/keyboard.ts":{"bytesInOutput":1309},"src/interactive/mouse.ts":{"bytesInOutput":1235}},"bytes":3173},"dist/chunk-IOF6L2BT.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8480},"dist/chunk-IOF6L2BT.mjs":{"imports":[{"path":"dist/chunk-CPJRQL2C.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["a"],"inputs":{"src/core/state.ts":{"bytesInOutput":1461}},"bytes":1566},"dist/chunk-CPJRQL2C.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3712},"dist/chunk-CPJRQL2C.mjs":{"imports":[{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/core/reactive.ts":{"bytesInOutput":590}},"bytes":668},"dist/chunk-44RZHCII.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5647},"dist/chunk-44RZHCII.mjs":{"imports":[],"exports":["a","b","c","d","e","f","g","h"],"inputs":{"src/core/effect.ts":{"bytesInOutput":751},"src/core/hook.ts":{"bytesInOutput":227}},"bytes":1038},"dist/jsx-runtime.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/jsx-runtime.mjs":{"imports":[{"path":"dist/chunk-ZCO4NIGC.mjs","kind":"import-statement"}],"exports":["Fragment","jsx","jsxs"],"entryPoint":"src/jsx-runtime.ts","inputs":{},"bytes":82},"dist/jsx-dev-runtime.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":510},"dist/jsx-dev-runtime.mjs":{"imports":[{"path":"dist/chunk-ZCO4NIGC.mjs","kind":"import-statement"}],"exports":["Fragment","jsxDEV"],"entryPoint":"src/jsx-dev-runtime.ts","inputs":{"src/jsx-dev-runtime.ts":{"bytesInOutput":40}},"bytes":123},"dist/chunk-ZCO4NIGC.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1278},"dist/chunk-ZCO4NIGC.mjs":{"imports":[],"exports":["a","b","c"],"inputs":{"src/jsx-runtime.ts":{"bytesInOutput":177}},"bytes":207}}}
1
+ {"inputs":{"src/index.ts":{"bytes":68,"imports":[],"format":"esm"},"src/core/effect.ts":{"bytes":2302,"imports":[],"format":"esm"},"src/core/reactive.ts":{"bytes":2077,"imports":[{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"}],"format":"esm"},"src/core/hook.ts":{"bytes":986,"imports":[],"format":"esm"},"src/core/state.ts":{"bytes":5773,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"./reactive"},{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"},{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"}],"format":"esm"},"src/core/lifecycle.ts":{"bytes":1649,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"},{"path":"src/core/effect.ts","kind":"import-statement","original":"./effect"}],"format":"esm"},"src/core/context.ts":{"bytes":1461,"imports":[],"format":"esm"},"src/core/index.ts":{"bytes":166,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"./state"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"},{"path":"src/core/context.ts","kind":"import-statement","original":"./context"}],"format":"esm"},"src/dom/index.ts":{"bytes":21057,"imports":[{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/effect.ts","kind":"import-statement","original":"../core/effect"}],"format":"esm"},"src/router/types.ts":{"bytes":807,"imports":[],"format":"esm"},"src/router/utils.ts":{"bytes":3745,"imports":[{"path":"./types","kind":"import-statement","external":true}],"format":"esm"},"src/router/router.ts":{"bytes":2599,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"../core/reactive"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/router/utils.ts","kind":"import-statement","original":"./utils"}],"format":"esm"},"src/jsx-runtime.ts":{"bytes":727,"imports":[],"format":"esm"},"src/router/dom/Route.tsx":{"bytes":106,"imports":[],"format":"esm"},"src/router/dom/Routes.tsx":{"bytes":2578,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"},{"path":"src/router/utils.ts","kind":"import-statement","original":"../utils"},{"path":"src/router/dom/Route.tsx","kind":"import-statement","original":"./Route"}],"format":"esm"},"src/router/dom/Outlet.tsx":{"bytes":769,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/context.ts","kind":"import-statement","original":"../../core/context"},{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"}],"format":"esm"},"src/router/dom/Link.tsx":{"bytes":441,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"../../jsx-runtime"},{"path":"src/router/router.ts","kind":"import-statement","original":"../router"}],"format":"esm"},"src/router/index.ts":{"bytes":259,"imports":[{"path":"src/router/types.ts","kind":"import-statement","original":"./types"},{"path":"src/router/router.ts","kind":"import-statement","original":"./router"},{"path":"src/router/dom/Routes.tsx","kind":"import-statement","original":"./dom/Routes"},{"path":"src/router/dom/Route.tsx","kind":"import-statement","original":"./dom/Route"},{"path":"src/router/dom/Outlet.tsx","kind":"import-statement","original":"./dom/Outlet"},{"path":"src/router/dom/Link.tsx","kind":"import-statement","original":"./dom/Link"}],"format":"esm"},"src/canvas/Canvas.tsx":{"bytes":5692,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"},{"path":"src/core/reactive.ts","kind":"import-statement","original":"../core/reactive"},{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"flexium/jsx-runtime"}],"format":"esm"},"src/canvas/dom/DrawRect.tsx":{"bytes":533,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawCircle.tsx":{"bytes":508,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawArc.tsx":{"bytes":599,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawLine.tsx":{"bytes":495,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawText.tsx":{"bytes":580,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/dom/DrawPath.tsx":{"bytes":437,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"../Canvas"}],"format":"esm"},"src/canvas/index.ts":{"bytes":427,"imports":[{"path":"src/canvas/Canvas.tsx","kind":"import-statement","original":"./Canvas"},{"path":"src/canvas/dom/DrawRect.tsx","kind":"import-statement","original":"./dom/DrawRect"},{"path":"src/canvas/dom/DrawCircle.tsx","kind":"import-statement","original":"./dom/DrawCircle"},{"path":"src/canvas/dom/DrawArc.tsx","kind":"import-statement","original":"./dom/DrawArc"},{"path":"src/canvas/dom/DrawLine.tsx","kind":"import-statement","original":"./dom/DrawLine"},{"path":"src/canvas/dom/DrawText.tsx","kind":"import-statement","original":"./dom/DrawText"},{"path":"src/canvas/dom/DrawPath.tsx","kind":"import-statement","original":"./dom/DrawPath"}],"format":"esm"},"src/interactive/loop.ts":{"bytes":1888,"imports":[],"format":"esm"},"src/interactive/keyboard.ts":{"bytes":3391,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"}],"format":"esm"},"src/interactive/mouse.ts":{"bytes":3563,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"}],"format":"esm"},"src/interactive/index.ts":{"bytes":206,"imports":[{"path":"src/interactive/loop.ts","kind":"import-statement","original":"./loop"},{"path":"src/interactive/keyboard.ts","kind":"import-statement","original":"./keyboard"},{"path":"src/interactive/mouse.ts","kind":"import-statement","original":"./mouse"}],"format":"esm"},"src/jsx-dev-runtime.ts":{"bytes":211,"imports":[{"path":"src/jsx-runtime.ts","kind":"import-statement","original":"./jsx-runtime"}],"format":"esm"}},"outputs":{"dist/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":205},"dist/index.mjs":{"imports":[],"exports":["VERSION"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":16}},"bytes":38},"dist/core.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/core.mjs":{"imports":[{"path":"dist/chunk-LUREDEUB.mjs","kind":"import-statement"},{"path":"dist/chunk-S6WF3XNF.mjs","kind":"import-statement"},{"path":"dist/chunk-ECB5HZOQ.mjs","kind":"import-statement"},{"path":"dist/chunk-CPJRQL2C.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["batch","context","createContext","effect","popContext","pushContext","runWithContext","snapshotContext","state","sync"],"entryPoint":"src/core/index.ts","inputs":{"src/core/index.ts":{"bytesInOutput":0}},"bytes":389},"dist/dom.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":30059},"dist/dom.mjs":{"imports":[{"path":"dist/chunk-LUREDEUB.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["f","reconcile","render"],"entryPoint":"src/dom/index.ts","inputs":{"src/dom/index.ts":{"bytesInOutput":4843}},"bytes":4975},"dist/router.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":16422},"dist/router.mjs":{"imports":[{"path":"dist/chunk-LUREDEUB.mjs","kind":"import-statement"},{"path":"dist/chunk-ECB5HZOQ.mjs","kind":"import-statement"},{"path":"dist/chunk-CPJRQL2C.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"},{"path":"dist/chunk-ZCO4NIGC.mjs","kind":"import-statement"}],"exports":["Link","Outlet","Route","Routes","router"],"entryPoint":"src/router/index.ts","inputs":{"src/router/index.ts":{"bytesInOutput":0},"src/router/utils.ts":{"bytesInOutput":1073},"src/router/router.ts":{"bytesInOutput":743},"src/router/dom/Route.tsx":{"bytesInOutput":26},"src/router/dom/Routes.tsx":{"bytesInOutput":638},"src/router/dom/Outlet.tsx":{"bytesInOutput":238},"src/router/dom/Link.tsx":{"bytesInOutput":133}},"bytes":3112},"dist/chunk-LUREDEUB.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2664},"dist/chunk-LUREDEUB.mjs":{"imports":[],"exports":["a","b","c","d","e","f"],"inputs":{"src/core/context.ts":{"bytesInOutput":450}},"bytes":501},"dist/canvas.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":14321},"dist/canvas.mjs":{"imports":[{"path":"dist/chunk-S6WF3XNF.mjs","kind":"import-statement"},{"path":"dist/chunk-CPJRQL2C.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"},{"path":"dist/chunk-ZCO4NIGC.mjs","kind":"import-statement"}],"exports":["Canvas","DrawArc","DrawCircle","DrawLine","DrawPath","DrawRect","DrawText"],"entryPoint":"src/canvas/index.ts","inputs":{"src/canvas/Canvas.tsx":{"bytesInOutput":1875},"src/canvas/index.ts":{"bytesInOutput":0},"src/canvas/dom/DrawRect.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawCircle.tsx":{"bytesInOutput":62},"src/canvas/dom/DrawArc.tsx":{"bytesInOutput":59},"src/canvas/dom/DrawLine.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawText.tsx":{"bytesInOutput":60},"src/canvas/dom/DrawPath.tsx":{"bytesInOutput":60}},"bytes":2494},"dist/chunk-S6WF3XNF.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2516},"dist/chunk-S6WF3XNF.mjs":{"imports":[{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["a","b","c"],"inputs":{"src/core/lifecycle.ts":{"bytesInOutput":340}},"bytes":425},"dist/interactive.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":14770},"dist/interactive.mjs":{"imports":[{"path":"dist/chunk-ECB5HZOQ.mjs","kind":"import-statement"},{"path":"dist/chunk-CPJRQL2C.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["Keys","MouseButton","keyboard","loop","mouse"],"entryPoint":"src/interactive/index.ts","inputs":{"src/interactive/loop.ts":{"bytesInOutput":459},"src/interactive/index.ts":{"bytesInOutput":0},"src/interactive/keyboard.ts":{"bytesInOutput":1309},"src/interactive/mouse.ts":{"bytesInOutput":1235}},"bytes":3173},"dist/chunk-ECB5HZOQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8537},"dist/chunk-ECB5HZOQ.mjs":{"imports":[{"path":"dist/chunk-CPJRQL2C.mjs","kind":"import-statement"},{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["a"],"inputs":{"src/core/state.ts":{"bytesInOutput":1555}},"bytes":1660},"dist/chunk-CPJRQL2C.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3712},"dist/chunk-CPJRQL2C.mjs":{"imports":[{"path":"dist/chunk-44RZHCII.mjs","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/core/reactive.ts":{"bytesInOutput":590}},"bytes":668},"dist/chunk-44RZHCII.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5647},"dist/chunk-44RZHCII.mjs":{"imports":[],"exports":["a","b","c","d","e","f","g","h"],"inputs":{"src/core/effect.ts":{"bytesInOutput":751},"src/core/hook.ts":{"bytesInOutput":227}},"bytes":1038},"dist/jsx-runtime.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/jsx-runtime.mjs":{"imports":[{"path":"dist/chunk-ZCO4NIGC.mjs","kind":"import-statement"}],"exports":["Fragment","jsx","jsxs"],"entryPoint":"src/jsx-runtime.ts","inputs":{},"bytes":82},"dist/jsx-dev-runtime.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":510},"dist/jsx-dev-runtime.mjs":{"imports":[{"path":"dist/chunk-ZCO4NIGC.mjs","kind":"import-statement"}],"exports":["Fragment","jsxDEV"],"entryPoint":"src/jsx-dev-runtime.ts","inputs":{"src/jsx-dev-runtime.ts":{"bytesInOutput":40}},"bytes":123},"dist/chunk-ZCO4NIGC.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1278},"dist/chunk-ZCO4NIGC.mjs":{"imports":[],"exports":["a","b","c"],"inputs":{"src/jsx-runtime.ts":{"bytesInOutput":177}},"bytes":207}}}
package/dist/router.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkLUW7DIEW_js=require('./chunk-LUW7DIEW.js'),chunkKBUONZI2_js=require('./chunk-KBUONZI2.js'),chunk7BXR4ZFD_js=require('./chunk-7BXR4ZFD.js');require('./chunk-ENWGYQNU.js');var chunkEXLNKYSH_js=require('./chunk-EXLNKYSH.js');function k(t){if(!t)return {};if(typeof URLSearchParams<"u"){let e=new URLSearchParams(t),r={};return e.forEach((o,n)=>r[n]=o),r}return t.substring(1).split("&").reduce((e,r)=>{let[o,n]=r.split("=");return o&&(e[decodeURIComponent(o)]=decodeURIComponent(n||"")),e},{})}function D(t){return !!(t.length>2048||t.includes("__proto__")||t.includes("constructor")||/^\s*javascript:/i.test(t))}function y(t){let e=[];return t.forEach(r=>{if(!r)return;let{path:o,component:n,children:s,beforeEnter:f}=r.props||{},u={path:o||"/",component:n,beforeEnter:f};if(s){let c=Array.isArray(s)?s:[s];u.children=y(c);}!u.children&&r.children&&r.children.length>0&&(u.children=y(r.children)),e.push(u);}),e}function E(t,e){for(let r of t){let o=r.path,n=j(o,e);if(n)return [{route:r,params:n.params,pathname:n.path}]}return null}function j(t,e){let r=t.split("/").filter(Boolean),o=e.split("/").filter(Boolean);if(r.length!==o.length)return null;let n={};for(let s=0;s<r.length;s++){let f=r[s],u=o[s];if(f.startsWith(":")){let c=f.slice(1);n[c]=u;}else if(f!==u)return null}return {params:n,path:e}}var w=chunkLUW7DIEW_js.a(null),p=chunkLUW7DIEW_js.a(0),_=()=>({pathname:"/",search:"",hash:"",query:{}}),v=()=>typeof window>"u"?_():{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash,query:k(window.location.search)},l=null,g=null,F=false;function N(){if(l&&g)return [l,g];l=chunk7BXR4ZFD_js.a(v());let t=e=>{l&&(l.pathname=e.pathname,l.search=e.search,l.hash=e.hash,l.query=e.query);};return g=e=>{if(typeof window>"u")return;if(D(e)){console.error("[Flexium Router] Blocked navigation to unsafe path:",e);return}window.history.pushState({},"",e);let r=v();t(r);},typeof window<"u"&&!F&&(window.addEventListener("popstate",()=>{t(v());}),F=true),[l,g]}function m(){let t=chunkLUW7DIEW_js.b(w);if(!t)throw new Error("router() must be called within a <Routes> component");return t}function R(t){return null}function A(t){return t&&typeof t=="object"&&("type"in t||Array.isArray(t))}function q(t){let[e,r]=N(),o=Array.isArray(t.children)?t.children:[t.children],n=o.filter(i=>A(i)&&i.type===R),s=o.filter(i=>!A(i)||i.type!==R),f=y(n),u=e.pathname,c=E(f,u)||[],S=c.length>0?c[c.length-1].params:{},U={location:e,navigate:r,matches:c,params:S},x=null;if(c.length>0){let i=c[0],L=i.route.component,h=u;i.route.beforeEnter?i.route.beforeEnter(i.params)!==false&&(x=chunkEXLNKYSH_js.a(p.Provider,{value:1,key:h,children:chunkEXLNKYSH_js.a(L,{params:i.params,key:h})})):x=chunkEXLNKYSH_js.a(p.Provider,{value:1,key:h,children:chunkEXLNKYSH_js.a(L,{params:i.params,key:h})});}return chunkEXLNKYSH_js.a(w.Provider,{value:U,children:[...s,x]})}function B(){let t=m(),e=chunkLUW7DIEW_js.b(p)||0,[r]=chunkKBUONZI2_js.a(()=>t.matches);if(e>=r.length)return null;let o=r[e],n=o.route.component;return o.route.beforeEnter&&o.route.beforeEnter(o.params)===false?null:chunkEXLNKYSH_js.a(p.Provider,{value:e+1,children:chunkEXLNKYSH_js.a(n,{params:o.params})})}function M(t){let e=m();return chunkEXLNKYSH_js.a("a",{href:t.to,class:t.class,onclick:r=>{r.preventDefault(),e.navigate(t.to);},children:t.children})}exports.Link=M;exports.Outlet=B;exports.Route=R;exports.Routes=q;exports.router=m;//# sourceMappingURL=router.js.map
1
+ 'use strict';var chunkLUW7DIEW_js=require('./chunk-LUW7DIEW.js'),chunkAPAMPY43_js=require('./chunk-APAMPY43.js'),chunk7BXR4ZFD_js=require('./chunk-7BXR4ZFD.js');require('./chunk-ENWGYQNU.js');var chunkEXLNKYSH_js=require('./chunk-EXLNKYSH.js');function k(t){if(!t)return {};if(typeof URLSearchParams<"u"){let e=new URLSearchParams(t),r={};return e.forEach((o,n)=>r[n]=o),r}return t.substring(1).split("&").reduce((e,r)=>{let[o,n]=r.split("=");return o&&(e[decodeURIComponent(o)]=decodeURIComponent(n||"")),e},{})}function D(t){return !!(t.length>2048||t.includes("__proto__")||t.includes("constructor")||/^\s*javascript:/i.test(t))}function y(t){let e=[];return t.forEach(r=>{if(!r)return;let{path:o,component:n,children:s,beforeEnter:f}=r.props||{},u={path:o||"/",component:n,beforeEnter:f};if(s){let c=Array.isArray(s)?s:[s];u.children=y(c);}!u.children&&r.children&&r.children.length>0&&(u.children=y(r.children)),e.push(u);}),e}function E(t,e){for(let r of t){let o=r.path,n=j(o,e);if(n)return [{route:r,params:n.params,pathname:n.path}]}return null}function j(t,e){let r=t.split("/").filter(Boolean),o=e.split("/").filter(Boolean);if(r.length!==o.length)return null;let n={};for(let s=0;s<r.length;s++){let f=r[s],u=o[s];if(f.startsWith(":")){let c=f.slice(1);n[c]=u;}else if(f!==u)return null}return {params:n,path:e}}var w=chunkLUW7DIEW_js.a(null),p=chunkLUW7DIEW_js.a(0),_=()=>({pathname:"/",search:"",hash:"",query:{}}),v=()=>typeof window>"u"?_():{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash,query:k(window.location.search)},l=null,g=null,F=false;function N(){if(l&&g)return [l,g];l=chunk7BXR4ZFD_js.a(v());let t=e=>{l&&(l.pathname=e.pathname,l.search=e.search,l.hash=e.hash,l.query=e.query);};return g=e=>{if(typeof window>"u")return;if(D(e)){console.error("[Flexium Router] Blocked navigation to unsafe path:",e);return}window.history.pushState({},"",e);let r=v();t(r);},typeof window<"u"&&!F&&(window.addEventListener("popstate",()=>{t(v());}),F=true),[l,g]}function m(){let t=chunkLUW7DIEW_js.b(w);if(!t)throw new Error("router() must be called within a <Routes> component");return t}function R(t){return null}function A(t){return t&&typeof t=="object"&&("type"in t||Array.isArray(t))}function q(t){let[e,r]=N(),o=Array.isArray(t.children)?t.children:[t.children],n=o.filter(i=>A(i)&&i.type===R),s=o.filter(i=>!A(i)||i.type!==R),f=y(n),u=e.pathname,c=E(f,u)||[],S=c.length>0?c[c.length-1].params:{},U={location:e,navigate:r,matches:c,params:S},x=null;if(c.length>0){let i=c[0],L=i.route.component,h=u;i.route.beforeEnter?i.route.beforeEnter(i.params)!==false&&(x=chunkEXLNKYSH_js.a(p.Provider,{value:1,key:h,children:chunkEXLNKYSH_js.a(L,{params:i.params,key:h})})):x=chunkEXLNKYSH_js.a(p.Provider,{value:1,key:h,children:chunkEXLNKYSH_js.a(L,{params:i.params,key:h})});}return chunkEXLNKYSH_js.a(w.Provider,{value:U,children:[...s,x]})}function B(){let t=m(),e=chunkLUW7DIEW_js.b(p)||0,[r]=chunkAPAMPY43_js.a(()=>t.matches);if(e>=r.length)return null;let o=r[e],n=o.route.component;return o.route.beforeEnter&&o.route.beforeEnter(o.params)===false?null:chunkEXLNKYSH_js.a(p.Provider,{value:e+1,children:chunkEXLNKYSH_js.a(n,{params:o.params})})}function M(t){let e=m();return chunkEXLNKYSH_js.a("a",{href:t.to,class:t.class,onclick:r=>{r.preventDefault(),e.navigate(t.to);},children:t.children})}exports.Link=M;exports.Outlet=B;exports.Route=R;exports.Routes=q;exports.router=m;//# sourceMappingURL=router.js.map
2
2
  //# sourceMappingURL=router.js.map
package/dist/router.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import {a,b}from'./chunk-LUREDEUB.mjs';import {a as a$2}from'./chunk-IOF6L2BT.mjs';import {a as a$3}from'./chunk-CPJRQL2C.mjs';import'./chunk-44RZHCII.mjs';import {a as a$1}from'./chunk-ZCO4NIGC.mjs';function k(t){if(!t)return {};if(typeof URLSearchParams<"u"){let e=new URLSearchParams(t),r={};return e.forEach((o,n)=>r[n]=o),r}return t.substring(1).split("&").reduce((e,r)=>{let[o,n]=r.split("=");return o&&(e[decodeURIComponent(o)]=decodeURIComponent(n||"")),e},{})}function D(t){return !!(t.length>2048||t.includes("__proto__")||t.includes("constructor")||/^\s*javascript:/i.test(t))}function y(t){let e=[];return t.forEach(r=>{if(!r)return;let{path:o,component:n,children:s,beforeEnter:f}=r.props||{},u={path:o||"/",component:n,beforeEnter:f};if(s){let c=Array.isArray(s)?s:[s];u.children=y(c);}!u.children&&r.children&&r.children.length>0&&(u.children=y(r.children)),e.push(u);}),e}function E(t,e){for(let r of t){let o=r.path,n=j(o,e);if(n)return [{route:r,params:n.params,pathname:n.path}]}return null}function j(t,e){let r=t.split("/").filter(Boolean),o=e.split("/").filter(Boolean);if(r.length!==o.length)return null;let n={};for(let s=0;s<r.length;s++){let f=r[s],u=o[s];if(f.startsWith(":")){let c=f.slice(1);n[c]=u;}else if(f!==u)return null}return {params:n,path:e}}var w=a(null),p=a(0),_=()=>({pathname:"/",search:"",hash:"",query:{}}),v=()=>typeof window>"u"?_():{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash,query:k(window.location.search)},l=null,g=null,F=false;function N(){if(l&&g)return [l,g];l=a$3(v());let t=e=>{l&&(l.pathname=e.pathname,l.search=e.search,l.hash=e.hash,l.query=e.query);};return g=e=>{if(typeof window>"u")return;if(D(e)){console.error("[Flexium Router] Blocked navigation to unsafe path:",e);return}window.history.pushState({},"",e);let r=v();t(r);},typeof window<"u"&&!F&&(window.addEventListener("popstate",()=>{t(v());}),F=true),[l,g]}function m(){let t=b(w);if(!t)throw new Error("router() must be called within a <Routes> component");return t}function R(t){return null}function A(t){return t&&typeof t=="object"&&("type"in t||Array.isArray(t))}function q(t){let[e,r]=N(),o=Array.isArray(t.children)?t.children:[t.children],n=o.filter(i=>A(i)&&i.type===R),s=o.filter(i=>!A(i)||i.type!==R),f=y(n),u=e.pathname,c=E(f,u)||[],S=c.length>0?c[c.length-1].params:{},U={location:e,navigate:r,matches:c,params:S},x=null;if(c.length>0){let i=c[0],L=i.route.component,h=u;i.route.beforeEnter?i.route.beforeEnter(i.params)!==false&&(x=a$1(p.Provider,{value:1,key:h,children:a$1(L,{params:i.params,key:h})})):x=a$1(p.Provider,{value:1,key:h,children:a$1(L,{params:i.params,key:h})});}return a$1(w.Provider,{value:U,children:[...s,x]})}function B(){let t=m(),e=b(p)||0,[r]=a$2(()=>t.matches);if(e>=r.length)return null;let o=r[e],n=o.route.component;return o.route.beforeEnter&&o.route.beforeEnter(o.params)===false?null:a$1(p.Provider,{value:e+1,children:a$1(n,{params:o.params})})}function M(t){let e=m();return a$1("a",{href:t.to,class:t.class,onclick:r=>{r.preventDefault(),e.navigate(t.to);},children:t.children})}export{M as Link,B as Outlet,R as Route,q as Routes,m as router};//# sourceMappingURL=router.mjs.map
1
+ import {a,b}from'./chunk-LUREDEUB.mjs';import {a as a$2}from'./chunk-ECB5HZOQ.mjs';import {a as a$3}from'./chunk-CPJRQL2C.mjs';import'./chunk-44RZHCII.mjs';import {a as a$1}from'./chunk-ZCO4NIGC.mjs';function k(t){if(!t)return {};if(typeof URLSearchParams<"u"){let e=new URLSearchParams(t),r={};return e.forEach((o,n)=>r[n]=o),r}return t.substring(1).split("&").reduce((e,r)=>{let[o,n]=r.split("=");return o&&(e[decodeURIComponent(o)]=decodeURIComponent(n||"")),e},{})}function D(t){return !!(t.length>2048||t.includes("__proto__")||t.includes("constructor")||/^\s*javascript:/i.test(t))}function y(t){let e=[];return t.forEach(r=>{if(!r)return;let{path:o,component:n,children:s,beforeEnter:f}=r.props||{},u={path:o||"/",component:n,beforeEnter:f};if(s){let c=Array.isArray(s)?s:[s];u.children=y(c);}!u.children&&r.children&&r.children.length>0&&(u.children=y(r.children)),e.push(u);}),e}function E(t,e){for(let r of t){let o=r.path,n=j(o,e);if(n)return [{route:r,params:n.params,pathname:n.path}]}return null}function j(t,e){let r=t.split("/").filter(Boolean),o=e.split("/").filter(Boolean);if(r.length!==o.length)return null;let n={};for(let s=0;s<r.length;s++){let f=r[s],u=o[s];if(f.startsWith(":")){let c=f.slice(1);n[c]=u;}else if(f!==u)return null}return {params:n,path:e}}var w=a(null),p=a(0),_=()=>({pathname:"/",search:"",hash:"",query:{}}),v=()=>typeof window>"u"?_():{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash,query:k(window.location.search)},l=null,g=null,F=false;function N(){if(l&&g)return [l,g];l=a$3(v());let t=e=>{l&&(l.pathname=e.pathname,l.search=e.search,l.hash=e.hash,l.query=e.query);};return g=e=>{if(typeof window>"u")return;if(D(e)){console.error("[Flexium Router] Blocked navigation to unsafe path:",e);return}window.history.pushState({},"",e);let r=v();t(r);},typeof window<"u"&&!F&&(window.addEventListener("popstate",()=>{t(v());}),F=true),[l,g]}function m(){let t=b(w);if(!t)throw new Error("router() must be called within a <Routes> component");return t}function R(t){return null}function A(t){return t&&typeof t=="object"&&("type"in t||Array.isArray(t))}function q(t){let[e,r]=N(),o=Array.isArray(t.children)?t.children:[t.children],n=o.filter(i=>A(i)&&i.type===R),s=o.filter(i=>!A(i)||i.type!==R),f=y(n),u=e.pathname,c=E(f,u)||[],S=c.length>0?c[c.length-1].params:{},U={location:e,navigate:r,matches:c,params:S},x=null;if(c.length>0){let i=c[0],L=i.route.component,h=u;i.route.beforeEnter?i.route.beforeEnter(i.params)!==false&&(x=a$1(p.Provider,{value:1,key:h,children:a$1(L,{params:i.params,key:h})})):x=a$1(p.Provider,{value:1,key:h,children:a$1(L,{params:i.params,key:h})});}return a$1(w.Provider,{value:U,children:[...s,x]})}function B(){let t=m(),e=b(p)||0,[r]=a$2(()=>t.matches);if(e>=r.length)return null;let o=r[e],n=o.route.component;return o.route.beforeEnter&&o.route.beforeEnter(o.params)===false?null:a$1(p.Provider,{value:e+1,children:a$1(n,{params:o.params})})}function M(t){let e=m();return a$1("a",{href:t.to,class:t.class,onclick:r=>{r.preventDefault(),e.navigate(t.to);},children:t.children})}export{M as Link,B as Outlet,R as Route,q as Routes,m as router};//# sourceMappingURL=router.mjs.map
2
2
  //# sourceMappingURL=router.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flexium",
3
- "version": "0.12.9",
3
+ "version": "0.12.11",
4
4
  "description": "A lightweight, signals-based UI framework with cross-platform renderers",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,2 +0,0 @@
1
- import {a}from'./chunk-CPJRQL2C.mjs';import {h as h$1,b}from'./chunk-44RZHCII.mjs';var p=new Map;function h(u){return JSON.stringify(u)}function w(u,o){if(o?.key&&!Array.isArray(o.key))throw new Error("State key must be an array");let a$1=h$1(()=>a({container:void 0,serializedKey:void 0})),y=o?.key,r=y?h(y):void 0,v=r!==a$1.serializedKey;if(!a$1.container||v)if(a$1.serializedKey=r,r&&p.has(r))a$1.container=p.get(r);else {let s;if(typeof u=="function"){let i=u;if(o?.deps!==void 0){let e=h$1(()=>({value:void 0,prevDeps:void 0,hasRun:false})),l=true;if(e.hasRun&&e.prevDeps&&(l=o.deps.some((t,c)=>t!==e.prevDeps[c])),l){let t=i();if(t instanceof Promise)throw new Error("deps option is not supported with async functions");e.value=t,e.prevDeps=o.deps,e.hasRun=true;}s=a({type:"computed",value:e.value,loading:false,error:null,status:"success",run:()=>{}});}else {let e=a({type:"resource",value:void 0,loading:true,error:null,status:"idle",run:()=>{}}),l=()=>{try{let t=i();t instanceof Promise?(e.loading=!0,e.status="loading",e.error=null,t.then(c=>{e.value=c,e.status="success",e.loading=!1;}).catch(c=>{e.error=c,e.status="error",e.loading=!1;})):(e.value=t,e.status="success",e.loading=!1,e.error=null);}catch(t){e.error=t,e.status="error",e.loading=false;}};e.run=l,b(l),s=e;}}else s=a({type:"signal",value:u});r&&p.set(r,s),a$1.container=s;}let n=a$1.container,g=n.value;return n.type==="signal"?[g,i=>{typeof i=="function"?n.value=i(n.value):n.value=i;}]:[g,{refetch:async()=>{n.run();},get loading(){return n.loading},get error(){return n.error},get status(){return n.status}}]}export{w as a};//# sourceMappingURL=chunk-IOF6L2BT.mjs.map
2
- //# sourceMappingURL=chunk-IOF6L2BT.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/state.ts"],"names":["globalRegistry","serializeKey","key","state","input","options","stateRef","hook","reactive","currentKey","serializedKey","keyChanged","newContainer","fn","memoState","hasChanged","d","i","result","run","data","err","unsafeEffect","container","currentValue","newValue"],"mappings":"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","file":"chunk-IOF6L2BT.mjs","sourcesContent":["\nimport { reactive } from './reactive'\nimport { unsafeEffect } from './effect'\nimport { hook } from './hook'\n\nexport type StateSetter<T> = (newValue: T | ((prev: T) => T)) => void\n\nexport type ResourceControl = {\n refetch: () => Promise<void>\n readonly loading: boolean\n readonly error: unknown\n readonly status: 'idle' | 'loading' | 'success' | 'error'\n}\n\nexport type StateAction<T> = StateSetter<T> | ResourceControl\n\nexport interface StateOptions {\n key?: unknown[]\n deps?: any[]\n}\n\n// Global State Registry\nconst globalRegistry = new Map<string, any>()\n\nfunction serializeKey(key: unknown[]): string {\n return JSON.stringify(key)\n}\n\n// Overloads\nexport function state<T>(fn: () => Promise<T>, options?: StateOptions): [T | undefined, ResourceControl]\nexport function state<T>(fn: () => T, options?: StateOptions): [T, ResourceControl]\nexport function state<T>(initialValue: T extends Function ? never : T, options?: StateOptions): [T, StateSetter<T>]\nexport function state<T>(input: T | (() => T) | (() => Promise<T>), options?: StateOptions): any {\n // 0. Validate key if provided\n if (options?.key && !Array.isArray(options.key)) {\n throw new Error('State key must be an array')\n }\n\n // Hook Wrapper: Store container reference and track key\n const stateRef = hook(() => {\n return reactive({\n container: undefined as any,\n serializedKey: undefined as any\n })\n })\n\n // Compute serialized key\n const currentKey = options?.key\n const serializedKey = currentKey ? serializeKey(currentKey) : undefined\n\n // Check if key has changed by comparing serialized strings\n const keyChanged = serializedKey !== stateRef.serializedKey\n\n // If key changed or first time, get/create container\n if (!stateRef.container || keyChanged) {\n stateRef.serializedKey = serializedKey\n\n // Check Registry FIRST\n if (serializedKey && globalRegistry.has(serializedKey)) {\n stateRef.container = globalRegistry.get(serializedKey)\n } else {\n let newContainer: any\n\n // 1. Function (Computed or Resource)\n if (typeof input === 'function') {\n const fn = input as Function\n\n // DEPS MODE: Manual dependency tracking (memo behavior)\n if (options?.deps !== undefined) {\n const memoState = hook(() => ({\n value: undefined as T | undefined,\n prevDeps: undefined as any[] | undefined,\n hasRun: false\n }))\n\n let hasChanged = true\n if (memoState.hasRun && memoState.prevDeps) {\n hasChanged = options.deps.some((d, i) => d !== memoState.prevDeps![i])\n }\n\n if (hasChanged) {\n const result = fn()\n if (result instanceof Promise) {\n throw new Error('deps option is not supported with async functions')\n }\n memoState.value = result\n memoState.prevDeps = options.deps\n memoState.hasRun = true\n }\n\n newContainer = reactive({\n type: 'computed',\n value: memoState.value,\n loading: false,\n error: null,\n status: 'success' as 'idle' | 'loading' | 'success' | 'error',\n run: () => { }\n })\n } else {\n // REACTIVE MODE: Automatic tracking (existing behavior)\n const state = reactive({\n type: 'resource',\n value: undefined as T | undefined,\n loading: true,\n error: null as any,\n status: 'idle' as 'idle' | 'loading' | 'success' | 'error',\n run: () => { }\n })\n\n const run = () => {\n try {\n const result = fn()\n\n if (result instanceof Promise) {\n state.loading = true\n state.status = 'loading'\n state.error = null\n\n result\n .then(data => {\n state.value = data\n state.status = 'success'\n state.loading = false\n })\n .catch(err => {\n state.error = err\n state.status = 'error'\n state.loading = false\n })\n } else {\n state.value = result\n state.status = 'success'\n state.loading = false\n state.error = null\n }\n } catch (err) {\n state.error = err\n state.status = 'error'\n state.loading = false\n }\n }\n\n state.run = run\n\n // Make it reactive!\n unsafeEffect(run)\n\n newContainer = state\n }\n\n } else {\n // 2. Value (Signal)\n // We return the reactive proxy itself as the container\n newContainer = reactive({\n type: 'signal',\n value: input\n })\n }\n\n // Register in global registry if needed\n if (serializedKey) {\n globalRegistry.set(serializedKey, newContainer)\n }\n\n stateRef.container = newContainer\n }\n }\n\n const container = stateRef.container\n\n // --- RETURN LOGIC ---\n // Access container.value to track dependency in the component's effect\n const currentValue = container.value\n\n if (container.type === 'signal') {\n const setter = (newValue: T | ((prev: T) => T)) => {\n if (typeof newValue === 'function') {\n container.value = (newValue as Function)(container.value)\n } else {\n container.value = newValue\n }\n }\n return [currentValue, setter]\n } else {\n // Resource / Computed\n const control = {\n refetch: async () => { container.run() },\n get loading() { return container.loading },\n get error() { return container.error },\n get status() { return container.status }\n }\n return [currentValue, control]\n }\n}\n"]}
@@ -1,2 +0,0 @@
1
- 'use strict';var chunk7BXR4ZFD_js=require('./chunk-7BXR4ZFD.js'),chunkENWGYQNU_js=require('./chunk-ENWGYQNU.js');var p=new Map;function h(u){return JSON.stringify(u)}function w(u,o){if(o?.key&&!Array.isArray(o.key))throw new Error("State key must be an array");let a=chunkENWGYQNU_js.h(()=>chunk7BXR4ZFD_js.a({container:void 0,serializedKey:void 0})),y=o?.key,r=y?h(y):void 0,v=r!==a.serializedKey;if(!a.container||v)if(a.serializedKey=r,r&&p.has(r))a.container=p.get(r);else {let s;if(typeof u=="function"){let i=u;if(o?.deps!==void 0){let e=chunkENWGYQNU_js.h(()=>({value:void 0,prevDeps:void 0,hasRun:false})),l=true;if(e.hasRun&&e.prevDeps&&(l=o.deps.some((t,c)=>t!==e.prevDeps[c])),l){let t=i();if(t instanceof Promise)throw new Error("deps option is not supported with async functions");e.value=t,e.prevDeps=o.deps,e.hasRun=true;}s=chunk7BXR4ZFD_js.a({type:"computed",value:e.value,loading:false,error:null,status:"success",run:()=>{}});}else {let e=chunk7BXR4ZFD_js.a({type:"resource",value:void 0,loading:true,error:null,status:"idle",run:()=>{}}),l=()=>{try{let t=i();t instanceof Promise?(e.loading=!0,e.status="loading",e.error=null,t.then(c=>{e.value=c,e.status="success",e.loading=!1;}).catch(c=>{e.error=c,e.status="error",e.loading=!1;})):(e.value=t,e.status="success",e.loading=!1,e.error=null);}catch(t){e.error=t,e.status="error",e.loading=false;}};e.run=l,chunkENWGYQNU_js.b(l),s=e;}}else s=chunk7BXR4ZFD_js.a({type:"signal",value:u});r&&p.set(r,s),a.container=s;}let n=a.container,g=n.value;return n.type==="signal"?[g,i=>{typeof i=="function"?n.value=i(n.value):n.value=i;}]:[g,{refetch:async()=>{n.run();},get loading(){return n.loading},get error(){return n.error},get status(){return n.status}}]}exports.a=w;//# sourceMappingURL=chunk-KBUONZI2.js.map
2
- //# sourceMappingURL=chunk-KBUONZI2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/state.ts"],"names":["globalRegistry","serializeKey","key","state","input","options","stateRef","hook","reactive","currentKey","serializedKey","keyChanged","newContainer","fn","memoState","hasChanged","d","i","result","run","data","err","unsafeEffect","container","currentValue","newValue"],"mappings":"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","file":"chunk-KBUONZI2.js","sourcesContent":["\nimport { reactive } from './reactive'\nimport { unsafeEffect } from './effect'\nimport { hook } from './hook'\n\nexport type StateSetter<T> = (newValue: T | ((prev: T) => T)) => void\n\nexport type ResourceControl = {\n refetch: () => Promise<void>\n readonly loading: boolean\n readonly error: unknown\n readonly status: 'idle' | 'loading' | 'success' | 'error'\n}\n\nexport type StateAction<T> = StateSetter<T> | ResourceControl\n\nexport interface StateOptions {\n key?: unknown[]\n deps?: any[]\n}\n\n// Global State Registry\nconst globalRegistry = new Map<string, any>()\n\nfunction serializeKey(key: unknown[]): string {\n return JSON.stringify(key)\n}\n\n// Overloads\nexport function state<T>(fn: () => Promise<T>, options?: StateOptions): [T | undefined, ResourceControl]\nexport function state<T>(fn: () => T, options?: StateOptions): [T, ResourceControl]\nexport function state<T>(initialValue: T extends Function ? never : T, options?: StateOptions): [T, StateSetter<T>]\nexport function state<T>(input: T | (() => T) | (() => Promise<T>), options?: StateOptions): any {\n // 0. Validate key if provided\n if (options?.key && !Array.isArray(options.key)) {\n throw new Error('State key must be an array')\n }\n\n // Hook Wrapper: Store container reference and track key\n const stateRef = hook(() => {\n return reactive({\n container: undefined as any,\n serializedKey: undefined as any\n })\n })\n\n // Compute serialized key\n const currentKey = options?.key\n const serializedKey = currentKey ? serializeKey(currentKey) : undefined\n\n // Check if key has changed by comparing serialized strings\n const keyChanged = serializedKey !== stateRef.serializedKey\n\n // If key changed or first time, get/create container\n if (!stateRef.container || keyChanged) {\n stateRef.serializedKey = serializedKey\n\n // Check Registry FIRST\n if (serializedKey && globalRegistry.has(serializedKey)) {\n stateRef.container = globalRegistry.get(serializedKey)\n } else {\n let newContainer: any\n\n // 1. Function (Computed or Resource)\n if (typeof input === 'function') {\n const fn = input as Function\n\n // DEPS MODE: Manual dependency tracking (memo behavior)\n if (options?.deps !== undefined) {\n const memoState = hook(() => ({\n value: undefined as T | undefined,\n prevDeps: undefined as any[] | undefined,\n hasRun: false\n }))\n\n let hasChanged = true\n if (memoState.hasRun && memoState.prevDeps) {\n hasChanged = options.deps.some((d, i) => d !== memoState.prevDeps![i])\n }\n\n if (hasChanged) {\n const result = fn()\n if (result instanceof Promise) {\n throw new Error('deps option is not supported with async functions')\n }\n memoState.value = result\n memoState.prevDeps = options.deps\n memoState.hasRun = true\n }\n\n newContainer = reactive({\n type: 'computed',\n value: memoState.value,\n loading: false,\n error: null,\n status: 'success' as 'idle' | 'loading' | 'success' | 'error',\n run: () => { }\n })\n } else {\n // REACTIVE MODE: Automatic tracking (existing behavior)\n const state = reactive({\n type: 'resource',\n value: undefined as T | undefined,\n loading: true,\n error: null as any,\n status: 'idle' as 'idle' | 'loading' | 'success' | 'error',\n run: () => { }\n })\n\n const run = () => {\n try {\n const result = fn()\n\n if (result instanceof Promise) {\n state.loading = true\n state.status = 'loading'\n state.error = null\n\n result\n .then(data => {\n state.value = data\n state.status = 'success'\n state.loading = false\n })\n .catch(err => {\n state.error = err\n state.status = 'error'\n state.loading = false\n })\n } else {\n state.value = result\n state.status = 'success'\n state.loading = false\n state.error = null\n }\n } catch (err) {\n state.error = err\n state.status = 'error'\n state.loading = false\n }\n }\n\n state.run = run\n\n // Make it reactive!\n unsafeEffect(run)\n\n newContainer = state\n }\n\n } else {\n // 2. Value (Signal)\n // We return the reactive proxy itself as the container\n newContainer = reactive({\n type: 'signal',\n value: input\n })\n }\n\n // Register in global registry if needed\n if (serializedKey) {\n globalRegistry.set(serializedKey, newContainer)\n }\n\n stateRef.container = newContainer\n }\n }\n\n const container = stateRef.container\n\n // --- RETURN LOGIC ---\n // Access container.value to track dependency in the component's effect\n const currentValue = container.value\n\n if (container.type === 'signal') {\n const setter = (newValue: T | ((prev: T) => T)) => {\n if (typeof newValue === 'function') {\n container.value = (newValue as Function)(container.value)\n } else {\n container.value = newValue\n }\n }\n return [currentValue, setter]\n } else {\n // Resource / Computed\n const control = {\n refetch: async () => { container.run() },\n get loading() { return container.loading },\n get error() { return container.error },\n get status() { return container.status }\n }\n return [currentValue, control]\n }\n}\n"]}