flexium 0.12.16 → 0.12.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,9 +11,9 @@ Flexium is a next-generation UI framework that unifies state management, async d
11
11
  ## Key Features
12
12
 
13
13
  - **Unified State API** - No more `useState`, `useRecoil`, `useQuery` separation. Just `state()`.
14
- - **No Virtual DOM** - Direct DOM updates for maximum performance and minimal memory usage.
15
- - **Tiny Bundle** - ~8KB (min+gzip) including Router and Motion.
16
- - **Cross-Platform** - DOM, Canvas, and SSR renderers included.
14
+ - **No Virtual DOM** - Direct DOM updates via Proxy-based fine-grained reactivity.
15
+ - **Tiny Bundle** - Minimal footprint with tree-shaking support.
16
+ - **Cross-Platform** - DOM, Canvas, Server (SSR) renderers included.
17
17
  - **TypeScript First** - Full type inference out of the box.
18
18
  - **Zero-Config JSX** - Works with standard tooling.
19
19
 
@@ -39,20 +39,20 @@ Flexium unifies all state concepts into one function.
39
39
  ### Local State
40
40
 
41
41
  ```tsx
42
- import { state } from 'flexium/core';
43
- import { render } from 'flexium/dom';
42
+ import { state } from 'flexium/core'
43
+ import { render } from 'flexium/dom'
44
44
 
45
45
  function Counter() {
46
- const [count, setCount] = state(0);
46
+ const [count, setCount] = state(0)
47
47
 
48
48
  return (
49
49
  <button onclick={() => setCount(c => c + 1)}>
50
50
  Count: {count}
51
51
  </button>
52
- );
52
+ )
53
53
  }
54
54
 
55
- render(<Counter />, document.getElementById('app'));
55
+ render(Counter, document.getElementById('app'))
56
56
  ```
57
57
 
58
58
  ### Global State
@@ -61,16 +61,17 @@ Just add a `key` to share state across components. Keys can be strings or arrays
61
61
 
62
62
  ```tsx
63
63
  // Define global state with array key
64
- const [theme, setTheme] = state('light', { key: ['app', 'theme'] });
64
+ const [theme, setTheme] = state('light', { key: ['app', 'theme'] })
65
65
 
66
66
  function ThemeToggle() {
67
- const [theme, setTheme] = state(undefined, { key: ['app', 'theme'] });
67
+ // Access same state anywhere with the same key
68
+ const [theme, setTheme] = state('light', { key: ['app', 'theme'] })
68
69
 
69
70
  return (
70
71
  <button onclick={() => setTheme(t => t === 'light' ? 'dark' : 'light')}>
71
72
  Theme: {theme}
72
73
  </button>
73
- );
74
+ )
74
75
  }
75
76
  ```
76
77
 
@@ -81,55 +82,40 @@ Pass an async function to handle data fetching automatically.
81
82
  ```tsx
82
83
  function UserProfile({ id }) {
83
84
  const [user, control] = state(async () => {
84
- const res = await fetch(`/api/users/${id}`);
85
- return res.json();
86
- });
85
+ const res = await fetch(`/api/users/${id}`)
86
+ return res.json()
87
+ })
87
88
 
88
- if (control.loading) return <div>Loading...</div>;
89
- if (control.error) return <div>Error!</div>;
89
+ if (control.loading) return <div>Loading...</div>
90
+ if (control.error) return <div>Error!</div>
90
91
 
91
92
  return (
92
93
  <div>
93
94
  <h1>{user.name}</h1>
94
95
  <button onclick={() => control.refetch()}>Reload</button>
95
96
  </div>
96
- );
97
+ )
97
98
  }
98
99
  ```
99
100
 
100
- ### Derived State
101
+ ### Computed/Derived State
101
102
 
102
103
  ```tsx
103
- const [count, setCount] = state(1);
104
- const [double] = state(() => count * 2, { deps: [count] });
105
- ```
106
-
107
- ### Array Keys & Params
108
-
109
- ```tsx
110
- // Array keys for dynamic caching (like TanStack Query)
111
- const [user] = state(fetchUser, { key: ['user', userId] });
112
-
113
- // Explicit params for better DX
114
- const [data] = state(
115
- async ({ userId, postId }) => fetchPost(userId, postId),
116
- {
117
- key: ['posts', userId, postId],
118
- params: { userId, postId }
119
- }
120
- );
104
+ const [count, setCount] = state(1)
105
+ const [doubled] = state(() => count * 2, { deps: [count] })
121
106
  ```
122
107
 
123
108
  ## Package Structure
124
109
 
125
110
  ```
126
111
  flexium
127
- ├── /core # Core reactivity: state(), effect(), batch()
128
- ├── /dom # DOM renderer: render(), Portal
129
- ├── /canvas # Canvas renderer: Canvas, Rect, Circle, Text
130
- ├── /primitives # Cross-platform components: Row, Column, Stack
131
- ├── /router # SPA routing: Router, Route, Link
132
- └── /server # SSR utilities
112
+ ├── /core # Core reactivity: state(), effect(), sync(), context()
113
+ ├── /dom # DOM renderer: render(), hydrate(), Portal, Suspense
114
+ ├── /ref # Ref system: ref(), forwardRef()
115
+ ├── /router # SPA routing: Routes, Route, Link, Outlet
116
+ ├── /server # SSR: renderToString(), renderToStaticMarkup()
117
+ ├── /canvas # Canvas 2D: Canvas, DrawRect, DrawCircle, DrawText
118
+ └── /interactive # Game loop: loop(), keyboard(), mouse()
133
119
  ```
134
120
 
135
121
  ## Control Flow
@@ -138,89 +124,160 @@ Use native JavaScript for control flow - no special components needed:
138
124
 
139
125
  ```tsx
140
126
  // Conditional rendering
141
- {isLoggedIn() ? <Dashboard /> : <Login />}
127
+ {isLoggedIn ? <Dashboard /> : <Login />}
142
128
 
143
129
  // Short-circuit for simple conditions
144
- {isAdmin() && <AdminPanel />}
130
+ {isAdmin && <AdminPanel />}
145
131
 
146
- // List rendering with optimized reconciliation
132
+ // List rendering
147
133
  {items.map(item => <Item key={item.id} data={item} />)}
134
+ ```
135
+
136
+ ## Routing
137
+
138
+ ```tsx
139
+ import { Routes, Route, Link, router } from 'flexium/router'
140
+
141
+ function App() {
142
+ return (
143
+ <Routes>
144
+ <nav>
145
+ <Link to="/">Home</Link>
146
+ <Link to="/about">About</Link>
147
+ </nav>
148
+ <Route path="/" component={Home} />
149
+ <Route path="/about" component={About} />
150
+ <Route path="/users/:id" component={UserProfile} />
151
+ </Routes>
152
+ )
153
+ }
148
154
 
149
- // Pattern matching with ternary chains
150
- {status() === 'loading' ? <Loading /> :
151
- status() === 'error' ? <Error /> :
152
- status() === 'success' ? <Success /> :
153
- <Default />}
155
+ function UserProfile({ params }) {
156
+ return <h1>User: {params.id}</h1>
157
+ }
158
+
159
+ // Or use the router hook
160
+ function UserProfileHook() {
161
+ const r = router()
162
+ return <h1>User: {r.params.id}</h1>
163
+ }
154
164
  ```
155
165
 
156
166
  ## Canvas Rendering
157
167
 
158
168
  ```tsx
159
- import { Canvas, Rect, Circle, Text } from 'flexium/canvas';
169
+ import { Canvas, DrawRect, DrawCircle, DrawText } from 'flexium/canvas'
160
170
 
161
171
  function App() {
162
- const [x, setX] = state(100);
172
+ const [x, setX] = state(100)
163
173
 
164
174
  return (
165
175
  <Canvas width={400} height={300}>
166
- <Rect x={0} y={0} width={400} height={300} fill="#1a1a2e" />
167
- <Circle x={x} y={150} radius={30} fill="#e94560" />
168
- <Text x={200} y={50} text="Hello Canvas!" fill="white" />
176
+ <DrawRect x={0} y={0} width={400} height={300} fill="#1a1a2e" />
177
+ <DrawCircle x={x} y={150} radius={30} fill="#e94560" />
178
+ <DrawText x={200} y={50} text="Hello Canvas!" fill="white" />
169
179
  </Canvas>
170
- );
180
+ )
171
181
  }
172
182
  ```
173
183
 
174
- ## Cross-Platform Primitives
184
+ ## Game Development
175
185
 
176
186
  ```tsx
177
- import { Row, Column, Text, Pressable } from 'flexium/primitives';
187
+ import { state, effect } from 'flexium/core'
188
+ import { Canvas, DrawRect } from 'flexium/canvas'
189
+ import { loop, keyboard, Keys } from 'flexium/interactive'
190
+
191
+ function Game() {
192
+ const [x, setX] = state(100)
193
+ const kb = keyboard()
194
+
195
+ const gameLoop = loop({
196
+ fixedFps: 60,
197
+ onUpdate: (delta) => {
198
+ if (kb.isPressed(Keys.ArrowRight)) setX(x => x + 200 * delta)
199
+ if (kb.isPressed(Keys.ArrowLeft)) setX(x => x - 200 * delta)
200
+ }
201
+ })
202
+
203
+ effect(() => {
204
+ gameLoop.start()
205
+ return () => gameLoop.stop()
206
+ }, [])
178
207
 
179
- function App() {
180
208
  return (
181
- <Column gap={16} padding={20}>
182
- <Text size="xl" weight="bold">Welcome</Text>
183
- <Row gap={8}>
184
- <Pressable onPress={() => console.log('clicked')}>
185
- <Text>Click me</Text>
186
- </Pressable>
187
- </Row>
188
- </Column>
189
- );
209
+ <Canvas width={800} height={600}>
210
+ <DrawRect x={x} y={300} width={50} height={50} fill="red" />
211
+ </Canvas>
212
+ )
190
213
  }
191
214
  ```
192
215
 
193
- ## Routing
216
+ ## Server-Side Rendering
194
217
 
195
218
  ```tsx
196
- import { Routes, Route, Link } from 'flexium/router';
219
+ import { renderToString } from 'flexium/server'
220
+ import { hydrate } from 'flexium/dom'
221
+
222
+ // Server
223
+ const { html, state } = renderToString(App, { hydrate: true })
224
+
225
+ // Client
226
+ hydrate(App, document.getElementById('root'), { state })
227
+ ```
228
+
229
+ ## Built-in Components
230
+
231
+ ### Portal
232
+
233
+ ```tsx
234
+ import { Portal } from 'flexium/dom'
235
+
236
+ <Portal target={document.body}>
237
+ <Modal />
238
+ </Portal>
239
+ ```
240
+
241
+ ### Suspense
242
+
243
+ ```tsx
244
+ import { Suspense, lazy } from 'flexium/dom'
245
+
246
+ const LazyComponent = lazy(() => import('./Heavy'))
247
+
248
+ <Suspense fallback={<Loading />}>
249
+ <LazyComponent />
250
+ </Suspense>
251
+ ```
252
+
253
+ ### ErrorBoundary
254
+
255
+ ```tsx
256
+ import { ErrorBoundary } from 'flexium/dom'
257
+
258
+ <ErrorBoundary fallback={(error) => <Error message={error.message} />}>
259
+ <App />
260
+ </ErrorBoundary>
261
+ ```
262
+
263
+ ## Context API
264
+
265
+ ```tsx
266
+ import { createContext, context } from 'flexium/core'
267
+
268
+ const ThemeCtx = createContext('light')
197
269
 
198
270
  function App() {
199
271
  return (
200
- <Routes>
201
- <nav>
202
- <Link to="/">Home</Link>
203
- <Link to="/about">About</Link>
204
- </nav>
205
- <Route path="/" component={Home} />
206
- <Route path="/about" component={About} />
207
- <Route path="/users/:id" component={UserProfile} />
208
- </Routes>
209
- );
210
- }
211
-
212
- function UserProfile({ params }) {
213
- // Params are passed as props to the component
214
- return <h1>User: {params.id}</h1>;
272
+ <ThemeCtx.Provider value="dark">
273
+ <Child />
274
+ </ThemeCtx.Provider>
275
+ )
215
276
  }
216
277
 
217
- // Or use the router hook
218
- import { router } from 'flexium/router';
219
-
220
- function UserProfileHook() {
221
- const r = router();
222
- // Access params directly from router context
223
- return <h1>User: {r.params.id}</h1>;
278
+ function Child() {
279
+ const theme = context(ThemeCtx)
280
+ return <div>Theme: {theme}</div>
224
281
  }
225
282
  ```
226
283
 
