@avento-space/ts-ui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +277 -0
  3. package/dist/adapters/dom/hydration.d.ts +4 -0
  4. package/dist/adapters/dom/hydration.d.ts.map +1 -0
  5. package/dist/adapters/dom/hydration.js +366 -0
  6. package/dist/adapters/dom/hydration.js.map +1 -0
  7. package/dist/adapters/dom/index.d.ts +3 -0
  8. package/dist/adapters/dom/index.d.ts.map +1 -0
  9. package/dist/adapters/dom/index.js +3 -0
  10. package/dist/adapters/dom/index.js.map +1 -0
  11. package/dist/adapters/dom/node-metadata.d.ts +18 -0
  12. package/dist/adapters/dom/node-metadata.d.ts.map +1 -0
  13. package/dist/adapters/dom/node-metadata.js +146 -0
  14. package/dist/adapters/dom/node-metadata.js.map +1 -0
  15. package/dist/adapters/dom/renderer.d.ts +6 -0
  16. package/dist/adapters/dom/renderer.d.ts.map +1 -0
  17. package/dist/adapters/dom/renderer.js +748 -0
  18. package/dist/adapters/dom/renderer.js.map +1 -0
  19. package/dist/adapters/ssr/index.d.ts +3 -0
  20. package/dist/adapters/ssr/index.d.ts.map +1 -0
  21. package/dist/adapters/ssr/index.js +2 -0
  22. package/dist/adapters/ssr/index.js.map +1 -0
  23. package/dist/adapters/ssr/renderer.d.ts +9 -0
  24. package/dist/adapters/ssr/renderer.d.ts.map +1 -0
  25. package/dist/adapters/ssr/renderer.js +294 -0
  26. package/dist/adapters/ssr/renderer.js.map +1 -0
  27. package/dist/compiler/index.d.ts +2 -0
  28. package/dist/compiler/index.d.ts.map +1 -0
  29. package/dist/compiler/index.js +2 -0
  30. package/dist/compiler/index.js.map +1 -0
  31. package/dist/compiler/jsx.d.ts +10 -0
  32. package/dist/compiler/jsx.d.ts.map +1 -0
  33. package/dist/compiler/jsx.js +48 -0
  34. package/dist/compiler/jsx.js.map +1 -0
  35. package/dist/components/button.d.ts +12 -0
  36. package/dist/components/button.d.ts.map +1 -0
  37. package/dist/components/button.js +11 -0
  38. package/dist/components/button.js.map +1 -0
  39. package/dist/components/index.d.ts +9 -0
  40. package/dist/components/index.d.ts.map +1 -0
  41. package/dist/components/index.js +5 -0
  42. package/dist/components/index.js.map +1 -0
  43. package/dist/components/input.d.ts +22 -0
  44. package/dist/components/input.d.ts.map +1 -0
  45. package/dist/components/input.js +44 -0
  46. package/dist/components/input.js.map +1 -0
  47. package/dist/components/list.d.ts +18 -0
  48. package/dist/components/list.d.ts.map +1 -0
  49. package/dist/components/list.js +46 -0
  50. package/dist/components/list.js.map +1 -0
  51. package/dist/components/portal.d.ts +7 -0
  52. package/dist/components/portal.d.ts.map +1 -0
  53. package/dist/components/portal.js +30 -0
  54. package/dist/components/portal.js.map +1 -0
  55. package/dist/core/context.d.ts +13 -0
  56. package/dist/core/context.d.ts.map +1 -0
  57. package/dist/core/context.js +46 -0
  58. package/dist/core/context.js.map +1 -0
  59. package/dist/core/h.d.ts +4 -0
  60. package/dist/core/h.d.ts.map +1 -0
  61. package/dist/core/h.js +23 -0
  62. package/dist/core/h.js.map +1 -0
  63. package/dist/core/index.d.ts +14 -0
  64. package/dist/core/index.d.ts.map +1 -0
  65. package/dist/core/index.js +10 -0
  66. package/dist/core/index.js.map +1 -0
  67. package/dist/core/lifecycle.d.ts +11 -0
  68. package/dist/core/lifecycle.d.ts.map +1 -0
  69. package/dist/core/lifecycle.js +62 -0
  70. package/dist/core/lifecycle.js.map +1 -0
  71. package/dist/core/plugin.d.ts +17 -0
  72. package/dist/core/plugin.d.ts.map +1 -0
  73. package/dist/core/plugin.js +117 -0
  74. package/dist/core/plugin.js.map +1 -0
  75. package/dist/core/reactive-context.d.ts +20 -0
  76. package/dist/core/reactive-context.d.ts.map +1 -0
  77. package/dist/core/reactive-context.js +42 -0
  78. package/dist/core/reactive-context.js.map +1 -0
  79. package/dist/core/scheduler.d.ts +13 -0
  80. package/dist/core/scheduler.d.ts.map +1 -0
  81. package/dist/core/scheduler.js +80 -0
  82. package/dist/core/scheduler.js.map +1 -0
  83. package/dist/core/signal.d.ts +14 -0
  84. package/dist/core/signal.d.ts.map +1 -0
  85. package/dist/core/signal.js +397 -0
  86. package/dist/core/signal.js.map +1 -0
  87. package/dist/core/store.d.ts +6 -0
  88. package/dist/core/store.d.ts.map +1 -0
  89. package/dist/core/store.js +35 -0
  90. package/dist/core/store.js.map +1 -0
  91. package/dist/core/types.d.ts +52 -0
  92. package/dist/core/types.d.ts.map +1 -0
  93. package/dist/core/types.js +8 -0
  94. package/dist/core/types.js.map +1 -0
  95. package/dist/devtools/index.d.ts +5 -0
  96. package/dist/devtools/index.d.ts.map +1 -0
  97. package/dist/devtools/index.js +3 -0
  98. package/dist/devtools/index.js.map +1 -0
  99. package/dist/devtools/inspector.d.ts +14 -0
  100. package/dist/devtools/inspector.d.ts.map +1 -0
  101. package/dist/devtools/inspector.js +83 -0
  102. package/dist/devtools/inspector.js.map +1 -0
  103. package/dist/devtools/logger.d.ts +17 -0
  104. package/dist/devtools/logger.d.ts.map +1 -0
  105. package/dist/devtools/logger.js +44 -0
  106. package/dist/devtools/logger.js.map +1 -0
  107. package/dist/examples/counter.d.ts +4 -0
  108. package/dist/examples/counter.d.ts.map +1 -0
  109. package/dist/examples/counter.js +21 -0
  110. package/dist/examples/counter.js.map +1 -0
  111. package/dist/examples/ssr.d.ts +2 -0
  112. package/dist/examples/ssr.d.ts.map +1 -0
  113. package/dist/examples/ssr.js +43 -0
  114. package/dist/examples/ssr.js.map +1 -0
  115. package/dist/examples/todo.d.ts +4 -0
  116. package/dist/examples/todo.d.ts.map +1 -0
  117. package/dist/examples/todo.js +76 -0
  118. package/dist/examples/todo.js.map +1 -0
  119. package/dist/index.d.ts +18 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +20 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/plugins/index.d.ts +3 -0
  124. package/dist/plugins/index.d.ts.map +1 -0
  125. package/dist/plugins/index.js +2 -0
  126. package/dist/plugins/index.js.map +1 -0
  127. package/dist/plugins/router.d.ts +4 -0
  128. package/dist/plugins/router.d.ts.map +1 -0
  129. package/dist/plugins/router.js +90 -0
  130. package/dist/plugins/router.js.map +1 -0
  131. package/dist/plugins/types.d.ts +17 -0
  132. package/dist/plugins/types.d.ts.map +1 -0
  133. package/dist/plugins/types.js +2 -0
  134. package/dist/plugins/types.js.map +1 -0
  135. package/dist/render/reconciler.d.ts +6 -0
  136. package/dist/render/reconciler.d.ts.map +1 -0
  137. package/dist/render/reconciler.js +80 -0
  138. package/dist/render/reconciler.js.map +1 -0
  139. package/dist/render/types.d.ts +17 -0
  140. package/dist/render/types.d.ts.map +1 -0
  141. package/dist/render/types.js +2 -0
  142. package/dist/render/types.js.map +1 -0
  143. package/package.json +99 -0
