@thyn/core 0.0.229 → 0.0.233

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.js CHANGED
@@ -9,17 +9,6 @@ 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
- // }
23
12
  export function createReactiveTextNode(v) {
24
13
  const n = document.createTextNode(v());
25
14
  staticEffect(() => {
@@ -252,9 +241,7 @@ export function list(props, terminal = false) {
252
241
  const teardownNode = terminal ? shallowTeardown : teardown;
253
242
  let parent;
254
243
  let outlet = document.createDocumentFragment();
255
- // State
256
- let prevItems = [];
257
- let rowNodes = []; // The "Shadow Array" - avoids reading DOM
244
+ let prevItems;
258
245
  const startBookend = document.createComment("");
259
246
  const endBookend = document.createComment("");
260
247
  startBookend.$frag = outlet;
@@ -262,156 +249,149 @@ export function list(props, terminal = false) {
262
249
  const render = props.render;
263
250
  staticEffect(() => {
264
251
  parent = startBookend.parentNode;
265
- // 1. Initialization / First Render
266
252
  if (!parent) {
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;
253
+ prevItems = props.items();
254
+ outlet.append(startBookend, ...prevItems.map(render), endBookend);
274
255
  return;
275
256
  }
276
- const nextItems = props.items();
277
- const newLength = nextItems.length;
257
+ let nextItems = props.items();
258
+ let newLength = nextItems.length;
278
259
  let oldLength = prevItems.length;
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 = [];
260
+ if (!oldLength && newLength) {
261
+ endBookend.before(...nextItems.map(render));
262
+ prevItems = nextItems;
263
+ nextItems = null;
264
+ return;
265
+ }
266
+ const childNodeList = parent.childNodes;
267
+ const childNodes = Array.from(childNodeList);
268
+ const offset = childNodes.indexOf(startBookend) + 1;
269
+ if (!newLength) {
270
+ const removalQueue = [];
271
+ const end = prevItems.length + offset;
272
+ for (let i = offset; i < end; i++) {
273
+ const ch = childNodeList[i];
274
+ teardownNode(ch);
275
+ removalQueue.push(ch);
276
+ }
277
+ for (const ch of removalQueue) {
278
+ remove(ch);
300
279
  }
280
+ prevItems = nextItems;
281
+ nextItems = null;
301
282
  return;
302
283
  }
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;
284
+ let start = nextItems.findIndex((item, index) => prevItems[index] !== item);
285
+ if (start === oldLength) {
286
+ endBookend.before(...nextItems.slice(start).map(render));
308
287
  prevItems = nextItems;
288
+ nextItems = null;
309
289
  return;
310
290
  }
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++;
291
+ if (start < 0) {
292
+ for (let i = nextItems.length; i < oldLength; i++) {
293
+ const e = childNodes[offset + --oldLength];
294
+ teardownNode(e);
295
+ remove(e);
296
+ }
297
+ prevItems = nextItems;
298
+ nextItems = null;
299
+ return;
317
300
  }
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);
301
+ if (start >= newLength) {
302
+ while (start < oldLength) {
303
+ const e = childNodes[offset + --oldLength];
304
+ teardownNode(e);
305
+ remove(e);
306
+ }
324
307
  prevItems = nextItems;
308
+ nextItems = null;
325
309
  return;
326
310
  }
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);
311
+ // suffix
312
+ for (oldLength--, newLength--; newLength > start &&
313
+ oldLength >= start &&
314
+ nextItems[newLength] === prevItems[oldLength]; oldLength--, newLength--)
315
+ ;
316
+ const nextKeys = new Set(nextItems);
317
+ const removalQueue = [];
318
+ for (let i = start; i <= oldLength; i++) {
319
+ if (!nextKeys.has(prevItems[i])) {
320
+ const ch = childNodes[i + offset];
321
+ teardownNode(ch);
322
+ removalQueue.push(ch);
323
+ childNodes[i + offset] = null;
333
324
  }
334
- rowNodes.length = newLength; // JS Array Truncate
325
+ }
326
+ for (const e of removalQueue) {
327
+ remove(e);
328
+ }
329
+ if (oldLength - start === removalQueue.length) {
335
330
  prevItems = nextItems;
331
+ nextItems = null;
336
332
  return;
337
333
  }
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]);
334
+ let keyMap = new Map();
335
+ for (let i = start; i <= oldLength; i++) {
336
+ if (childNodes[i + offset] &&
337
+ (!nextItems[i] ||
338
+ prevItems[i] !== nextItems[i])) {
339
+ keyMap.set(prevItems[i], {
340
+ el: childNodes[i + offset],
341
+ item: prevItems[i],
342
+ });
359
343
  }
360
- else {
361
- // Handle duplicates by removing the extra immediately?
362
- // Or handle collision. For now, assume distinct items or standard behavior.
344
+ }
345
+ if (newLength === oldLength && keyMap.size > (newLength - start + 1) / 2) {
346
+ const lastOrdered = childNodes[start + offset - 1];
347
+ const set = [];
348
+ for (let i = start; i <= newLength; i++) {
349
+ set.push(keyMap.get(nextItems[i])?.el ?? childNodes[i + offset]);
363
350
  }
351
+ lastOrdered.after(...set);
352
+ prevItems = nextItems;
353
+ keyMap = null;
354
+ nextItems = null;
355
+ return;
364
356
  }
365
- // B. Setup for new node list construction
366
- const nextRowNodes = new Array(newLength);
367
- // Copy Prefix
368
- for (let i = 0; i < start; i++) {
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);
357
+ while (start <= newLength) {
358
+ const newChd = nextItems[start];
359
+ const oldChd = prevItems[start];
360
+ if (newChd === oldChd) {
361
+ start++;
362
+ continue;
392
363
  }
393
- else {
394
- // Create new
395
- node = render(newItem);
396
- parent.insertBefore(node, anchor);
364
+ if (oldChd === undefined) {
365
+ parent.insertBefore(render(newChd), endBookend);
366
+ start++;
367
+ continue;
397
368
  }
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;
369
+ const mappedOld = keyMap.get(newChd);
370
+ if (mappedOld) {
371
+ const oldDom = childNodeList[start + offset];
372
+ const { el, item } = mappedOld;
373
+ if (oldDom !== el) {
374
+ const tmp = el.nextSibling;
375
+ parent.insertBefore(el, oldDom);
376
+ parent.insertBefore(oldDom, tmp);
377
+ }
378
+ else if (item !== newChd) {
379
+ replaceWith(newChd, el, render);
380
+ }
381
+ keyMap.delete(newChd);
382
+ }
383
+ else if (oldChd !== newChd) {
384
+ parent.insertBefore(render(newChd), childNodeList[start + offset]);
385
+ }
386
+ start++;
387
+ }
388
+ for (const { el } of keyMap.values()) {
389
+ teardownNode(el);
390
+ remove(el);
391
+ }
392
+ keyMap = null;
414
393
  prevItems = nextItems;
394
+ nextItems = null;
415
395
  });
416
396
  return outlet;
417
397
  }
@@ -527,11 +507,14 @@ export function isolatedTerminalList(props) {
527
507
  }
528
508
  if (newLength === oldLength && keyMap.size > (newLength - start + 1) / 2) {
529
509
  const lastOrdered = childNodes[start];
530
- const set = [];
531
- for (let i = start; i <= newLength; i++) {
532
- set.push(keyMap.get(nextItems[i])?.el ?? childNodes[i + 1]);
510
+ // const set = [];
511
+ // for (let i = start; i <= newLength; i++) {
512
+ // set.push(keyMap.get(nextItems[i])?.el ?? childNodes[i + 1]);
513
+ // }
514
+ // lastOrdered.after(...set);
515
+ for (let i = newLength; i >= start; i--) {
516
+ lastOrdered.after(keyMap.get(nextItems[i])?.el ?? childNodes[i + 1]);
533
517
  }
534
- lastOrdered.after(...set);
535
518
  prevItems = nextItems;
536
519
  keyMap = null;
537
520
  nextItems = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thyn/core",
3
- "version": "0.0.229",
3
+ "version": "0.0.233",
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,18 +13,6 @@ 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
-
28
16
  export function createReactiveTextNode(v) {
29
17
  const n = document.createTextNode(v());
30
18
  staticEffect(() => {
@@ -270,199 +258,168 @@ export function list(props, terminal = false) {
270
258
  const teardownNode = terminal ? shallowTeardown : teardown;
271
259
  let parent;
272
260
  let outlet = document.createDocumentFragment();
273
-
274
- // State
275
- let prevItems = [];
276
- let rowNodes = []; // The "Shadow Array" - avoids reading DOM
277
-
261
+ let prevItems;
278
262
  const startBookend = document.createComment("") as any;
279
263
  const endBookend = document.createComment("") as any;
280
-
281
264
  startBookend.$frag = outlet;
282
265
  startBookend.$end = endBookend;
283
-
284
266
  const render = props.render;
285
267
 
286
268
  staticEffect(() => {
287
269
  parent = startBookend.parentNode;
288
-
289
- // 1. Initialization / First Render
290
270
  if (!parent) {
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;
271
+ prevItems = props.items();
272
+ outlet.append(startBookend, ...prevItems.map(render), endBookend);
300
273
  return;
301
274
  }
302
-
303
- const nextItems = props.items();
304
- const newLength = nextItems.length;
275
+ let nextItems = props.items();
276
+ let newLength = nextItems.length;
305
277
  let oldLength = prevItems.length;
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 = [];
331
- }
278
+ if (!oldLength && newLength) {
279
+ endBookend.before(...nextItems.map(render))
280
+ prevItems = nextItems;
281
+ nextItems = null;
332
282
  return;
333
283
  }
334
-
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;
284
+ const childNodeList = parent.childNodes as NodeListOf<ChildNode>;
285
+ const childNodes = Array.from(childNodeList);
286
+ const offset = childNodes.indexOf(startBookend) + 1;
287
+ if (!newLength) {
288
+ const removalQueue = [];
289
+ const end = prevItems.length + offset;
290
+ for (let i = offset; i < end; i++) {
291
+ const ch = childNodeList[i];
292
+ teardownNode(ch);
293
+ removalQueue.push(ch);
294
+ }
295
+ for (const ch of removalQueue) {
296
+ remove(ch);
297
+ }
340
298
  prevItems = nextItems;
299
+ nextItems = null;
341
300
  return;
342
301
  }
343
302
 
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++;
351
- }
352
-
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);
303
+ let start = nextItems.findIndex((item, index) => prevItems[index] !== item);
304
+ if (start === oldLength) {
305
+ endBookend.before(...nextItems.slice(start).map(render));
360
306
  prevItems = nextItems;
307
+ nextItems = null;
361
308
  return;
362
309
  }
363
310
 
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);
311
+ if (start < 0) {
312
+ for (let i = nextItems.length; i < oldLength; i++) {
313
+ const e = childNodes[offset + --oldLength];
314
+ teardownNode(e);
315
+ remove(e);
370
316
  }
371
- rowNodes.length = newLength; // JS Array Truncate
372
317
  prevItems = nextItems;
318
+ nextItems = null;
373
319
  return;
374
320
  }
375
321
 
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.
322
+ if (start >= newLength) {
323
+ while (start < oldLength) {
324
+ const e = childNodes[offset + --oldLength];
325
+ teardownNode(e);
326
+ remove(e);
404
327
  }
328
+ prevItems = nextItems;
329
+ nextItems = null;
330
+ return;
405
331
  }
406
332
 
407
- // B. Setup for new node list construction
408
- const nextRowNodes = new Array(newLength);
333
+ // suffix
334
+ for (
335
+ oldLength--, newLength--;
336
+ newLength > start &&
337
+ oldLength >= start &&
338
+ nextItems[newLength] === prevItems[oldLength];
339
+ oldLength--, newLength--
340
+ );
409
341
 
410
- // Copy Prefix
411
- for (let i = 0; i < start; i++) {
412
- nextRowNodes[i] = rowNodes[i];
342
+ const nextKeys = new Set(nextItems);
343
+ const removalQueue = [];
344
+ for (let i = start; i <= oldLength; i++) {
345
+ if (!nextKeys.has(prevItems[i])) {
346
+ const ch = childNodes[i + offset];
347
+ teardownNode(ch);
348
+ removalQueue.push(ch);
349
+ childNodes[i + offset] = null;
350
+ }
351
+ }
352
+ for (const e of removalQueue) {
353
+ remove(e);
413
354
  }
414
- // Copy Suffix
415
- for (let i = 0; i < end; i++) {
416
- nextRowNodes[newLength - 1 - i] = rowNodes[oldLength - 1 - i];
355
+ if (oldLength - start === removalQueue.length) {
356
+ prevItems = nextItems;
357
+ nextItems = null;
358
+ return;
417
359
  }
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);
360
+ let keyMap = new Map();
361
+ for (let i = start; i <= oldLength; i++) {
362
+ if (
363
+ childNodes[i + offset] &&
364
+ (!nextItems[i] ||
365
+ prevItems[i] !== nextItems[i])
366
+ ) {
367
+ keyMap.set(prevItems[i], {
368
+ el: childNodes[i + offset],
369
+ item: prevItems[i],
370
+ });
443
371
  }
444
- nextRowNodes[i] = node;
445
372
  }
446
-
447
- // E. Cleanup
448
- // Anything remaining in keyMap is gone
449
- for (const node of keyMap.values()) {
450
- teardownNode(node);
451
- remove(node);
373
+ if (newLength === oldLength && keyMap.size > (newLength - start + 1) / 2) {
374
+ const lastOrdered = childNodes[start + offset - 1];
375
+ const set = [];
376
+ for (let i = start; i <= newLength; i++) {
377
+ set.push(keyMap.get(nextItems[i])?.el ?? childNodes[i + offset]);
378
+ }
379
+ lastOrdered.after(...set);
380
+ prevItems = nextItems;
381
+ keyMap = null;
382
+ nextItems = null;
383
+ return;
452
384
  }
453
385
 
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;
386
+ while (start <= newLength) {
387
+ const newChd = nextItems[start];
388
+ const oldChd = prevItems[start];
389
+ if (newChd === oldChd) {
390
+ start++;
391
+ continue;
392
+ }
393
+ if (oldChd === undefined) {
394
+ parent.insertBefore(render(newChd), endBookend);
395
+ start++;
396
+ continue;
397
+ }
398
+ const mappedOld = keyMap.get(newChd);
399
+ if (mappedOld) {
400
+ const oldDom = childNodeList[start + offset];
401
+ const { el, item } = mappedOld;
402
+ if (oldDom !== el) {
403
+ const tmp = el.nextSibling;
404
+ parent.insertBefore(el, oldDom);
405
+ parent.insertBefore(oldDom, tmp);
406
+ } else if (item !== newChd) {
407
+ replaceWith(newChd, el, render);
408
+ }
409
+ keyMap.delete(newChd);
410
+ } else if (oldChd !== newChd) {
411
+ parent.insertBefore(render(newChd), childNodeList[start + offset]);
412
+ }
413
+ start++;
414
+ }
415
+ for (const { el } of keyMap.values()) {
416
+ teardownNode(el);
417
+ remove(el);
418
+ }
419
+ keyMap = null;
463
420
  prevItems = nextItems;
421
+ nextItems = null;
464
422
  });
465
-
466
423
  return outlet;
467
424
  }
468
425
 
@@ -589,11 +546,14 @@ export function isolatedTerminalList(props) {
589
546
  }
590
547
  if (newLength === oldLength && keyMap.size > (newLength - start + 1) / 2) {
591
548
  const lastOrdered = childNodes[start];
592
- const set = [];
593
- for (let i = start; i <= newLength; i++) {
594
- set.push(keyMap.get(nextItems[i])?.el ?? childNodes[i + 1]);
549
+ // const set = [];
550
+ // for (let i = start; i <= newLength; i++) {
551
+ // set.push(keyMap.get(nextItems[i])?.el ?? childNodes[i + 1]);
552
+ // }
553
+ // lastOrdered.after(...set);
554
+ for (let i = newLength; i >= start; i--) {
555
+ lastOrdered.after(keyMap.get(nextItems[i])?.el ?? childNodes[i + 1]);
595
556
  }
596
- lastOrdered.after(...set);
597
557
  prevItems = nextItems;
598
558
  keyMap = null;
599
559
  nextItems = null;
@@ -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":"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"}
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":"8b93b0656412692139068362a59281bf5ee64e327a6ba8a9f0ef21cd1f5e7c49","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"}