package/dist/dom.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var chunk6Z33DLMI_js=require('./chunk-6Z33DLMI.js'),chunkPSKDIB7J_js=require('./chunk-PSKDIB7J.js'),chunkLTT43APF_js=require('./chunk-LTT43APF.js');require('./chunk-6VIRXD2Y.js');var chunkYWTD32NA_js=require('./chunk-YWTD32NA.js'),chunkUWFVCKRU_js=require('./chunk-UWFVCKRU.js');function j(e,t,...r){return {type:e,props:t||{},children:r,key:t?.key}}var l=null,F=new WeakMap,m=null;function K(e,t,r={}){let{state:s,onHydrated:o,onMismatch:n}=r;l=t.firstChild;try{let i;typeof e=="function"&&!z(e)?i={type:e,props:{},children:[],key:void 0}:i=e,E(i,t),o?.();}catch(i){console.warn("[Flexium] Hydration mismatch, falling back to full render:",i),n?.(i),t.innerHTML="",import('./render-QZAFAGIM.js').then(({render:a})=>{a(e,t);});}finally{l=null;}}function z(e){return e&&typeof e=="object"&&"type"in e&&"props"in e}function E(e,t){if(e==null||typeof e=="boolean")return v(),null;if(typeof e=="string"||typeof e=="number")return X(String(e));if(Array.isArray(e)){let r=[];for(let s of e){let o=E(s,t);o&&(Array.isArray(o)?r.push(...o):r.push(o));}return r}if(typeof e=="function")return b({type:e,props:{},children:[],key:void 0},t);if(typeof e=="object"&&z(e)){if(typeof e.type=="string")return q(e);if(typeof e.type=="function")return b(e,t)}return null}function v(){for(;l&&l.nodeType===Node.TEXT_NODE&&(!l.textContent||l.textContent.trim()==="");)l=l.nextSibling;}function X(e){v();let t=l;if(!t)return null;if(t.nodeType!==Node.TEXT_NODE){if(e.trim()==="")return null;throw new Error(`Hydration mismatch: expected text node "${e}", got ${t.nodeName}`)}return l=t.nextSibling,t}function q(e,t){v();let r=l,s=e.type;if(!r||r.nodeType!==Node.ELEMENT_NODE)throw new Error(`Hydration mismatch: expected element <${s}>, got ${r?.nodeName||"nothing"}`);if(r.tagName.toLowerCase()!==s.toLowerCase())throw new Error(`Hydration mismatch: expected <${s}>, got <${r.tagName.toLowerCase()}>`);if(e.props){for(let[o,n]of Object.entries(e.props))if(o==="ref")typeof n=="function"?n(r):n&&typeof n=="object"&&"current"in n&&(n.current=r);else if(o.startsWith("on")&&typeof n=="function"){let i=o.slice(2).toLowerCase();r.addEventListener(i,n),r.__eventHandlers||(r.__eventHandlers={}),r.__eventHandlers[i]=n;}}if(l=r.nextSibling,e.children&&e.children.length>0){let o=l;l=r.firstChild;for(let n of e.children)E(n,r);l=o;}return r}function b(e,t){let r=e.type,s={...e.props};e.children&&e.children.length>0&&(s.children=e.children.length===1?e.children[0]:e.children);let o=r._contextId,n=o!==void 0,i;n&&(i=chunkPSKDIB7J_js.c(o,s.value)),F.has(t)||F.set(t,new Map);let a=F.get(t),x=e.key!==void 0,d;if(x)d=e.key;else {let y=0,u=r.name||"anonymous";a.forEach((g,h)=>{typeof h=="string"&&h.startsWith(`__auto_${u}_`)&&y++;}),d=`__auto_${u}_${y}`;}let p={hooks:[],hookIndex:0,nodes:[],parent:t,fnode:e,props:s,key:d,children:new Set,parentInstance:m||void 0};m&&m.children.add(p),a.set(d,p);let c=m;m=p;try{let y=chunkUWFVCKRU_js.a(p,()=>r(s)),u=E(y,t);p.nodes=u?Array.isArray(u)?u:[u]:[];let g=!0,h=()=>{if(g){g=!1;return}let R=p.props,Z=chunkUWFVCKRU_js.a(p,()=>r(R));};return p.renderFn=h,chunkYWTD32NA_js.b(h),p.nodes}finally{m=c,n&&chunkPSKDIB7J_js.d(o,i);}}function O(e){let{target:t,children:r}=e,s=chunkUWFVCKRU_js.b(()=>({container:null,mounted:false}));return chunkYWTD32NA_js.e(()=>{let o=null;if(typeof t=="string"?o=document.querySelector(t):t instanceof HTMLElement&&(o=t),!o){console.warn("[Flexium Portal] Target container not found:",t);return}let n=document.createElement("div");return n.setAttribute("data-flexium-portal","true"),o.appendChild(n),s.container=n,s.mounted=true,chunk6Z33DLMI_js.b(r,n),()=>{n.parentNode&&n.parentNode.removeChild(n),s.container=null,s.mounted=false;}},[t,r]),null}var G={register:()=>{},hasBoundary:false},H=chunkPSKDIB7J_js.a(G);function N(){return chunkPSKDIB7J_js.b(H)}function V(e){let{fallback:t,children:r}=e,s=chunkUWFVCKRU_js.b(()=>new Set),[o,n]=chunkLTT43APF_js.a(0),[i,a]=chunkLTT43APF_js.a(false),d={register:c=>{s.has(c)||(s.add(c),n(y=>y+1),a(true),c.finally(()=>{s.delete(c),n(y=>{let u=y-1;return u===0&&a(false),u});}));},hasBoundary:true},p=i?t:r;return {type:H.Provider,props:{value:d},children:[p],key:void 0}}function D(e){let{fallback:t,onError:r,children:s,resetKey:o}=e,[n,i]=chunkLTT43APF_js.a({error:null,info:null}),a=chunkUWFVCKRU_js.b(()=>({current:o}));o!==a.current&&(a.current=o,n.error!==null&&i({error:null,info:null}));if(n.error)return typeof t=="function"?t(n.error,n.info):t;try{return s}finally{}}function A(e){let t=null,r=null,s=null,o=n=>{if(t)return t(n);if(s)throw s;let i=N();return r||(r=e().then(a=>{t=a.default;}).catch(a=>{s=a instanceof Error?a:new Error(String(a));})),i.hasBoundary&&i.register(r),null};return o._lazy=true,o._loader=e,o}Object.defineProperty(exports,"reconcile",{enumerable:true,get:function(){return chunk6Z33DLMI_js.a}});Object.defineProperty(exports,"render",{enumerable:true,get:function(){return chunk6Z33DLMI_js.b}});exports.ErrorBoundary=D;exports.Portal=O;exports.Suspense=V;exports.f=j;exports.hydrate=K;exports.lazy=A;exports.suspenseContext=N;//# sourceMappingURL=dom.js.map
1
+ 'use strict';var chunk6Z33DLMI_js=require('./chunk-6Z33DLMI.js'),chunkPSKDIB7J_js=require('./chunk-PSKDIB7J.js'),chunkLTT43APF_js=require('./chunk-LTT43APF.js');require('./chunk-6VIRXD2Y.js');var chunkYWTD32NA_js=require('./chunk-YWTD32NA.js'),chunkUWFVCKRU_js=require('./chunk-UWFVCKRU.js');function R(e,t,...o){return {type:e,props:t||{},children:o,key:t?.key}}var l=null,F=new WeakMap,m=null;function K(e,t,o={}){let{state:n,onHydrated:r,onMismatch:s}=o;l=t.firstChild;try{let i;typeof e=="function"&&!z(e)?i={type:e,props:{},children:[],key:void 0}:i=e,E(i,t),r?.();}catch(i){console.warn("[Flexium] Hydration mismatch, falling back to full render:",i),s?.(i),t.innerHTML="",import('./render-QZAFAGIM.js').then(({render:p})=>{p(e,t);});}finally{l=null;}}function z(e){return e&&typeof e=="object"&&"type"in e&&"props"in e}function E(e,t){if(e==null||typeof e=="boolean")return v(),null;if(typeof e=="string"||typeof e=="number")return X(String(e));if(Array.isArray(e)){let o=[];for(let n of e){let r=E(n,t);r&&(Array.isArray(r)?o.push(...r):o.push(r));}return o}if(typeof e=="function")return b({type:e,props:{},children:[],key:void 0},t);if(typeof e=="object"&&z(e)){if(typeof e.type=="string")return q(e);if(typeof e.type=="function")return b(e,t)}return null}function v(){for(;l&&l.nodeType===Node.TEXT_NODE&&(!l.textContent||l.textContent.trim()==="");)l=l.nextSibling;}function X(e){v();let t=l;if(!t)return null;if(t.nodeType!==Node.TEXT_NODE){if(e.trim()==="")return null;throw new Error(`Hydration mismatch: expected text node "${e}", got ${t.nodeName}`)}return l=t.nextSibling,t}function q(e){v();let t=l,o=e.type;if(!t||t.nodeType!==Node.ELEMENT_NODE)throw new Error(`Hydration mismatch: expected element <${o}>, got ${t?.nodeName||"nothing"}`);if(t.tagName.toLowerCase()!==o.toLowerCase())throw new Error(`Hydration mismatch: expected <${o}>, got <${t.tagName.toLowerCase()}>`);if(e.props){for(let[n,r]of Object.entries(e.props))if(n==="ref")typeof r=="function"?r(t):r&&typeof r=="object"&&"current"in r&&(r.current=t);else if(n.startsWith("on")&&typeof r=="function"){let s=n.slice(2).toLowerCase();t.addEventListener(s,r),t.__eventHandlers||(t.__eventHandlers={}),t.__eventHandlers[s]=r;}}if(l=t.nextSibling,e.children&&e.children.length>0){let n=l;l=t.firstChild;for(let r of e.children)E(r,t);l=n;}return t}function b(e,t){let o=e.type,n={...e.props};e.children&&e.children.length>0&&(n.children=e.children.length===1?e.children[0]:e.children);let r=o._contextId,s=r!==void 0,i;s&&(i=chunkPSKDIB7J_js.c(r,n.value)),F.has(t)||F.set(t,new Map);let p=F.get(t),h=e.key!==void 0,u;if(h)u=e.key;else {let c=0,y=o.name||"anonymous";p.forEach((g,C)=>{typeof C=="string"&&C.startsWith(`__auto_${y}_`)&&c++;}),u=`__auto_${y}_${c}`;}let a={hooks:[],hookIndex:0,nodes:[],parent:t,fnode:e,props:n,key:u,children:new Set,parentInstance:m||void 0};m&&m.children.add(a),p.set(u,a);let d=m;m=a;try{let c=chunkUWFVCKRU_js.a(a,()=>o(n)),y=E(c,t);a.nodes=y?Array.isArray(y)?y:[y]:[];let g=!0,C=()=>{if(g){g=!1;return}let W=a.props;chunkUWFVCKRU_js.a(a,()=>o(W));};return a.renderFn=C,chunkYWTD32NA_js.b(C),a.nodes}finally{m=d,s&&chunkPSKDIB7J_js.d(r,i);}}function O(e){let{target:t,children:o}=e,n=chunkUWFVCKRU_js.b(()=>({container:null,mounted:false}));return chunkYWTD32NA_js.e(()=>{let r=null;if(typeof t=="string"?r=document.querySelector(t):t instanceof HTMLElement&&(r=t),!r){console.warn("[Flexium Portal] Target container not found:",t);return}let s=document.createElement("div");return s.setAttribute("data-flexium-portal","true"),r.appendChild(s),n.container=s,n.mounted=true,chunk6Z33DLMI_js.b(o,s),()=>{s.parentNode&&s.parentNode.removeChild(s),n.container=null,n.mounted=false;}},[t,o]),null}var G={register:()=>{},hasBoundary:false},I=chunkPSKDIB7J_js.a(G);function N(){return chunkPSKDIB7J_js.b(I)}function V(e){let{fallback:t,children:o}=e,n=chunkUWFVCKRU_js.b(()=>new Set),[,r]=chunkLTT43APF_js.a(0),[s,i]=chunkLTT43APF_js.a(false),h={register:a=>{n.has(a)||(n.add(a),r(d=>d+1),i(true),a.finally(()=>{n.delete(a),r(d=>{let c=d-1;return c===0&&i(false),c});}));},hasBoundary:true},u=s?t:o;return {type:I.Provider,props:{value:h},children:[u],key:void 0}}function D(e){let{fallback:t,onError:o,children:n,resetKey:r}=e,[s,i]=chunkLTT43APF_js.a({error:null,info:null}),p=chunkUWFVCKRU_js.b(()=>({current:r}));r!==p.current&&(p.current=r,s.error!==null&&i({error:null,info:null}));if(s.error)return typeof t=="function"?t(s.error,s.info):t;try{return n}finally{}}function A(e){let t=null,o=null,n=null,r=s=>{if(t)return t(s);if(n)throw n;let i=N();return o||(o=e().then(p=>{t=p.default;}).catch(p=>{n=p instanceof Error?p:new Error(String(p));})),i.hasBoundary&&i.register(o),null};return r._lazy=true,r._loader=e,r}Object.defineProperty(exports,"reconcile",{enumerable:true,get:function(){return chunk6Z33DLMI_js.a}});Object.defineProperty(exports,"render",{enumerable:true,get:function(){return chunk6Z33DLMI_js.b}});exports.ErrorBoundary=D;exports.Portal=O;exports.Suspense=V;exports.f=R;exports.hydrate=K;exports.lazy=A;exports.suspenseContext=N;//# sourceMappingURL=dom.js.map
2
2
  //# sourceMappingURL=dom.js.map
