@thyn/core 0.0.228 → 0.0.229

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/dist/element.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export declare function mount(app: any, parent: any): void;
2
2
  export declare function collectEffect(effectFn: any): void;
3
- export declare function createReactiveTextNode(v: any): any;
3
+ export declare function createReactiveTextNode(v: any): Text;
4
4
  export declare function component(name: any, props?: any): any;
5
5
  export declare function setAttribute(el: any, key: any, val: any): any;
6
6
  export declare function setProperty(el: any, key: any, val: any): any;
package/dist/element.js CHANGED
@@ -9,15 +9,21 @@ export function collectEffect(effectFn) {
9
9
  }
10
10
  collectingHead = effectFn;
11
11
  }
12
+ // export function createReactiveTextNode(v) {
13
+ // let n;
14
+ // staticEffect(() => {
15
+ // if (n) {
16
+ // n.nodeValue = v();
17
+ // } else {
18
+ // n = document.createTextNode(v());
19
+ // }
20
+ // });
21
+ // return n;
22
+ // }
12
23
  export function createReactiveTextNode(v) {
13
- let n;
24
+ const n = document.createTextNode(v());
14
25
  staticEffect(() => {
15
- if (n) {
16
- n.nodeValue = v();
17
- }
18
- else {
19
- n = document.createTextNode(v());
20
- }
26
+ n.nodeValue = v();
21
27
  });
22
28
  return n;
23
29
  }
@@ -75,7 +81,7 @@ export function setReactiveAttribute(el, key, val) {
75
81
  return;
76
82
  }
77
83
  if (v !== undefined)
78
- el.setAttribute(key, val());
84
+ el.setAttribute(key, v);
79
85
  ran = true;
80
86
  }));
81
87
  }
