@furystack/shades 11.1.0 → 12.0.1

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 (166) hide show
  1. package/CHANGELOG.md +312 -0
  2. package/README.md +13 -13
  3. package/esm/component-factory.spec.js +13 -5
  4. package/esm/component-factory.spec.js.map +1 -1
  5. package/esm/components/index.d.ts +4 -1
  6. package/esm/components/index.d.ts.map +1 -1
  7. package/esm/components/index.js +4 -1
  8. package/esm/components/index.js.map +1 -1
  9. package/esm/components/lazy-load.d.ts +2 -4
  10. package/esm/components/lazy-load.d.ts.map +1 -1
  11. package/esm/components/lazy-load.js +40 -24
  12. package/esm/components/lazy-load.js.map +1 -1
  13. package/esm/components/lazy-load.spec.js +57 -50
  14. package/esm/components/lazy-load.spec.js.map +1 -1
  15. package/esm/components/link-to-route.d.ts +2 -0
  16. package/esm/components/link-to-route.d.ts.map +1 -1
  17. package/esm/components/link-to-route.js +3 -2
  18. package/esm/components/link-to-route.js.map +1 -1
  19. package/esm/components/link-to-route.spec.js +13 -9
  20. package/esm/components/link-to-route.spec.js.map +1 -1
  21. package/esm/components/nested-route-link.d.ts +62 -0
  22. package/esm/components/nested-route-link.d.ts.map +1 -0
  23. package/esm/components/nested-route-link.js +66 -0
  24. package/esm/components/nested-route-link.js.map +1 -0
  25. package/esm/components/nested-route-link.spec.d.ts +2 -0
  26. package/esm/components/nested-route-link.spec.d.ts.map +1 -0
  27. package/esm/components/nested-route-link.spec.js +179 -0
  28. package/esm/components/nested-route-link.spec.js.map +1 -0
  29. package/esm/components/nested-route-types.d.ts +37 -0
  30. package/esm/components/nested-route-types.d.ts.map +1 -0
  31. package/esm/components/nested-route-types.js +2 -0
  32. package/esm/components/nested-route-types.js.map +1 -0
  33. package/esm/components/nested-router.d.ts +103 -0
  34. package/esm/components/nested-router.d.ts.map +1 -0
  35. package/esm/components/nested-router.js +183 -0
  36. package/esm/components/nested-router.js.map +1 -0
  37. package/esm/components/nested-router.spec.d.ts +2 -0
  38. package/esm/components/nested-router.spec.d.ts.map +1 -0
  39. package/esm/components/nested-router.spec.js +737 -0
  40. package/esm/components/nested-router.spec.js.map +1 -0
  41. package/esm/components/route-link.d.ts +4 -0
  42. package/esm/components/route-link.d.ts.map +1 -1
  43. package/esm/components/route-link.js +5 -5
  44. package/esm/components/route-link.js.map +1 -1
  45. package/esm/components/route-link.spec.js +16 -12
  46. package/esm/components/route-link.spec.js.map +1 -1
  47. package/esm/components/router.d.ts +20 -2
  48. package/esm/components/router.d.ts.map +1 -1
  49. package/esm/components/router.js +12 -7
  50. package/esm/components/router.js.map +1 -1
  51. package/esm/components/router.spec.js +141 -74
  52. package/esm/components/router.spec.js.map +1 -1
  53. package/esm/initialize.d.ts +11 -0
  54. package/esm/initialize.d.ts.map +1 -1
  55. package/esm/initialize.js +5 -0
  56. package/esm/initialize.js.map +1 -1
  57. package/esm/jsx.d.ts +83 -2
  58. package/esm/jsx.d.ts.map +1 -1
  59. package/esm/models/children-list.d.ts +5 -1
  60. package/esm/models/children-list.d.ts.map +1 -1
  61. package/esm/models/partial-element.d.ts +12 -2
  62. package/esm/models/partial-element.d.ts.map +1 -1
  63. package/esm/models/render-options.d.ts +89 -3
  64. package/esm/models/render-options.d.ts.map +1 -1
  65. package/esm/models/selection-state.d.ts +4 -0
  66. package/esm/models/selection-state.d.ts.map +1 -1
  67. package/esm/services/location-service.d.ts +11 -0
  68. package/esm/services/location-service.d.ts.map +1 -1
  69. package/esm/services/location-service.js +11 -0
  70. package/esm/services/location-service.js.map +1 -1
  71. package/esm/services/resource-manager.d.ts +24 -0
  72. package/esm/services/resource-manager.d.ts.map +1 -1
  73. package/esm/services/resource-manager.js +36 -1
  74. package/esm/services/resource-manager.js.map +1 -1
  75. package/esm/services/resource-manager.spec.js +102 -0
  76. package/esm/services/resource-manager.spec.js.map +1 -1
  77. package/esm/services/screen-service.d.ts +81 -4
  78. package/esm/services/screen-service.d.ts.map +1 -1
  79. package/esm/services/screen-service.js +75 -4
  80. package/esm/services/screen-service.js.map +1 -1
  81. package/esm/services/screen-service.spec.js +91 -7
  82. package/esm/services/screen-service.spec.js.map +1 -1
  83. package/esm/shade-component.d.ts +17 -4
  84. package/esm/shade-component.d.ts.map +1 -1
  85. package/esm/shade-component.js +67 -5
  86. package/esm/shade-component.js.map +1 -1
  87. package/esm/shade-host-props-ref.integration.spec.d.ts +2 -0
  88. package/esm/shade-host-props-ref.integration.spec.d.ts.map +1 -0
  89. package/esm/shade-host-props-ref.integration.spec.js +381 -0
  90. package/esm/shade-host-props-ref.integration.spec.js.map +1 -0
  91. package/esm/shade-resources.integration.spec.js +208 -39
  92. package/esm/shade-resources.integration.spec.js.map +1 -1
  93. package/esm/shade.d.ts +20 -17
  94. package/esm/shade.d.ts.map +1 -1
  95. package/esm/shade.js +172 -33
  96. package/esm/shade.js.map +1 -1
  97. package/esm/shade.spec.js +31 -30
  98. package/esm/shade.spec.js.map +1 -1
  99. package/esm/shades.integration.spec.js +135 -72
  100. package/esm/shades.integration.spec.js.map +1 -1
  101. package/esm/style-manager.d.ts +2 -2
  102. package/esm/style-manager.js +2 -2
  103. package/esm/svg-types.d.ts +389 -0
  104. package/esm/svg-types.d.ts.map +1 -0
  105. package/esm/svg-types.js +9 -0
  106. package/esm/svg-types.js.map +1 -0
  107. package/esm/svg.d.ts +15 -0
  108. package/esm/svg.d.ts.map +1 -0
  109. package/esm/svg.js +76 -0
  110. package/esm/svg.js.map +1 -0
  111. package/esm/svg.spec.d.ts +2 -0
  112. package/esm/svg.spec.d.ts.map +1 -0
  113. package/esm/svg.spec.js +80 -0
  114. package/esm/svg.spec.js.map +1 -0
  115. package/esm/vnode.d.ts +103 -0
  116. package/esm/vnode.d.ts.map +1 -0
  117. package/esm/vnode.integration.spec.d.ts +2 -0
  118. package/esm/vnode.integration.spec.d.ts.map +1 -0
  119. package/esm/vnode.integration.spec.js +494 -0
  120. package/esm/vnode.integration.spec.js.map +1 -0
  121. package/esm/vnode.js +453 -0
  122. package/esm/vnode.js.map +1 -0
  123. package/esm/vnode.spec.d.ts +2 -0
  124. package/esm/vnode.spec.d.ts.map +1 -0
  125. package/esm/vnode.spec.js +473 -0
  126. package/esm/vnode.spec.js.map +1 -0
  127. package/package.json +8 -9
  128. package/src/component-factory.spec.tsx +18 -5
  129. package/src/components/index.ts +4 -1
  130. package/src/components/lazy-load.spec.tsx +82 -75
  131. package/src/components/lazy-load.tsx +49 -27
  132. package/src/components/link-to-route.spec.tsx +25 -21
  133. package/src/components/link-to-route.tsx +4 -2
  134. package/src/components/nested-route-link.spec.tsx +303 -0
  135. package/src/components/nested-route-link.tsx +100 -0
  136. package/src/components/nested-route-types.ts +42 -0
  137. package/src/components/nested-router.spec.tsx +918 -0
  138. package/src/components/nested-router.tsx +260 -0
  139. package/src/components/route-link.spec.tsx +22 -18
  140. package/src/components/route-link.tsx +6 -5
  141. package/src/components/router.spec.tsx +196 -108
  142. package/src/components/router.tsx +21 -8
  143. package/src/initialize.ts +12 -0
  144. package/src/jsx.ts +129 -2
  145. package/src/models/children-list.ts +7 -1
  146. package/src/models/partial-element.ts +13 -2
  147. package/src/models/render-options.ts +90 -3
  148. package/src/models/selection-state.ts +4 -0
  149. package/src/services/location-service.tsx +11 -0
  150. package/src/services/resource-manager.spec.ts +128 -0
  151. package/src/services/resource-manager.ts +36 -1
  152. package/src/services/screen-service.spec.ts +109 -7
  153. package/src/services/screen-service.ts +81 -4
  154. package/src/shade-component.ts +72 -6
  155. package/src/shade-host-props-ref.integration.spec.tsx +460 -0
  156. package/src/shade-resources.integration.spec.tsx +276 -52
  157. package/src/shade.spec.tsx +40 -39
  158. package/src/shade.ts +186 -58
  159. package/src/shades.integration.spec.tsx +154 -80
  160. package/src/style-manager.ts +2 -2
  161. package/src/svg-types.ts +437 -0
  162. package/src/svg.spec.ts +89 -0
  163. package/src/svg.ts +78 -0
  164. package/src/vnode.integration.spec.tsx +657 -0
  165. package/src/vnode.spec.ts +579 -0
  166. package/src/vnode.ts +508 -0