package/LICENSE ADDED
@@ -0,0 +1,9 @@
1
+ PROPRIETARY & PRIVATE LICENSE
2
+
3
+ Copyright (c) 2026 Qumora / Avento Space. All rights reserved.
4
+
5
+ This software and all associated documentation files (the "Software") are proprietary and confidential. Unauthorized copying, modification, distribution, public display, transmission, or sublicensing of this Software, via any medium, is strictly prohibited.
6
+
7
+ No permission, license, or rights of any kind are granted to any individual, group, or entity to use, modify, compile, decompile, disassemble, reverse engineer, merge, publish, distribute, sublicense, and/or sell copies of the Software, except as explicitly authorized in writing by the copyright holders.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,277 @@
1
+ # Avento TS UI
2
+
3
+ **Framework-agnostic, signal-driven UI library for TypeScript.**
4
+
5
+ Build reactive user interfaces once and render them anywhere — DOM, SSR, or custom targets — without coupling your components to any specific framework, browser API, or runtime environment.
6
+
7
+ ---
8
+
9
+ ## Philosophy
10
+
11
+ Avento TS UI is built on a strict separation of concerns:
12
+
13
+ - **Core** — abstract UI model (VNodes), reactive primitives (signals/computed/effects), context, store, lifecycle, and plugin system. Zero platform dependencies.
14
+ - **Render** — generic `Renderer<T, THost>` interface that decouples UI definition from output strategy.
15
+ - **Adapters** — platform-specific renderers (DOM with reconciliation and hydration, SSR with streaming).
16
+ - **Components** — pure functional components consuming `(props, children?) => VNode`, fully portable across all adapters.
17
+
18
+ No layer depends on the internals of another. The same component function works unchanged in the browser and on the server.
19
+
20
+ ---
21
+
22
+ ## Features
23
+
24
+ - **Signal-based reactivity** — fine-grained, dependency-tracked, auto-batched updates
25
+ - **Computed values** — lazy, cached, dependency-aware derived state
26
+ - **Pure functional components** — no classes, no `this`, no hidden state
27
+ - **Pluggable renderers** — DOM (with reconciliation + hydration), SSR (string + streaming)
28
+ - **Context system** — typed provider chain for dependency injection
29
+ - **Immutable store** — subscription-based state management built on signals
30
+ - **Lifecycle hooks** — `onMount`, `onUnmount`, `onUpdate` (enabled by renderer)
31
+ - **Plugin architecture** — named hooks for extensibility (router, devtools, etc.)
32
+ - **Fragment support** — group children without extra DOM nodes
33
+ - **JSX transform** — `jsx`/`jsxs`/`jsxDEV` functions for compiler integration
34
+ - **Strong TypeScript** — full type inference for signals, components, and renderers
35
+ - **Zero runtime dependencies** — only TypeScript
36
+ ---
37
+
38
+ ## Quick Start
39
+
40
+ ### Install
41
+
42
+ ```bash
43
+ npm install @avento/ts-ui
44
+ ```
45
+
46
+ ### DOM Rendering
47
+
48
+ ```typescript
49
+ import { h, signal, computed, effect, mount } from '@avento/ts-ui';
50
+
51
+ const count = signal(0);
52
+ const doubled = computed(() => count.get() * 2);
53
+
54
+ function App() {
55
+ return h('div', { class: 'app' }, [
56
+ h('h1', null, ['Avento Counter']),
57
+ h('p', null, [`Count: `, count]),
58
+ h('p', null, [`Doubled: `, doubled]),
59
+ h('button', { onClick: () => count.set(count.get() + 1) }, ['+']),
60
+ h('button', { onClick: () => count.set(count.get() - 1) }, ['-']),
61
+ ]);
62
+ }
63
+
64
+ const renderer = mount(h(App), document.getElementById('root')!);
65
+ ```
66
+
67
+ Signal values passed directly in `children` or `props` are automatically bound — the DOM updates reactively without re-rendering the entire tree.
68
+
69
+ ### SSR Rendering
70
+
71
+ ```typescript
72
+ import { h, renderToString } from '@avento/ts-ui';
73
+
74
+ function Page() {
75
+ return h('div', { class: 'page' }, [
76
+ h('h1', null, ['Hello from SSR']),
77
+ h('p', null, ['This was rendered on the server.']),
78
+ ]);
79
+ }
80
+
81
+ const html = renderToString(h(Page));
82
+ console.log(html);
83
+ // <div class="page"><h1>Hello from SSR</h1><p>This was rendered on the server.</p></div>
84
+ ```
85
+
86
+ ---
87
+
88
+ ## Architecture
89
+
90
+ ```
91
+ src/
92
+ ├── core/ # VNode, Signal, Component, Context, Store, Lifecycle, Plugin
93
+ ├── render/ # Renderer<TOutput,THost> interface + VNode resolver
94
+ ├── adapters/ # Platform renderers
95
+ ├── adapters/ # Platform renderers
96
+ │ ├── dom/ # mount(), hydrate(), signal DOM bindings
97
+ │ └── ssr/ # renderToString(), renderToStream()
98
+ ├── components/ # Reusable components (Button, Input, List, Portal)
99
+ ├── plugins/ # Router plugin + plugin types
100
+ ├── compiler/ # JSX transform (jsx/jsxs/jsxDEV)
101
+ └── devtools/ # VNode inspector, state logger
102
+ ```
103
+
104
+ ### Dependency Flow
105
+
106
+ ```
107
+ Components ──► Core ◄── Plugins
108
+
109
+ Render Interface
110
+
111
+ ┌──────────┼──────────┐
112
+ │ │ │
113
+ DOM SSR Custom Adapter
114
+ ```
115
+
116
+ Core never imports from adapters. Adapters import Core. Components import only Core types and the `h` factory.
117
+
118
+ ---
119
+
120
+ ## Core Concepts
121
+
122
+ ### VNode
123
+
124
+ The universal UI representation:
125
+
126
+ ```typescript
127
+ interface VNode {
128
+ type: string | Component | typeof Fragment;
129
+ props: Record<string, any> | null;
130
+ children: VNodeChild[];
131
+ key?: string | number;
132
+ }
133
+ ```
134
+
135
+ ### `h()` — Hyperscript
136
+
137
+ ```typescript
138
+ h('div', { class: 'container' }, [
139
+ h('h1', null, ['Title']),
140
+ h('p', null, ['Paragraph with ', signalValue]),
141
+ ]);
142
+ ```
143
+
144
+ - `type` — element tag name, component function, or `Fragment`
145
+ - `props` — attributes, properties, event listeners (`onClick`, etc.), signals
146
+ - `children` — VNodes, strings, numbers, booleans, `null`, or signals
147
+
148
+ ### Signals
149
+
150
+ ```typescript
151
+ import { signal, computed, effect, batch, untrack } from '@avento/ts-ui';
152
+
153
+ const name = signal('World');
154
+ const greeting = computed(() => `Hello, ${name.get()}!`);
155
+
156
+ effect(() => {
157
+ console.log(greeting.get()); // logs whenever name changes
158
+ });
159
+
160
+ batch(() => {
161
+ name.set('Agnostic');
162
+ name.set('UI'); // only one notification after batch
163
+ });
164
+ ```
165
+
166
+ ### Context
167
+
168
+ ```typescript
169
+ import { createContext, useContext, h, mount } from '@avento/ts-ui';
170
+
171
+ const Theme = createContext('light');
172
+
173
+ function Panel() {
174
+ const theme = useContext(Theme);
175
+ return h('div', { class: `theme-${theme}` }, ['Themed content']);
176
+ }
177
+ ```
178
+
179
+ ---
180
+
181
+ ## Browser DOM
182
+
183
+ ```typescript
184
+ import { mount } from '@avento/ts-ui';
185
+
186
+ const instance = mount(h(App), document.getElementById('root')!);
187
+ // instance.render(newVNode) — re-render
188
+ // instance.hydrate(vnode) — attach to existing DOM
189
+ // instance.destroy() — unmount and clean up
190
+ ```
191
+
192
+ Signal values in props or children create direct DOM bindings — only the affected nodes update when the signal changes.
193
+
194
+ ---
195
+
196
+ ## Server-Side Rendering
197
+
198
+ ```typescript
199
+ import { renderToString, renderToStream } from '@avento/ts-ui';
200
+
201
+ // Full document
202
+ const html = renderToString(h(Page));
203
+
204
+ // Streaming
205
+ for await (const chunk of renderToStream(h(Page))) {
206
+ res.write(chunk);
207
+ }
208
+ ```
209
+
210
+ Signals are resolved at render time via `untrack()`. Event handlers and other DOM-only props are omitted from the HTML output.
211
+
212
+ ---
213
+
214
+ ## Built-in Components
215
+
216
+ Avento TS UI provides a set of highly optimized, platform-agnostic UI components:
217
+
218
+ - **Button**: Custom styled interactive button.
219
+ - **Input**: Reactive text input control with controlled states.
220
+ - **List**: Keyed child element list wrapper.
221
+ - **VirtualList**: Zero-overhead windowed list virtualization (scrolling requires external scroll bindings).
222
+ - **Portal**: Renders children outside the standard DOM hierarchy.
223
+
224
+ For complete API details and scroll state implementation examples, see the [Components Documentation](docs/components.md).
225
+
226
+ ---
227
+
228
+ ## Plugins
229
+
230
+ ```typescript
231
+ import { registerPlugin, createRouter } from '@avento/ts-ui';
232
+
233
+ const router = createRouter({ mode: 'history' });
234
+ registerPlugin(router);
235
+
236
+ router.navigate('/dashboard');
237
+ ```
238
+
239
+ The plugin system uses named hooks. Custom plugins receive a `PluginAPI` to register and invoke hooks.
240
+
241
+ ---
242
+
243
+ ## JSX Support
244
+
245
+ Configure your TypeScript `tsconfig.json`:
246
+
247
+ ```json
248
+ {
249
+ "compilerOptions": {
250
+ "jsx": "react-jsx",
251
+ "jsxImportSource": "@avento/ts-ui"
252
+ }
253
+ }
254
+ ```
255
+
256
+ The compiler module exports `jsx`, `jsxs`, and `jsxDEV` for the automatic JSX runtime.
257
+
258
+ ---
259
+
260
+ ## Project Structure
261
+
262
+ | Layer | Directory | Responsibility |
263
+ |-------|-----------|----------------|
264
+ | Core | `src/core/` | VNode, signals, context, store, lifecycle, plugins |
265
+ | Render | `src/render/` | Renderer interface, VNode resolver |
266
+ | DOM Adapter | `src/adapters/dom/` | mount(), hydrate(), signal bindings |
267
+ | SSR Adapter | `src/adapters/ssr/` | renderToString(), renderToStream() |
268
+ | Components | `src/components/` | Button, Input, List, Portal |
269
+ | Plugins | `src/plugins/` | Router plugin |
270
+ | Compiler | `src/compiler/` | JSX transform functions |
271
+ | DevTools | `src/devtools/` | Inspector, state logger |
272
+
273
+ ---
274
+
275
+ ## License
276
+
277
+ MIT
@@ -0,0 +1,4 @@
1
+ import type { VNode } from '../../core/types.js';
2
+ import type { ContextProvider } from '../../core/context.js';
3
+ export declare function hydrateVNode(vnode: VNode, container: Element, providers?: ContextProvider[] | null): void;
4
+ //# sourceMappingURL=hydration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../../src/adapters/dom/hydration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,qBAAqB,CAAC;AAS7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA6B7D,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,OAAO,EAClB,SAAS,GAAE,eAAe,EAAE,GAAG,IAAW,GACzC,IAAI,CAGN"}
@@ -0,0 +1,366 @@
1
+ import { Fragment } from '../../core/types.js';
2
+ import { isSignal, effect } from '../../core/signal.js';
3
+ import { createLifecycleContext, setCurrentLifecycle, } from '../../core/lifecycle.js';
4
+ import { setContextProviders, } from '../../core/context.js';
5
+ import { resolveVNode } from '../../render/reconciler.js';
6
+ import { createDOMNode } from './renderer.js';
7
+ import { trackEffect, disposeNodeEffects, pushNodeLifecycle, runNodeUnmountLifecycles, trackPropEffect as trackHydrationPropDispose, setNodeKey, getNodeKey, } from './node-metadata.js';
8
+ function buildKeyMap(parent) {
9
+ const map = new Map();
10
+ for (let i = 0; i < parent.childNodes.length; i++) {
11
+ const child = parent.childNodes[i];
12
+ let key = getNodeKey(child);
13
+ if (key == null && child.getAttribute) {
14
+ const dataKey = child.getAttribute('data-key');
15
+ if (dataKey != null) {
16
+ key = dataKey;
17
+ setNodeKey(child, key);
18
+ }
19
+ }
20
+ if (key != null) {
21
+ map.set(key, child);
22
+ }
23
+ }
24
+ return map;
25
+ }
26
+ export function hydrateVNode(vnode, container, providers = null) {
27
+ const resolved = resolveVNode(vnode);
28
+ attachTree(resolved, container, 0, providers);
29
+ }
30
+ function countVNodePositions(vnode) {
31
+ if (vnode.type === Fragment) {
32
+ let count = 0;
33
+ for (const child of vnode.children) {
34
+ if (child == null || child === false)
35
+ continue;
36
+ if (typeof child === 'string' || typeof child === 'number' || typeof child === 'boolean') {
37
+ count++;
38
+ }
39
+ else if (isSignal(child)) {
40
+ count++;
41
+ }
42
+ else {
43
+ count += countVNodePositions(child);
44
+ }
45
+ }
46
+ return count;
47
+ }
48
+ return 1;
49
+ }
50
+ function attachTree(vnode, parent, index, providers) {
51
+ if (vnode.type === Fragment) {
52
+ let childIdx = 0;
53
+ for (const child of vnode.children) {
54
+ if (child == null || child === false)
55
+ continue;
56
+ if (typeof child === 'string' || typeof child === 'number' || typeof child === 'boolean') {
57
+ const existing = parent.childNodes[index + childIdx];
58
+ if (existing) {
59
+ existing.textContent = String(child);
60
+ }
61
+ else {
62
+ parent.appendChild(document.createTextNode(String(child)));
63
+ }
64
+ childIdx++;
65
+ }
66
+ else if (isSignal(child)) {
67
+ const existing = parent.childNodes[index + childIdx];
68
+ if (existing) {
69
+ const dispose = effect(() => {
70
+ existing.textContent = String(child.get() ?? '');
71
+ });
72
+ trackEffect(existing, dispose);
73
+ }
74
+ else {
75
+ const text = document.createTextNode(String(child.get() ?? ''));
76
+ const dispose = effect(() => {
77
+ text.textContent = String(child.get() ?? '');
78
+ });
79
+ trackEffect(text, dispose);
80
+ parent.insertBefore(text, parent.childNodes[index + childIdx] ?? null);
81
+ }
82
+ childIdx++;
83
+ }
84
+ else {
85
+ const vn = child;
86
+ const existing = parent.childNodes[index + childIdx];
87
+ if (existing) {
88
+ const attached = attachTree(vn, parent, index + childIdx, providers);
89
+ if (attached)
90
+ childIdx++;
91
+ }
92
+ else {
93
+ const nodes = createDOMNode(vn, providers);
94
+ if (Array.isArray(nodes)) {
95
+ for (const n of nodes) {
96
+ parent.insertBefore(n, parent.childNodes[index + childIdx] ?? null);
97
+ childIdx++;
98
+ }
99
+ }
100
+ else {
101
+ parent.insertBefore(nodes, parent.childNodes[index + childIdx] ?? null);
102
+ childIdx++;
103
+ }
104
+ }
105
+ }
106
+ }
107
+ return null;
108
+ }
109
+ let existing = parent.childNodes[index];
110
+ if (vnode.key != null) {
111
+ const keyStr = String(vnode.key);
112
+ for (let ci = 0; ci < parent.childNodes.length; ci++) {
113
+ const child = parent.childNodes[ci];
114
+ const childKey = getNodeKey(child) ?? (child.getAttribute?.('data-key'));
115
+ if (childKey != null && String(childKey) === keyStr) {
116
+ existing = child;
117
+ break;
118
+ }
119
+ }
120
+ }
121
+ if (!existing) {
122
+ const created = createDOMNode(vnode, providers);
123
+ if (Array.isArray(created)) {
124
+ const frag = document.createDocumentFragment();
125
+ for (const n of created)
126
+ frag.appendChild(n);
127
+ parent.insertBefore(frag, parent.childNodes[index] ?? null);
128
+ }
129
+ else {
130
+ parent.insertBefore(created, parent.childNodes[index] ?? null);
131
+ }
132
+ return created instanceof Node ? created : (created[0] ?? null);
133
+ }
134
+ if (typeof vnode.type === 'function') {
135
+ const comp = vnode.type;
136
+ if (comp.__isPortal) {
137
+ const target = comp.__portalTarget;
138
+ if (!target)
139
+ return null;
140
+ const lifecycle = createLifecycleContext();
141
+ const prevLifecycle = setCurrentLifecycle(lifecycle);
142
+ const prevProviders = setContextProviders(providers);
143
+ try {
144
+ const anchor = document.createComment('portal');
145
+ let childIdx = 0;
146
+ for (const child of vnode.children) {
147
+ if (child == null || child === false)
148
+ continue;
149
+ if (typeof child === 'string' || typeof child === 'number' || typeof child === 'boolean') {
150
+ target.appendChild(document.createTextNode(String(child)));
151
+ childIdx++;
152
+ }
153
+ else if (isSignal(child)) {
154
+ const text = document.createTextNode(String(child.get() ?? ''));
155
+ const dispose = effect(() => {
156
+ text.textContent = String(child.get() ?? '');
157
+ });
158
+ trackEffect(text, dispose);
159
+ target.appendChild(text);
160
+ childIdx++;
161
+ }
162
+ else {
163
+ const vn = child;
164
+ const nodes = createDOMNode(vn, providers);
165
+ if (Array.isArray(nodes)) {
166
+ for (const n of nodes)
167
+ target.appendChild(n);
168
+ }
169
+ else {
170
+ target.appendChild(nodes);
171
+ }
172
+ childIdx++;
173
+ }
174
+ }
175
+ lifecycle.runHook('mount');
176
+ pushNodeLifecycle(anchor, lifecycle);
177
+ return anchor;
178
+ }
179
+ finally {
180
+ setCurrentLifecycle(prevLifecycle);
181
+ setContextProviders(prevProviders);
182
+ }
183
+ }
184
+ const lifecycle = createLifecycleContext();
185
+ const prevLifecycle = setCurrentLifecycle(lifecycle);
186
+ const prevProviders = setContextProviders(providers);
187
+ try {
188
+ const resolved = resolveVNode(vnode);
189
+ if (resolved.type === Fragment) {
190
+ const posBefore = countVNodePositions(resolved);
191
+ attachTree(resolved, parent, index, providers);
192
+ lifecycle.runHook('mount');
193
+ for (let i = 0; i < posBefore; i++) {
194
+ const child = parent.childNodes[index + i];
195
+ if (child)
196
+ pushNodeLifecycle(child, lifecycle);
197
+ }
198
+ return null;
199
+ }
200
+ const result = attachTree(resolved, parent, index, providers);
201
+ lifecycle.runHook('mount');
202
+ if (result)
203
+ pushNodeLifecycle(result, lifecycle);
204
+ return result;
205
+ }
206
+ finally {
207
+ setCurrentLifecycle(prevLifecycle);
208
+ setContextProviders(prevProviders);
209
+ }
210
+ }
211
+ const el = existing;
212
+ if (vnode.props) {
213
+ for (const [key, value] of Object.entries(vnode.props)) {
214
+ if (key === 'key') {
215
+ if (value != null) {
216
+ setNodeKey(el, value);
217
+ }
218
+ continue;
219
+ }
220
+ if (key === 'children')
221
+ continue;
222
+ if (isSignal(value)) {
223
+ let prevHandler = null;
224
+ const apply = () => {
225
+ const val = value.get();
226
+ if (key.startsWith('on') && typeof val === 'function') {
227
+ const event = key.slice(2).toLowerCase();
228
+ if (prevHandler) {
229
+ el.removeEventListener(event, prevHandler);
230
+ }
231
+ prevHandler = val;
232
+ el.addEventListener(event, prevHandler);
233
+ }
234
+ else if (key === 'className' || key === 'class') {
235
+ el.setAttribute('class', String(val ?? ''));
236
+ }
237
+ else if (val != null && val !== false) {
238
+ el.setAttribute(key, String(val));
239
+ }
240
+ else {
241
+ el.removeAttribute(key);
242
+ }
243
+ };
244
+ const dispose = effect(apply);
245
+ trackEffect(el, dispose);
246
+ trackHydrationPropDispose(el, key, () => {
247
+ if (prevHandler && key.startsWith('on')) {
248
+ const event = key.slice(2).toLowerCase();
249
+ el.removeEventListener(event, prevHandler);
250
+ }
251
+ });
252
+ }
253
+ else if (key.startsWith('on') && typeof value === 'function') {
254
+ const event = key.slice(2).toLowerCase();
255
+ const handler = value;
256
+ el.addEventListener(event, handler);
257
+ trackHydrationPropDispose(el, key, () => {
258
+ el.removeEventListener(event, handler);
259
+ });
260
+ }
261
+ }
262
+ }
263
+ let childIdx = 0;
264
+ const keyMap = buildKeyMap(el);
265
+ const usedIndices = new Set();
266
+ for (let i = 0; i < vnode.children.length; i++) {
267
+ const child = vnode.children[i];
268
+ if (child == null || child === false)
269
+ continue;
270
+ if (typeof child === 'string' || typeof child === 'number' || typeof child === 'boolean') {
271
+ const target = el.childNodes[childIdx];
272
+ if (target) {
273
+ if (target.textContent !== String(child)) {
274
+ target.textContent = String(child);
275
+ }
276
+ }
277
+ else {
278
+ el.appendChild(document.createTextNode(String(child)));
279
+ }
280
+ childIdx++;
281
+ }
282
+ else if (isSignal(child)) {
283
+ const target = el.childNodes[childIdx];
284
+ if (target) {
285
+ const dispose = effect(() => {
286
+ target.textContent = String(child.get() ?? '');
287
+ });
288
+ trackEffect(target, dispose);
289
+ }
290
+ else {
291
+ const text = document.createTextNode(String(child.get() ?? ''));
292
+ const dispose = effect(() => {
293
+ text.textContent = String(child.get() ?? '');
294
+ });
295
+ trackEffect(text, dispose);
296
+ el.appendChild(text);
297
+ }
298
+ childIdx++;
299
+ }
300
+ else {
301
+ const vn = child;
302
+ const vnKey = vn.key != null ? vn.key : undefined;
303
+ if (vnKey != null && keyMap.has(vnKey)) {
304
+ const keyedNode = keyMap.get(vnKey);
305
+ const currentAtIdx = el.childNodes[childIdx];
306
+ if (keyedNode !== currentAtIdx) {
307
+ el.insertBefore(keyedNode, currentAtIdx ?? null);
308
+ }
309
+ const childNodes = el.childNodes;
310
+ for (let j = 0; j < childNodes.length; j++) {
311
+ if (childNodes[j] === keyedNode) {
312
+ usedIndices.add(j);
313
+ break;
314
+ }
315
+ }
316
+ attachTree(vn, el, childIdx, providers);
317
+ childIdx++;
318
+ }
319
+ else if (childIdx < el.childNodes.length) {
320
+ const existingNode = el.childNodes[childIdx];
321
+ const existingKey = getNodeKey(existingNode);
322
+ if (existingKey == null && vnKey == null) {
323
+ usedIndices.add(childIdx);
324
+ attachTree(vn, el, childIdx, providers);
325
+ childIdx++;
326
+ }
327
+ else {
328
+ const nodes = createDOMNode(vn, providers);
329
+ if (Array.isArray(nodes)) {
330
+ for (const n of nodes) {
331
+ el.insertBefore(n, existingNode ?? null);
332
+ childIdx++;
333
+ }
334
+ }
335
+ else {
336
+ el.insertBefore(nodes, existingNode ?? null);
337
+ childIdx++;
338
+ }
339
+ }
340
+ }
341
+ else {
342
+ const nodes = createDOMNode(vn, providers);
343
+ if (Array.isArray(nodes)) {
344
+ for (const n of nodes) {
345
+ el.appendChild(n);
346
+ childIdx++;
347
+ }
348
+ }
349
+ else {
350
+ el.appendChild(nodes);
351
+ childIdx++;
352
+ }
353
+ }
354
+ }
355
+ }
356
+ while (el.childNodes.length > childIdx) {
357
+ const extra = el.childNodes[childIdx];
358
+ if (extra) {
359
+ disposeNodeEffects(extra);
360
+ runNodeUnmountLifecycles(extra);
361
+ el.removeChild(extra);
362
+ }
363
+ }
364
+ return el;
365
+ }
366
+ //# sourceMappingURL=hydration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydration.js","sourceRoot":"","sources":["../../../src/adapters/dom/hydration.ts"],"names":[],"mappings":"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"}