package/dist/dom.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dom/f.ts","../src/dom/hydrate.ts","../src/dom/components/Portal.tsx","../src/dom/components/suspenseContext.ts","../src/dom/components/Suspense.tsx","../src/dom/components/ErrorBoundary.tsx","../src/dom/components/lazy.ts"],"names":["f","type","props","children","hydrationCursor","hydratedInstanceRegistry","currentHydratingInstance","hydrate","app","container","options","state","onHydrated","onMismatch","fnode","isFNode","hydrateNode","error","render","value","parent","skipEmptyTextNodes","hydrateTextNode","nodes","child","result","hydrateComponent","hydrateElement","text","current","tag","key","eventName","savedCursor","Component","contextId","isProvider","prevContextValue","pushContext","parentRegistry","hasExplicitKey","instanceCount","componentName","_","k","instance","previousHydratingInstance","runWithComponent","isFirstRender","renderFn","currentProps","currentResult","unsafeEffect","popContext","Portal","target","portalState","hook","effect","portalWrapper","defaultValue","SuspenseCtx","createContext","suspenseContext","context","Suspense","fallback","pendingSet","pendingCount","setPendingCount","showFallback","setShowFallback","contextValue","promise","c","newCount","content","ErrorBoundary","onError","resetKey","errorState","setErrorState","prevResetKeyRef","lazy","loader","resolved","LazyWrapper","suspense","module","err"],"mappings":"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","file":"dom.js","sourcesContent":["import type { FNode } from './types'\n\n/**\n * f() - Create FNodes without JSX\n */\nexport function f(\n type: string | Function,\n props?: any,\n ...children: any[]\n): FNode {\n return {\n type,\n props: props || {},\n children,\n key: props?.key\n }\n}\n","import type { FNode, FNodeChild } from './types'\nimport type { SerializedState } from '../server/types'\nimport { runWithComponent, type ComponentInstance } from '../core/hook'\nimport { pushContext, popContext } from '../core/context'\nimport { unsafeEffect } from '../core/lifecycle'\n\n// Hydration state\nlet isHydrating = false\nlet hydrationCursor: Node | null = null\nlet hydrationState: SerializedState | null = null\n\nexport interface HydrateOptions {\n /**\n * Serialized state from server\n * Typically embedded in HTML as JSON script tag\n */\n state?: SerializedState\n\n /**\n * Called when hydration completes successfully\n */\n onHydrated?: () => void\n\n /**\n * Called when hydration fails (falls back to full render)\n */\n onMismatch?: (error: Error) => void\n}\n\n// Extended ComponentInstance for DOM tracking (same as render.ts)\ninterface DOMComponentInstance extends ComponentInstance {\n nodes: Node[]\n parent: HTMLElement\n fnode: any\n props: any\n key?: any\n renderFn?: () => void\n children: Set<DOMComponentInstance>\n parentInstance?: DOMComponentInstance\n}\n\n// Registry for hydrated components\nconst hydratedInstanceRegistry = new WeakMap<HTMLElement, Map<any, DOMComponentInstance>>()\nlet currentHydratingInstance: DOMComponentInstance | null = null\n\nexport function getIsHydrating(): boolean {\n return isHydrating\n}\n\nexport function getHydrationState(): SerializedState | null {\n return hydrationState\n}\n\n/**\n * Hydrate server-rendered HTML with client-side interactivity\n */\nexport function hydrate(\n app: FNodeChild | (() => FNodeChild),\n container: HTMLElement,\n options: HydrateOptions = {}\n): void {\n const { state, onHydrated, onMismatch } = options\n\n // Store state for rehydration\n hydrationState = state || null\n\n // Initialize hydration mode\n isHydrating = true\n hydrationCursor = container.firstChild\n\n try {\n // Normalize input\n let fnode: FNodeChild\n if (typeof app === 'function' && !isFNode(app)) {\n fnode = { type: app, props: {}, children: [], key: undefined }\n } else {\n fnode = app\n }\n\n // Hydrate the tree\n hydrateNode(fnode, container)\n\n onHydrated?.()\n } catch (error) {\n // Hydration mismatch - fall back to full render\n console.warn('[Flexium] Hydration mismatch, falling back to full render:', error)\n onMismatch?.(error as Error)\n\n // Clear and re-render\n container.innerHTML = ''\n // Import dynamically to avoid circular deps\n import('./render').then(({ render }) => {\n render(app, container)\n })\n } finally {\n isHydrating = false\n hydrationCursor = null\n hydrationState = null\n }\n}\n\nfunction isFNode(value: any): value is FNode {\n return value && typeof value === 'object' && 'type' in value && 'props' in value\n}\n\nfunction hydrateNode(fnode: FNodeChild, parent: HTMLElement): Node | Node[] | null {\n // Null/undefined/boolean -> skip empty text nodes\n if (fnode === null || fnode === undefined || typeof fnode === 'boolean') {\n // Server might have rendered an empty text node\n skipEmptyTextNodes()\n return null\n }\n\n // String/number -> expect text node\n if (typeof fnode === 'string' || typeof fnode === 'number') {\n return hydrateTextNode(String(fnode))\n }\n\n // Array -> hydrate each child\n if (Array.isArray(fnode)) {\n const nodes: Node[] = []\n for (const child of fnode) {\n const result = hydrateNode(child, parent)\n if (result) {\n if (Array.isArray(result)) {\n nodes.push(...result)\n } else {\n nodes.push(result)\n }\n }\n }\n return nodes\n }\n\n // Function (standalone) -> wrap in FNode and hydrate\n if (typeof fnode === 'function') {\n const wrappedFnode: FNode = { type: fnode, props: {}, children: [], key: undefined }\n return hydrateComponent(wrappedFnode, parent)\n }\n\n // Object (FNode)\n if (typeof fnode === 'object' && isFNode(fnode)) {\n if (typeof fnode.type === 'string') {\n return hydrateElement(fnode, parent)\n }\n\n if (typeof fnode.type === 'function') {\n return hydrateComponent(fnode, parent)\n }\n }\n\n return null\n}\n\nfunction skipEmptyTextNodes(): void {\n while (\n hydrationCursor &&\n hydrationCursor.nodeType === Node.TEXT_NODE &&\n (!hydrationCursor.textContent || hydrationCursor.textContent.trim() === '')\n ) {\n hydrationCursor = hydrationCursor.nextSibling\n }\n}\n\nfunction hydrateTextNode(text: string): Node | null {\n skipEmptyTextNodes()\n\n const current = hydrationCursor\n\n if (!current) {\n // No node to hydrate - this is okay for conditional rendering\n return null\n }\n\n if (current.nodeType !== Node.TEXT_NODE) {\n // Try to find a text node nearby (whitespace handling)\n if (text.trim() === '') {\n return null\n }\n throw new Error(`Hydration mismatch: expected text node \"${text}\", got ${current.nodeName}`)\n }\n\n // Update cursor\n hydrationCursor = current.nextSibling\n\n return current\n}\n\nfunction hydrateElement(fnode: FNode, parent: HTMLElement): Node {\n skipEmptyTextNodes()\n\n const current = hydrationCursor as Element\n const tag = fnode.type as string\n\n // Validate element type\n if (!current || current.nodeType !== Node.ELEMENT_NODE) {\n throw new Error(`Hydration mismatch: expected element <${tag}>, got ${current?.nodeName || 'nothing'}`)\n }\n\n if (current.tagName.toLowerCase() !== tag.toLowerCase()) {\n throw new Error(`Hydration mismatch: expected <${tag}>, got <${current.tagName.toLowerCase()}>`)\n }\n\n // Attach event handlers and refs (don't modify DOM structure)\n if (fnode.props) {\n for (const [key, value] of Object.entries(fnode.props)) {\n if (key === 'ref') {\n if (typeof value === 'function') {\n value(current)\n } else if (value && typeof value === 'object' && 'current' in value) {\n value.current = current\n }\n } else if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.slice(2).toLowerCase()\n current.addEventListener(eventName, value as EventListener)\n\n // Store for reconciliation\n if (!(current as any).__eventHandlers) {\n (current as any).__eventHandlers = {}\n }\n (current as any).__eventHandlers[eventName] = value\n }\n }\n }\n\n // Move cursor past this element\n hydrationCursor = current.nextSibling\n\n // Hydrate children\n if (fnode.children && fnode.children.length > 0) {\n const savedCursor = hydrationCursor\n\n hydrationCursor = current.firstChild\n\n for (const child of fnode.children) {\n hydrateNode(child, current as HTMLElement)\n }\n\n hydrationCursor = savedCursor\n }\n\n return current\n}\n\nfunction hydrateComponent(fnode: FNode, parent: HTMLElement): Node | Node[] | null {\n const Component = fnode.type as Function\n\n // Merge props\n const props = { ...fnode.props }\n if (fnode.children && fnode.children.length > 0) {\n props.children = fnode.children.length === 1\n ? fnode.children[0]\n : fnode.children\n }\n\n // Handle context providers\n const contextId = (Component as any)._contextId\n const isProvider = contextId !== undefined\n let prevContextValue: any\n\n if (isProvider) {\n prevContextValue = pushContext(contextId, props.value)\n }\n\n // Generate key (same logic as render.ts)\n if (!hydratedInstanceRegistry.has(parent)) {\n hydratedInstanceRegistry.set(parent, new Map())\n }\n const parentRegistry = hydratedInstanceRegistry.get(parent)!\n\n const hasExplicitKey = fnode.key !== undefined\n let key: any\n if (hasExplicitKey) {\n key = fnode.key\n } else {\n let instanceCount = 0\n const componentName = (Component as any).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 // Create component instance\n const instance: DOMComponentInstance = {\n hooks: [],\n hookIndex: 0,\n nodes: [],\n parent,\n fnode,\n props,\n key,\n children: new Set(),\n parentInstance: currentHydratingInstance || undefined\n }\n\n if (currentHydratingInstance) {\n currentHydratingInstance.children.add(instance)\n }\n\n parentRegistry.set(key, instance)\n\n const previousHydratingInstance = currentHydratingInstance\n currentHydratingInstance = instance\n\n try {\n // First render during hydration - just match DOM\n const result = runWithComponent(instance, () => Component(props))\n const nodes = hydrateNode(result, parent)\n instance.nodes = nodes ? (Array.isArray(nodes) ? nodes : [nodes]) : []\n\n // Set up reactive re-rendering for future updates\n let isFirstRender = true\n const renderFn = () => {\n if (isFirstRender) {\n isFirstRender = false\n return // Skip first render, already done during hydration\n }\n\n // Re-render logic (same as render.ts but simplified)\n const currentProps = instance.props\n const currentResult = runWithComponent(instance, () => Component(currentProps))\n\n // For subsequent renders, use full render path\n // This will be handled by the normal reconciliation\n }\n\n instance.renderFn = renderFn\n unsafeEffect(renderFn)\n\n return instance.nodes\n } finally {\n currentHydratingInstance = previousHydratingInstance\n\n if (isProvider) {\n popContext(contextId, prevContextValue)\n }\n }\n}\n","import { effect } from '../../core/lifecycle'\nimport { hook } from '../../core/hook'\nimport { render } from '../render'\nimport type { PortalProps } from './types'\n\n/**\n * Portal component that renders children into a different DOM node\n *\n * @example\n * ```tsx\n * function Modal({ isOpen, onClose, children }) {\n * if (!isOpen) return null\n *\n * return (\n * <Portal target={document.body}>\n * <div class=\"modal-backdrop\" onClick={onClose}>\n * <div class=\"modal-content\" onClick={e => e.stopPropagation()}>\n * {children}\n * </div>\n * </div>\n * </Portal>\n * )\n * }\n * ```\n */\nexport function Portal(props: PortalProps): null {\n const { target, children } = props\n\n // Store rendered container for cleanup\n const portalState = hook(() => ({\n container: null as HTMLElement | null,\n mounted: false\n }))\n\n effect(() => {\n // Resolve target container\n let container: HTMLElement | null = null\n\n if (typeof target === 'string') {\n container = document.querySelector(target)\n } else if (target instanceof HTMLElement) {\n container = target\n }\n\n if (!container) {\n console.warn('[Flexium Portal] Target container not found:', target)\n return\n }\n\n // Create a wrapper div to contain portal content\n const portalWrapper = document.createElement('div')\n portalWrapper.setAttribute('data-flexium-portal', 'true')\n container.appendChild(portalWrapper)\n\n portalState.container = portalWrapper\n portalState.mounted = true\n\n // Render children into the portal wrapper\n render(children, portalWrapper)\n\n // Cleanup function\n return () => {\n if (portalWrapper.parentNode) {\n portalWrapper.parentNode.removeChild(portalWrapper)\n }\n portalState.container = null\n portalState.mounted = false\n }\n }, [target, children])\n\n // Portal renders nothing in its original location\n return null\n}\n","import { createContext, context } from '../../core/context'\nimport type { SuspenseContextValue } from './types'\n\nconst defaultValue: SuspenseContextValue = {\n register: () => {},\n hasBoundary: false\n}\n\nexport const SuspenseCtx = createContext<SuspenseContextValue>(defaultValue)\n\nexport function suspenseContext(): SuspenseContextValue {\n return context(SuspenseCtx)\n}\n","import { state } from '../../core/state'\nimport { hook } from '../../core/hook'\nimport { SuspenseCtx } from './suspenseContext'\nimport type { SuspenseProps, SuspenseContextValue } from './types'\nimport type { FNodeChild } from '../types'\n\n/**\n * Suspense component that shows fallback while children are loading\n *\n * @example\n * ```tsx\n * const Dashboard = lazy(() => import('./Dashboard'))\n *\n * function App() {\n * return (\n * <Suspense fallback={<div>Loading...</div>}>\n * <Dashboard />\n * </Suspense>\n * )\n * }\n * ```\n */\nexport function Suspense(props: SuspenseProps): FNodeChild {\n const { fallback, children } = props\n\n // Track pending promises using hook for mutable Set\n const pendingSet = hook(() => new Set<Promise<any>>())\n const [pendingCount, setPendingCount] = state(0)\n const [showFallback, setShowFallback] = state(false)\n\n // Register function for lazy components\n const register = (promise: Promise<any>) => {\n if (!pendingSet.has(promise)) {\n // Add to pending set\n pendingSet.add(promise)\n setPendingCount(c => c + 1)\n setShowFallback(true)\n\n // Wait for resolution\n promise.finally(() => {\n pendingSet.delete(promise)\n setPendingCount(c => {\n const newCount = c - 1\n if (newCount === 0) {\n setShowFallback(false)\n }\n return newCount\n })\n })\n }\n }\n\n const contextValue: SuspenseContextValue = {\n register,\n hasBoundary: true\n }\n\n // Render fallback or children based on pending state\n const content = showFallback ? fallback : children\n\n // Wrap content with Suspense context provider\n return {\n type: SuspenseCtx.Provider,\n props: { value: contextValue },\n children: [content],\n key: undefined\n } as any\n}\n","import { state } from '../../core/state'\nimport { hook } from '../../core/hook'\nimport type { FNodeChild } from '../types'\nimport type { ErrorInfo, ErrorBoundaryProps } from './types'\n\n// Component name stack for error messages\nlet componentNameStack: string[] = []\n\nexport function pushComponentName(name: string): void {\n componentNameStack.push(name)\n}\n\nexport function popComponentName(): void {\n componentNameStack.pop()\n}\n\nexport function getComponentStack(): string {\n return componentNameStack\n .map(name => ` at ${name}`)\n .reverse()\n .join('\\n')\n}\n\n// Stack of error boundaries for nested error propagation\ninterface ErrorBoundaryInstance {\n handleError: (error: Error, phase: 'render' | 'effect' | 'event') => void\n}\n\nlet errorBoundaryStack: ErrorBoundaryInstance[] = []\n\nexport function pushErrorBoundary(instance: ErrorBoundaryInstance): void {\n errorBoundaryStack.push(instance)\n}\n\nexport function popErrorBoundary(): void {\n errorBoundaryStack.pop()\n}\n\nexport function getNearestErrorBoundary(): ErrorBoundaryInstance | null {\n return errorBoundaryStack[errorBoundaryStack.length - 1] || null\n}\n\n/**\n * ErrorBoundary component that catches errors in its children and displays fallback UI\n *\n * @example\n * ```tsx\n * <ErrorBoundary\n * fallback={(error, info) => <div>Error: {error.message}</div>}\n * onError={(error, info) => console.error(error)}\n * >\n * <App />\n * </ErrorBoundary>\n * ```\n */\nexport function ErrorBoundary(props: ErrorBoundaryProps): FNodeChild {\n const { fallback, onError, children, resetKey } = props\n\n // Error state\n const [errorState, setErrorState] = state<{\n error: Error | null\n info: ErrorInfo | null\n }>({ error: null, info: null })\n\n // Track reset key changes to clear error\n const prevResetKeyRef = hook(() => ({ current: resetKey }))\n\n if (resetKey !== prevResetKeyRef.current) {\n prevResetKeyRef.current = resetKey\n if (errorState.error !== null) {\n setErrorState({ error: null, info: null })\n }\n }\n\n // Error boundary instance\n const boundaryInstance: ErrorBoundaryInstance = {\n handleError: (error: Error, phase: 'render' | 'effect' | 'event') => {\n const info: ErrorInfo = {\n componentStack: getComponentStack(),\n phase\n }\n\n // Call error callback\n onError?.(error, info)\n\n // Update error state (triggers re-render with fallback)\n setErrorState({ error, info })\n }\n }\n\n // If we have an error, render fallback\n if (errorState.error) {\n if (typeof fallback === 'function') {\n return fallback(errorState.error, errorState.info!)\n }\n return fallback\n }\n\n // Push boundary onto stack for children to use\n pushErrorBoundary(boundaryInstance)\n\n try {\n // Return children - they will be rendered with this boundary active\n return children\n } finally {\n popErrorBoundary()\n }\n}\n","import { suspenseContext } from './suspenseContext'\nimport type { FNodeChild } from '../types'\nimport type { LazyComponent } from './types'\n\n/**\n * Creates a lazy-loaded component for code splitting\n *\n * @example\n * ```tsx\n * const Dashboard = lazy(() => import('./Dashboard'))\n * const Settings = lazy(() => import('./Settings'))\n *\n * function App() {\n * return (\n * <Suspense fallback={<div>Loading...</div>}>\n * <Dashboard />\n * </Suspense>\n * )\n * }\n * ```\n */\nexport function lazy<P = {}>(\n loader: () => Promise<{ default: (props: P) => FNodeChild }>\n): LazyComponent<P> {\n // Shared state across all instances\n let resolved: ((props: P) => FNodeChild) | null = null\n let promise: Promise<any> | null = null\n let error: Error | null = null\n\n // The wrapper component\n const LazyWrapper = (props: P): FNodeChild => {\n // If already resolved, render immediately\n if (resolved) {\n return resolved(props)\n }\n\n // If error occurred, throw it (will be caught by ErrorBoundary)\n if (error) {\n throw error\n }\n\n // Get suspense context\n const suspense = suspenseContext()\n\n // Start loading if not already\n if (!promise) {\n promise = loader()\n .then(module => {\n resolved = module.default\n })\n .catch(err => {\n error = err instanceof Error ? err : new Error(String(err))\n })\n }\n\n // Register with suspense boundary if available\n if (suspense.hasBoundary) {\n suspense.register(promise)\n }\n\n // Return null - Suspense will show fallback\n return null\n }\n\n // Mark as lazy component\n ;(LazyWrapper as LazyComponent<P>)._lazy = true\n ;(LazyWrapper as LazyComponent<P>)._loader = loader\n\n return LazyWrapper as LazyComponent<P>\n}\n"]}
1
+ {"version":3,"sources":["../src/dom/f.ts","../src/dom/hydrate.ts","../src/dom/components/Portal.tsx","../src/dom/components/suspenseContext.ts","../src/dom/components/Suspense.tsx","../src/dom/components/ErrorBoundary.tsx","../src/dom/components/lazy.ts"],"names":["f","type","props","children","hydrationCursor","hydratedInstanceRegistry","currentHydratingInstance","hydrate","app","container","options","state","onHydrated","onMismatch","fnode","isFNode","hydrateNode","error","render","value","parent","skipEmptyTextNodes","hydrateTextNode","nodes","child","result","hydrateComponent","hydrateElement","text","current","tag","key","eventName","savedCursor","Component","contextId","isProvider","prevContextValue","pushContext","parentRegistry","hasExplicitKey","instanceCount","componentName","_","k","instance","previousHydratingInstance","runWithComponent","isFirstRender","renderFn","currentProps","unsafeEffect","popContext","Portal","target","portalState","hook","effect","portalWrapper","defaultValue","SuspenseCtx","createContext","suspenseContext","context","Suspense","fallback","pendingSet","setPendingCount","showFallback","setShowFallback","contextValue","promise","c","newCount","content","ErrorBoundary","onError","resetKey","errorState","setErrorState","prevResetKeyRef","lazy","loader","resolved","LazyWrapper","suspense","module","err"],"mappings":"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","file":"dom.js","sourcesContent":["import type { FNode } from './types'\n\n/**\n * f() - Create FNodes without JSX\n */\nexport function f(\n type: string | Function,\n props?: any,\n ...children: any[]\n): FNode {\n return {\n type,\n props: props || {},\n children,\n key: props?.key\n }\n}\n","import type { FNode, FNodeChild } from './types'\nimport type { SerializedState } from '../server/types'\nimport { runWithComponent, type ComponentInstance } from '../core/hook'\nimport { pushContext, popContext } from '../core/context'\nimport { unsafeEffect } from '../core/lifecycle'\n\n// Hydration state\nlet isHydrating = false\nlet hydrationCursor: Node | null = null\nlet hydrationState: SerializedState | null = null\n\nexport interface HydrateOptions {\n /**\n * Serialized state from server\n * Typically embedded in HTML as JSON script tag\n */\n state?: SerializedState\n\n /**\n * Called when hydration completes successfully\n */\n onHydrated?: () => void\n\n /**\n * Called when hydration fails (falls back to full render)\n */\n onMismatch?: (error: Error) => void\n}\n\n// Extended ComponentInstance for DOM tracking (same as render.ts)\ninterface DOMComponentInstance extends ComponentInstance {\n nodes: Node[]\n parent: HTMLElement\n fnode: any\n props: any\n key?: any\n renderFn?: () => void\n children: Set<DOMComponentInstance>\n parentInstance?: DOMComponentInstance\n}\n\n// Registry for hydrated components\nconst hydratedInstanceRegistry = new WeakMap<HTMLElement, Map<any, DOMComponentInstance>>()\nlet currentHydratingInstance: DOMComponentInstance | null = null\n\nexport function getIsHydrating(): boolean {\n return isHydrating\n}\n\nexport function getHydrationState(): SerializedState | null {\n return hydrationState\n}\n\n/**\n * Hydrate server-rendered HTML with client-side interactivity\n */\nexport function hydrate(\n app: FNodeChild | (() => FNodeChild),\n container: HTMLElement,\n options: HydrateOptions = {}\n): void {\n const { state, onHydrated, onMismatch } = options\n\n // Store state for rehydration\n hydrationState = state || null\n\n // Initialize hydration mode\n isHydrating = true\n hydrationCursor = container.firstChild\n\n try {\n // Normalize input\n let fnode: FNodeChild\n if (typeof app === 'function' && !isFNode(app)) {\n fnode = { type: app, props: {}, children: [], key: undefined }\n } else {\n fnode = app\n }\n\n // Hydrate the tree\n hydrateNode(fnode, container)\n\n onHydrated?.()\n } catch (error) {\n // Hydration mismatch - fall back to full render\n console.warn('[Flexium] Hydration mismatch, falling back to full render:', error)\n onMismatch?.(error as Error)\n\n // Clear and re-render\n container.innerHTML = ''\n // Import dynamically to avoid circular deps\n import('./render').then(({ render }) => {\n render(app, container)\n })\n } finally {\n isHydrating = false\n hydrationCursor = null\n hydrationState = null\n }\n}\n\nfunction isFNode(value: any): value is FNode {\n return value && typeof value === 'object' && 'type' in value && 'props' in value\n}\n\nfunction hydrateNode(fnode: FNodeChild, parent: HTMLElement): Node | Node[] | null {\n // Null/undefined/boolean -> skip empty text nodes\n if (fnode === null || fnode === undefined || typeof fnode === 'boolean') {\n // Server might have rendered an empty text node\n skipEmptyTextNodes()\n return null\n }\n\n // String/number -> expect text node\n if (typeof fnode === 'string' || typeof fnode === 'number') {\n return hydrateTextNode(String(fnode))\n }\n\n // Array -> hydrate each child\n if (Array.isArray(fnode)) {\n const nodes: Node[] = []\n for (const child of fnode) {\n const result = hydrateNode(child, parent)\n if (result) {\n if (Array.isArray(result)) {\n nodes.push(...result)\n } else {\n nodes.push(result)\n }\n }\n }\n return nodes\n }\n\n // Function (standalone) -> wrap in FNode and hydrate\n if (typeof fnode === 'function') {\n const wrappedFnode: FNode = { type: fnode, props: {}, children: [], key: undefined }\n return hydrateComponent(wrappedFnode, parent)\n }\n\n // Object (FNode)\n if (typeof fnode === 'object' && isFNode(fnode)) {\n if (typeof fnode.type === 'string') {\n return hydrateElement(fnode)\n }\n\n if (typeof fnode.type === 'function') {\n return hydrateComponent(fnode, parent)\n }\n }\n\n return null\n}\n\nfunction skipEmptyTextNodes(): void {\n while (\n hydrationCursor &&\n hydrationCursor.nodeType === Node.TEXT_NODE &&\n (!hydrationCursor.textContent || hydrationCursor.textContent.trim() === '')\n ) {\n hydrationCursor = hydrationCursor.nextSibling\n }\n}\n\nfunction hydrateTextNode(text: string): Node | null {\n skipEmptyTextNodes()\n\n const current = hydrationCursor\n\n if (!current) {\n // No node to hydrate - this is okay for conditional rendering\n return null\n }\n\n if (current.nodeType !== Node.TEXT_NODE) {\n // Try to find a text node nearby (whitespace handling)\n if (text.trim() === '') {\n return null\n }\n throw new Error(`Hydration mismatch: expected text node \"${text}\", got ${current.nodeName}`)\n }\n\n // Update cursor\n hydrationCursor = current.nextSibling\n\n return current\n}\n\nfunction hydrateElement(fnode: FNode): Node {\n skipEmptyTextNodes()\n\n const current = hydrationCursor as Element\n const tag = fnode.type as string\n\n // Validate element type\n if (!current || current.nodeType !== Node.ELEMENT_NODE) {\n throw new Error(`Hydration mismatch: expected element <${tag}>, got ${current?.nodeName || 'nothing'}`)\n }\n\n if (current.tagName.toLowerCase() !== tag.toLowerCase()) {\n throw new Error(`Hydration mismatch: expected <${tag}>, got <${current.tagName.toLowerCase()}>`)\n }\n\n // Attach event handlers and refs (don't modify DOM structure)\n if (fnode.props) {\n for (const [key, value] of Object.entries(fnode.props)) {\n if (key === 'ref') {\n if (typeof value === 'function') {\n value(current)\n } else if (value && typeof value === 'object' && 'current' in value) {\n value.current = current\n }\n } else if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.slice(2).toLowerCase()\n current.addEventListener(eventName, value as EventListener)\n\n // Store for reconciliation\n if (!(current as any).__eventHandlers) {\n (current as any).__eventHandlers = {}\n }\n (current as any).__eventHandlers[eventName] = value\n }\n }\n }\n\n // Move cursor past this element\n hydrationCursor = current.nextSibling\n\n // Hydrate children\n if (fnode.children && fnode.children.length > 0) {\n const savedCursor = hydrationCursor\n\n hydrationCursor = current.firstChild\n\n for (const child of fnode.children) {\n hydrateNode(child, current as HTMLElement)\n }\n\n hydrationCursor = savedCursor\n }\n\n return current\n}\n\nfunction hydrateComponent(fnode: FNode, parent: HTMLElement): Node | Node[] | null {\n const Component = fnode.type as Function\n\n // Merge props\n const props = { ...fnode.props }\n if (fnode.children && fnode.children.length > 0) {\n props.children = fnode.children.length === 1\n ? fnode.children[0]\n : fnode.children\n }\n\n // Handle context providers\n const contextId = (Component as any)._contextId\n const isProvider = contextId !== undefined\n let prevContextValue: any\n\n if (isProvider) {\n prevContextValue = pushContext(contextId, props.value)\n }\n\n // Generate key (same logic as render.ts)\n if (!hydratedInstanceRegistry.has(parent)) {\n hydratedInstanceRegistry.set(parent, new Map())\n }\n const parentRegistry = hydratedInstanceRegistry.get(parent)!\n\n const hasExplicitKey = fnode.key !== undefined\n let key: any\n if (hasExplicitKey) {\n key = fnode.key\n } else {\n let instanceCount = 0\n const componentName = (Component as any).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 // Create component instance\n const instance: DOMComponentInstance = {\n hooks: [],\n hookIndex: 0,\n nodes: [],\n parent,\n fnode,\n props,\n key,\n children: new Set(),\n parentInstance: currentHydratingInstance || undefined\n }\n\n if (currentHydratingInstance) {\n currentHydratingInstance.children.add(instance)\n }\n\n parentRegistry.set(key, instance)\n\n const previousHydratingInstance = currentHydratingInstance\n currentHydratingInstance = instance\n\n try {\n // First render during hydration - just match DOM\n const result = runWithComponent(instance, () => Component(props))\n const nodes = hydrateNode(result, parent)\n instance.nodes = nodes ? (Array.isArray(nodes) ? nodes : [nodes]) : []\n\n // Set up reactive re-rendering for future updates\n let isFirstRender = true\n const renderFn = () => {\n if (isFirstRender) {\n isFirstRender = false\n return // Skip first render, already done during hydration\n }\n\n // Re-render logic (same as render.ts but simplified)\n const currentProps = instance.props\n runWithComponent(instance, () => Component(currentProps))\n\n // For subsequent renders, use full render path\n // This will be handled by the normal reconciliation\n }\n\n instance.renderFn = renderFn\n unsafeEffect(renderFn)\n\n return instance.nodes\n } finally {\n currentHydratingInstance = previousHydratingInstance\n\n if (isProvider) {\n popContext(contextId, prevContextValue)\n }\n }\n}\n","import { effect } from '../../core/lifecycle'\nimport { hook } from '../../core/hook'\nimport { render } from '../render'\nimport type { PortalProps } from './types'\n\n/**\n * Portal component that renders children into a different DOM node\n *\n * @example\n * ```tsx\n * function Modal({ isOpen, onClose, children }) {\n * if (!isOpen) return null\n *\n * return (\n * <Portal target={document.body}>\n * <div class=\"modal-backdrop\" onClick={onClose}>\n * <div class=\"modal-content\" onClick={e => e.stopPropagation()}>\n * {children}\n * </div>\n * </div>\n * </Portal>\n * )\n * }\n * ```\n */\nexport function Portal(props: PortalProps): null {\n const { target, children } = props\n\n // Store rendered container for cleanup\n const portalState = hook(() => ({\n container: null as HTMLElement | null,\n mounted: false\n }))\n\n effect(() => {\n // Resolve target container\n let container: HTMLElement | null = null\n\n if (typeof target === 'string') {\n container = document.querySelector(target)\n } else if (target instanceof HTMLElement) {\n container = target\n }\n\n if (!container) {\n console.warn('[Flexium Portal] Target container not found:', target)\n return\n }\n\n // Create a wrapper div to contain portal content\n const portalWrapper = document.createElement('div')\n portalWrapper.setAttribute('data-flexium-portal', 'true')\n container.appendChild(portalWrapper)\n\n portalState.container = portalWrapper\n portalState.mounted = true\n\n // Render children into the portal wrapper\n render(children, portalWrapper)\n\n // Cleanup function\n return () => {\n if (portalWrapper.parentNode) {\n portalWrapper.parentNode.removeChild(portalWrapper)\n }\n portalState.container = null\n portalState.mounted = false\n }\n }, [target, children])\n\n // Portal renders nothing in its original location\n return null\n}\n","import { createContext, context } from '../../core/context'\nimport type { SuspenseContextValue } from './types'\n\nconst defaultValue: SuspenseContextValue = {\n register: () => {},\n hasBoundary: false\n}\n\nexport const SuspenseCtx = createContext<SuspenseContextValue>(defaultValue)\n\nexport function suspenseContext(): SuspenseContextValue {\n return context(SuspenseCtx)\n}\n","import { state } from '../../core/state'\nimport { hook } from '../../core/hook'\nimport { SuspenseCtx } from './suspenseContext'\nimport type { SuspenseProps, SuspenseContextValue } from './types'\nimport type { FNodeChild } from '../types'\n\n/**\n * Suspense component that shows fallback while children are loading\n *\n * @example\n * ```tsx\n * const Dashboard = lazy(() => import('./Dashboard'))\n *\n * function App() {\n * return (\n * <Suspense fallback={<div>Loading...</div>}>\n * <Dashboard />\n * </Suspense>\n * )\n * }\n * ```\n */\nexport function Suspense(props: SuspenseProps): FNodeChild {\n const { fallback, children } = props\n\n // Track pending promises using hook for mutable Set\n const pendingSet = hook(() => new Set<Promise<any>>())\n const [, setPendingCount] = state(0)\n const [showFallback, setShowFallback] = state(false)\n\n // Register function for lazy components\n const register = (promise: Promise<any>) => {\n if (!pendingSet.has(promise)) {\n // Add to pending set\n pendingSet.add(promise)\n setPendingCount(c => c + 1)\n setShowFallback(true)\n\n // Wait for resolution\n promise.finally(() => {\n pendingSet.delete(promise)\n setPendingCount(c => {\n const newCount = c - 1\n if (newCount === 0) {\n setShowFallback(false)\n }\n return newCount\n })\n })\n }\n }\n\n const contextValue: SuspenseContextValue = {\n register,\n hasBoundary: true\n }\n\n // Render fallback or children based on pending state\n const content = showFallback ? fallback : children\n\n // Wrap content with Suspense context provider\n return {\n type: SuspenseCtx.Provider,\n props: { value: contextValue },\n children: [content],\n key: undefined\n } as any\n}\n","import { state } from '../../core/state'\nimport { hook } from '../../core/hook'\nimport type { FNodeChild } from '../types'\nimport type { ErrorInfo, ErrorBoundaryProps } from './types'\n\n// Component name stack for error messages\nlet componentNameStack: string[] = []\n\nexport function pushComponentName(name: string): void {\n componentNameStack.push(name)\n}\n\nexport function popComponentName(): void {\n componentNameStack.pop()\n}\n\nexport function getComponentStack(): string {\n return componentNameStack\n .map(name => ` at ${name}`)\n .reverse()\n .join('\\n')\n}\n\n// Stack of error boundaries for nested error propagation\ninterface ErrorBoundaryInstance {\n handleError: (error: Error, phase: 'render' | 'effect' | 'event') => void\n}\n\nlet errorBoundaryStack: ErrorBoundaryInstance[] = []\n\nexport function pushErrorBoundary(instance: ErrorBoundaryInstance): void {\n errorBoundaryStack.push(instance)\n}\n\nexport function popErrorBoundary(): void {\n errorBoundaryStack.pop()\n}\n\nexport function getNearestErrorBoundary(): ErrorBoundaryInstance | null {\n return errorBoundaryStack[errorBoundaryStack.length - 1] || null\n}\n\n/**\n * ErrorBoundary component that catches errors in its children and displays fallback UI\n *\n * @example\n * ```tsx\n * <ErrorBoundary\n * fallback={(error, info) => <div>Error: {error.message}</div>}\n * onError={(error, info) => console.error(error)}\n * >\n * <App />\n * </ErrorBoundary>\n * ```\n */\nexport function ErrorBoundary(props: ErrorBoundaryProps): FNodeChild {\n const { fallback, onError, children, resetKey } = props\n\n // Error state\n const [errorState, setErrorState] = state<{\n error: Error | null\n info: ErrorInfo | null\n }>({ error: null, info: null })\n\n // Track reset key changes to clear error\n const prevResetKeyRef = hook(() => ({ current: resetKey }))\n\n if (resetKey !== prevResetKeyRef.current) {\n prevResetKeyRef.current = resetKey\n if (errorState.error !== null) {\n setErrorState({ error: null, info: null })\n }\n }\n\n // Error boundary instance\n const boundaryInstance: ErrorBoundaryInstance = {\n handleError: (error: Error, phase: 'render' | 'effect' | 'event') => {\n const info: ErrorInfo = {\n componentStack: getComponentStack(),\n phase\n }\n\n // Call error callback\n onError?.(error, info)\n\n // Update error state (triggers re-render with fallback)\n setErrorState({ error, info })\n }\n }\n\n // If we have an error, render fallback\n if (errorState.error) {\n if (typeof fallback === 'function') {\n return fallback(errorState.error, errorState.info!)\n }\n return fallback\n }\n\n // Push boundary onto stack for children to use\n pushErrorBoundary(boundaryInstance)\n\n try {\n // Return children - they will be rendered with this boundary active\n return children\n } finally {\n popErrorBoundary()\n }\n}\n","import { suspenseContext } from './suspenseContext'\nimport type { FNodeChild } from '../types'\nimport type { LazyComponent } from './types'\n\n/**\n * Creates a lazy-loaded component for code splitting\n *\n * @example\n * ```tsx\n * const Dashboard = lazy(() => import('./Dashboard'))\n * const Settings = lazy(() => import('./Settings'))\n *\n * function App() {\n * return (\n * <Suspense fallback={<div>Loading...</div>}>\n * <Dashboard />\n * </Suspense>\n * )\n * }\n * ```\n */\nexport function lazy<P = {}>(\n loader: () => Promise<{ default: (props: P) => FNodeChild }>\n): LazyComponent<P> {\n // Shared state across all instances\n let resolved: ((props: P) => FNodeChild) | null = null\n let promise: Promise<any> | null = null\n let error: Error | null = null\n\n // The wrapper component\n const LazyWrapper = (props: P): FNodeChild => {\n // If already resolved, render immediately\n if (resolved) {\n return resolved(props)\n }\n\n // If error occurred, throw it (will be caught by ErrorBoundary)\n if (error) {\n throw error\n }\n\n // Get suspense context\n const suspense = suspenseContext()\n\n // Start loading if not already\n if (!promise) {\n promise = loader()\n .then(module => {\n resolved = module.default\n })\n .catch(err => {\n error = err instanceof Error ? err : new Error(String(err))\n })\n }\n\n // Register with suspense boundary if available\n if (suspense.hasBoundary) {\n suspense.register(promise)\n }\n\n // Return null - Suspense will show fallback\n return null\n }\n\n // Mark as lazy component\n ;(LazyWrapper as LazyComponent<P>)._lazy = true\n ;(LazyWrapper as LazyComponent<P>)._loader = loader\n\n return LazyWrapper as LazyComponent<P>\n}\n"]}
package/dist/dom.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import {b as b$3}from'./chunk-E75BJDOQ.mjs';export{a as reconcile,b as render}from'./chunk-E75BJDOQ.mjs';import {a,c,d,b as b$4}from'./chunk-3DKZ2J4D.mjs';import {a as a$2}from'./chunk-WGKD63GN.mjs';import'./chunk-JY6CE6RN.mjs';import {b as b$1,e}from'./chunk-IWFEXW4F.mjs';import {a as a$1,b as b$2}from'./chunk-5PNH2ARD.mjs';function j(e,t,...r){return {type:e,props:t||{},children:r,key:t?.key}}var l=null,F=new WeakMap,m=null;function K(e,t,r={}){let{state:s,onHydrated:o,onMismatch:n}=r;l=t.firstChild;try{let i;typeof e=="function"&&!z(e)?i={type:e,props:{},children:[],key:void 0}:i=e,E(i,t),o?.();}catch(i){console.warn("[Flexium] Hydration mismatch, falling back to full render:",i),n?.(i),t.innerHTML="",import('./render-UIWHIMS2.mjs').then(({render:a})=>{a(e,t);});}finally{l=null;}}function z(e){return e&&typeof e=="object"&&"type"in e&&"props"in e}function E(e,t){if(e==null||typeof e=="boolean")return v(),null;if(typeof e=="string"||typeof e=="number")return X(String(e));if(Array.isArray(e)){let r=[];for(let s of e){let o=E(s,t);o&&(Array.isArray(o)?r.push(...o):r.push(o));}return r}if(typeof e=="function")return b({type:e,props:{},children:[],key:void 0},t);if(typeof e=="object"&&z(e)){if(typeof e.type=="string")return q(e);if(typeof e.type=="function")return b(e,t)}return null}function v(){for(;l&&l.nodeType===Node.TEXT_NODE&&(!l.textContent||l.textContent.trim()==="");)l=l.nextSibling;}function X(e){v();let t=l;if(!t)return null;if(t.nodeType!==Node.TEXT_NODE){if(e.trim()==="")return null;throw new Error(`Hydration mismatch: expected text node "${e}", got ${t.nodeName}`)}return l=t.nextSibling,t}function q(e,t){v();let r=l,s=e.type;if(!r||r.nodeType!==Node.ELEMENT_NODE)throw new Error(`Hydration mismatch: expected element <${s}>, got ${r?.nodeName||"nothing"}`);if(r.tagName.toLowerCase()!==s.toLowerCase())throw new Error(`Hydration mismatch: expected <${s}>, got <${r.tagName.toLowerCase()}>`);if(e.props){for(let[o,n]of Object.entries(e.props))if(o==="ref")typeof n=="function"?n(r):n&&typeof n=="object"&&"current"in n&&(n.current=r);else if(o.startsWith("on")&&typeof n=="function"){let i=o.slice(2).toLowerCase();r.addEventListener(i,n),r.__eventHandlers||(r.__eventHandlers={}),r.__eventHandlers[i]=n;}}if(l=r.nextSibling,e.children&&e.children.length>0){let o=l;l=r.firstChild;for(let n of e.children)E(n,r);l=o;}return r}function b(e,t){let r=e.type,s={...e.props};e.children&&e.children.length>0&&(s.children=e.children.length===1?e.children[0]:e.children);let o=r._contextId,n=o!==void 0,i;n&&(i=c(o,s.value)),F.has(t)||F.set(t,new Map);let a=F.get(t),x=e.key!==void 0,d$1;if(x)d$1=e.key;else {let y=0,u=r.name||"anonymous";a.forEach((g,h)=>{typeof h=="string"&&h.startsWith(`__auto_${u}_`)&&y++;}),d$1=`__auto_${u}_${y}`;}let p={hooks:[],hookIndex:0,nodes:[],parent:t,fnode:e,props:s,key:d$1,children:new Set,parentInstance:m||void 0};m&&m.children.add(p),a.set(d$1,p);let c$1=m;m=p;try{let y=a$1(p,()=>r(s)),u=E(y,t);p.nodes=u?Array.isArray(u)?u:[u]:[];let g=!0,h=()=>{if(g){g=!1;return}let R=p.props,Z=a$1(p,()=>r(R));};return p.renderFn=h,b$1(h),p.nodes}finally{m=c$1,n&&d(o,i);}}function O(e$1){let{target:t,children:r}=e$1,s=b$2(()=>({container:null,mounted:false}));return e(()=>{let o=null;if(typeof t=="string"?o=document.querySelector(t):t instanceof HTMLElement&&(o=t),!o){console.warn("[Flexium Portal] Target container not found:",t);return}let n=document.createElement("div");return n.setAttribute("data-flexium-portal","true"),o.appendChild(n),s.container=n,s.mounted=true,b$3(r,n),()=>{n.parentNode&&n.parentNode.removeChild(n),s.container=null,s.mounted=false;}},[t,r]),null}var G={register:()=>{},hasBoundary:false},H=a(G);function N(){return b$4(H)}function V(e){let{fallback:t,children:r}=e,s=b$2(()=>new Set),[o,n]=a$2(0),[i,a]=a$2(false),d={register:c=>{s.has(c)||(s.add(c),n(y=>y+1),a(true),c.finally(()=>{s.delete(c),n(y=>{let u=y-1;return u===0&&a(false),u});}));},hasBoundary:true},p=i?t:r;return {type:H.Provider,props:{value:d},children:[p],key:void 0}}function D(e){let{fallback:t,onError:r,children:s,resetKey:o}=e,[n,i]=a$2({error:null,info:null}),a=b$2(()=>({current:o}));o!==a.current&&(a.current=o,n.error!==null&&i({error:null,info:null}));if(n.error)return typeof t=="function"?t(n.error,n.info):t;try{return s}finally{}}function A(e){let t=null,r=null,s=null,o=n=>{if(t)return t(n);if(s)throw s;let i=N();return r||(r=e().then(a=>{t=a.default;}).catch(a=>{s=a instanceof Error?a:new Error(String(a));})),i.hasBoundary&&i.register(r),null};return o._lazy=true,o._loader=e,o}export{D as ErrorBoundary,O as Portal,V as Suspense,j as f,K as hydrate,A as lazy,N as suspenseContext};//# sourceMappingURL=dom.mjs.map
1
+ import {b as b$3}from'./chunk-E75BJDOQ.mjs';export{a as reconcile,b as render}from'./chunk-E75BJDOQ.mjs';import {a,c,d,b as b$4}from'./chunk-3DKZ2J4D.mjs';import {a as a$2}from'./chunk-WGKD63GN.mjs';import'./chunk-JY6CE6RN.mjs';import {b as b$1,e}from'./chunk-IWFEXW4F.mjs';import {a as a$1,b as b$2}from'./chunk-5PNH2ARD.mjs';function R(e,t,...o){return {type:e,props:t||{},children:o,key:t?.key}}var l=null,F=new WeakMap,m=null;function K(e,t,o={}){let{state:n,onHydrated:r,onMismatch:s}=o;l=t.firstChild;try{let i;typeof e=="function"&&!z(e)?i={type:e,props:{},children:[],key:void 0}:i=e,E(i,t),r?.();}catch(i){console.warn("[Flexium] Hydration mismatch, falling back to full render:",i),s?.(i),t.innerHTML="",import('./render-UIWHIMS2.mjs').then(({render:p})=>{p(e,t);});}finally{l=null;}}function z(e){return e&&typeof e=="object"&&"type"in e&&"props"in e}function E(e,t){if(e==null||typeof e=="boolean")return v(),null;if(typeof e=="string"||typeof e=="number")return X(String(e));if(Array.isArray(e)){let o=[];for(let n of e){let r=E(n,t);r&&(Array.isArray(r)?o.push(...r):o.push(r));}return o}if(typeof e=="function")return b({type:e,props:{},children:[],key:void 0},t);if(typeof e=="object"&&z(e)){if(typeof e.type=="string")return q(e);if(typeof e.type=="function")return b(e,t)}return null}function v(){for(;l&&l.nodeType===Node.TEXT_NODE&&(!l.textContent||l.textContent.trim()==="");)l=l.nextSibling;}function X(e){v();let t=l;if(!t)return null;if(t.nodeType!==Node.TEXT_NODE){if(e.trim()==="")return null;throw new Error(`Hydration mismatch: expected text node "${e}", got ${t.nodeName}`)}return l=t.nextSibling,t}function q(e){v();let t=l,o=e.type;if(!t||t.nodeType!==Node.ELEMENT_NODE)throw new Error(`Hydration mismatch: expected element <${o}>, got ${t?.nodeName||"nothing"}`);if(t.tagName.toLowerCase()!==o.toLowerCase())throw new Error(`Hydration mismatch: expected <${o}>, got <${t.tagName.toLowerCase()}>`);if(e.props){for(let[n,r]of Object.entries(e.props))if(n==="ref")typeof r=="function"?r(t):r&&typeof r=="object"&&"current"in r&&(r.current=t);else if(n.startsWith("on")&&typeof r=="function"){let s=n.slice(2).toLowerCase();t.addEventListener(s,r),t.__eventHandlers||(t.__eventHandlers={}),t.__eventHandlers[s]=r;}}if(l=t.nextSibling,e.children&&e.children.length>0){let n=l;l=t.firstChild;for(let r of e.children)E(r,t);l=n;}return t}function b(e,t){let o=e.type,n={...e.props};e.children&&e.children.length>0&&(n.children=e.children.length===1?e.children[0]:e.children);let r=o._contextId,s=r!==void 0,i;s&&(i=c(r,n.value)),F.has(t)||F.set(t,new Map);let p=F.get(t),h=e.key!==void 0,u;if(h)u=e.key;else {let c=0,y=o.name||"anonymous";p.forEach((g,C)=>{typeof C=="string"&&C.startsWith(`__auto_${y}_`)&&c++;}),u=`__auto_${y}_${c}`;}let a={hooks:[],hookIndex:0,nodes:[],parent:t,fnode:e,props:n,key:u,children:new Set,parentInstance:m||void 0};m&&m.children.add(a),p.set(u,a);let d$1=m;m=a;try{let c=a$1(a,()=>o(n)),y=E(c,t);a.nodes=y?Array.isArray(y)?y:[y]:[];let g=!0,C=()=>{if(g){g=!1;return}let W=a.props;a$1(a,()=>o(W));};return a.renderFn=C,b$1(C),a.nodes}finally{m=d$1,s&&d(r,i);}}function O(e$1){let{target:t,children:o}=e$1,n=b$2(()=>({container:null,mounted:false}));return e(()=>{let r=null;if(typeof t=="string"?r=document.querySelector(t):t instanceof HTMLElement&&(r=t),!r){console.warn("[Flexium Portal] Target container not found:",t);return}let s=document.createElement("div");return s.setAttribute("data-flexium-portal","true"),r.appendChild(s),n.container=s,n.mounted=true,b$3(o,s),()=>{s.parentNode&&s.parentNode.removeChild(s),n.container=null,n.mounted=false;}},[t,o]),null}var G={register:()=>{},hasBoundary:false},I=a(G);function N(){return b$4(I)}function V(e){let{fallback:t,children:o}=e,n=b$2(()=>new Set),[,r]=a$2(0),[s,i]=a$2(false),h={register:a=>{n.has(a)||(n.add(a),r(d=>d+1),i(true),a.finally(()=>{n.delete(a),r(d=>{let c=d-1;return c===0&&i(false),c});}));},hasBoundary:true},u=s?t:o;return {type:I.Provider,props:{value:h},children:[u],key:void 0}}function D(e){let{fallback:t,onError:o,children:n,resetKey:r}=e,[s,i]=a$2({error:null,info:null}),p=b$2(()=>({current:r}));r!==p.current&&(p.current=r,s.error!==null&&i({error:null,info:null}));if(s.error)return typeof t=="function"?t(s.error,s.info):t;try{return n}finally{}}function A(e){let t=null,o=null,n=null,r=s=>{if(t)return t(s);if(n)throw n;let i=N();return o||(o=e().then(p=>{t=p.default;}).catch(p=>{n=p instanceof Error?p:new Error(String(p));})),i.hasBoundary&&i.register(o),null};return r._lazy=true,r._loader=e,r}export{D as ErrorBoundary,O as Portal,V as Suspense,R as f,K as hydrate,A as lazy,N as suspenseContext};//# sourceMappingURL=dom.mjs.map
2
2
  //# sourceMappingURL=dom.mjs.map