package/esm/vnode.js ADDED
@@ -0,0 +1,453 @@
1
+ /**
2
+ * VNode-based reconciliation for Shades.
3
+ *
4
+ * Instead of creating real DOM elements during each render and then diffing them,
5
+ * the JSX factory produces lightweight VNode descriptors. A reconciler diffs the
6
+ * previous VNode tree against the new one and applies surgical DOM updates using
7
+ * tracked `_el` references.
8
+ */
9
+ import { SVG_NS, isSvgTag } from './svg.js';
10
+ // ---------------------------------------------------------------------------
11
+ // Brands & sentinels
12
+ // ---------------------------------------------------------------------------
13
+ const VNODE_BRAND = 'vnode';
14
+ const VTEXT_BRAND = 'vtext';
15
+ /**
16
+ * Sentinel type used as VNode.type for JSX fragments (`<>...</>`).
17
+ */
18
+ export const FRAGMENT = Symbol('fragment');
19
+ /**
20
+ * Sentinel type for VNodes that wrap a pre-existing real DOM node.
21
+ * Used when shadeChildren (created outside render mode) flow into a VNode render.
22
+ */
23
+ export const EXISTING_NODE = Symbol('existing-node');
24
+ // ---------------------------------------------------------------------------
25
+ // Type guards
26
+ // ---------------------------------------------------------------------------
27
+ export const isVNode = (v) => typeof v === 'object' && v !== null && v._brand === VNODE_BRAND;
28
+ export const isVTextNode = (v) => typeof v === 'object' && v !== null && v._brand === VTEXT_BRAND;
29
+ // ---------------------------------------------------------------------------
30
+ // VNode creation
31
+ // ---------------------------------------------------------------------------
32
+ /**
33
+ * Recursively flattens raw JSX children into a flat VChild array.
34
+ * - Strings and numbers become VTextNodes.
35
+ * - Fragment VNodes are inlined (their children are spliced in).
36
+ * - Nullish / boolean values are skipped.
37
+ */
38
+ export const flattenVChildren = (raw) => {
39
+ const result = [];
40
+ for (const child of raw) {
41
+ if (child === null || child === undefined || child === false || child === true)
42
+ continue;
43
+ if (typeof child === 'string') {
44
+ result.push({ _brand: VTEXT_BRAND, text: child });
45
+ }
46
+ else if (typeof child === 'number') {
47
+ result.push({ _brand: VTEXT_BRAND, text: String(child) });
48
+ }
49
+ else if (Array.isArray(child)) {
50
+ result.push(...flattenVChildren(child));
51
+ }
52
+ else if (isVNode(child)) {
53
+ if (child.type === FRAGMENT) {
54
+ result.push(...child.children);
55
+ }
56
+ else {
57
+ result.push(child);
58
+ }
59
+ }
60
+ else if (isVTextNode(child)) {
61
+ result.push(child);
62
+ }
63
+ else if (child instanceof Node) {
64
+ // Real DOM node from shadeChildren (created outside render mode).
65
+ // Wrap it so the reconciler can track it.
66
+ result.push({ _brand: VNODE_BRAND, type: EXISTING_NODE, props: null, children: [], _el: child });
67
+ }
68
+ }
69
+ return result;
70
+ };
71
+ /**
72
+ * Creates a VNode descriptor. Used as the JSX factory during renders.
73
+ *
74
+ * For intrinsic elements (string type), the returned VNode includes DOM-shim
75
+ * methods (`setAttribute`, `appendChild`, etc.) so that component code which
76
+ * creates intermediate JSX and calls DOM methods on it continues to work.
77
+ *
78
+ * @param type Tag name, Shade factory function, or null (fragment)
79
+ * @param props Element props / component props
80
+ * @param rawChildren Varargs children (strings, VNodes, arrays, etc.)
81
+ */
82
+ export const createVNode = (type, props, ...rawChildren) => {
83
+ const children = flattenVChildren(rawChildren);
84
+ const vnode = {
85
+ _brand: VNODE_BRAND,
86
+ type: type === null ? FRAGMENT : type,
87
+ props: props ? { ...props } : null,
88
+ children,
89
+ };
90
+ // For intrinsic elements, add DOM-shim methods so that component render code
91
+ // which does `const el = <div/>; el.setAttribute(...)` still works in VNode mode.
92
+ if (typeof type === 'string') {
93
+ const v = vnode;
94
+ v.setAttribute = (name, value) => {
95
+ if (!vnode.props)
96
+ vnode.props = {};
97
+ vnode.props[name] = value;
98
+ };
99
+ v.removeAttribute = (name) => {
100
+ if (vnode.props)
101
+ delete vnode.props[name];
102
+ };
103
+ v.getAttribute = (name) => {
104
+ return vnode.props?.[name] ?? null;
105
+ };
106
+ v.hasAttribute = (name) => {
107
+ return vnode.props ? name in vnode.props : false;
108
+ };
109
+ v.appendChild = (child) => {
110
+ if (child instanceof Node) {
111
+ vnode.children.push({ _brand: VNODE_BRAND, type: EXISTING_NODE, props: null, children: [], _el: child });
112
+ }
113
+ else if (isVNode(child) || isVTextNode(child)) {
114
+ vnode.children.push(child);
115
+ }
116
+ return child;
117
+ };
118
+ v.tagName = type.toUpperCase();
119
+ v.nodeName = type.toUpperCase();
120
+ }
121
+ return vnode;
122
+ };
123
+ // ---------------------------------------------------------------------------
124
+ // Helpers
125
+ // ---------------------------------------------------------------------------
126
+ /**
127
+ * Shallow-compares two props objects. Returns true if all keys and values match.
128
+ */
129
+ export const shallowEqual = (a, b) => {
130
+ if (a === b)
131
+ return true;
132
+ if (!a || !b)
133
+ return false;
134
+ const keysA = Object.keys(a);
135
+ const keysB = Object.keys(b);
136
+ if (keysA.length !== keysB.length)
137
+ return false;
138
+ for (const key of keysA) {
139
+ if (a[key] !== b[key])
140
+ return false;
141
+ }
142
+ return true;
143
+ };
144
+ /**
145
+ * Converts a render result (VNode | HTMLElement | string | null) into a flat
146
+ * VChild array suitable for `patchChildren`.
147
+ *
148
+ * Real DOM elements can appear here when component state stores elements created
149
+ * outside renderMode (e.g. in async callbacks like Router's `updateUrl`).
150
+ */
151
+ export const toVChildArray = (renderResult) => {
152
+ if (renderResult === null || renderResult === undefined)
153
+ return [];
154
+ if (typeof renderResult === 'string' || typeof renderResult === 'number') {
155
+ return [{ _brand: VTEXT_BRAND, text: String(renderResult) }];
156
+ }
157
+ if (isVNode(renderResult)) {
158
+ if (renderResult.type === FRAGMENT)
159
+ return renderResult.children;
160
+ return [renderResult];
161
+ }
162
+ // Real DOM element (from async code that ran outside renderMode)
163
+ if (renderResult instanceof DocumentFragment) {
164
+ return Array.from(renderResult.childNodes).map((node) => ({
165
+ _brand: VNODE_BRAND,
166
+ type: EXISTING_NODE,
167
+ props: null,
168
+ children: [],
169
+ _el: node,
170
+ }));
171
+ }
172
+ if (renderResult instanceof Node) {
173
+ return [{ _brand: VNODE_BRAND, type: EXISTING_NODE, props: null, children: [], _el: renderResult }];
174
+ }
175
+ return [];
176
+ };
177
+ // ---------------------------------------------------------------------------
178
+ // Props / style application
179
+ // ---------------------------------------------------------------------------
180
+ const setProp = (el, key, value) => {
181
+ if (key === 'ref')
182
+ return;
183
+ if (key === 'style' && typeof value === 'object' && value !== null) {
184
+ for (const [sk, sv] of Object.entries(value)) {
185
+ ;
186
+ el.style[sk] = sv;
187
+ }
188
+ return;
189
+ }
190
+ if (el instanceof SVGElement) {
191
+ if (key === 'className') {
192
+ el.setAttribute('class', String(value));
193
+ }
194
+ else if (key.startsWith('on') && typeof value === 'function') {
195
+ ;
196
+ el[key] = value;
197
+ }
198
+ else if (value === null || value === undefined || value === false) {
199
+ el.removeAttribute(key);
200
+ }
201
+ else {
202
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
203
+ el.setAttribute(key, String(value));
204
+ }
205
+ return;
206
+ }
207
+ if (key.startsWith('data-') || key.startsWith('aria-')) {
208
+ el.setAttribute(key, typeof value === 'string' ? value : '');
209
+ }
210
+ else {
211
+ ;
212
+ el[key] = value;
213
+ }
214
+ };
215
+ const removeProp = (el, key) => {
216
+ if (key === 'ref')
217
+ return;
218
+ if (el instanceof SVGElement) {
219
+ el.removeAttribute(key === 'className' ? 'class' : key);
220
+ return;
221
+ }
222
+ if (key === 'style') {
223
+ el.removeAttribute('style');
224
+ }
225
+ else if (key.startsWith('data-') || key.startsWith('aria-')) {
226
+ el.removeAttribute(key);
227
+ }
228
+ else if (key.startsWith('on')) {
229
+ ;
230
+ el[key] = null;
231
+ }
232
+ else {
233
+ try {
234
+ ;
235
+ el[key] = '';
236
+ }
237
+ catch {
238
+ // Some properties are read-only
239
+ }
240
+ }
241
+ };
242
+ const patchStyle = (el, oldStyle, newStyle) => {
243
+ const style = el.style;
244
+ const oldS = oldStyle || {};
245
+ const newS = newStyle || {};
246
+ for (const key of Object.keys(oldS)) {
247
+ if (!(key in newS)) {
248
+ style[key] = '';
249
+ }
250
+ }
251
+ for (const [key, value] of Object.entries(newS)) {
252
+ if (oldS[key] !== value) {
253
+ style[key] = value;
254
+ }
255
+ }
256
+ };
257
+ /**
258
+ * Applies all props to a freshly created element (initial mount).
259
+ */
260
+ const applyProps = (el, props) => {
261
+ if (!props)
262
+ return;
263
+ for (const [key, value] of Object.entries(props)) {
264
+ setProp(el, key, value);
265
+ }
266
+ };
267
+ /**
268
+ * Diffs old and new props and applies minimal updates to a live DOM element.
269
+ */
270
+ export const patchProps = (el, oldProps, newProps) => {
271
+ const oldP = oldProps || {};
272
+ const newP = newProps || {};
273
+ // Remove props that no longer exist
274
+ for (const key of Object.keys(oldP)) {
275
+ if (!(key in newP)) {
276
+ removeProp(el, key);
277
+ }
278
+ }
279
+ // Add / update props
280
+ for (const [key, value] of Object.entries(newP)) {
281
+ if (key === 'style') {
282
+ patchStyle(el, oldP.style, value);
283
+ }
284
+ else if (oldP[key] !== value) {
285
+ setProp(el, key, value);
286
+ }
287
+ }
288
+ };
289
+ // ---------------------------------------------------------------------------
290
+ // Mount (VNode tree → real DOM)
291
+ // ---------------------------------------------------------------------------
292
+ /**
293
+ * Creates real DOM nodes from a VChild and optionally appends to a parent.
294
+ * Sets `_el` on the VChild so subsequent patches can find the DOM node.
295
+ * @returns The created DOM node.
296
+ */
297
+ export const mountChild = (child, parent) => {
298
+ if (child._brand === VTEXT_BRAND) {
299
+ const text = document.createTextNode(child.text);
300
+ child._el = text;
301
+ if (parent)
302
+ parent.appendChild(text);
303
+ return text;
304
+ }
305
+ // Pre-existing real DOM node (from shadeChildren)
306
+ if (child.type === EXISTING_NODE) {
307
+ if (parent && child._el)
308
+ parent.appendChild(child._el);
309
+ return child._el;
310
+ }
311
+ // Shade component
312
+ if (typeof child.type === 'function') {
313
+ const factory = child.type;
314
+ const el = factory(child.props || {}, child.children);
315
+ child._el = el;
316
+ if (parent)
317
+ parent.appendChild(el);
318
+ return el;
319
+ }
320
+ // Intrinsic element
321
+ const tag = child.type;
322
+ const el = isSvgTag(tag) ? document.createElementNS(SVG_NS, tag) : document.createElement(tag);
323
+ applyProps(el, child.props);
324
+ child._el = el;
325
+ for (const c of child.children) {
326
+ mountChild(c, el);
327
+ }
328
+ if (parent)
329
+ parent.appendChild(el);
330
+ // Set ref after the element is fully created and appended
331
+ const ref = child.props?.ref;
332
+ if (ref) {
333
+ ;
334
+ ref.current = el;
335
+ }
336
+ return el;
337
+ };
338
+ // ---------------------------------------------------------------------------
339
+ // Unmount (remove real DOM)
340
+ // ---------------------------------------------------------------------------
341
+ /**
342
+ * Removes the DOM node associated with a VChild from its parent.
343
+ */
344
+ export const unmountChild = (child) => {
345
+ // Clear ref before removing from DOM
346
+ if (child._brand === VNODE_BRAND && child.props?.ref) {
347
+ ;
348
+ child.props.ref.current = null;
349
+ }
350
+ const node = child._el;
351
+ if (node?.parentNode) {
352
+ node.parentNode.removeChild(node);
353
+ }
354
+ };
355
+ // ---------------------------------------------------------------------------
356
+ // Patch (diff old VNode tree vs new VNode tree → DOM updates)
357
+ // ---------------------------------------------------------------------------
358
+ /**
359
+ * Patches a single old/new VChild pair. Updates the real DOM in place when
360
+ * possible, or replaces the DOM node when types differ.
361
+ */
362
+ const patchChild = (_parentEl, oldChild, newChild) => {
363
+ // Both text nodes
364
+ if (oldChild._brand === VTEXT_BRAND && newChild._brand === VTEXT_BRAND) {
365
+ if (oldChild.text !== newChild.text && oldChild._el) {
366
+ oldChild._el.textContent = newChild.text;
367
+ }
368
+ newChild._el = oldChild._el;
369
+ return;
370
+ }
371
+ // Both element/component VNodes with the same type
372
+ if (oldChild._brand === VNODE_BRAND && newChild._brand === VNODE_BRAND && oldChild.type === newChild.type) {
373
+ if (oldChild.type === EXISTING_NODE) {
374
+ // --- Pre-existing DOM node ---
375
+ newChild._el = newChild._el || oldChild._el;
376
+ if (oldChild._el !== newChild._el && oldChild._el?.parentNode) {
377
+ oldChild._el.parentNode.replaceChild(newChild._el, oldChild._el);
378
+ }
379
+ return;
380
+ }
381
+ if (typeof oldChild.type === 'function') {
382
+ // --- Shade component boundary ---
383
+ const el = oldChild._el;
384
+ newChild._el = el;
385
+ const propsChanged = !shallowEqual(oldChild.props, newChild.props);
386
+ // For children, reference check is enough -- if the parent re-rendered,
387
+ // the children VNodes are always fresh objects, so we compare lengths
388
+ // and item identity as a fast heuristic.
389
+ const childrenChanged = oldChild.children.length !== newChild.children.length ||
390
+ oldChild.children.some((c, i) => c !== newChild.children[i]);
391
+ if (propsChanged || childrenChanged) {
392
+ if (propsChanged) {
393
+ el.props = newChild.props;
394
+ patchProps(el, oldChild.props, newChild.props);
395
+ }
396
+ el.shadeChildren = newChild.children;
397
+ el.updateComponent();
398
+ }
399
+ return;
400
+ }
401
+ // --- Intrinsic element ---
402
+ const el = oldChild._el;
403
+ newChild._el = el;
404
+ patchProps(el, oldChild.props, newChild.props);
405
+ patchChildren(el, oldChild.children, newChild.children);
406
+ // Update refs: clear old ref if different, set new ref
407
+ const oldRef = oldChild.props?.ref;
408
+ const newRef = newChild.props?.ref;
409
+ if (oldRef !== newRef) {
410
+ if (oldRef)
411
+ oldRef.current = null;
412
+ if (newRef)
413
+ newRef.current = el;
414
+ }
415
+ return;
416
+ }
417
+ // Types differ → replace
418
+ const oldNode = oldChild._el;
419
+ if (oldNode && oldNode.parentNode) {
420
+ const newNode = mountChild(newChild, null);
421
+ oldNode.parentNode.replaceChild(newNode, oldNode);
422
+ }
423
+ else {
424
+ mountChild(newChild, _parentEl);
425
+ }
426
+ };
427
+ /**
428
+ * Reconciles an array of old VChildren against new VChildren inside a parent
429
+ * DOM element. Patches matching pairs, removes excess old children, and
430
+ * mounts excess new children.
431
+ *
432
+ * **Note:** This uses positional (index-based) matching, not key-based
433
+ * reconciliation. Reordering list items will cause all children from the
434
+ * reorder point onward to be patched/replaced rather than moved. For
435
+ * dynamic lists where order changes frequently, wrap each item in its own
436
+ * Shade component so that the component boundary prevents unnecessary
437
+ * inner-DOM churn.
438
+ */
439
+ export const patchChildren = (parentEl, oldChildren, newChildren) => {
440
+ const commonLen = Math.min(oldChildren.length, newChildren.length);
441
+ for (let i = 0; i < commonLen; i++) {
442
+ patchChild(parentEl, oldChildren[i], newChildren[i]);
443
+ }
444
+ // Remove excess old children (iterate backwards to avoid index issues)
445
+ for (let i = oldChildren.length - 1; i >= commonLen; i--) {
446
+ unmountChild(oldChildren[i]);
447
+ }
448
+ // Mount excess new children
449
+ for (let i = commonLen; i < newChildren.length; i++) {
450
+ mountChild(newChildren[i], parentEl);
451
+ }
452
+ };
453
+ //# sourceMappingURL=vnode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vnode.js","sourceRoot":"","sources":["../src/vnode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vnode.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vnode.spec.d.ts","sourceRoot":"","sources":["../src/vnode.spec.ts"],"names":[],"mappings":""}