@@ -246,7 +252,9 @@ export function list(props, terminal = false) {
246
252
  const teardownNode = terminal ? shallowTeardown : teardown;
247
253
  let parent;
248
254
  let outlet = document.createDocumentFragment();
249
- let prevItems;
255
+ // State
256
+ let prevItems = [];
257
+ let rowNodes = []; // The "Shadow Array" - avoids reading DOM
250
258
  const startBookend = document.createComment("");
251
259
  const endBookend = document.createComment("");
252
260
  startBookend.$frag = outlet;
@@ -254,164 +262,156 @@ export function list(props, terminal = false) {
254
262
  const render = props.render;
255
263
  staticEffect(() => {
256
264
  parent = startBookend.parentNode;
265
+ // 1. Initialization / First Render
257
266
  if (!parent) {
258
- prevItems = props.items();
259
- outlet.append(startBookend, ...prevItems.map(render), endBookend);
267
+ const items = props.items();
268
+ // Render all items
269
+ const newNodes = items.map(render);
270
+ outlet.append(startBookend, ...newNodes, endBookend);
271
+ // Save state
272
+ prevItems = items;
273
+ rowNodes = newNodes;
260
274
  return;
261
275
  }
262
- let nextItems = props.items();
263
- let newLength = nextItems.length;
276
+ const nextItems = props.items();
277
+ const newLength = nextItems.length;
264
278
  let oldLength = prevItems.length;
265
- if (!oldLength && newLength) {
266
- endBookend.before(...nextItems.map(render));
267
- prevItems = nextItems;
268
- nextItems = null;
269
- return;
270
- }
271
- const childNodes = [];
272
- let ptr = startBookend.nextSibling;
273
- while (ptr !== endBookend) {
274
- childNodes.push(ptr);
275
- ptr = ptr.nextSibling;
276
- }
277
- const offset = 0;
278
- if (!newLength) {
279
- const removalQueue = [];
280
- const end = prevItems.length + offset;
281
- for (let i = offset; i < end; i++) {
282
- const ch = childNodes[i];
283
- teardownNode(ch);
284
- removalQueue.push(ch);
285
- }
286
- for (const ch of removalQueue) {
287
- remove(ch);
279
+ // 2. Fast Path: Clear All
280
+ if (newLength === 0) {
281
+ if (oldLength !== 0) {
282
+ // Bulk remove
283
+ const removalQueue = rowNodes;
284
+ // Teardown
285
+ for (let i = 0; i < oldLength; i++) {
286
+ teardownNode(removalQueue[i]);
287
+ }
288
+ // DOM Removal
289
+ // Optimization: If terminal list, we might clear parent.textContent
290
+ // But to be safe with siblings:
291
+ if (removalQueue.length) {
292
+ // If the nodes are contiguous, we could use range delete,
293
+ // but individual remove is safer for mixed node types.
294
+ for (let i = 0; i < removalQueue.length; i++) {
295
+ remove(removalQueue[i]);
296
+ }
297
+ }
298
+ rowNodes = [];
299
+ prevItems = [];
288
300
  }
289
- prevItems = nextItems;
290
- nextItems = null;
291
301
  return;
292
302
  }
293
- let start = nextItems.findIndex((item, index) => prevItems[index] !== item);
294
- if (start === oldLength) {
295
- endBookend.before(...nextItems.slice(start).map(render));
303
+ // 3. Fast Path: Create All (from empty)
304
+ if (oldLength === 0) {
305
+ const newNodes = nextItems.map(render);
306
+ endBookend.before(...newNodes);
307
+ rowNodes = newNodes;
296
308
  prevItems = nextItems;
297
- nextItems = null;
298
309
  return;
299
310
  }
300
- if (start < 0) {
301
- for (let i = nextItems.length; i < oldLength; i++) {
302
- const e = childNodes[offset + --oldLength];
303
- teardownNode(e);
304
- remove(e);
305
- }
306
- prevItems = nextItems;
307
- nextItems = null;
308
- return;
311
+ // 4. Reconciliation
312
+ let start = 0;
313
+ let minLen = Math.min(oldLength, newLength);
314
+ // Prefix Scan (Cheaper JS Array read vs DOM read)
315
+ while (start < minLen && prevItems[start] === nextItems[start]) {
316
+ start++;
309
317
  }
310
- if (start >= newLength) {
311
- while (start < oldLength) {
312
- const e = childNodes[offset + --oldLength];
313
- teardownNode(e);
314
- remove(e);
315
- }
318
+ // Optimization: Append only
319
+ if (start === oldLength && newLength > oldLength) {
320
+ const newPart = nextItems.slice(start);
321
+ const newNodes = newPart.map(render);
322
+ endBookend.before(...newNodes);
323
+ rowNodes = rowNodes.concat(newNodes);
316
324
  prevItems = nextItems;
317
- nextItems = null;
318
325
  return;
319
326
  }
320
- // suffix
321
- for (oldLength--, newLength--; newLength > start &&
322
- oldLength >= start &&
323
- nextItems[newLength] === prevItems[oldLength]; oldLength--, newLength--)
324
- ;
325
- const nextKeys = new Set(nextItems);
326
- const removalQueue = [];
327
- for (let i = start; i <= oldLength; i++) {
328
- if (!nextKeys.has(prevItems[i])) {
329
- const ch = childNodes[i + offset];
330
- teardownNode(ch);
331
- removalQueue.push(ch);
332
- childNodes[i + offset] = null;
327
+ // Optimization: Truncate only
328
+ if (start === newLength && oldLength > newLength) {
329
+ for (let i = start; i < oldLength; i++) {
330
+ const node = rowNodes[i];
331
+ teardownNode(node);
332
+ remove(node);
333
333
  }
334
- }
335
- for (const e of removalQueue) {
336
- remove(e);
337
- }
338
- if (oldLength - start === removalQueue.length) {
334
+ rowNodes.length = newLength; // JS Array Truncate
339
335
  prevItems = nextItems;
340
- nextItems = null;
341
336
  return;
342
337
  }
343
- let keyMap = new Map();
344
- for (let i = start; i <= oldLength; i++) {
345
- if (childNodes[i + offset] &&
346
- (!nextItems[i] ||
347
- prevItems[i] !== nextItems[i])) {
348
- keyMap.set(prevItems[i], {
349
- el: childNodes[i + offset],
350
- item: prevItems[i],
351
- });
338
+ // Suffix Scan
339
+ let end = 0;
340
+ // We stop if the suffix hits the prefix
341
+ while (newLength - 1 - end >= start &&
342
+ oldLength - 1 - end >= start &&
343
+ nextItems[newLength - 1 - end] === prevItems[oldLength - 1 - end]) {
344
+ end++;
345
+ }
346
+ // 5. Complex Diff (The Middle)
347
+ const oldStart = start;
348
+ const oldEnd = oldLength - end;
349
+ const newEnd = newLength - end;
350
+ // A. Build Map of existing items in the "changed" region
351
+ // key -> { node, index }
352
+ const keyMap = new Map();
353
+ for (let i = oldStart; i < oldEnd; i++) {
354
+ const item = prevItems[i];
355
+ // If duplicate items exist, first one wins or logic needs to be more robust.
356
+ // Assuming unique keys for simplicity or using last-write-wins:
357
+ if (!keyMap.has(item)) {
358
+ keyMap.set(item, rowNodes[i]);
352
359
  }
353
- }
354
- if (newLength === oldLength && keyMap.size > (newLength - start + 1) / 2) {
355
- const lastOrdered = start > 0 ? childNodes[start + offset - 1] : startBookend;
356
- const set = [];
357
- for (let i = start; i <= newLength; i++) {
358
- set.push(keyMap.get(nextItems[i])?.el ?? childNodes[i + offset]);
360
+ else {
361
+ // Handle duplicates by removing the extra immediately?
362
+ // Or handle collision. For now, assume distinct items or standard behavior.
359
363
  }
360
- lastOrdered.after(...set);
361
- prevItems = nextItems;
362
- keyMap = null;
363
- nextItems = null;
364
- return;
365
364
  }
366
- let cursor = startBookend.nextSibling;
365
+ // B. Setup for new node list construction
366
+ const nextRowNodes = new Array(newLength);
367
+ // Copy Prefix
367
368
  for (let i = 0; i < start; i++) {
368
- cursor = cursor.nextSibling;
369
- }
370
- while (start <= newLength) {
371
- const newChd = nextItems[start];
372
- const oldChd = prevItems[start];
373
- if (newChd === oldChd) {
374
- start++;
375
- cursor = cursor.nextSibling;
376
- continue;
377
- }
378
- if (oldChd === undefined) {
379
- parent.insertBefore(render(newChd), endBookend);
380
- start++;
381
- continue;
382
- }
383
- const mappedOld = keyMap.get(newChd);
384
- if (mappedOld) {
385
- const oldDom = cursor;
386
- const { el, item } = mappedOld;
387
- if (oldDom !== el) {
388
- const tmp = el.nextSibling;
389
- parent.insertBefore(el, oldDom);
390
- parent.insertBefore(oldDom, tmp);
391
- cursor = el.nextSibling;
392
- }
393
- else if (item !== newChd) {
394
- const next = el.nextSibling;
395
- replaceWith(newChd, el, render);
396
- cursor = next;
397
- }
398
- else {
399
- cursor = el.nextSibling;
400
- }
401
- keyMap.delete(newChd);
369
+ nextRowNodes[i] = rowNodes[i];
370
+ }
371
+ // Copy Suffix
372
+ for (let i = 0; i < end; i++) {
373
+ nextRowNodes[newLength - 1 - i] = rowNodes[oldLength - 1 - i];
374
+ }
375
+ // C. Find anchor for insertions
376
+ // We insert before the first node of the suffix, or the endBookend.
377
+ const anchor = (end > 0) ? rowNodes[oldLength - end] : endBookend;
378
+ // D. Iterate new middle
379
+ for (let i = oldStart; i < newEnd; i++) {
380
+ const newItem = nextItems[i];
381
+ let node;
382
+ if (keyMap.has(newItem)) {
383
+ // Reuse existing
384
+ node = keyMap.get(newItem);
385
+ keyMap.delete(newItem);
386
+ // DOM Move:
387
+ // We always insertBefore the anchor.
388
+ // Since we are iterating forward, "anchor" isn't static.
389
+ // Actually, simply inserting before the *current* anchor works if we
390
+ // process carefully, but standard "place and move cursor" is safer.
391
+ parent.insertBefore(node, anchor);
402
392
  }
403
- else if (oldChd !== newChd) {
404
- parent.insertBefore(render(newChd), cursor);
393
+ else {
394
+ // Create new
395
+ node = render(newItem);
396
+ parent.insertBefore(node, anchor);
405
397
  }
406
- start++;
407
- }
408
- for (const { el } of keyMap.values()) {
409
- teardownNode(el);
410
- remove(el);
411
- }
412
- keyMap = null;
398
+ nextRowNodes[i] = node;
399
+ }
400
+ // E. Cleanup
401
+ // Anything remaining in keyMap is gone
402
+ for (const node of keyMap.values()) {
403
+ teardownNode(node);
404
+ remove(node);
405
+ }
406
+ // Handle "middle" items that weren't in keyMap (duplicates logic)
407
+ // or implicit removals handled by the map logic.
408
+ // Specifically: We iterated [oldStart...oldEnd] to build the map.
409
+ // If an item was in that range but NOT in the new range, it's in the map.
410
+ // If it WAS in the new range, we removed it from the map.
411
+ // So map.values() is exactly what needs to die.
412
+ // Update State
413
+ rowNodes = nextRowNodes;
413
414
  prevItems = nextItems;
414
- nextItems = null;
415
415
  });
416
416
  return outlet;
417
417
  }
package/dist/signals.js CHANGED
@@ -84,7 +84,6 @@ export function $effect(fn) {
84
84
  return fn;
85
85
  }
86
86
  export function staticEffect(fn) {
87
- fn.td = null;
88
87
  const prev = currentEffect;
89
88
  currentEffect = fn;
90
89
  fn();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thyn/core",
3
- "version": "0.0.228",
3
+ "version": "0.0.229",
4
4
  "scripts": {
5
5
  "build": "tsc",
6
6
  "pub": "tsc && npm version patch -f && npm -f publish --access=public",
package/src/element.ts CHANGED
@@ -13,14 +13,22 @@ export function collectEffect(effectFn) {
13
13
  collectingHead = effectFn;
14
14
  }
15
15
 
16
+ // export function createReactiveTextNode(v) {
17
+ // let n;
18
+ // staticEffect(() => {
19
+ // if (n) {
20
+ // n.nodeValue = v();
21
+ // } else {
22
+ // n = document.createTextNode(v());
23
+ // }
24
+ // });
25
+ // return n;
26
+ // }
27
+
16
28
  export function createReactiveTextNode(v) {
17
- let n;
29
+ const n = document.createTextNode(v());
18
30
  staticEffect(() => {
19
- if (n) {
20
- n.nodeValue = v();
21
- } else {
22
- n = document.createTextNode(v());
23
- }
31
+ n.nodeValue = v();
24
32
  });
25
33
  return n;
26
34
  }
@@ -78,7 +86,7 @@ export function setReactiveAttribute(el, key, val) {
78
86
  else el.setAttribute(key, v);
79
87
  return;
80
88
  }
81
- if (v !== undefined) el.setAttribute(key, val());
89
+ if (v !== undefined) el.setAttribute(key, v);
82
90
  ran = true;
83
91
  }),
84
92
  );
@@ -262,182 +270,199 @@ export function list(props, terminal = false) {
262
270
  const teardownNode = terminal ? shallowTeardown : teardown;
263
271
  let parent;
264
272
  let outlet = document.createDocumentFragment();
265
- let prevItems;
273
+
274
+ // State
275
+ let prevItems = [];
276
+ let rowNodes = []; // The "Shadow Array" - avoids reading DOM
277
+
266
278
  const startBookend = document.createComment("") as any;
267
279
  const endBookend = document.createComment("") as any;
280
+
268
281
  startBookend.$frag = outlet;
269
282
  startBookend.$end = endBookend;
283
+
270
284
  const render = props.render;
271
285
 
272
286
  staticEffect(() => {
273
287
  parent = startBookend.parentNode;
288
+
289
+ // 1. Initialization / First Render
274
290
  if (!parent) {
275
- prevItems = props.items();
276
- outlet.append(startBookend, ...prevItems.map(render), endBookend);
291
+ const items = props.items();
292
+ // Render all items
293
+ const newNodes = items.map(render);
294
+
295
+ outlet.append(startBookend, ...newNodes, endBookend);
296
+
297
+ // Save state
298
+ prevItems = items;
299
+ rowNodes = newNodes;
277
300
  return;
278
301
  }
279
- let nextItems = props.items();
280
- let newLength = nextItems.length;
302
+
303
+ const nextItems = props.items();
304
+ const newLength = nextItems.length;
281
305
  let oldLength = prevItems.length;
282
- if (!oldLength && newLength) {
283
- endBookend.before(...nextItems.map(render))
284
- prevItems = nextItems;
285
- nextItems = null;
286
- return;
287
- }
288
- const childNodes = [];
289
- let ptr = startBookend.nextSibling;
290
- while (ptr !== endBookend) {
291
- childNodes.push(ptr);
292
- ptr = ptr.nextSibling;
293
- }
294
- const offset = 0;
295
- if (!newLength) {
296
- const removalQueue = [];
297
- const end = prevItems.length + offset;
298
- for (let i = offset; i < end; i++) {
299
- const ch = childNodes[i];
300
- teardownNode(ch);
301
- removalQueue.push(ch);
302
- }
303
- for (const ch of removalQueue) {
304
- remove(ch);
306
+
307
+ // 2. Fast Path: Clear All
308
+ if (newLength === 0) {
309
+ if (oldLength !== 0) {
310
+ // Bulk remove
311
+ const removalQueue = rowNodes;
312
+
313
+ // Teardown
314
+ for (let i = 0; i < oldLength; i++) {
315
+ teardownNode(removalQueue[i]);
316
+ }
317
+
318
+ // DOM Removal
319
+ // Optimization: If terminal list, we might clear parent.textContent
320
+ // But to be safe with siblings:
321
+ if (removalQueue.length) {
322
+ // If the nodes are contiguous, we could use range delete,
323
+ // but individual remove is safer for mixed node types.
324
+ for (let i = 0; i < removalQueue.length; i++) {
325
+ remove(removalQueue[i]);
326
+ }
327
+ }
328
+
329
+ rowNodes = [];
330
+ prevItems = [];
305
331
  }
306
- prevItems = nextItems;
307
- nextItems = null;
308
332
  return;
309
333
  }
310
334
 
311
- let start = nextItems.findIndex((item, index) => prevItems[index] !== item);
312
- if (start === oldLength) {
313
- endBookend.before(...nextItems.slice(start).map(render));
335
+ // 3. Fast Path: Create All (from empty)
336
+ if (oldLength === 0) {
337
+ const newNodes = nextItems.map(render);
338
+ endBookend.before(...newNodes);
339
+ rowNodes = newNodes;
314
340
  prevItems = nextItems;
315
- nextItems = null;
316
341
  return;
317
342
  }
318
343
 
319
- if (start < 0) {
320
- for (let i = nextItems.length; i < oldLength; i++) {
321
- const e = childNodes[offset + --oldLength];
322
- teardownNode(e);
323
- remove(e);
324
- }
325
- prevItems = nextItems;
326
- nextItems = null;
327
- return;
344
+ // 4. Reconciliation
345
+ let start = 0;
346
+ let minLen = Math.min(oldLength, newLength);
347
+
348
+ // Prefix Scan (Cheaper JS Array read vs DOM read)
349
+ while (start < minLen && prevItems[start] === nextItems[start]) {
350
+ start++;
328
351
  }
329
352
 
330
- if (start >= newLength) {
331
- while (start < oldLength) {
332
- const e = childNodes[offset + --oldLength];
333
- teardownNode(e);
334
- remove(e);
335
- }
353
+ // Optimization: Append only
354
+ if (start === oldLength && newLength > oldLength) {
355
+ const newPart = nextItems.slice(start);
356
+ const newNodes = newPart.map(render);
357
+ endBookend.before(...newNodes);
358
+
359
+ rowNodes = rowNodes.concat(newNodes);
336
360
  prevItems = nextItems;
337
- nextItems = null;
338
361
  return;
339
362
  }
340
363
 
341
- // suffix
342
- for (
343
- oldLength--, newLength--;
344
- newLength > start &&
345
- oldLength >= start &&
346
- nextItems[newLength] === prevItems[oldLength];
347
- oldLength--, newLength--
348
- );
349
-
350
- const nextKeys = new Set(nextItems);
351
- const removalQueue = [];
352
- for (let i = start; i <= oldLength; i++) {
353
- if (!nextKeys.has(prevItems[i])) {
354
- const ch = childNodes[i + offset];
355
- teardownNode(ch);
356
- removalQueue.push(ch);
357
- childNodes[i + offset] = null;
364
+ // Optimization: Truncate only
365
+ if (start === newLength && oldLength > newLength) {
366
+ for (let i = start; i < oldLength; i++) {
367
+ const node = rowNodes[i];
368
+ teardownNode(node);
369
+ remove(node);
358
370
  }
359
- }
360
- for (const e of removalQueue) {
361
- remove(e);
362
- }
363
- if (oldLength - start === removalQueue.length) {
371
+ rowNodes.length = newLength; // JS Array Truncate
364
372
  prevItems = nextItems;
365
- nextItems = null;
366
373
  return;
367
374
  }
368
- let keyMap = new Map();
369
- for (let i = start; i <= oldLength; i++) {
370
- if (
371
- childNodes[i + offset] &&
372
- (!nextItems[i] ||
373
- prevItems[i] !== nextItems[i])
374
- ) {
375
- keyMap.set(prevItems[i], {
376
- el: childNodes[i + offset],
377
- item: prevItems[i],
378
- });
379
- }
380
- }
381
- if (newLength === oldLength && keyMap.size > (newLength - start + 1) / 2) {
382
- const lastOrdered = start > 0 ? childNodes[start + offset - 1] : startBookend;
383
- const set = [];
384
- for (let i = start; i <= newLength; i++) {
385
- set.push(keyMap.get(nextItems[i])?.el ?? childNodes[i + offset]);
375
+
376
+ // Suffix Scan
377
+ let end = 0;
378
+ // We stop if the suffix hits the prefix
379
+ while (
380
+ newLength - 1 - end >= start &&
381
+ oldLength - 1 - end >= start &&
382
+ nextItems[newLength - 1 - end] === prevItems[oldLength - 1 - end]
383
+ ) {
384
+ end++;
385
+ }
386
+
387
+ // 5. Complex Diff (The Middle)
388
+ const oldStart = start;
389
+ const oldEnd = oldLength - end;
390
+ const newEnd = newLength - end;
391
+
392
+ // A. Build Map of existing items in the "changed" region
393
+ // key -> { node, index }
394
+ const keyMap = new Map();
395
+ for (let i = oldStart; i < oldEnd; i++) {
396
+ const item = prevItems[i];
397
+ // If duplicate items exist, first one wins or logic needs to be more robust.
398
+ // Assuming unique keys for simplicity or using last-write-wins:
399
+ if (!keyMap.has(item)) {
400
+ keyMap.set(item, rowNodes[i]);
401
+ } else {
402
+ // Handle duplicates by removing the extra immediately?
403
+ // Or handle collision. For now, assume distinct items or standard behavior.
386
404
  }
387
- lastOrdered.after(...set);
388
- prevItems = nextItems;
389
- keyMap = null;
390
- nextItems = null;
391
- return;
392
405
  }
393
406
 
394
- let cursor = startBookend.nextSibling;
407
+ // B. Setup for new node list construction
408
+ const nextRowNodes = new Array(newLength);
409
+
410
+ // Copy Prefix
395
411
  for (let i = 0; i < start; i++) {
396
- cursor = cursor.nextSibling;
412
+ nextRowNodes[i] = rowNodes[i];
397
413
  }
398
- while (start <= newLength) {
399
- const newChd = nextItems[start];
400
- const oldChd = prevItems[start];
401
- if (newChd === oldChd) {
402
- start++;
403
- cursor = cursor.nextSibling;
404
- continue;
405
- }
406
- if (oldChd === undefined) {
407
- parent.insertBefore(render(newChd), endBookend);
408
- start++;
409
- continue;
410
- }
411
- const mappedOld = keyMap.get(newChd);
412
- if (mappedOld) {
413
- const oldDom = cursor;
414
- const { el, item } = mappedOld;
415
- if (oldDom !== el) {
416
- const tmp = el.nextSibling;
417
- parent.insertBefore(el, oldDom);
418
- parent.insertBefore(oldDom, tmp);
419
- cursor = el.nextSibling;
420
- } else if (item !== newChd) {
421
- const next = el.nextSibling;
422
- replaceWith(newChd, el, render);
423
- cursor = next;
424
- } else {
425
- cursor = el.nextSibling;
426
- }
427
- keyMap.delete(newChd);
428
- } else if (oldChd !== newChd) {
429
- parent.insertBefore(render(newChd), cursor);
414
+ // Copy Suffix
415
+ for (let i = 0; i < end; i++) {
416
+ nextRowNodes[newLength - 1 - i] = rowNodes[oldLength - 1 - i];
417
+ }
418
+
419
+ // C. Find anchor for insertions
420
+ // We insert before the first node of the suffix, or the endBookend.
421
+ const anchor = (end > 0) ? rowNodes[oldLength - end] : endBookend;
422
+
423
+ // D. Iterate new middle
424
+ for (let i = oldStart; i < newEnd; i++) {
425
+ const newItem = nextItems[i];
426
+ let node;
427
+
428
+ if (keyMap.has(newItem)) {
429
+ // Reuse existing
430
+ node = keyMap.get(newItem);
431
+ keyMap.delete(newItem);
432
+
433
+ // DOM Move:
434
+ // We always insertBefore the anchor.
435
+ // Since we are iterating forward, "anchor" isn't static.
436
+ // Actually, simply inserting before the *current* anchor works if we
437
+ // process carefully, but standard "place and move cursor" is safer.
438
+ parent.insertBefore(node, anchor);
439
+ } else {
440
+ // Create new
441
+ node = render(newItem);
442
+ parent.insertBefore(node, anchor);
430
443
  }
431
- start++;
444
+ nextRowNodes[i] = node;
432
445
  }
433
- for (const { el } of keyMap.values()) {
434
- teardownNode(el);
435
- remove(el);
446
+
447
+ // E. Cleanup
448
+ // Anything remaining in keyMap is gone
449
+ for (const node of keyMap.values()) {
450
+ teardownNode(node);
451
+ remove(node);
436
452
  }
437
- keyMap = null;
453
+
454
+ // Handle "middle" items that weren't in keyMap (duplicates logic)
455
+ // or implicit removals handled by the map logic.
456
+ // Specifically: We iterated [oldStart...oldEnd] to build the map.
457
+ // If an item was in that range but NOT in the new range, it's in the map.
458
+ // If it WAS in the new range, we removed it from the map.
459
+ // So map.values() is exactly what needs to die.
460
+
461
+ // Update State
462
+ rowNodes = nextRowNodes;
438
463
  prevItems = nextItems;
439
- nextItems = null;
440
464
  });
465
+
441
466
  return outlet;
442
467
  }
443
468
 
package/src/signals.ts CHANGED
@@ -102,7 +102,6 @@ export function $effect(fn: (() => (() => void) | void) & any) {
102
102
  }
103
103
 
104
104
  export function staticEffect(fn: (() => (() => void) | void) & any) {
105
- fn.td = null;
106
105
  const prev = currentEffect;
107
106
  currentEffect = fn;
108
107
  fn();
@@ -1 +1 @@
1
- {"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.es2020.full.d.ts","./src/signals.ts","./src/element.ts","./src/index.ts","./src/router.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@types/estree/index.d.ts"],"fileIdsList":[[56,57],[52],[52,53],[53]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},{"version":"240d6b8f6981f174caea8caba5ad321e998832805d22a545c1f7bef0e72bb663","signature":"a53dff95094f1f7fee261ff1879f5909cd440f02aa68ff6893d017b2343181d1"},{"version":"e5c36aef8afe34aeee0ced23b9ce37f734196f94db9ea1cd14f2ea295449c5f8","signature":"1e9fd227702d856993cc7d708cc104bcbea5c070fbf976204a77c36457b1342e"},{"version":"ac16f8022e1d86594d058f84a530164af4b03dcc8bb45ac4a00736fe8aab62e7","signature":"1e325d171d22aa3144736ace94df4b5bf779c6083bc0f9ce684855844f8abcbc"},{"version":"a155e9ebe821846c43103394346639a6a19a7f844be4892bbe4352aa20ee6707","signature":"166554555b2dc6392155b045bb33ce964f7d5f092f50fada34eb4d5828d7740e"},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1}],"root":[[52,55]],"options":{"allowJs":true,"checkJs":false,"composite":true,"esModuleInterop":true,"module":99,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"target":7},"referencedMap":[[58,1],[53,2],[54,3],[55,3],[52,4]],"latestChangedDtsFile":"./dist/router.d.ts","version":"5.9.3"}
1
+ {"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.es2020.full.d.ts","./src/signals.ts","./src/element.ts","./src/index.ts","./src/router.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@types/estree/index.d.ts"],"fileIdsList":[[56,57],[52],[52,53],[53]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},{"version":"2834d3d5f4c0526c760679f15c35791e91f4e51d54d24d00610e35b7ce7a9e01","signature":"a53dff95094f1f7fee261ff1879f5909cd440f02aa68ff6893d017b2343181d1"},{"version":"e9ff34c5bc574b75c34770ddd48174c11fa24127ba94013918be7b71ba5162bb","signature":"4e15936f04a7ab7370e9a897f6d9befa980662283d92660ba0b5cacfab78e5d1"},{"version":"ac16f8022e1d86594d058f84a530164af4b03dcc8bb45ac4a00736fe8aab62e7","signature":"1e325d171d22aa3144736ace94df4b5bf779c6083bc0f9ce684855844f8abcbc"},{"version":"a155e9ebe821846c43103394346639a6a19a7f844be4892bbe4352aa20ee6707","signature":"166554555b2dc6392155b045bb33ce964f7d5f092f50fada34eb4d5828d7740e"},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1}],"root":[[52,55]],"options":{"allowJs":true,"checkJs":false,"composite":true,"esModuleInterop":true,"module":99,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"target":7},"referencedMap":[[58,1],[53,2],[54,3],[55,3],[52,4]],"latestChangedDtsFile":"./dist/element.d.ts","version":"5.9.3"}