package/dist/dom.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dom/f.ts","../src/dom/hydrate.ts","../src/dom/components/Portal.tsx","../src/dom/components/suspenseContext.ts","../src/dom/components/Suspense.tsx","../src/dom/components/ErrorBoundary.tsx","../src/dom/components/lazy.ts"],"names":["f","type","props","children","hydrationCursor","hydratedInstanceRegistry","currentHydratingInstance","hydrate","app","container","options","state","onHydrated","onMismatch","fnode","isFNode","hydrateNode","error","render","value","parent","skipEmptyTextNodes","hydrateTextNode","nodes","child","result","hydrateComponent","hydrateElement","text","current","tag","key","eventName","savedCursor","Component","contextId","isProvider","prevContextValue","pushContext","parentRegistry","hasExplicitKey","instanceCount","componentName","_","k","instance","previousHydratingInstance","runWithComponent","isFirstRender","renderFn","currentProps","currentResult","unsafeEffect","popContext","Portal","target","portalState","hook","effect","portalWrapper","defaultValue","SuspenseCtx","createContext","suspenseContext","context","Suspense","fallback","pendingSet","pendingCount","setPendingCount","showFallback","setShowFallback","contextValue","promise","c","newCount","content","ErrorBoundary","onError","resetKey","errorState","setErrorState","prevResetKeyRef","lazy","loader","resolved","LazyWrapper","suspense","module","err"],"mappings":"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","file":"dom.mjs","sourcesContent":["import type { FNode } from './types'\n\n/**\n * f() - Create FNodes without JSX\n */\nexport function f(\n type: string | Function,\n props?: any,\n ...children: any[]\n): FNode {\n return {\n type,\n props: props || {},\n children,\n key: props?.key\n }\n}\n","import type { FNode, FNodeChild } from './types'\nimport type { SerializedState } from '../server/types'\nimport { runWithComponent, type ComponentInstance } from '../core/hook'\nimport { pushContext, popContext } from '../core/context'\nimport { unsafeEffect } from '../core/lifecycle'\n\n// Hydration state\nlet isHydrating = false\nlet hydrationCursor: Node | null = null\nlet hydrationState: SerializedState | null = null\n\nexport interface HydrateOptions {\n /**\n * Serialized state from server\n * Typically embedded in HTML as JSON script tag\n */\n state?: SerializedState\n\n /**\n * Called when hydration completes successfully\n */\n onHydrated?: () => void\n\n /**\n * Called when hydration fails (falls back to full render)\n */\n onMismatch?: (error: Error) => void\n}\n\n// Extended ComponentInstance for DOM tracking (same as render.ts)\ninterface DOMComponentInstance extends ComponentInstance {\n nodes: Node[]\n parent: HTMLElement\n fnode: any\n props: any\n key?: any\n renderFn?: () => void\n children: Set<DOMComponentInstance>\n parentInstance?: DOMComponentInstance\n}\n\n// Registry for hydrated components\nconst hydratedInstanceRegistry = new WeakMap<HTMLElement, Map<any, DOMComponentInstance>>()\nlet currentHydratingInstance: DOMComponentInstance | null = null\n\nexport function getIsHydrating(): boolean {\n return isHydrating\n}\n\nexport function getHydrationState(): SerializedState | null {\n return hydrationState\n}\n\n/**\n * Hydrate server-rendered HTML with client-side interactivity\n */\nexport function hydrate(\n app: FNodeChild | (() => FNodeChild),\n container: HTMLElement,\n options: HydrateOptions = {}\n): void {\n const { state, onHydrated, onMismatch } = options\n\n // Store state for rehydration\n hydrationState = state || null\n\n // Initialize hydration mode\n isHydrating = true\n hydrationCursor = container.firstChild\n\n try {\n // Normalize input\n let fnode: FNodeChild\n if (typeof app === 'function' && !isFNode(app)) {\n fnode = { type: app, props: {}, children: [], key: undefined }\n } else {\n fnode = app\n }\n\n // Hydrate the tree\n hydrateNode(fnode, container)\n\n onHydrated?.()\n } catch (error) {\n // Hydration mismatch - fall back to full render\n console.warn('[Flexium] Hydration mismatch, falling back to full render:', error)\n onMismatch?.(error as Error)\n\n // Clear and re-render\n container.innerHTML = ''\n // Import dynamically to avoid circular deps\n import('./render').then(({ render }) => {\n render(app, container)\n })\n } finally {\n isHydrating = false\n hydrationCursor = null\n hydrationState = null\n }\n}\n\nfunction isFNode(value: any): value is FNode {\n return value && typeof value === 'object' && 'type' in value && 'props' in value\n}\n\nfunction hydrateNode(fnode: FNodeChild, parent: HTMLElement): Node | Node[] | null {\n // Null/undefined/boolean -> skip empty text nodes\n if (fnode === null || fnode === undefined || typeof fnode === 'boolean') {\n // Server might have rendered an empty text node\n skipEmptyTextNodes()\n return null\n }\n\n // String/number -> expect text node\n if (typeof fnode === 'string' || typeof fnode === 'number') {\n return hydrateTextNode(String(fnode))\n }\n\n // Array -> hydrate each child\n if (Array.isArray(fnode)) {\n const nodes: Node[] = []\n for (const child of fnode) {\n const result = hydrateNode(child, parent)\n if (result) {\n if (Array.isArray(result)) {\n nodes.push(...result)\n } else {\n nodes.push(result)\n }\n }\n }\n return nodes\n }\n\n // Function (standalone) -> wrap in FNode and hydrate\n if (typeof fnode === 'function') {\n const wrappedFnode: FNode = { type: fnode, props: {}, children: [], key: undefined }\n return hydrateComponent(wrappedFnode, parent)\n }\n\n // Object (FNode)\n if (typeof fnode === 'object' && isFNode(fnode)) {\n if (typeof fnode.type === 'string') {\n return hydrateElement(fnode, parent)\n }\n\n if (typeof fnode.type === 'function') {\n return hydrateComponent(fnode, parent)\n }\n }\n\n return null\n}\n\nfunction skipEmptyTextNodes(): void {\n while (\n hydrationCursor &&\n hydrationCursor.nodeType === Node.TEXT_NODE &&\n (!hydrationCursor.textContent || hydrationCursor.textContent.trim() === '')\n ) {\n hydrationCursor = hydrationCursor.nextSibling\n }\n}\n\nfunction hydrateTextNode(text: string): Node | null {\n skipEmptyTextNodes()\n\n const current = hydrationCursor\n\n if (!current) {\n // No node to hydrate - this is okay for conditional rendering\n return null\n }\n\n if (current.nodeType !== Node.TEXT_NODE) {\n // Try to find a text node nearby (whitespace handling)\n if (text.trim() === '') {\n return null\n }\n throw new Error(`Hydration mismatch: expected text node \"${text}\", got ${current.nodeName}`)\n }\n\n // Update cursor\n hydrationCursor = current.nextSibling\n\n return current\n}\n\nfunction hydrateElement(fnode: FNode, parent: HTMLElement): Node {\n skipEmptyTextNodes()\n\n const current = hydrationCursor as Element\n const tag = fnode.type as string\n\n // Validate element type\n if (!current || current.nodeType !== Node.ELEMENT_NODE) {\n throw new Error(`Hydration mismatch: expected element <${tag}>, got ${current?.nodeName || 'nothing'}`)\n }\n\n if (current.tagName.toLowerCase() !== tag.toLowerCase()) {\n throw new Error(`Hydration mismatch: expected <${tag}>, got <${current.tagName.toLowerCase()}>`)\n }\n\n // Attach event handlers and refs (don't modify DOM structure)\n if (fnode.props) {\n for (const [key, value] of Object.entries(fnode.props)) {\n if (key === 'ref') {\n if (typeof value === 'function') {\n value(current)\n } else if (value && typeof value === 'object' && 'current' in value) {\n value.current = current\n }\n } else if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.slice(2).toLowerCase()\n current.addEventListener(eventName, value as EventListener)\n\n // Store for reconciliation\n if (!(current as any).__eventHandlers) {\n (current as any).__eventHandlers = {}\n }\n (current as any).__eventHandlers[eventName] = value\n }\n }\n }\n\n // Move cursor past this element\n hydrationCursor = current.nextSibling\n\n // Hydrate children\n if (fnode.children && fnode.children.length > 0) {\n const savedCursor = hydrationCursor\n\n hydrationCursor = current.firstChild\n\n for (const child of fnode.children) {\n hydrateNode(child, current as HTMLElement)\n }\n\n hydrationCursor = savedCursor\n }\n\n return current\n}\n\nfunction hydrateComponent(fnode: FNode, parent: HTMLElement): Node | Node[] | null {\n const Component = fnode.type as Function\n\n // Merge props\n const props = { ...fnode.props }\n if (fnode.children && fnode.children.length > 0) {\n props.children = fnode.children.length === 1\n ? fnode.children[0]\n : fnode.children\n }\n\n // Handle context providers\n const contextId = (Component as any)._contextId\n const isProvider = contextId !== undefined\n let prevContextValue: any\n\n if (isProvider) {\n prevContextValue = pushContext(contextId, props.value)\n }\n\n // Generate key (same logic as render.ts)\n if (!hydratedInstanceRegistry.has(parent)) {\n hydratedInstanceRegistry.set(parent, new Map())\n }\n const parentRegistry = hydratedInstanceRegistry.get(parent)!\n\n const hasExplicitKey = fnode.key !== undefined\n let key: any\n if (hasExplicitKey) {\n key = fnode.key\n } else {\n let instanceCount = 0\n const componentName = (Component as any).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 // Create component instance\n const instance: DOMComponentInstance = {\n hooks: [],\n hookIndex: 0,\n nodes: [],\n parent,\n fnode,\n props,\n key,\n children: new Set(),\n parentInstance: currentHydratingInstance || undefined\n }\n\n if (currentHydratingInstance) {\n currentHydratingInstance.children.add(instance)\n }\n\n parentRegistry.set(key, instance)\n\n const previousHydratingInstance = currentHydratingInstance\n currentHydratingInstance = instance\n\n try {\n // First render during hydration - just match DOM\n const result = runWithComponent(instance, () => Component(props))\n const nodes = hydrateNode(result, parent)\n instance.nodes = nodes ? (Array.isArray(nodes) ? nodes : [nodes]) : []\n\n // Set up reactive re-rendering for future updates\n let isFirstRender = true\n const renderFn = () => {\n if (isFirstRender) {\n isFirstRender = false\n return // Skip first render, already done during hydration\n }\n\n // Re-render logic (same as render.ts but simplified)\n const currentProps = instance.props\n const currentResult = runWithComponent(instance, () => Component(currentProps))\n\n // For subsequent renders, use full render path\n // This will be handled by the normal reconciliation\n }\n\n instance.renderFn = renderFn\n unsafeEffect(renderFn)\n\n return instance.nodes\n } finally {\n currentHydratingInstance = previousHydratingInstance\n\n if (isProvider) {\n popContext(contextId, prevContextValue)\n }\n }\n}\n","import { effect } from '../../core/lifecycle'\nimport { hook } from '../../core/hook'\nimport { render } from '../render'\nimport type { PortalProps } from './types'\n\n/**\n * Portal component that renders children into a different DOM node\n *\n * @example\n * ```tsx\n * function Modal({ isOpen, onClose, children }) {\n * if (!isOpen) return null\n *\n * return (\n * <Portal target={document.body}>\n * <div class=\"modal-backdrop\" onClick={onClose}>\n * <div class=\"modal-content\" onClick={e => e.stopPropagation()}>\n * {children}\n * </div>\n * </div>\n * </Portal>\n * )\n * }\n * ```\n */\nexport function Portal(props: PortalProps): null {\n const { target, children } = props\n\n // Store rendered container for cleanup\n const portalState = hook(() => ({\n container: null as HTMLElement | null,\n mounted: false\n }))\n\n effect(() => {\n // Resolve target container\n let container: HTMLElement | null = null\n\n if (typeof target === 'string') {\n container = document.querySelector(target)\n } else if (target instanceof HTMLElement) {\n container = target\n }\n\n if (!container) {\n console.warn('[Flexium Portal] Target container not found:', target)\n return\n }\n\n // Create a wrapper div to contain portal content\n const portalWrapper = document.createElement('div')\n portalWrapper.setAttribute('data-flexium-portal', 'true')\n container.appendChild(portalWrapper)\n\n portalState.container = portalWrapper\n portalState.mounted = true\n\n // Render children into the portal wrapper\n render(children, portalWrapper)\n\n // Cleanup function\n return () => {\n if (portalWrapper.parentNode) {\n portalWrapper.parentNode.removeChild(portalWrapper)\n }\n portalState.container = null\n portalState.mounted = false\n }\n }, [target, children])\n\n // Portal renders nothing in its original location\n return null\n}\n","import { createContext, context } from '../../core/context'\nimport type { SuspenseContextValue } from './types'\n\nconst defaultValue: SuspenseContextValue = {\n register: () => {},\n hasBoundary: false\n}\n\nexport const SuspenseCtx = createContext<SuspenseContextValue>(defaultValue)\n\nexport function suspenseContext(): SuspenseContextValue {\n return context(SuspenseCtx)\n}\n","import { state } from '../../core/state'\nimport { hook } from '../../core/hook'\nimport { SuspenseCtx } from './suspenseContext'\nimport type { SuspenseProps, SuspenseContextValue } from './types'\nimport type { FNodeChild } from '../types'\n\n/**\n * Suspense component that shows fallback while children are loading\n *\n * @example\n * ```tsx\n * const Dashboard = lazy(() => import('./Dashboard'))\n *\n * function App() {\n * return (\n * <Suspense fallback={<div>Loading...</div>}>\n * <Dashboard />\n * </Suspense>\n * )\n * }\n * ```\n */\nexport function Suspense(props: SuspenseProps): FNodeChild {\n const { fallback, children } = props\n\n // Track pending promises using hook for mutable Set\n const pendingSet = hook(() => new Set<Promise<any>>())\n const [pendingCount, setPendingCount] = state(0)\n const [showFallback, setShowFallback] = state(false)\n\n // Register function for lazy components\n const register = (promise: Promise<any>) => {\n if (!pendingSet.has(promise)) {\n // Add to pending set\n pendingSet.add(promise)\n setPendingCount(c => c + 1)\n setShowFallback(true)\n\n // Wait for resolution\n promise.finally(() => {\n pendingSet.delete(promise)\n setPendingCount(c => {\n const newCount = c - 1\n if (newCount === 0) {\n setShowFallback(false)\n }\n return newCount\n })\n })\n }\n }\n\n const contextValue: SuspenseContextValue = {\n register,\n hasBoundary: true\n }\n\n // Render fallback or children based on pending state\n const content = showFallback ? fallback : children\n\n // Wrap content with Suspense context provider\n return {\n type: SuspenseCtx.Provider,\n props: { value: contextValue },\n children: [content],\n key: undefined\n } as any\n}\n","import { state } from '../../core/state'\nimport { hook } from '../../core/hook'\nimport type { FNodeChild } from '../types'\nimport type { ErrorInfo, ErrorBoundaryProps } from './types'\n\n// Component name stack for error messages\nlet componentNameStack: string[] = []\n\nexport function pushComponentName(name: string): void {\n componentNameStack.push(name)\n}\n\nexport function popComponentName(): void {\n componentNameStack.pop()\n}\n\nexport function getComponentStack(): string {\n return componentNameStack\n .map(name => ` at ${name}`)\n .reverse()\n .join('\\n')\n}\n\n// Stack of error boundaries for nested error propagation\ninterface ErrorBoundaryInstance {\n handleError: (error: Error, phase: 'render' | 'effect' | 'event') => void\n}\n\nlet errorBoundaryStack: ErrorBoundaryInstance[] = []\n\nexport function pushErrorBoundary(instance: ErrorBoundaryInstance): void {\n errorBoundaryStack.push(instance)\n}\n\nexport function popErrorBoundary(): void {\n errorBoundaryStack.pop()\n}\n\nexport function getNearestErrorBoundary(): ErrorBoundaryInstance | null {\n return errorBoundaryStack[errorBoundaryStack.length - 1] || null\n}\n\n/**\n * ErrorBoundary component that catches errors in its children and displays fallback UI\n *\n * @example\n * ```tsx\n * <ErrorBoundary\n * fallback={(error, info) => <div>Error: {error.message}</div>}\n * onError={(error, info) => console.error(error)}\n * >\n * <App />\n * </ErrorBoundary>\n * ```\n */\nexport function ErrorBoundary(props: ErrorBoundaryProps): FNodeChild {\n const { fallback, onError, children, resetKey } = props\n\n // Error state\n const [errorState, setErrorState] = state<{\n error: Error | null\n info: ErrorInfo | null\n }>({ error: null, info: null })\n\n // Track reset key changes to clear error\n const prevResetKeyRef = hook(() => ({ current: resetKey }))\n\n if (resetKey !== prevResetKeyRef.current) {\n prevResetKeyRef.current = resetKey\n if (errorState.error !== null) {\n setErrorState({ error: null, info: null })\n }\n }\n\n // Error boundary instance\n const boundaryInstance: ErrorBoundaryInstance = {\n handleError: (error: Error, phase: 'render' | 'effect' | 'event') => {\n const info: ErrorInfo = {\n componentStack: getComponentStack(),\n phase\n }\n\n // Call error callback\n onError?.(error, info)\n\n // Update error state (triggers re-render with fallback)\n setErrorState({ error, info })\n }\n }\n\n // If we have an error, render fallback\n if (errorState.error) {\n if (typeof fallback === 'function') {\n return fallback(errorState.error, errorState.info!)\n }\n return fallback\n }\n\n // Push boundary onto stack for children to use\n pushErrorBoundary(boundaryInstance)\n\n try {\n // Return children - they will be rendered with this boundary active\n return children\n } finally {\n popErrorBoundary()\n }\n}\n","import { suspenseContext } from './suspenseContext'\nimport type { FNodeChild } from '../types'\nimport type { LazyComponent } from './types'\n\n/**\n * Creates a lazy-loaded component for code splitting\n *\n * @example\n * ```tsx\n * const Dashboard = lazy(() => import('./Dashboard'))\n * const Settings = lazy(() => import('./Settings'))\n *\n * function App() {\n * return (\n * <Suspense fallback={<div>Loading...</div>}>\n * <Dashboard />\n * </Suspense>\n * )\n * }\n * ```\n */\nexport function lazy<P = {}>(\n loader: () => Promise<{ default: (props: P) => FNodeChild }>\n): LazyComponent<P> {\n // Shared state across all instances\n let resolved: ((props: P) => FNodeChild) | null = null\n let promise: Promise<any> | null = null\n let error: Error | null = null\n\n // The wrapper component\n const LazyWrapper = (props: P): FNodeChild => {\n // If already resolved, render immediately\n if (resolved) {\n return resolved(props)\n }\n\n // If error occurred, throw it (will be caught by ErrorBoundary)\n if (error) {\n throw error\n }\n\n // Get suspense context\n const suspense = suspenseContext()\n\n // Start loading if not already\n if (!promise) {\n promise = loader()\n .then(module => {\n resolved = module.default\n })\n .catch(err => {\n error = err instanceof Error ? err : new Error(String(err))\n })\n }\n\n // Register with suspense boundary if available\n if (suspense.hasBoundary) {\n suspense.register(promise)\n }\n\n // Return null - Suspense will show fallback\n return null\n }\n\n // Mark as lazy component\n ;(LazyWrapper as LazyComponent<P>)._lazy = true\n ;(LazyWrapper as LazyComponent<P>)._loader = loader\n\n return LazyWrapper as LazyComponent<P>\n}\n"]}
1
+ {"version":3,"sources":["../src/dom/f.ts","../src/dom/hydrate.ts","../src/dom/components/Portal.tsx","../src/dom/components/suspenseContext.ts","../src/dom/components/Suspense.tsx","../src/dom/components/ErrorBoundary.tsx","../src/dom/components/lazy.ts"],"names":["f","type","props","children","hydrationCursor","hydratedInstanceRegistry","currentHydratingInstance","hydrate","app","container","options","state","onHydrated","onMismatch","fnode","isFNode","hydrateNode","error","render","value","parent","skipEmptyTextNodes","hydrateTextNode","nodes","child","result","hydrateComponent","hydrateElement","text","current","tag","key","eventName","savedCursor","Component","contextId","isProvider","prevContextValue","pushContext","parentRegistry","hasExplicitKey","instanceCount","componentName","_","k","instance","previousHydratingInstance","runWithComponent","isFirstRender","renderFn","currentProps","unsafeEffect","popContext","Portal","target","portalState","hook","effect","portalWrapper","defaultValue","SuspenseCtx","createContext","suspenseContext","context","Suspense","fallback","pendingSet","setPendingCount","showFallback","setShowFallback","contextValue","promise","c","newCount","content","ErrorBoundary","onError","resetKey","errorState","setErrorState","prevResetKeyRef","lazy","loader","resolved","LazyWrapper","suspense","module","err"],"mappings":"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","file":"dom.mjs","sourcesContent":["import type { FNode } from './types'\n\n/**\n * f() - Create FNodes without JSX\n */\nexport function f(\n type: string | Function,\n props?: any,\n ...children: any[]\n): FNode {\n return {\n type,\n props: props || {},\n children,\n key: props?.key\n }\n}\n","import type { FNode, FNodeChild } from './types'\nimport type { SerializedState } from '../server/types'\nimport { runWithComponent, type ComponentInstance } from '../core/hook'\nimport { pushContext, popContext } from '../core/context'\nimport { unsafeEffect } from '../core/lifecycle'\n\n// Hydration state\nlet isHydrating = false\nlet hydrationCursor: Node | null = null\nlet hydrationState: SerializedState | null = null\n\nexport interface HydrateOptions {\n /**\n * Serialized state from server\n * Typically embedded in HTML as JSON script tag\n */\n state?: SerializedState\n\n /**\n * Called when hydration completes successfully\n */\n onHydrated?: () => void\n\n /**\n * Called when hydration fails (falls back to full render)\n */\n onMismatch?: (error: Error) => void\n}\n\n// Extended ComponentInstance for DOM tracking (same as render.ts)\ninterface DOMComponentInstance extends ComponentInstance {\n nodes: Node[]\n parent: HTMLElement\n fnode: any\n props: any\n key?: any\n renderFn?: () => void\n children: Set<DOMComponentInstance>\n parentInstance?: DOMComponentInstance\n}\n\n// Registry for hydrated components\nconst hydratedInstanceRegistry = new WeakMap<HTMLElement, Map<any, DOMComponentInstance>>()\nlet currentHydratingInstance: DOMComponentInstance | null = null\n\nexport function getIsHydrating(): boolean {\n return isHydrating\n}\n\nexport function getHydrationState(): SerializedState | null {\n return hydrationState\n}\n\n/**\n * Hydrate server-rendered HTML with client-side interactivity\n */\nexport function hydrate(\n app: FNodeChild | (() => FNodeChild),\n container: HTMLElement,\n options: HydrateOptions = {}\n): void {\n const { state, onHydrated, onMismatch } = options\n\n // Store state for rehydration\n hydrationState = state || null\n\n // Initialize hydration mode\n isHydrating = true\n hydrationCursor = container.firstChild\n\n try {\n // Normalize input\n let fnode: FNodeChild\n if (typeof app === 'function' && !isFNode(app)) {\n fnode = { type: app, props: {}, children: [], key: undefined }\n } else {\n fnode = app\n }\n\n // Hydrate the tree\n hydrateNode(fnode, container)\n\n onHydrated?.()\n } catch (error) {\n // Hydration mismatch - fall back to full render\n console.warn('[Flexium] Hydration mismatch, falling back to full render:', error)\n onMismatch?.(error as Error)\n\n // Clear and re-render\n container.innerHTML = ''\n // Import dynamically to avoid circular deps\n import('./render').then(({ render }) => {\n render(app, container)\n })\n } finally {\n isHydrating = false\n hydrationCursor = null\n hydrationState = null\n }\n}\n\nfunction isFNode(value: any): value is FNode {\n return value && typeof value === 'object' && 'type' in value && 'props' in value\n}\n\nfunction hydrateNode(fnode: FNodeChild, parent: HTMLElement): Node | Node[] | null {\n // Null/undefined/boolean -> skip empty text nodes\n if (fnode === null || fnode === undefined || typeof fnode === 'boolean') {\n // Server might have rendered an empty text node\n skipEmptyTextNodes()\n return null\n }\n\n // String/number -> expect text node\n if (typeof fnode === 'string' || typeof fnode === 'number') {\n return hydrateTextNode(String(fnode))\n }\n\n // Array -> hydrate each child\n if (Array.isArray(fnode)) {\n const nodes: Node[] = []\n for (const child of fnode) {\n const result = hydrateNode(child, parent)\n if (result) {\n if (Array.isArray(result)) {\n nodes.push(...result)\n } else {\n nodes.push(result)\n }\n }\n }\n return nodes\n }\n\n // Function (standalone) -> wrap in FNode and hydrate\n if (typeof fnode === 'function') {\n const wrappedFnode: FNode = { type: fnode, props: {}, children: [], key: undefined }\n return hydrateComponent(wrappedFnode, parent)\n }\n\n // Object (FNode)\n if (typeof fnode === 'object' && isFNode(fnode)) {\n if (typeof fnode.type === 'string') {\n return hydrateElement(fnode)\n }\n\n if (typeof fnode.type === 'function') {\n return hydrateComponent(fnode, parent)\n }\n }\n\n return null\n}\n\nfunction skipEmptyTextNodes(): void {\n while (\n hydrationCursor &&\n hydrationCursor.nodeType === Node.TEXT_NODE &&\n (!hydrationCursor.textContent || hydrationCursor.textContent.trim() === '')\n ) {\n hydrationCursor = hydrationCursor.nextSibling\n }\n}\n\nfunction hydrateTextNode(text: string): Node | null {\n skipEmptyTextNodes()\n\n const current = hydrationCursor\n\n if (!current) {\n // No node to hydrate - this is okay for conditional rendering\n return null\n }\n\n if (current.nodeType !== Node.TEXT_NODE) {\n // Try to find a text node nearby (whitespace handling)\n if (text.trim() === '') {\n return null\n }\n throw new Error(`Hydration mismatch: expected text node \"${text}\", got ${current.nodeName}`)\n }\n\n // Update cursor\n hydrationCursor = current.nextSibling\n\n return current\n}\n\nfunction hydrateElement(fnode: FNode): Node {\n skipEmptyTextNodes()\n\n const current = hydrationCursor as Element\n const tag = fnode.type as string\n\n // Validate element type\n if (!current || current.nodeType !== Node.ELEMENT_NODE) {\n throw new Error(`Hydration mismatch: expected element <${tag}>, got ${current?.nodeName || 'nothing'}`)\n }\n\n if (current.tagName.toLowerCase() !== tag.toLowerCase()) {\n throw new Error(`Hydration mismatch: expected <${tag}>, got <${current.tagName.toLowerCase()}>`)\n }\n\n // Attach event handlers and refs (don't modify DOM structure)\n if (fnode.props) {\n for (const [key, value] of Object.entries(fnode.props)) {\n if (key === 'ref') {\n if (typeof value === 'function') {\n value(current)\n } else if (value && typeof value === 'object' && 'current' in value) {\n value.current = current\n }\n } else if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.slice(2).toLowerCase()\n current.addEventListener(eventName, value as EventListener)\n\n // Store for reconciliation\n if (!(current as any).__eventHandlers) {\n (current as any).__eventHandlers = {}\n }\n (current as any).__eventHandlers[eventName] = value\n }\n }\n }\n\n // Move cursor past this element\n hydrationCursor = current.nextSibling\n\n // Hydrate children\n if (fnode.children && fnode.children.length > 0) {\n const savedCursor = hydrationCursor\n\n hydrationCursor = current.firstChild\n\n for (const child of fnode.children) {\n hydrateNode(child, current as HTMLElement)\n }\n\n hydrationCursor = savedCursor\n }\n\n return current\n}\n\nfunction hydrateComponent(fnode: FNode, parent: HTMLElement): Node | Node[] | null {\n const Component = fnode.type as Function\n\n // Merge props\n const props = { ...fnode.props }\n if (fnode.children && fnode.children.length > 0) {\n props.children = fnode.children.length === 1\n ? fnode.children[0]\n : fnode.children\n }\n\n // Handle context providers\n const contextId = (Component as any)._contextId\n const isProvider = contextId !== undefined\n let prevContextValue: any\n\n if (isProvider) {\n prevContextValue = pushContext(contextId, props.value)\n }\n\n // Generate key (same logic as render.ts)\n if (!hydratedInstanceRegistry.has(parent)) {\n hydratedInstanceRegistry.set(parent, new Map())\n }\n const parentRegistry = hydratedInstanceRegistry.get(parent)!\n\n const hasExplicitKey = fnode.key !== undefined\n let key: any\n if (hasExplicitKey) {\n key = fnode.key\n } else {\n let instanceCount = 0\n const componentName = (Component as any).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 // Create component instance\n const instance: DOMComponentInstance = {\n hooks: [],\n hookIndex: 0,\n nodes: [],\n parent,\n fnode,\n props,\n key,\n children: new Set(),\n parentInstance: currentHydratingInstance || undefined\n }\n\n if (currentHydratingInstance) {\n currentHydratingInstance.children.add(instance)\n }\n\n parentRegistry.set(key, instance)\n\n const previousHydratingInstance = currentHydratingInstance\n currentHydratingInstance = instance\n\n try {\n // First render during hydration - just match DOM\n const result = runWithComponent(instance, () => Component(props))\n const nodes = hydrateNode(result, parent)\n instance.nodes = nodes ? (Array.isArray(nodes) ? nodes : [nodes]) : []\n\n // Set up reactive re-rendering for future updates\n let isFirstRender = true\n const renderFn = () => {\n if (isFirstRender) {\n isFirstRender = false\n return // Skip first render, already done during hydration\n }\n\n // Re-render logic (same as render.ts but simplified)\n const currentProps = instance.props\n runWithComponent(instance, () => Component(currentProps))\n\n // For subsequent renders, use full render path\n // This will be handled by the normal reconciliation\n }\n\n instance.renderFn = renderFn\n unsafeEffect(renderFn)\n\n return instance.nodes\n } finally {\n currentHydratingInstance = previousHydratingInstance\n\n if (isProvider) {\n popContext(contextId, prevContextValue)\n }\n }\n}\n","import { effect } from '../../core/lifecycle'\nimport { hook } from '../../core/hook'\nimport { render } from '../render'\nimport type { PortalProps } from './types'\n\n/**\n * Portal component that renders children into a different DOM node\n *\n * @example\n * ```tsx\n * function Modal({ isOpen, onClose, children }) {\n * if (!isOpen) return null\n *\n * return (\n * <Portal target={document.body}>\n * <div class=\"modal-backdrop\" onClick={onClose}>\n * <div class=\"modal-content\" onClick={e => e.stopPropagation()}>\n * {children}\n * </div>\n * </div>\n * </Portal>\n * )\n * }\n * ```\n */\nexport function Portal(props: PortalProps): null {\n const { target, children } = props\n\n // Store rendered container for cleanup\n const portalState = hook(() => ({\n container: null as HTMLElement | null,\n mounted: false\n }))\n\n effect(() => {\n // Resolve target container\n let container: HTMLElement | null = null\n\n if (typeof target === 'string') {\n container = document.querySelector(target)\n } else if (target instanceof HTMLElement) {\n container = target\n }\n\n if (!container) {\n console.warn('[Flexium Portal] Target container not found:', target)\n return\n }\n\n // Create a wrapper div to contain portal content\n const portalWrapper = document.createElement('div')\n portalWrapper.setAttribute('data-flexium-portal', 'true')\n container.appendChild(portalWrapper)\n\n portalState.container = portalWrapper\n portalState.mounted = true\n\n // Render children into the portal wrapper\n render(children, portalWrapper)\n\n // Cleanup function\n return () => {\n if (portalWrapper.parentNode) {\n portalWrapper.parentNode.removeChild(portalWrapper)\n }\n portalState.container = null\n portalState.mounted = false\n }\n }, [target, children])\n\n // Portal renders nothing in its original location\n return null\n}\n","import { createContext, context } from '../../core/context'\nimport type { SuspenseContextValue } from './types'\n\nconst defaultValue: SuspenseContextValue = {\n register: () => {},\n hasBoundary: false\n}\n\nexport const SuspenseCtx = createContext<SuspenseContextValue>(defaultValue)\n\nexport function suspenseContext(): SuspenseContextValue {\n return context(SuspenseCtx)\n}\n","import { state } from '../../core/state'\nimport { hook } from '../../core/hook'\nimport { SuspenseCtx } from './suspenseContext'\nimport type { SuspenseProps, SuspenseContextValue } from './types'\nimport type { FNodeChild } from '../types'\n\n/**\n * Suspense component that shows fallback while children are loading\n *\n * @example\n * ```tsx\n * const Dashboard = lazy(() => import('./Dashboard'))\n *\n * function App() {\n * return (\n * <Suspense fallback={<div>Loading...</div>}>\n * <Dashboard />\n * </Suspense>\n * )\n * }\n * ```\n */\nexport function Suspense(props: SuspenseProps): FNodeChild {\n const { fallback, children } = props\n\n // Track pending promises using hook for mutable Set\n const pendingSet = hook(() => new Set<Promise<any>>())\n const [, setPendingCount] = state(0)\n const [showFallback, setShowFallback] = state(false)\n\n // Register function for lazy components\n const register = (promise: Promise<any>) => {\n if (!pendingSet.has(promise)) {\n // Add to pending set\n pendingSet.add(promise)\n setPendingCount(c => c + 1)\n setShowFallback(true)\n\n // Wait for resolution\n promise.finally(() => {\n pendingSet.delete(promise)\n setPendingCount(c => {\n const newCount = c - 1\n if (newCount === 0) {\n setShowFallback(false)\n }\n return newCount\n })\n })\n }\n }\n\n const contextValue: SuspenseContextValue = {\n register,\n hasBoundary: true\n }\n\n // Render fallback or children based on pending state\n const content = showFallback ? fallback : children\n\n // Wrap content with Suspense context provider\n return {\n type: SuspenseCtx.Provider,\n props: { value: contextValue },\n children: [content],\n key: undefined\n } as any\n}\n","import { state } from '../../core/state'\nimport { hook } from '../../core/hook'\nimport type { FNodeChild } from '../types'\nimport type { ErrorInfo, ErrorBoundaryProps } from './types'\n\n// Component name stack for error messages\nlet componentNameStack: string[] = []\n\nexport function pushComponentName(name: string): void {\n componentNameStack.push(name)\n}\n\nexport function popComponentName(): void {\n componentNameStack.pop()\n}\n\nexport function getComponentStack(): string {\n return componentNameStack\n .map(name => ` at ${name}`)\n .reverse()\n .join('\\n')\n}\n\n// Stack of error boundaries for nested error propagation\ninterface ErrorBoundaryInstance {\n handleError: (error: Error, phase: 'render' | 'effect' | 'event') => void\n}\n\nlet errorBoundaryStack: ErrorBoundaryInstance[] = []\n\nexport function pushErrorBoundary(instance: ErrorBoundaryInstance): void {\n errorBoundaryStack.push(instance)\n}\n\nexport function popErrorBoundary(): void {\n errorBoundaryStack.pop()\n}\n\nexport function getNearestErrorBoundary(): ErrorBoundaryInstance | null {\n return errorBoundaryStack[errorBoundaryStack.length - 1] || null\n}\n\n/**\n * ErrorBoundary component that catches errors in its children and displays fallback UI\n *\n * @example\n * ```tsx\n * <ErrorBoundary\n * fallback={(error, info) => <div>Error: {error.message}</div>}\n * onError={(error, info) => console.error(error)}\n * >\n * <App />\n * </ErrorBoundary>\n * ```\n */\nexport function ErrorBoundary(props: ErrorBoundaryProps): FNodeChild {\n const { fallback, onError, children, resetKey } = props\n\n // Error state\n const [errorState, setErrorState] = state<{\n error: Error | null\n info: ErrorInfo | null\n }>({ error: null, info: null })\n\n // Track reset key changes to clear error\n const prevResetKeyRef = hook(() => ({ current: resetKey }))\n\n if (resetKey !== prevResetKeyRef.current) {\n prevResetKeyRef.current = resetKey\n if (errorState.error !== null) {\n setErrorState({ error: null, info: null })\n }\n }\n\n // Error boundary instance\n const boundaryInstance: ErrorBoundaryInstance = {\n handleError: (error: Error, phase: 'render' | 'effect' | 'event') => {\n const info: ErrorInfo = {\n componentStack: getComponentStack(),\n phase\n }\n\n // Call error callback\n onError?.(error, info)\n\n // Update error state (triggers re-render with fallback)\n setErrorState({ error, info })\n }\n }\n\n // If we have an error, render fallback\n if (errorState.error) {\n if (typeof fallback === 'function') {\n return fallback(errorState.error, errorState.info!)\n }\n return fallback\n }\n\n // Push boundary onto stack for children to use\n pushErrorBoundary(boundaryInstance)\n\n try {\n // Return children - they will be rendered with this boundary active\n return children\n } finally {\n popErrorBoundary()\n }\n}\n","import { suspenseContext } from './suspenseContext'\nimport type { FNodeChild } from '../types'\nimport type { LazyComponent } from './types'\n\n/**\n * Creates a lazy-loaded component for code splitting\n *\n * @example\n * ```tsx\n * const Dashboard = lazy(() => import('./Dashboard'))\n * const Settings = lazy(() => import('./Settings'))\n *\n * function App() {\n * return (\n * <Suspense fallback={<div>Loading...</div>}>\n * <Dashboard />\n * </Suspense>\n * )\n * }\n * ```\n */\nexport function lazy<P = {}>(\n loader: () => Promise<{ default: (props: P) => FNodeChild }>\n): LazyComponent<P> {\n // Shared state across all instances\n let resolved: ((props: P) => FNodeChild) | null = null\n let promise: Promise<any> | null = null\n let error: Error | null = null\n\n // The wrapper component\n const LazyWrapper = (props: P): FNodeChild => {\n // If already resolved, render immediately\n if (resolved) {\n return resolved(props)\n }\n\n // If error occurred, throw it (will be caught by ErrorBoundary)\n if (error) {\n throw error\n }\n\n // Get suspense context\n const suspense = suspenseContext()\n\n // Start loading if not already\n if (!promise) {\n promise = loader()\n .then(module => {\n resolved = module.default\n })\n .catch(err => {\n error = err instanceof Error ? err : new Error(String(err))\n })\n }\n\n // Register with suspense boundary if available\n if (suspense.hasBoundary) {\n suspense.register(promise)\n }\n\n // Return null - Suspense will show fallback\n return null\n }\n\n // Mark as lazy component\n ;(LazyWrapper as LazyComponent<P>)._lazy = true\n ;(LazyWrapper as LazyComponent<P>)._loader = loader\n\n return LazyWrapper as LazyComponent<P>\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,3 +1,3 @@
1
- declare const VERSION = "0.12.16";
1
+ declare const VERSION = "0.12.18";
2
2
 
3
3
  export { VERSION };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- declare const VERSION = "0.12.16";
1
+ declare const VERSION = "0.12.18";
2
2
 
3
3
  export { VERSION };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var o="0.12.16";exports.VERSION=o;//# sourceMappingURL=index.js.map
1
+ 'use strict';var o="0.12.18";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.16' // 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.18' // Bump version to signify rebuild\n"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var o="0.12.16";export{o as VERSION};//# sourceMappingURL=index.mjs.map
1
+ var o="0.12.18";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.16' // 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.18' // Bump version to signify rebuild\n"]}
@@ -1 +1 @@
1
- {"inputs":{"src/index.ts":{"bytes":68,"imports":[],"format":"esm"},"src/core/hook.ts":{"bytes":986,"imports":[],"format":"esm"},"src/core/lifecycle.ts":{"bytes":3525,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"}],"format":"esm"},"src/core/reactive.ts":{"bytes":2080,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"}],"format":"esm"},"src/core/devtools.ts":{"bytes":1841,"imports":[],"format":"esm"},"src/core/state.ts":{"bytes":5816,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"./reactive"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"},{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"},{"path":"src/core/devtools.ts","kind":"import-statement","original":"./devtools"}],"format":"esm"},"src/core/context.ts":{"bytes":1400,"imports":[],"format":"esm"},"src/ref/ref.ts":{"bytes":803,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"}],"format":"esm"},"src/ref/forwardRef.ts":{"bytes":1604,"imports":[],"format":"esm"},"src/ref/index.ts":{"bytes":268,"imports":[{"path":"src/ref/ref.ts","kind":"import-statement","original":"./ref"},{"path":"src/ref/forwardRef.ts","kind":"import-statement","original":"./forwardRef"}],"format":"esm"},"src/core/index.ts":{"bytes":406,"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"},{"path":"src/ref/index.ts","kind":"import-statement","original":"../ref"}],"format":"esm"},"src/dom/f.ts":{"bytes":285,"imports":[],"format":"esm"},"src/dom/render.ts":{"bytes":15127,"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/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"}],"format":"esm"},"src/dom/hydrate.ts":{"bytes":9375,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"},{"path":"src/dom/render.ts","kind":"dynamic-import","original":"./render"}],"format":"esm"},"src/dom/components/Portal.tsx":{"bytes":1932,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"},{"path":"src/dom/render.ts","kind":"import-statement","original":"../render"}],"format":"esm"},"src/dom/components/suspenseContext.ts":{"bytes":372,"imports":[{"path":"src/core/context.ts","kind":"import-statement","original":"../../core/context"}],"format":"esm"},"src/dom/components/Suspense.tsx":{"bytes":1790,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"},{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"}],"format":"esm"},"src/dom/components/ErrorBoundary.tsx":{"bytes":2860,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"}],"format":"esm"},"src/dom/components/lazy.ts":{"bytes":1767,"imports":[{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"}],"format":"esm"},"src/dom/components/index.ts":{"bytes":598,"imports":[{"path":"src/dom/components/Portal.tsx","kind":"import-statement","original":"./Portal"},{"path":"src/dom/components/Suspense.tsx","kind":"import-statement","original":"./Suspense"},{"path":"src/dom/components/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"},{"path":"src/dom/components/lazy.ts","kind":"import-statement","original":"./lazy"},{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"},{"path":"src/dom/components/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"}],"format":"esm"},"src/dom/index.ts":{"bytes":457,"imports":[{"path":"src/dom/f.ts","kind":"import-statement","original":"./f"},{"path":"src/dom/render.ts","kind":"import-statement","original":"./render"},{"path":"src/dom/hydrate.ts","kind":"import-statement","original":"./hydrate"},{"path":"src/dom/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"},"src/server/escape.ts":{"bytes":364,"imports":[],"format":"esm"},"src/server/serverState.ts":{"bytes":896,"imports":[],"format":"esm"},"src/server/renderToString.ts":{"bytes":6572,"imports":[{"path":"src/server/escape.ts","kind":"import-statement","original":"./escape"},{"path":"src/server/serverState.ts","kind":"import-statement","original":"./serverState"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"}],"format":"esm"},"src/server/index.ts":{"bytes":243,"imports":[{"path":"src/server/renderToString.ts","kind":"import-statement","original":"./renderToString"},{"path":"src/server/serverState.ts","kind":"import-statement","original":"./serverState"}],"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":5538,"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":305,"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":315,"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":300,"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":305,"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":305,"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":305,"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":1684,"imports":[],"format":"esm"},"src/interactive/types.ts":{"bytes":1937,"imports":[],"format":"esm"},"src/interactive/keyboard.ts":{"bytes":2405,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"},{"path":"src/interactive/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/interactive/mouse.ts":{"bytes":3183,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"},{"path":"src/interactive/types.ts","kind":"import-statement","original":"./types"}],"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/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/render-QZAFAGIM.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/render-QZAFAGIM.js":{"imports":[{"path":"dist/chunk-6Z33DLMI.js","kind":"import-statement"},{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["reconcile","render"],"entryPoint":"src/dom/render.ts","inputs":{},"bytes":157},"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":3072},"dist/core.js":{"imports":[{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-LTT43APF.js","kind":"import-statement"},{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["context","createContext","effect","forwardRef","ref","state","sync"],"entryPoint":"src/core/index.ts","inputs":{"src/core/index.ts":{"bytesInOutput":0},"src/ref/ref.ts":{"bytesInOutput":42},"src/ref/index.ts":{"bytesInOutput":0},"src/ref/forwardRef.ts":{"bytesInOutput":131}},"bytes":474},"dist/dom.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":27819},"dist/dom.js":{"imports":[{"path":"dist/chunk-6Z33DLMI.js","kind":"import-statement"},{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-LTT43APF.js","kind":"import-statement"},{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"},{"path":"dist/render-QZAFAGIM.js","kind":"dynamic-import"}],"exports":["ErrorBoundary","Portal","Suspense","f","hydrate","lazy","reconcile","render","suspenseContext"],"entryPoint":"src/dom/index.ts","inputs":{"src/dom/f.ts":{"bytesInOutput":70},"src/dom/index.ts":{"bytesInOutput":0},"src/dom/hydrate.ts":{"bytesInOutput":2739},"src/dom/components/Portal.tsx":{"bytesInOutput":491},"src/dom/components/index.ts":{"bytesInOutput":0},"src/dom/components/suspenseContext.ts":{"bytesInOutput":71},"src/dom/components/Suspense.tsx":{"bytesInOutput":294},"src/dom/components/ErrorBoundary.tsx":{"bytesInOutput":500},"src/dom/components/lazy.ts":{"bytesInOutput":249}},"bytes":4816},"dist/chunk-6Z33DLMI.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":23945},"dist/chunk-6Z33DLMI.js":{"imports":[{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/dom/render.ts":{"bytesInOutput":4853}},"bytes":4996},"dist/server.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":12945},"dist/server.js":{"imports":[{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["getIsServer","renderToStaticMarkup","renderToString"],"entryPoint":"src/server/index.ts","inputs":{"src/server/escape.ts":{"bytesInOutput":157},"src/server/serverState.ts":{"bytesInOutput":186},"src/server/renderToString.ts":{"bytesInOutput":2125},"src/server/index.ts":{"bytesInOutput":0}},"bytes":2627},"dist/router.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":16422},"dist/router.js":{"imports":[{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-LTT43APF.js","kind":"import-statement"},{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.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":3135},"dist/chunk-PSKDIB7J.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":2198},"dist/chunk-PSKDIB7J.js":{"imports":[],"exports":["a","b","c","d"],"inputs":{"src/core/context.ts":{"bytesInOutput":284}},"bytes":316},"dist/canvas.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":12793},"dist/canvas.js":{"imports":[{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.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/interactive.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":15153},"dist/interactive.js":{"imports":[{"path":"dist/chunk-LTT43APF.js","kind":"import-statement"},{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.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/types.ts":{"bytesInOutput":701},"src/interactive/keyboard.ts":{"bytesInOutput":689},"src/interactive/mouse.ts":{"bytesInOutput":1150}},"bytes":3194},"dist/chunk-LTT43APF.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":11319},"dist/chunk-LTT43APF.js":{"imports":[{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["a"],"inputs":{"src/core/devtools.ts":{"bytesInOutput":372},"src/core/state.ts":{"bytesInOutput":1581}},"bytes":2089},"dist/chunk-6VIRXD2Y.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":3715},"dist/chunk-6VIRXD2Y.js":{"imports":[{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/core/reactive.ts":{"bytesInOutput":590}},"bytes":667},"dist/chunk-YWTD32NA.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":5910},"dist/chunk-YWTD32NA.js":{"imports":[{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["a","b","c","d","e","f"],"inputs":{"src/core/lifecycle.ts":{"bytesInOutput":1072}},"bytes":1163},"dist/chunk-UWFVCKRU.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1694},"dist/chunk-UWFVCKRU.js":{"imports":[],"exports":["a","b"],"inputs":{"src/core/hook.ts":{"bytesInOutput":227}},"bytes":250},"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/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/hook.ts":{"bytes":986,"imports":[],"format":"esm"},"src/core/lifecycle.ts":{"bytes":3525,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"}],"format":"esm"},"src/core/reactive.ts":{"bytes":2080,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"}],"format":"esm"},"src/core/devtools.ts":{"bytes":1841,"imports":[],"format":"esm"},"src/core/state.ts":{"bytes":5816,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"./reactive"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"},{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"},{"path":"src/core/devtools.ts","kind":"import-statement","original":"./devtools"}],"format":"esm"},"src/core/context.ts":{"bytes":1400,"imports":[],"format":"esm"},"src/ref/ref.ts":{"bytes":803,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"}],"format":"esm"},"src/ref/forwardRef.ts":{"bytes":1604,"imports":[],"format":"esm"},"src/ref/index.ts":{"bytes":268,"imports":[{"path":"src/ref/ref.ts","kind":"import-statement","original":"./ref"},{"path":"src/ref/forwardRef.ts","kind":"import-statement","original":"./forwardRef"}],"format":"esm"},"src/core/index.ts":{"bytes":406,"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"},{"path":"src/ref/index.ts","kind":"import-statement","original":"../ref"}],"format":"esm"},"src/dom/f.ts":{"bytes":285,"imports":[],"format":"esm"},"src/dom/render.ts":{"bytes":15127,"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/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"}],"format":"esm"},"src/dom/hydrate.ts":{"bytes":9324,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"},{"path":"src/dom/render.ts","kind":"dynamic-import","original":"./render"}],"format":"esm"},"src/dom/components/Portal.tsx":{"bytes":1932,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"},{"path":"src/dom/render.ts","kind":"import-statement","original":"../render"}],"format":"esm"},"src/dom/components/suspenseContext.ts":{"bytes":372,"imports":[{"path":"src/core/context.ts","kind":"import-statement","original":"../../core/context"}],"format":"esm"},"src/dom/components/Suspense.tsx":{"bytes":1778,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"},{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"}],"format":"esm"},"src/dom/components/ErrorBoundary.tsx":{"bytes":2860,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"}],"format":"esm"},"src/dom/components/lazy.ts":{"bytes":1767,"imports":[{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"}],"format":"esm"},"src/dom/components/index.ts":{"bytes":598,"imports":[{"path":"src/dom/components/Portal.tsx","kind":"import-statement","original":"./Portal"},{"path":"src/dom/components/Suspense.tsx","kind":"import-statement","original":"./Suspense"},{"path":"src/dom/components/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"},{"path":"src/dom/components/lazy.ts","kind":"import-statement","original":"./lazy"},{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"},{"path":"src/dom/components/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"}],"format":"esm"},"src/dom/index.ts":{"bytes":457,"imports":[{"path":"src/dom/f.ts","kind":"import-statement","original":"./f"},{"path":"src/dom/render.ts","kind":"import-statement","original":"./render"},{"path":"src/dom/hydrate.ts","kind":"import-statement","original":"./hydrate"},{"path":"src/dom/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"},"src/server/escape.ts":{"bytes":364,"imports":[],"format":"esm"},"src/server/serverState.ts":{"bytes":896,"imports":[],"format":"esm"},"src/server/renderToString.ts":{"bytes":6572,"imports":[{"path":"src/server/escape.ts","kind":"import-statement","original":"./escape"},{"path":"src/server/serverState.ts","kind":"import-statement","original":"./serverState"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"}],"format":"esm"},"src/server/index.ts":{"bytes":243,"imports":[{"path":"src/server/renderToString.ts","kind":"import-statement","original":"./renderToString"},{"path":"src/server/serverState.ts","kind":"import-statement","original":"./serverState"}],"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":5538,"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":305,"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":315,"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":300,"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":305,"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":305,"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":305,"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":1684,"imports":[],"format":"esm"},"src/interactive/types.ts":{"bytes":1937,"imports":[],"format":"esm"},"src/interactive/keyboard.ts":{"bytes":2405,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"},{"path":"src/interactive/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/interactive/mouse.ts":{"bytes":3183,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"},{"path":"src/interactive/types.ts","kind":"import-statement","original":"./types"}],"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/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/render-QZAFAGIM.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/render-QZAFAGIM.js":{"imports":[{"path":"dist/chunk-6Z33DLMI.js","kind":"import-statement"},{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["reconcile","render"],"entryPoint":"src/dom/render.ts","inputs":{},"bytes":157},"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":3072},"dist/core.js":{"imports":[{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-LTT43APF.js","kind":"import-statement"},{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["context","createContext","effect","forwardRef","ref","state","sync"],"entryPoint":"src/core/index.ts","inputs":{"src/core/index.ts":{"bytesInOutput":0},"src/ref/ref.ts":{"bytesInOutput":42},"src/ref/index.ts":{"bytesInOutput":0},"src/ref/forwardRef.ts":{"bytesInOutput":131}},"bytes":474},"dist/dom.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":27703},"dist/dom.js":{"imports":[{"path":"dist/chunk-6Z33DLMI.js","kind":"import-statement"},{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-LTT43APF.js","kind":"import-statement"},{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"},{"path":"dist/render-QZAFAGIM.js","kind":"dynamic-import"}],"exports":["ErrorBoundary","Portal","Suspense","f","hydrate","lazy","reconcile","render","suspenseContext"],"entryPoint":"src/dom/index.ts","inputs":{"src/dom/f.ts":{"bytesInOutput":70},"src/dom/index.ts":{"bytesInOutput":0},"src/dom/hydrate.ts":{"bytesInOutput":2733},"src/dom/components/Portal.tsx":{"bytesInOutput":491},"src/dom/components/index.ts":{"bytesInOutput":0},"src/dom/components/suspenseContext.ts":{"bytesInOutput":71},"src/dom/components/Suspense.tsx":{"bytesInOutput":293},"src/dom/components/ErrorBoundary.tsx":{"bytesInOutput":500},"src/dom/components/lazy.ts":{"bytesInOutput":249}},"bytes":4809},"dist/chunk-6Z33DLMI.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":23945},"dist/chunk-6Z33DLMI.js":{"imports":[{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/dom/render.ts":{"bytesInOutput":4853}},"bytes":4996},"dist/server.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":12945},"dist/server.js":{"imports":[{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["getIsServer","renderToStaticMarkup","renderToString"],"entryPoint":"src/server/index.ts","inputs":{"src/server/escape.ts":{"bytesInOutput":157},"src/server/serverState.ts":{"bytesInOutput":186},"src/server/renderToString.ts":{"bytesInOutput":2125},"src/server/index.ts":{"bytesInOutput":0}},"bytes":2627},"dist/router.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":16422},"dist/router.js":{"imports":[{"path":"dist/chunk-PSKDIB7J.js","kind":"import-statement"},{"path":"dist/chunk-LTT43APF.js","kind":"import-statement"},{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.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":3135},"dist/chunk-PSKDIB7J.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":2198},"dist/chunk-PSKDIB7J.js":{"imports":[],"exports":["a","b","c","d"],"inputs":{"src/core/context.ts":{"bytesInOutput":284}},"bytes":316},"dist/canvas.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":12793},"dist/canvas.js":{"imports":[{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.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/interactive.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":15153},"dist/interactive.js":{"imports":[{"path":"dist/chunk-LTT43APF.js","kind":"import-statement"},{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.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/types.ts":{"bytesInOutput":701},"src/interactive/keyboard.ts":{"bytesInOutput":689},"src/interactive/mouse.ts":{"bytesInOutput":1150}},"bytes":3194},"dist/chunk-LTT43APF.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":11319},"dist/chunk-LTT43APF.js":{"imports":[{"path":"dist/chunk-6VIRXD2Y.js","kind":"import-statement"},{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"},{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["a"],"inputs":{"src/core/devtools.ts":{"bytesInOutput":372},"src/core/state.ts":{"bytesInOutput":1581}},"bytes":2089},"dist/chunk-6VIRXD2Y.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":3715},"dist/chunk-6VIRXD2Y.js":{"imports":[{"path":"dist/chunk-YWTD32NA.js","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/core/reactive.ts":{"bytesInOutput":590}},"bytes":667},"dist/chunk-YWTD32NA.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":5910},"dist/chunk-YWTD32NA.js":{"imports":[{"path":"dist/chunk-UWFVCKRU.js","kind":"import-statement"}],"exports":["a","b","c","d","e","f"],"inputs":{"src/core/lifecycle.ts":{"bytesInOutput":1072}},"bytes":1163},"dist/chunk-UWFVCKRU.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":1694},"dist/chunk-UWFVCKRU.js":{"imports":[],"exports":["a","b"],"inputs":{"src/core/hook.ts":{"bytesInOutput":227}},"bytes":250},"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/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":68,"imports":[],"format":"esm"},"src/core/hook.ts":{"bytes":986,"imports":[],"format":"esm"},"src/core/lifecycle.ts":{"bytes":3525,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"}],"format":"esm"},"src/core/reactive.ts":{"bytes":2080,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"}],"format":"esm"},"src/core/devtools.ts":{"bytes":1841,"imports":[],"format":"esm"},"src/core/state.ts":{"bytes":5816,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"./reactive"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"},{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"},{"path":"src/core/devtools.ts","kind":"import-statement","original":"./devtools"}],"format":"esm"},"src/core/context.ts":{"bytes":1400,"imports":[],"format":"esm"},"src/ref/ref.ts":{"bytes":803,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"}],"format":"esm"},"src/ref/forwardRef.ts":{"bytes":1604,"imports":[],"format":"esm"},"src/ref/index.ts":{"bytes":268,"imports":[{"path":"src/ref/ref.ts","kind":"import-statement","original":"./ref"},{"path":"src/ref/forwardRef.ts","kind":"import-statement","original":"./forwardRef"}],"format":"esm"},"src/core/index.ts":{"bytes":406,"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"},{"path":"src/ref/index.ts","kind":"import-statement","original":"../ref"}],"format":"esm"},"src/dom/f.ts":{"bytes":285,"imports":[],"format":"esm"},"src/dom/render.ts":{"bytes":15127,"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/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"}],"format":"esm"},"src/dom/hydrate.ts":{"bytes":9375,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"},{"path":"src/dom/render.ts","kind":"dynamic-import","original":"./render"}],"format":"esm"},"src/dom/components/Portal.tsx":{"bytes":1932,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"},{"path":"src/dom/render.ts","kind":"import-statement","original":"../render"}],"format":"esm"},"src/dom/components/suspenseContext.ts":{"bytes":372,"imports":[{"path":"src/core/context.ts","kind":"import-statement","original":"../../core/context"}],"format":"esm"},"src/dom/components/Suspense.tsx":{"bytes":1790,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"},{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"}],"format":"esm"},"src/dom/components/ErrorBoundary.tsx":{"bytes":2860,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"}],"format":"esm"},"src/dom/components/lazy.ts":{"bytes":1767,"imports":[{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"}],"format":"esm"},"src/dom/components/index.ts":{"bytes":598,"imports":[{"path":"src/dom/components/Portal.tsx","kind":"import-statement","original":"./Portal"},{"path":"src/dom/components/Suspense.tsx","kind":"import-statement","original":"./Suspense"},{"path":"src/dom/components/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"},{"path":"src/dom/components/lazy.ts","kind":"import-statement","original":"./lazy"},{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"},{"path":"src/dom/components/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"}],"format":"esm"},"src/dom/index.ts":{"bytes":457,"imports":[{"path":"src/dom/f.ts","kind":"import-statement","original":"./f"},{"path":"src/dom/render.ts","kind":"import-statement","original":"./render"},{"path":"src/dom/hydrate.ts","kind":"import-statement","original":"./hydrate"},{"path":"src/dom/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"},"src/server/escape.ts":{"bytes":364,"imports":[],"format":"esm"},"src/server/serverState.ts":{"bytes":896,"imports":[],"format":"esm"},"src/server/renderToString.ts":{"bytes":6572,"imports":[{"path":"src/server/escape.ts","kind":"import-statement","original":"./escape"},{"path":"src/server/serverState.ts","kind":"import-statement","original":"./serverState"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"}],"format":"esm"},"src/server/index.ts":{"bytes":243,"imports":[{"path":"src/server/renderToString.ts","kind":"import-statement","original":"./renderToString"},{"path":"src/server/serverState.ts","kind":"import-statement","original":"./serverState"}],"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":5538,"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":305,"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":315,"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":300,"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":305,"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":305,"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":305,"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":1684,"imports":[],"format":"esm"},"src/interactive/types.ts":{"bytes":1937,"imports":[],"format":"esm"},"src/interactive/keyboard.ts":{"bytes":2405,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"},{"path":"src/interactive/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/interactive/mouse.ts":{"bytes":3183,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"},{"path":"src/interactive/types.ts","kind":"import-statement","original":"./types"}],"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/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/render-UIWHIMS2.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/render-UIWHIMS2.mjs":{"imports":[{"path":"dist/chunk-E75BJDOQ.mjs","kind":"import-statement"},{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["reconcile","render"],"entryPoint":"src/dom/render.ts","inputs":{},"bytes":161},"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":3072},"dist/core.mjs":{"imports":[{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-WGKD63GN.mjs","kind":"import-statement"},{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["context","createContext","effect","forwardRef","ref","state","sync"],"entryPoint":"src/core/index.ts","inputs":{"src/core/index.ts":{"bytesInOutput":0},"src/ref/ref.ts":{"bytesInOutput":42},"src/ref/index.ts":{"bytesInOutput":0},"src/ref/forwardRef.ts":{"bytesInOutput":131}},"bytes":479},"dist/dom.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":27819},"dist/dom.mjs":{"imports":[{"path":"dist/chunk-E75BJDOQ.mjs","kind":"import-statement"},{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-WGKD63GN.mjs","kind":"import-statement"},{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"},{"path":"dist/render-UIWHIMS2.mjs","kind":"dynamic-import"}],"exports":["ErrorBoundary","Portal","Suspense","f","hydrate","lazy","reconcile","render","suspenseContext"],"entryPoint":"src/dom/index.ts","inputs":{"src/dom/f.ts":{"bytesInOutput":70},"src/dom/index.ts":{"bytesInOutput":0},"src/dom/hydrate.ts":{"bytesInOutput":2740},"src/dom/components/Portal.tsx":{"bytesInOutput":491},"src/dom/components/index.ts":{"bytesInOutput":0},"src/dom/components/suspenseContext.ts":{"bytesInOutput":71},"src/dom/components/Suspense.tsx":{"bytesInOutput":294},"src/dom/components/ErrorBoundary.tsx":{"bytesInOutput":500},"src/dom/components/lazy.ts":{"bytesInOutput":249}},"bytes":4823},"dist/chunk-E75BJDOQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":23945},"dist/chunk-E75BJDOQ.mjs":{"imports":[{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/dom/render.ts":{"bytesInOutput":4853}},"bytes":4999},"dist/server.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12945},"dist/server.mjs":{"imports":[{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["getIsServer","renderToStaticMarkup","renderToString"],"entryPoint":"src/server/index.ts","inputs":{"src/server/escape.ts":{"bytesInOutput":157},"src/server/serverState.ts":{"bytesInOutput":186},"src/server/renderToString.ts":{"bytesInOutput":2125},"src/server/index.ts":{"bytesInOutput":0}},"bytes":2629},"dist/router.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":16422},"dist/router.mjs":{"imports":[{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-WGKD63GN.mjs","kind":"import-statement"},{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.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":3141},"dist/chunk-3DKZ2J4D.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2198},"dist/chunk-3DKZ2J4D.mjs":{"imports":[],"exports":["a","b","c","d"],"inputs":{"src/core/context.ts":{"bytesInOutput":284}},"bytes":316},"dist/canvas.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12793},"dist/canvas.mjs":{"imports":[{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.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/interactive.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":15153},"dist/interactive.mjs":{"imports":[{"path":"dist/chunk-WGKD63GN.mjs","kind":"import-statement"},{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.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/types.ts":{"bytesInOutput":701},"src/interactive/keyboard.ts":{"bytesInOutput":689},"src/interactive/mouse.ts":{"bytesInOutput":1150}},"bytes":3198},"dist/chunk-WGKD63GN.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":11319},"dist/chunk-WGKD63GN.mjs":{"imports":[{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["a"],"inputs":{"src/core/devtools.ts":{"bytesInOutput":372},"src/core/state.ts":{"bytesInOutput":1581}},"bytes":2092},"dist/chunk-JY6CE6RN.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3715},"dist/chunk-JY6CE6RN.mjs":{"imports":[{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/core/reactive.ts":{"bytesInOutput":590}},"bytes":668},"dist/chunk-IWFEXW4F.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5910},"dist/chunk-IWFEXW4F.mjs":{"imports":[{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["a","b","c","d","e","f"],"inputs":{"src/core/lifecycle.ts":{"bytesInOutput":1072}},"bytes":1164},"dist/chunk-5PNH2ARD.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1694},"dist/chunk-5PNH2ARD.mjs":{"imports":[],"exports":["a","b"],"inputs":{"src/core/hook.ts":{"bytesInOutput":227}},"bytes":250},"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/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/hook.ts":{"bytes":986,"imports":[],"format":"esm"},"src/core/lifecycle.ts":{"bytes":3525,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"}],"format":"esm"},"src/core/reactive.ts":{"bytes":2080,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"}],"format":"esm"},"src/core/devtools.ts":{"bytes":1841,"imports":[],"format":"esm"},"src/core/state.ts":{"bytes":5816,"imports":[{"path":"src/core/reactive.ts","kind":"import-statement","original":"./reactive"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"./lifecycle"},{"path":"src/core/hook.ts","kind":"import-statement","original":"./hook"},{"path":"src/core/devtools.ts","kind":"import-statement","original":"./devtools"}],"format":"esm"},"src/core/context.ts":{"bytes":1400,"imports":[],"format":"esm"},"src/ref/ref.ts":{"bytes":803,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"}],"format":"esm"},"src/ref/forwardRef.ts":{"bytes":1604,"imports":[],"format":"esm"},"src/ref/index.ts":{"bytes":268,"imports":[{"path":"src/ref/ref.ts","kind":"import-statement","original":"./ref"},{"path":"src/ref/forwardRef.ts","kind":"import-statement","original":"./forwardRef"}],"format":"esm"},"src/core/index.ts":{"bytes":406,"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"},{"path":"src/ref/index.ts","kind":"import-statement","original":"../ref"}],"format":"esm"},"src/dom/f.ts":{"bytes":285,"imports":[],"format":"esm"},"src/dom/render.ts":{"bytes":15127,"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/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"}],"format":"esm"},"src/dom/hydrate.ts":{"bytes":9324,"imports":[{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"},{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../core/lifecycle"},{"path":"src/dom/render.ts","kind":"dynamic-import","original":"./render"}],"format":"esm"},"src/dom/components/Portal.tsx":{"bytes":1932,"imports":[{"path":"src/core/lifecycle.ts","kind":"import-statement","original":"../../core/lifecycle"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"},{"path":"src/dom/render.ts","kind":"import-statement","original":"../render"}],"format":"esm"},"src/dom/components/suspenseContext.ts":{"bytes":372,"imports":[{"path":"src/core/context.ts","kind":"import-statement","original":"../../core/context"}],"format":"esm"},"src/dom/components/Suspense.tsx":{"bytes":1778,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"},{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"}],"format":"esm"},"src/dom/components/ErrorBoundary.tsx":{"bytes":2860,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../../core/state"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../../core/hook"}],"format":"esm"},"src/dom/components/lazy.ts":{"bytes":1767,"imports":[{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"}],"format":"esm"},"src/dom/components/index.ts":{"bytes":598,"imports":[{"path":"src/dom/components/Portal.tsx","kind":"import-statement","original":"./Portal"},{"path":"src/dom/components/Suspense.tsx","kind":"import-statement","original":"./Suspense"},{"path":"src/dom/components/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"},{"path":"src/dom/components/lazy.ts","kind":"import-statement","original":"./lazy"},{"path":"src/dom/components/suspenseContext.ts","kind":"import-statement","original":"./suspenseContext"},{"path":"src/dom/components/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"}],"format":"esm"},"src/dom/index.ts":{"bytes":457,"imports":[{"path":"src/dom/f.ts","kind":"import-statement","original":"./f"},{"path":"src/dom/render.ts","kind":"import-statement","original":"./render"},{"path":"src/dom/hydrate.ts","kind":"import-statement","original":"./hydrate"},{"path":"src/dom/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"},"src/server/escape.ts":{"bytes":364,"imports":[],"format":"esm"},"src/server/serverState.ts":{"bytes":896,"imports":[],"format":"esm"},"src/server/renderToString.ts":{"bytes":6572,"imports":[{"path":"src/server/escape.ts","kind":"import-statement","original":"./escape"},{"path":"src/server/serverState.ts","kind":"import-statement","original":"./serverState"},{"path":"src/core/hook.ts","kind":"import-statement","original":"../core/hook"},{"path":"src/core/context.ts","kind":"import-statement","original":"../core/context"}],"format":"esm"},"src/server/index.ts":{"bytes":243,"imports":[{"path":"src/server/renderToString.ts","kind":"import-statement","original":"./renderToString"},{"path":"src/server/serverState.ts","kind":"import-statement","original":"./serverState"}],"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":5538,"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":305,"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":315,"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":300,"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":305,"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":305,"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":305,"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":1684,"imports":[],"format":"esm"},"src/interactive/types.ts":{"bytes":1937,"imports":[],"format":"esm"},"src/interactive/keyboard.ts":{"bytes":2405,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"},{"path":"src/interactive/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/interactive/mouse.ts":{"bytes":3183,"imports":[{"path":"src/core/state.ts","kind":"import-statement","original":"../core/state"},{"path":"src/interactive/types.ts","kind":"import-statement","original":"./types"}],"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/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/render-UIWHIMS2.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/render-UIWHIMS2.mjs":{"imports":[{"path":"dist/chunk-E75BJDOQ.mjs","kind":"import-statement"},{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["reconcile","render"],"entryPoint":"src/dom/render.ts","inputs":{},"bytes":161},"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":3072},"dist/core.mjs":{"imports":[{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-WGKD63GN.mjs","kind":"import-statement"},{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["context","createContext","effect","forwardRef","ref","state","sync"],"entryPoint":"src/core/index.ts","inputs":{"src/core/index.ts":{"bytesInOutput":0},"src/ref/ref.ts":{"bytesInOutput":42},"src/ref/index.ts":{"bytesInOutput":0},"src/ref/forwardRef.ts":{"bytesInOutput":131}},"bytes":479},"dist/dom.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":27703},"dist/dom.mjs":{"imports":[{"path":"dist/chunk-E75BJDOQ.mjs","kind":"import-statement"},{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-WGKD63GN.mjs","kind":"import-statement"},{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"},{"path":"dist/render-UIWHIMS2.mjs","kind":"dynamic-import"}],"exports":["ErrorBoundary","Portal","Suspense","f","hydrate","lazy","reconcile","render","suspenseContext"],"entryPoint":"src/dom/index.ts","inputs":{"src/dom/f.ts":{"bytesInOutput":70},"src/dom/index.ts":{"bytesInOutput":0},"src/dom/hydrate.ts":{"bytesInOutput":2734},"src/dom/components/Portal.tsx":{"bytesInOutput":491},"src/dom/components/index.ts":{"bytesInOutput":0},"src/dom/components/suspenseContext.ts":{"bytesInOutput":71},"src/dom/components/Suspense.tsx":{"bytesInOutput":293},"src/dom/components/ErrorBoundary.tsx":{"bytesInOutput":500},"src/dom/components/lazy.ts":{"bytesInOutput":249}},"bytes":4816},"dist/chunk-E75BJDOQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":23945},"dist/chunk-E75BJDOQ.mjs":{"imports":[{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/dom/render.ts":{"bytesInOutput":4853}},"bytes":4999},"dist/server.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12945},"dist/server.mjs":{"imports":[{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["getIsServer","renderToStaticMarkup","renderToString"],"entryPoint":"src/server/index.ts","inputs":{"src/server/escape.ts":{"bytesInOutput":157},"src/server/serverState.ts":{"bytesInOutput":186},"src/server/renderToString.ts":{"bytesInOutput":2125},"src/server/index.ts":{"bytesInOutput":0}},"bytes":2629},"dist/router.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":16422},"dist/router.mjs":{"imports":[{"path":"dist/chunk-3DKZ2J4D.mjs","kind":"import-statement"},{"path":"dist/chunk-WGKD63GN.mjs","kind":"import-statement"},{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.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":3141},"dist/chunk-3DKZ2J4D.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2198},"dist/chunk-3DKZ2J4D.mjs":{"imports":[],"exports":["a","b","c","d"],"inputs":{"src/core/context.ts":{"bytesInOutput":284}},"bytes":316},"dist/canvas.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12793},"dist/canvas.mjs":{"imports":[{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.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/interactive.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":15153},"dist/interactive.mjs":{"imports":[{"path":"dist/chunk-WGKD63GN.mjs","kind":"import-statement"},{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.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/types.ts":{"bytesInOutput":701},"src/interactive/keyboard.ts":{"bytesInOutput":689},"src/interactive/mouse.ts":{"bytesInOutput":1150}},"bytes":3198},"dist/chunk-WGKD63GN.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":11319},"dist/chunk-WGKD63GN.mjs":{"imports":[{"path":"dist/chunk-JY6CE6RN.mjs","kind":"import-statement"},{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"},{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["a"],"inputs":{"src/core/devtools.ts":{"bytesInOutput":372},"src/core/state.ts":{"bytesInOutput":1581}},"bytes":2092},"dist/chunk-JY6CE6RN.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3715},"dist/chunk-JY6CE6RN.mjs":{"imports":[{"path":"dist/chunk-IWFEXW4F.mjs","kind":"import-statement"}],"exports":["a","b"],"inputs":{"src/core/reactive.ts":{"bytesInOutput":590}},"bytes":668},"dist/chunk-IWFEXW4F.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5910},"dist/chunk-IWFEXW4F.mjs":{"imports":[{"path":"dist/chunk-5PNH2ARD.mjs","kind":"import-statement"}],"exports":["a","b","c","d","e","f"],"inputs":{"src/core/lifecycle.ts":{"bytesInOutput":1072}},"bytes":1164},"dist/chunk-5PNH2ARD.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1694},"dist/chunk-5PNH2ARD.mjs":{"imports":[],"exports":["a","b"],"inputs":{"src/core/hook.ts":{"bytesInOutput":227}},"bytes":250},"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/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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flexium",
3
- "version": "0.12.16",
3
+ "version": "0.12.18",
4
4
  "description": "A lightweight, signals-based UI framework with cross-platform renderers",
5
5
  "publishConfig": {
6
6
  "access": "public"