solid-js 1.2.0 → 1.2.4

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/dev.cjs CHANGED
@@ -553,10 +553,11 @@ function getSuspenseContext() {
553
553
  return SuspenseContext || (SuspenseContext = createContext({}));
554
554
  }
555
555
  function readSignal() {
556
- if (this.state && this.sources) {
556
+ const runningTransition = Transition && Transition.running;
557
+ if (this.sources && (!runningTransition && this.state || runningTransition && this.tState)) {
557
558
  const updates = Updates;
558
559
  Updates = null;
559
- this.state === STALE || Transition && Transition.running && this.tState ? updateComputation(this) : lookDownstream(this);
560
+ !runningTransition && this.state === STALE || runningTransition && this.tState === STALE ? updateComputation(this) : lookDownstream(this);
560
561
  Updates = updates;
561
562
  }
562
563
  if (Listener) {
@@ -576,7 +577,7 @@ function readSignal() {
576
577
  this.observerSlots.push(Listener.sources.length - 1);
577
578
  }
578
579
  }
579
- if (Transition && Transition.running && Transition.sources.has(this)) return this.tValue;
580
+ if (runningTransition && Transition.sources.has(this)) return this.tValue;
580
581
  return this.value;
581
582
  }
582
583
  function writeSignal(node, value, isComp) {
@@ -624,7 +625,7 @@ function updateComputation(node) {
624
625
  listener = Listener,
625
626
  time = ExecCount;
626
627
  Listener = Owner = node;
627
- runComputation(node, node.value, time);
628
+ runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);
628
629
  if (Transition && !Transition.running && Transition.sources.has(node)) {
629
630
  queueMicrotask(() => {
630
631
  runUpdates(() => {
@@ -689,7 +690,7 @@ function runTop(node) {
689
690
  const ancestors = [node];
690
691
  while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {
691
692
  if (runningTransition && Transition.disposed.has(node)) return;
692
- if (node.state || runningTransition && node.tState) ancestors.push(node);
693
+ if (!runningTransition && node.state || runningTransition && node.tState) ancestors.push(node);
693
694
  }
694
695
  for (let i = ancestors.length - 1; i >= 0; i--) {
695
696
  node = ancestors[i];
@@ -700,9 +701,9 @@ function runTop(node) {
700
701
  if (Transition.disposed.has(top)) return;
701
702
  }
702
703
  }
703
- if (node.state === STALE || runningTransition && node.tState === STALE) {
704
+ if (!runningTransition && node.state === STALE || runningTransition && node.tState === STALE) {
704
705
  updateComputation(node);
705
- } else if (node.state === PENDING || runningTransition && node.tState === PENDING) {
706
+ } else if (!runningTransition && node.state === PENDING || runningTransition && node.tState === PENDING) {
706
707
  const updates = Updates;
707
708
  Updates = null;
708
709
  lookDownstream(node);
@@ -806,10 +807,11 @@ function runUserEffects(queue) {
806
807
  }
807
808
  function lookDownstream(node) {
808
809
  node.state = 0;
810
+ const runningTransition = Transition && Transition.running;
809
811
  for (let i = 0; i < node.sources.length; i += 1) {
810
812
  const source = node.sources[i];
811
813
  if (source.sources) {
812
- if (source.state === STALE || Transition && Transition.running && source.tState) runTop(source);else if (source.state === PENDING) lookDownstream(source);
814
+ if (!runningTransition && source.state === STALE || runningTransition && source.tState === STALE) runTop(source);else if (!runningTransition && source.state === PENDING || runningTransition && source.tState === PENDING) lookDownstream(source);
813
815
  }
814
816
  }
815
817
  }
@@ -817,7 +819,7 @@ function markUpstream(node) {
817
819
  const runningTransition = Transition && Transition.running;
818
820
  for (let i = 0; i < node.observers.length; i += 1) {
819
821
  const o = node.observers[i];
820
- if (!o.state || runningTransition && !o.tState) {
822
+ if (!runningTransition && !o.state || runningTransition && !o.tState) {
821
823
  if (runningTransition) o.tState = PENDING;else o.state = PENDING;
822
824
  if (o.pure) Updates.push(o);else Effects.push(o);
823
825
  o.observers && markUpstream(o);
@@ -1205,6 +1207,9 @@ function splitProps(props, ...keys) {
1205
1207
  Object.defineProperty(clone, key, descriptors[key] ? descriptors[key] : {
1206
1208
  get() {
1207
1209
  return props[key];
1210
+ },
1211
+ set() {
1212
+ return true;
1208
1213
  }
1209
1214
  });
1210
1215
  }
@@ -1407,9 +1412,12 @@ function Suspense(props) {
1407
1412
  inFallback,
1408
1413
  effects: [],
1409
1414
  resolved: false
1410
- };
1415
+ },
1416
+ owner = getOwner();
1411
1417
  const listContext = useContext(SuspenseListContext);
1412
1418
  if (listContext) [showContent, showFallback] = listContext.register(store.inFallback);
1419
+ let dispose;
1420
+ onCleanup(() => dispose && dispose());
1413
1421
  return createComponent(SuspenseContext.Provider, {
1414
1422
  value: store,
1415
1423
  get children() {
@@ -1418,13 +1426,17 @@ function Suspense(props) {
1418
1426
  const inFallback = store.inFallback(),
1419
1427
  visibleContent = showContent ? showContent() : true,
1420
1428
  visibleFallback = showFallback ? showFallback() : true;
1429
+ dispose && dispose();
1421
1430
  if (!inFallback && visibleContent) {
1422
1431
  store.resolved = true;
1423
1432
  resumeEffects(store.effects);
1424
1433
  return rendered;
1425
1434
  }
1426
1435
  if (!visibleFallback) return;
1427
- return props.fallback;
1436
+ return createRoot(disposer => {
1437
+ dispose = disposer;
1438
+ return props.fallback;
1439
+ }, owner);
1428
1440
  });
1429
1441
  }
1430
1442
  });
package/dist/dev.js CHANGED
@@ -549,10 +549,11 @@ function getSuspenseContext() {
549
549
  return SuspenseContext || (SuspenseContext = createContext({}));
550
550
  }
551
551
  function readSignal() {
552
- if (this.state && this.sources) {
552
+ const runningTransition = Transition && Transition.running;
553
+ if (this.sources && (!runningTransition && this.state || runningTransition && this.tState)) {
553
554
  const updates = Updates;
554
555
  Updates = null;
555
- this.state === STALE || Transition && Transition.running && this.tState ? updateComputation(this) : lookDownstream(this);
556
+ !runningTransition && this.state === STALE || runningTransition && this.tState === STALE ? updateComputation(this) : lookDownstream(this);
556
557
  Updates = updates;
557
558
  }
558
559
  if (Listener) {
@@ -572,7 +573,7 @@ function readSignal() {
572
573
  this.observerSlots.push(Listener.sources.length - 1);
573
574
  }
574
575
  }
575
- if (Transition && Transition.running && Transition.sources.has(this)) return this.tValue;
576
+ if (runningTransition && Transition.sources.has(this)) return this.tValue;
576
577
  return this.value;
577
578
  }
578
579
  function writeSignal(node, value, isComp) {
@@ -620,7 +621,7 @@ function updateComputation(node) {
620
621
  listener = Listener,
621
622
  time = ExecCount;
622
623
  Listener = Owner = node;
623
- runComputation(node, node.value, time);
624
+ runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);
624
625
  if (Transition && !Transition.running && Transition.sources.has(node)) {
625
626
  queueMicrotask(() => {
626
627
  runUpdates(() => {
@@ -685,7 +686,7 @@ function runTop(node) {
685
686
  const ancestors = [node];
686
687
  while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {
687
688
  if (runningTransition && Transition.disposed.has(node)) return;
688
- if (node.state || runningTransition && node.tState) ancestors.push(node);
689
+ if (!runningTransition && node.state || runningTransition && node.tState) ancestors.push(node);
689
690
  }
690
691
  for (let i = ancestors.length - 1; i >= 0; i--) {
691
692
  node = ancestors[i];
@@ -696,9 +697,9 @@ function runTop(node) {
696
697
  if (Transition.disposed.has(top)) return;
697
698
  }
698
699
  }
699
- if (node.state === STALE || runningTransition && node.tState === STALE) {
700
+ if (!runningTransition && node.state === STALE || runningTransition && node.tState === STALE) {
700
701
  updateComputation(node);
701
- } else if (node.state === PENDING || runningTransition && node.tState === PENDING) {
702
+ } else if (!runningTransition && node.state === PENDING || runningTransition && node.tState === PENDING) {
702
703
  const updates = Updates;
703
704
  Updates = null;
704
705
  lookDownstream(node);
@@ -802,10 +803,11 @@ function runUserEffects(queue) {
802
803
  }
803
804
  function lookDownstream(node) {
804
805
  node.state = 0;
806
+ const runningTransition = Transition && Transition.running;
805
807
  for (let i = 0; i < node.sources.length; i += 1) {
806
808
  const source = node.sources[i];
807
809
  if (source.sources) {
808
- if (source.state === STALE || Transition && Transition.running && source.tState) runTop(source);else if (source.state === PENDING) lookDownstream(source);
810
+ if (!runningTransition && source.state === STALE || runningTransition && source.tState === STALE) runTop(source);else if (!runningTransition && source.state === PENDING || runningTransition && source.tState === PENDING) lookDownstream(source);
809
811
  }
810
812
  }
811
813
  }
@@ -813,7 +815,7 @@ function markUpstream(node) {
813
815
  const runningTransition = Transition && Transition.running;
814
816
  for (let i = 0; i < node.observers.length; i += 1) {
815
817
  const o = node.observers[i];
816
- if (!o.state || runningTransition && !o.tState) {
818
+ if (!runningTransition && !o.state || runningTransition && !o.tState) {
817
819
  if (runningTransition) o.tState = PENDING;else o.state = PENDING;
818
820
  if (o.pure) Updates.push(o);else Effects.push(o);
819
821
  o.observers && markUpstream(o);
@@ -1201,6 +1203,9 @@ function splitProps(props, ...keys) {
1201
1203
  Object.defineProperty(clone, key, descriptors[key] ? descriptors[key] : {
1202
1204
  get() {
1203
1205
  return props[key];
1206
+ },
1207
+ set() {
1208
+ return true;
1204
1209
  }
1205
1210
  });
1206
1211
  }
@@ -1403,9 +1408,12 @@ function Suspense(props) {
1403
1408
  inFallback,
1404
1409
  effects: [],
1405
1410
  resolved: false
1406
- };
1411
+ },
1412
+ owner = getOwner();
1407
1413
  const listContext = useContext(SuspenseListContext);
1408
1414
  if (listContext) [showContent, showFallback] = listContext.register(store.inFallback);
1415
+ let dispose;
1416
+ onCleanup(() => dispose && dispose());
1409
1417
  return createComponent(SuspenseContext.Provider, {
1410
1418
  value: store,
1411
1419
  get children() {
@@ -1414,13 +1422,17 @@ function Suspense(props) {
1414
1422
  const inFallback = store.inFallback(),
1415
1423
  visibleContent = showContent ? showContent() : true,
1416
1424
  visibleFallback = showFallback ? showFallback() : true;
1425
+ dispose && dispose();
1417
1426
  if (!inFallback && visibleContent) {
1418
1427
  store.resolved = true;
1419
1428
  resumeEffects(store.effects);
1420
1429
  return rendered;
1421
1430
  }
1422
1431
  if (!visibleFallback) return;
1423
- return props.fallback;
1432
+ return createRoot(disposer => {
1433
+ dispose = disposer;
1434
+ return props.fallback;
1435
+ }, owner);
1424
1436
  });
1425
1437
  }
1426
1438
  });
package/dist/server.cjs CHANGED
@@ -510,6 +510,7 @@ exports.SuspenseList = SuspenseList;
510
510
  exports.Switch = Switch;
511
511
  exports.awaitSuspense = awaitSuspense;
512
512
  exports.batch = batch;
513
+ exports.children = children;
513
514
  exports.createComponent = createComponent;
514
515
  exports.createComputed = createComputed;
515
516
  exports.createContext = createContext;
package/dist/server.js CHANGED
@@ -494,4 +494,4 @@ function awaitSuspense(fn) {
494
494
  });
495
495
  }
496
496
 
497
- export { $PROXY, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, awaitSuspense, batch, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableScheduling, equalFn, from, getListener, getOwner, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };
497
+ export { $PROXY, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, awaitSuspense, batch, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableScheduling, equalFn, from, getListener, getOwner, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };
package/dist/solid.cjs CHANGED
@@ -502,10 +502,11 @@ function getSuspenseContext() {
502
502
  return SuspenseContext || (SuspenseContext = createContext({}));
503
503
  }
504
504
  function readSignal() {
505
- if (this.state && this.sources) {
505
+ const runningTransition = Transition && Transition.running;
506
+ if (this.sources && (!runningTransition && this.state || runningTransition && this.tState)) {
506
507
  const updates = Updates;
507
508
  Updates = null;
508
- this.state === STALE || Transition && Transition.running && this.tState ? updateComputation(this) : lookDownstream(this);
509
+ !runningTransition && this.state === STALE || runningTransition && this.tState === STALE ? updateComputation(this) : lookDownstream(this);
509
510
  Updates = updates;
510
511
  }
511
512
  if (Listener) {
@@ -525,7 +526,7 @@ function readSignal() {
525
526
  this.observerSlots.push(Listener.sources.length - 1);
526
527
  }
527
528
  }
528
- if (Transition && Transition.running && Transition.sources.has(this)) return this.tValue;
529
+ if (runningTransition && Transition.sources.has(this)) return this.tValue;
529
530
  return this.value;
530
531
  }
531
532
  function writeSignal(node, value, isComp) {
@@ -573,7 +574,7 @@ function updateComputation(node) {
573
574
  listener = Listener,
574
575
  time = ExecCount;
575
576
  Listener = Owner = node;
576
- runComputation(node, node.value, time);
577
+ runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);
577
578
  if (Transition && !Transition.running && Transition.sources.has(node)) {
578
579
  queueMicrotask(() => {
579
580
  runUpdates(() => {
@@ -637,7 +638,7 @@ function runTop(node) {
637
638
  const ancestors = [node];
638
639
  while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {
639
640
  if (runningTransition && Transition.disposed.has(node)) return;
640
- if (node.state || runningTransition && node.tState) ancestors.push(node);
641
+ if (!runningTransition && node.state || runningTransition && node.tState) ancestors.push(node);
641
642
  }
642
643
  for (let i = ancestors.length - 1; i >= 0; i--) {
643
644
  node = ancestors[i];
@@ -648,9 +649,9 @@ function runTop(node) {
648
649
  if (Transition.disposed.has(top)) return;
649
650
  }
650
651
  }
651
- if (node.state === STALE || runningTransition && node.tState === STALE) {
652
+ if (!runningTransition && node.state === STALE || runningTransition && node.tState === STALE) {
652
653
  updateComputation(node);
653
- } else if (node.state === PENDING || runningTransition && node.tState === PENDING) {
654
+ } else if (!runningTransition && node.state === PENDING || runningTransition && node.tState === PENDING) {
654
655
  const updates = Updates;
655
656
  Updates = null;
656
657
  lookDownstream(node);
@@ -753,10 +754,11 @@ function runUserEffects(queue) {
753
754
  }
754
755
  function lookDownstream(node) {
755
756
  node.state = 0;
757
+ const runningTransition = Transition && Transition.running;
756
758
  for (let i = 0; i < node.sources.length; i += 1) {
757
759
  const source = node.sources[i];
758
760
  if (source.sources) {
759
- if (source.state === STALE || Transition && Transition.running && source.tState) runTop(source);else if (source.state === PENDING) lookDownstream(source);
761
+ if (!runningTransition && source.state === STALE || runningTransition && source.tState === STALE) runTop(source);else if (!runningTransition && source.state === PENDING || runningTransition && source.tState === PENDING) lookDownstream(source);
760
762
  }
761
763
  }
762
764
  }
@@ -764,7 +766,7 @@ function markUpstream(node) {
764
766
  const runningTransition = Transition && Transition.running;
765
767
  for (let i = 0; i < node.observers.length; i += 1) {
766
768
  const o = node.observers[i];
767
- if (!o.state || runningTransition && !o.tState) {
769
+ if (!runningTransition && !o.state || runningTransition && !o.tState) {
768
770
  if (runningTransition) o.tState = PENDING;else o.state = PENDING;
769
771
  if (o.pure) Updates.push(o);else Effects.push(o);
770
772
  o.observers && markUpstream(o);
@@ -1129,6 +1131,9 @@ function splitProps(props, ...keys) {
1129
1131
  Object.defineProperty(clone, key, descriptors[key] ? descriptors[key] : {
1130
1132
  get() {
1131
1133
  return props[key];
1134
+ },
1135
+ set() {
1136
+ return true;
1132
1137
  }
1133
1138
  });
1134
1139
  }
@@ -1331,9 +1336,12 @@ function Suspense(props) {
1331
1336
  inFallback,
1332
1337
  effects: [],
1333
1338
  resolved: false
1334
- };
1339
+ },
1340
+ owner = getOwner();
1335
1341
  const listContext = useContext(SuspenseListContext);
1336
1342
  if (listContext) [showContent, showFallback] = listContext.register(store.inFallback);
1343
+ let dispose;
1344
+ onCleanup(() => dispose && dispose());
1337
1345
  return createComponent(SuspenseContext.Provider, {
1338
1346
  value: store,
1339
1347
  get children() {
@@ -1342,13 +1350,17 @@ function Suspense(props) {
1342
1350
  const inFallback = store.inFallback(),
1343
1351
  visibleContent = showContent ? showContent() : true,
1344
1352
  visibleFallback = showFallback ? showFallback() : true;
1353
+ dispose && dispose();
1345
1354
  if (!inFallback && visibleContent) {
1346
1355
  store.resolved = true;
1347
1356
  resumeEffects(store.effects);
1348
1357
  return rendered;
1349
1358
  }
1350
1359
  if (!visibleFallback) return;
1351
- return props.fallback;
1360
+ return createRoot(disposer => {
1361
+ dispose = disposer;
1362
+ return props.fallback;
1363
+ }, owner);
1352
1364
  });
1353
1365
  }
1354
1366
  });
package/dist/solid.js CHANGED
@@ -498,10 +498,11 @@ function getSuspenseContext() {
498
498
  return SuspenseContext || (SuspenseContext = createContext({}));
499
499
  }
500
500
  function readSignal() {
501
- if (this.state && this.sources) {
501
+ const runningTransition = Transition && Transition.running;
502
+ if (this.sources && (!runningTransition && this.state || runningTransition && this.tState)) {
502
503
  const updates = Updates;
503
504
  Updates = null;
504
- this.state === STALE || Transition && Transition.running && this.tState ? updateComputation(this) : lookDownstream(this);
505
+ !runningTransition && this.state === STALE || runningTransition && this.tState === STALE ? updateComputation(this) : lookDownstream(this);
505
506
  Updates = updates;
506
507
  }
507
508
  if (Listener) {
@@ -521,7 +522,7 @@ function readSignal() {
521
522
  this.observerSlots.push(Listener.sources.length - 1);
522
523
  }
523
524
  }
524
- if (Transition && Transition.running && Transition.sources.has(this)) return this.tValue;
525
+ if (runningTransition && Transition.sources.has(this)) return this.tValue;
525
526
  return this.value;
526
527
  }
527
528
  function writeSignal(node, value, isComp) {
@@ -569,7 +570,7 @@ function updateComputation(node) {
569
570
  listener = Listener,
570
571
  time = ExecCount;
571
572
  Listener = Owner = node;
572
- runComputation(node, node.value, time);
573
+ runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);
573
574
  if (Transition && !Transition.running && Transition.sources.has(node)) {
574
575
  queueMicrotask(() => {
575
576
  runUpdates(() => {
@@ -633,7 +634,7 @@ function runTop(node) {
633
634
  const ancestors = [node];
634
635
  while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {
635
636
  if (runningTransition && Transition.disposed.has(node)) return;
636
- if (node.state || runningTransition && node.tState) ancestors.push(node);
637
+ if (!runningTransition && node.state || runningTransition && node.tState) ancestors.push(node);
637
638
  }
638
639
  for (let i = ancestors.length - 1; i >= 0; i--) {
639
640
  node = ancestors[i];
@@ -644,9 +645,9 @@ function runTop(node) {
644
645
  if (Transition.disposed.has(top)) return;
645
646
  }
646
647
  }
647
- if (node.state === STALE || runningTransition && node.tState === STALE) {
648
+ if (!runningTransition && node.state === STALE || runningTransition && node.tState === STALE) {
648
649
  updateComputation(node);
649
- } else if (node.state === PENDING || runningTransition && node.tState === PENDING) {
650
+ } else if (!runningTransition && node.state === PENDING || runningTransition && node.tState === PENDING) {
650
651
  const updates = Updates;
651
652
  Updates = null;
652
653
  lookDownstream(node);
@@ -749,10 +750,11 @@ function runUserEffects(queue) {
749
750
  }
750
751
  function lookDownstream(node) {
751
752
  node.state = 0;
753
+ const runningTransition = Transition && Transition.running;
752
754
  for (let i = 0; i < node.sources.length; i += 1) {
753
755
  const source = node.sources[i];
754
756
  if (source.sources) {
755
- if (source.state === STALE || Transition && Transition.running && source.tState) runTop(source);else if (source.state === PENDING) lookDownstream(source);
757
+ if (!runningTransition && source.state === STALE || runningTransition && source.tState === STALE) runTop(source);else if (!runningTransition && source.state === PENDING || runningTransition && source.tState === PENDING) lookDownstream(source);
756
758
  }
757
759
  }
758
760
  }
@@ -760,7 +762,7 @@ function markUpstream(node) {
760
762
  const runningTransition = Transition && Transition.running;
761
763
  for (let i = 0; i < node.observers.length; i += 1) {
762
764
  const o = node.observers[i];
763
- if (!o.state || runningTransition && !o.tState) {
765
+ if (!runningTransition && !o.state || runningTransition && !o.tState) {
764
766
  if (runningTransition) o.tState = PENDING;else o.state = PENDING;
765
767
  if (o.pure) Updates.push(o);else Effects.push(o);
766
768
  o.observers && markUpstream(o);
@@ -1125,6 +1127,9 @@ function splitProps(props, ...keys) {
1125
1127
  Object.defineProperty(clone, key, descriptors[key] ? descriptors[key] : {
1126
1128
  get() {
1127
1129
  return props[key];
1130
+ },
1131
+ set() {
1132
+ return true;
1128
1133
  }
1129
1134
  });
1130
1135
  }
@@ -1327,9 +1332,12 @@ function Suspense(props) {
1327
1332
  inFallback,
1328
1333
  effects: [],
1329
1334
  resolved: false
1330
- };
1335
+ },
1336
+ owner = getOwner();
1331
1337
  const listContext = useContext(SuspenseListContext);
1332
1338
  if (listContext) [showContent, showFallback] = listContext.register(store.inFallback);
1339
+ let dispose;
1340
+ onCleanup(() => dispose && dispose());
1333
1341
  return createComponent(SuspenseContext.Provider, {
1334
1342
  value: store,
1335
1343
  get children() {
@@ -1338,13 +1346,17 @@ function Suspense(props) {
1338
1346
  const inFallback = store.inFallback(),
1339
1347
  visibleContent = showContent ? showContent() : true,
1340
1348
  visibleFallback = showFallback ? showFallback() : true;
1349
+ dispose && dispose();
1341
1350
  if (!inFallback && visibleContent) {
1342
1351
  store.resolved = true;
1343
1352
  resumeEffects(store.effects);
1344
1353
  return rendered;
1345
1354
  }
1346
1355
  if (!visibleFallback) return;
1347
- return props.fallback;
1356
+ return createRoot(disposer => {
1357
+ dispose = disposer;
1358
+ return props.fallback;
1359
+ }, owner);
1348
1360
  });
1349
1361
  }
1350
1362
  });
@@ -358,7 +358,8 @@ function createHTML(r, {
358
358
  childOptions = Object.assign({}, options, {
359
359
  first: true,
360
360
  decl: [],
361
- exprs: []
361
+ exprs: [],
362
+ parent: false
362
363
  });
363
364
  parseNode(children, childOptions);
364
365
  props.push(`children: () => { ${childOptions.exprs.join(";\n")}}`);
@@ -399,8 +400,8 @@ function createHTML(r, {
399
400
  decl: [],
400
401
  exprs: []
401
402
  });
402
- parseNode(child, childOptions);
403
403
  options.templateNodes.push([child]);
404
+ parseNode(child, childOptions);
404
405
  parts.push(`function() { ${childOptions.decl.join(",\n") + ";\n" + childOptions.exprs.join(";\n") + `;\nreturn _$el${id};\n`}}()`);
405
406
  options.counter = childOptions.counter;
406
407
  options.templateId = childOptions.templateId;
package/html/dist/html.js CHANGED
@@ -356,7 +356,8 @@ function createHTML(r, {
356
356
  childOptions = Object.assign({}, options, {
357
357
  first: true,
358
358
  decl: [],
359
- exprs: []
359
+ exprs: [],
360
+ parent: false
360
361
  });
361
362
  parseNode(children, childOptions);
362
363
  props.push(`children: () => { ${childOptions.exprs.join(";\n")}}`);
@@ -397,8 +398,8 @@ function createHTML(r, {
397
398
  decl: [],
398
399
  exprs: []
399
400
  });
400
- parseNode(child, childOptions);
401
401
  options.templateNodes.push([child]);
402
+ parseNode(child, childOptions);
402
403
  parts.push(`function() { ${childOptions.decl.join(",\n") + ";\n" + childOptions.exprs.join(";\n") + `;\nreturn _$el${id};\n`}}()`);
403
404
  options.counter = childOptions.counter;
404
405
  options.templateId = childOptions.templateId;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "solid-js",
3
3
  "description": "A declarative JavaScript library for building user interfaces.",
4
- "version": "1.2.0",
4
+ "version": "1.2.4",
5
5
  "author": "Ryan Carniato",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/solidjs/solid#readme",
@@ -132,5 +132,5 @@
132
132
  "compiler",
133
133
  "performance"
134
134
  ],
135
- "gitHead": "e6bbfa693db53cffd3372ee8bf1c61e3f1d47064"
135
+ "gitHead": "2866e83def4f3a02c305277fa8f589e355ab8952"
136
136
  }
@@ -31,7 +31,7 @@ function wrap$1(value, name) {
31
31
  return p;
32
32
  }
33
33
  function isWrappable(obj) {
34
- return obj != null && typeof obj === "object" && (!obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
34
+ return obj != null && typeof obj === "object" && (obj[solidJs.$PROXY] || !obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
35
35
  }
36
36
  function unwrap(item, set = new Set()) {
37
37
  let result, unwrapped, v, prop;
@@ -65,7 +65,7 @@ function getDataNodes(target) {
65
65
  }
66
66
  function proxyDescriptor(target, property) {
67
67
  const desc = Reflect.getOwnPropertyDescriptor(target, property);
68
- if (!desc || desc.get || property === solidJs.$PROXY || property === $NODE || property === $NAME) return desc;
68
+ if (!desc || desc.get || !desc.configurable || property === solidJs.$PROXY || property === $NODE || property === $NAME) return desc;
69
69
  delete desc.value;
70
70
  delete desc.writable;
71
71
  desc.get = () => target[solidJs.$PROXY][property];
package/store/dist/dev.js CHANGED
@@ -1,4 +1,4 @@
1
- import { DEV, $PROXY, getListener, batch, createSignal } from 'solid-js';
1
+ import { $PROXY, DEV, getListener, batch, createSignal } from 'solid-js';
2
2
 
3
3
  const $RAW = Symbol("store-raw"),
4
4
  $NODE = Symbol("store-node"),
@@ -27,7 +27,7 @@ function wrap$1(value, name) {
27
27
  return p;
28
28
  }
29
29
  function isWrappable(obj) {
30
- return obj != null && typeof obj === "object" && (!obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
30
+ return obj != null && typeof obj === "object" && (obj[$PROXY] || !obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
31
31
  }
32
32
  function unwrap(item, set = new Set()) {
33
33
  let result, unwrapped, v, prop;
@@ -61,7 +61,7 @@ function getDataNodes(target) {
61
61
  }
62
62
  function proxyDescriptor(target, property) {
63
63
  const desc = Reflect.getOwnPropertyDescriptor(target, property);
64
- if (!desc || desc.get || property === $PROXY || property === $NODE || property === $NAME) return desc;
64
+ if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE || property === $NAME) return desc;
65
65
  delete desc.value;
66
66
  delete desc.writable;
67
67
  desc.get = () => target[$PROXY][property];
@@ -28,7 +28,7 @@ function wrap$1(value, name) {
28
28
  return p;
29
29
  }
30
30
  function isWrappable(obj) {
31
- return obj != null && typeof obj === "object" && (!obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
31
+ return obj != null && typeof obj === "object" && (obj[solidJs.$PROXY] || !obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
32
32
  }
33
33
  function unwrap(item, set = new Set()) {
34
34
  let result, unwrapped, v, prop;
@@ -62,7 +62,7 @@ function getDataNodes(target) {
62
62
  }
63
63
  function proxyDescriptor(target, property) {
64
64
  const desc = Reflect.getOwnPropertyDescriptor(target, property);
65
- if (!desc || desc.get || property === solidJs.$PROXY || property === $NODE || property === $NAME) return desc;
65
+ if (!desc || desc.get || !desc.configurable || property === solidJs.$PROXY || property === $NODE || property === $NAME) return desc;
66
66
  delete desc.value;
67
67
  delete desc.writable;
68
68
  desc.get = () => target[solidJs.$PROXY][property];
@@ -24,7 +24,7 @@ function wrap$1(value, name) {
24
24
  return p;
25
25
  }
26
26
  function isWrappable(obj) {
27
- return obj != null && typeof obj === "object" && (!obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
27
+ return obj != null && typeof obj === "object" && (obj[$PROXY] || !obj.__proto__ || obj.__proto__ === Object.prototype || Array.isArray(obj));
28
28
  }
29
29
  function unwrap(item, set = new Set()) {
30
30
  let result, unwrapped, v, prop;
@@ -58,7 +58,7 @@ function getDataNodes(target) {
58
58
  }
59
59
  function proxyDescriptor(target, property) {
60
60
  const desc = Reflect.getOwnPropertyDescriptor(target, property);
61
- if (!desc || desc.get || property === $PROXY || property === $NODE || property === $NAME) return desc;
61
+ if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE || property === $NAME) return desc;
62
62
  delete desc.value;
63
63
  delete desc.writable;
64
64
  desc.get = () => target[$PROXY][property];
@@ -33,7 +33,7 @@ export declare type Store<T> = {
33
33
  } & {
34
34
  [$RAW]?: T;
35
35
  } & AddSymbolToPrimitive<T> & AddSymbolIterator<T> & AddSymbolToStringTag<T> & AddCallable<T>;
36
- export declare function isWrappable(obj: any): boolean;
36
+ export declare function isWrappable(obj: any): any;
37
37
  export declare function unwrap<T extends StoreNode>(item: any, set?: Set<unknown>): T;
38
38
  export declare function getDataNodes(target: StoreNode): any;
39
39
  export declare function proxyDescriptor(target: StoreNode, property: string | number | symbol): PropertyDescriptor | undefined;
package/types/jsx.d.ts CHANGED
@@ -92,6 +92,7 @@ export namespace JSX {
92
92
  onFocusIn?: EventHandlerUnion<T, FocusEvent>;
93
93
  onBlur?: EventHandlerUnion<T, FocusEvent>;
94
94
  onChange?: EventHandlerUnion<T, Event>;
95
+ onInvalid?: EventHandlerUnion<T, Event>;
95
96
  onInput?: EventHandlerUnion<T, InputEvent>;
96
97
  onBeforeInput?: EventHandlerUnion<T, InputEvent>;
97
98
  onReset?: EventHandlerUnion<T, Event>;
@@ -180,6 +181,7 @@ export namespace JSX {
180
181
  onfocusin?: EventHandlerUnion<T, FocusEvent>;
181
182
  onblur?: EventHandlerUnion<T, FocusEvent>;
182
183
  onchange?: EventHandlerUnion<T, Event>;
184
+ oninvalid?: EventHandlerUnion<T, Event>;
183
185
  oninput?: EventHandlerUnion<T, InputEvent>;
184
186
  onbeforeinput?: EventHandlerUnion<T, InputEvent>;
185
187
  onreset?: EventHandlerUnion<T, Event>;
@@ -2874,7 +2876,8 @@ export namespace JSX {
2874
2876
  extends FilterPrimitiveElementSVGAttributes<T>,
2875
2877
  ExternalResourceSVGAttributes,
2876
2878
  StylableSVGAttributes {
2877
- preserveAspectRatio: SVGPreserveAspectRatio;
2879
+ preserveAspectRatio?: SVGPreserveAspectRatio;
2880
+ href?: string;
2878
2881
  }
2879
2882
  interface FeMergeSVGAttributes<T>
2880
2883
  extends FilterPrimitiveElementSVGAttributes<T>,
@@ -2977,6 +2980,7 @@ export namespace JSX {
2977
2980
  width?: number | string;
2978
2981
  height?: number | string;
2979
2982
  preserveAspectRatio?: ImagePreserveAspectRatio;
2983
+ href?: string;
2980
2984
  }
2981
2985
  interface LineSVGAttributes<T>
2982
2986
  extends GraphicsElementSVGAttributes<T>,
@@ -1,3 +1,3 @@
1
- export { createRoot, createSignal, createComputed, createRenderEffect, createEffect, createDeferred, createSelector, createMemo, getListener, onMount, onCleanup, onError, untrack, batch, on, createContext, useContext, getOwner, runWithOwner, equalFn, requestCallback, mapArray, observable, from, $PROXY, DEV } from "./reactive";
1
+ export { createRoot, createSignal, createComputed, createRenderEffect, createEffect, createDeferred, createSelector, createMemo, getListener, onMount, onCleanup, onError, untrack, batch, on, children, createContext, useContext, getOwner, runWithOwner, equalFn, requestCallback, mapArray, observable, from, $PROXY, DEV } from "./reactive";
2
2
  export { awaitSuspense, mergeProps, splitProps, createComponent, For, Index, Show, Switch, Match, ErrorBoundary, Suspense, SuspenseList, createResource, enableScheduling, startTransition, useTransition, createUniqueId, lazy, sharedConfig } from "./rendering";
3
3
  export type { Component, Resource } from "./rendering";
package/web/dist/dev.cjs CHANGED
@@ -203,35 +203,19 @@ function insert(parent, accessor, marker, initial) {
203
203
  solidJs.createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);
204
204
  }
205
205
  function assign(node, props, isSVG, skipChildren, prevProps = {}) {
206
- let isCE, isProp, isChildProp;
206
+ for (const prop in prevProps) {
207
+ if (!(prop in props)) {
208
+ if (prop === "children") continue;
209
+ assignProp(node, prop, null, prevProps[prop], isSVG);
210
+ }
211
+ }
207
212
  for (const prop in props) {
208
213
  if (prop === "children") {
209
214
  if (!skipChildren) insertExpression(node, props.children);
210
215
  continue;
211
216
  }
212
217
  const value = props[prop];
213
- if (value === prevProps[prop]) continue;
214
- if (prop === "style") {
215
- style(node, value, prevProps[prop]);
216
- } else if (prop === "classList") {
217
- classList(node, value, prevProps[prop]);
218
- } else if (prop === "ref") {
219
- value(node);
220
- } else if (prop.slice(0, 3) === "on:") {
221
- node.addEventListener(prop.slice(3), value);
222
- } else if (prop.slice(0, 10) === "oncapture:") {
223
- node.addEventListener(prop.slice(10), value, true);
224
- } else if (prop.slice(0, 2) === "on") {
225
- const name = prop.slice(2).toLowerCase();
226
- const delegate = DelegatedEvents.has(name);
227
- addEventListener(node, name, value, delegate);
228
- delegate && delegateEvents([name]);
229
- } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
230
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
231
- } else {
232
- const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
233
- if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
234
- }
218
+ assignProp(node, prop, value, prevProps[prop], isSVG);
235
219
  prevProps[prop] = value;
236
220
  }
237
221
  }
@@ -314,6 +298,29 @@ function toggleClassKey(node, key, value) {
314
298
  const classNames = key.trim().split(/\s+/);
315
299
  for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
316
300
  }
301
+ function assignProp(node, prop, value, prev, isSVG) {
302
+ let isCE, isProp, isChildProp;
303
+ if (prop === "style") return style(node, value, prev);
304
+ if (prop === "classList") return classList(node, value, prev);
305
+ if (value === prev) return;
306
+ if (prop === "ref") {
307
+ value(node);
308
+ } else if (prop.slice(0, 3) === "on:") {
309
+ node.addEventListener(prop.slice(3), value);
310
+ } else if (prop.slice(0, 10) === "oncapture:") {
311
+ node.addEventListener(prop.slice(10), value, true);
312
+ } else if (prop.slice(0, 2) === "on") {
313
+ const name = prop.slice(2).toLowerCase();
314
+ const delegate = DelegatedEvents.has(name);
315
+ addEventListener(node, name, value, delegate);
316
+ delegate && delegateEvents([name]);
317
+ } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
318
+ if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
319
+ } else {
320
+ const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
321
+ if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
322
+ }
323
+ }
317
324
  function eventHandler(e) {
318
325
  const key = `$$${e.type}`;
319
326
  let node = e.composedPath && e.composedPath()[0] || e.target;
package/web/dist/dev.js CHANGED
@@ -200,35 +200,19 @@ function insert(parent, accessor, marker, initial) {
200
200
  createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);
201
201
  }
202
202
  function assign(node, props, isSVG, skipChildren, prevProps = {}) {
203
- let isCE, isProp, isChildProp;
203
+ for (const prop in prevProps) {
204
+ if (!(prop in props)) {
205
+ if (prop === "children") continue;
206
+ assignProp(node, prop, null, prevProps[prop], isSVG);
207
+ }
208
+ }
204
209
  for (const prop in props) {
205
210
  if (prop === "children") {
206
211
  if (!skipChildren) insertExpression(node, props.children);
207
212
  continue;
208
213
  }
209
214
  const value = props[prop];
210
- if (value === prevProps[prop]) continue;
211
- if (prop === "style") {
212
- style(node, value, prevProps[prop]);
213
- } else if (prop === "classList") {
214
- classList(node, value, prevProps[prop]);
215
- } else if (prop === "ref") {
216
- value(node);
217
- } else if (prop.slice(0, 3) === "on:") {
218
- node.addEventListener(prop.slice(3), value);
219
- } else if (prop.slice(0, 10) === "oncapture:") {
220
- node.addEventListener(prop.slice(10), value, true);
221
- } else if (prop.slice(0, 2) === "on") {
222
- const name = prop.slice(2).toLowerCase();
223
- const delegate = DelegatedEvents.has(name);
224
- addEventListener(node, name, value, delegate);
225
- delegate && delegateEvents([name]);
226
- } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
227
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
228
- } else {
229
- const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
230
- if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
231
- }
215
+ assignProp(node, prop, value, prevProps[prop], isSVG);
232
216
  prevProps[prop] = value;
233
217
  }
234
218
  }
@@ -311,6 +295,29 @@ function toggleClassKey(node, key, value) {
311
295
  const classNames = key.trim().split(/\s+/);
312
296
  for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
313
297
  }
298
+ function assignProp(node, prop, value, prev, isSVG) {
299
+ let isCE, isProp, isChildProp;
300
+ if (prop === "style") return style(node, value, prev);
301
+ if (prop === "classList") return classList(node, value, prev);
302
+ if (value === prev) return;
303
+ if (prop === "ref") {
304
+ value(node);
305
+ } else if (prop.slice(0, 3) === "on:") {
306
+ node.addEventListener(prop.slice(3), value);
307
+ } else if (prop.slice(0, 10) === "oncapture:") {
308
+ node.addEventListener(prop.slice(10), value, true);
309
+ } else if (prop.slice(0, 2) === "on") {
310
+ const name = prop.slice(2).toLowerCase();
311
+ const delegate = DelegatedEvents.has(name);
312
+ addEventListener(node, name, value, delegate);
313
+ delegate && delegateEvents([name]);
314
+ } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
315
+ if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
316
+ } else {
317
+ const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
318
+ if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
319
+ }
320
+ }
314
321
  function eventHandler(e) {
315
322
  const key = `$$${e.type}`;
316
323
  let node = e.composedPath && e.composedPath()[0] || e.target;
@@ -449,6 +449,8 @@ function ssrSpread(props, isSVG, skipChildren) {
449
449
  result += `class="${ssrClassList(value)}"`;
450
450
  } else if (BooleanAttributes.has(prop)) {
451
451
  if (value) result += prop;else continue;
452
+ } else if (prop === "ref" || prop.slice(0, 2) === "on") {
453
+ continue;
452
454
  } else {
453
455
  result += `${Aliases[prop] || prop}="${escape(value, true)}"`;
454
456
  }
@@ -525,7 +527,7 @@ function generateHydrationScript() {
525
527
  resources,
526
528
  eventNames = ["click", "input"]
527
529
  } = solidJs.sharedConfig.context;
528
- let s = `<script${nonce ? ` nonce="${nonce}"` : ""}>(()=>{_$HYDRATION={events:[],completed:new WeakSet};const t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")&&e||t(e.host&&e.host instanceof Node?e.host:e.parentNode)),e=e=>{let o=e.composedPath&&e.composedPath()[0]||e.target,s=t(o);s&&!_$HYDRATION.completed.has(s)&&_$HYDRATION.events.push([s,e])};["${eventNames.join('","')}"].forEach(t=>document.addEventListener(t,e))})();`;
530
+ let s = `<script${nonce ? ` nonce="${nonce}"` : ""}>(()=>{_$HYDRATION={events:[],completed:new WeakSet};const t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),e=e=>{let o=e.composedPath&&e.composedPath()[0]||e.target,s=t(o);s&&!_$HYDRATION.completed.has(s)&&_$HYDRATION.events.push([s,e])};["${eventNames.join('","')}"].forEach(t=>document.addEventListener(t,e))})();`;
529
531
  if (streaming) {
530
532
  s += `(()=>{const e=_$HYDRATION,o={};e.startResource=e=>{let r;o[e]=[new Promise(e=>r=e),r]},e.resolveResource=(e,r)=>{const n=o[e];if(!n)return o[e]=[r];n[1](r)},e.loadResource=e=>{const r=o[e];if(r)return r[0]}})();`;
531
533
  }
@@ -446,6 +446,8 @@ function ssrSpread(props, isSVG, skipChildren) {
446
446
  result += `class="${ssrClassList(value)}"`;
447
447
  } else if (BooleanAttributes.has(prop)) {
448
448
  if (value) result += prop;else continue;
449
+ } else if (prop === "ref" || prop.slice(0, 2) === "on") {
450
+ continue;
449
451
  } else {
450
452
  result += `${Aliases[prop] || prop}="${escape(value, true)}"`;
451
453
  }
@@ -522,7 +524,7 @@ function generateHydrationScript() {
522
524
  resources,
523
525
  eventNames = ["click", "input"]
524
526
  } = sharedConfig.context;
525
- let s = `<script${nonce ? ` nonce="${nonce}"` : ""}>(()=>{_$HYDRATION={events:[],completed:new WeakSet};const t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")&&e||t(e.host&&e.host instanceof Node?e.host:e.parentNode)),e=e=>{let o=e.composedPath&&e.composedPath()[0]||e.target,s=t(o);s&&!_$HYDRATION.completed.has(s)&&_$HYDRATION.events.push([s,e])};["${eventNames.join('","')}"].forEach(t=>document.addEventListener(t,e))})();`;
527
+ let s = `<script${nonce ? ` nonce="${nonce}"` : ""}>(()=>{_$HYDRATION={events:[],completed:new WeakSet};const t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),e=e=>{let o=e.composedPath&&e.composedPath()[0]||e.target,s=t(o);s&&!_$HYDRATION.completed.has(s)&&_$HYDRATION.events.push([s,e])};["${eventNames.join('","')}"].forEach(t=>document.addEventListener(t,e))})();`;
526
528
  if (streaming) {
527
529
  s += `(()=>{const e=_$HYDRATION,o={};e.startResource=e=>{let r;o[e]=[new Promise(e=>r=e),r]},e.resolveResource=(e,r)=>{const n=o[e];if(!n)return o[e]=[r];n[1](r)},e.loadResource=e=>{const r=o[e];if(r)return r[0]}})();`;
528
530
  }
package/web/dist/web.cjs CHANGED
@@ -202,35 +202,19 @@ function insert(parent, accessor, marker, initial) {
202
202
  solidJs.createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);
203
203
  }
204
204
  function assign(node, props, isSVG, skipChildren, prevProps = {}) {
205
- let isCE, isProp, isChildProp;
205
+ for (const prop in prevProps) {
206
+ if (!(prop in props)) {
207
+ if (prop === "children") continue;
208
+ assignProp(node, prop, null, prevProps[prop], isSVG);
209
+ }
210
+ }
206
211
  for (const prop in props) {
207
212
  if (prop === "children") {
208
213
  if (!skipChildren) insertExpression(node, props.children);
209
214
  continue;
210
215
  }
211
216
  const value = props[prop];
212
- if (value === prevProps[prop]) continue;
213
- if (prop === "style") {
214
- style(node, value, prevProps[prop]);
215
- } else if (prop === "classList") {
216
- classList(node, value, prevProps[prop]);
217
- } else if (prop === "ref") {
218
- value(node);
219
- } else if (prop.slice(0, 3) === "on:") {
220
- node.addEventListener(prop.slice(3), value);
221
- } else if (prop.slice(0, 10) === "oncapture:") {
222
- node.addEventListener(prop.slice(10), value, true);
223
- } else if (prop.slice(0, 2) === "on") {
224
- const name = prop.slice(2).toLowerCase();
225
- const delegate = DelegatedEvents.has(name);
226
- addEventListener(node, name, value, delegate);
227
- delegate && delegateEvents([name]);
228
- } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
229
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
230
- } else {
231
- const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
232
- if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
233
- }
217
+ assignProp(node, prop, value, prevProps[prop], isSVG);
234
218
  prevProps[prop] = value;
235
219
  }
236
220
  }
@@ -313,6 +297,29 @@ function toggleClassKey(node, key, value) {
313
297
  const classNames = key.trim().split(/\s+/);
314
298
  for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
315
299
  }
300
+ function assignProp(node, prop, value, prev, isSVG) {
301
+ let isCE, isProp, isChildProp;
302
+ if (prop === "style") return style(node, value, prev);
303
+ if (prop === "classList") return classList(node, value, prev);
304
+ if (value === prev) return;
305
+ if (prop === "ref") {
306
+ value(node);
307
+ } else if (prop.slice(0, 3) === "on:") {
308
+ node.addEventListener(prop.slice(3), value);
309
+ } else if (prop.slice(0, 10) === "oncapture:") {
310
+ node.addEventListener(prop.slice(10), value, true);
311
+ } else if (prop.slice(0, 2) === "on") {
312
+ const name = prop.slice(2).toLowerCase();
313
+ const delegate = DelegatedEvents.has(name);
314
+ addEventListener(node, name, value, delegate);
315
+ delegate && delegateEvents([name]);
316
+ } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
317
+ if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
318
+ } else {
319
+ const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
320
+ if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
321
+ }
322
+ }
316
323
  function eventHandler(e) {
317
324
  const key = `$$${e.type}`;
318
325
  let node = e.composedPath && e.composedPath()[0] || e.target;
package/web/dist/web.js CHANGED
@@ -199,35 +199,19 @@ function insert(parent, accessor, marker, initial) {
199
199
  createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);
200
200
  }
201
201
  function assign(node, props, isSVG, skipChildren, prevProps = {}) {
202
- let isCE, isProp, isChildProp;
202
+ for (const prop in prevProps) {
203
+ if (!(prop in props)) {
204
+ if (prop === "children") continue;
205
+ assignProp(node, prop, null, prevProps[prop], isSVG);
206
+ }
207
+ }
203
208
  for (const prop in props) {
204
209
  if (prop === "children") {
205
210
  if (!skipChildren) insertExpression(node, props.children);
206
211
  continue;
207
212
  }
208
213
  const value = props[prop];
209
- if (value === prevProps[prop]) continue;
210
- if (prop === "style") {
211
- style(node, value, prevProps[prop]);
212
- } else if (prop === "classList") {
213
- classList(node, value, prevProps[prop]);
214
- } else if (prop === "ref") {
215
- value(node);
216
- } else if (prop.slice(0, 3) === "on:") {
217
- node.addEventListener(prop.slice(3), value);
218
- } else if (prop.slice(0, 10) === "oncapture:") {
219
- node.addEventListener(prop.slice(10), value, true);
220
- } else if (prop.slice(0, 2) === "on") {
221
- const name = prop.slice(2).toLowerCase();
222
- const delegate = DelegatedEvents.has(name);
223
- addEventListener(node, name, value, delegate);
224
- delegate && delegateEvents([name]);
225
- } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
226
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
227
- } else {
228
- const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
229
- if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
230
- }
214
+ assignProp(node, prop, value, prevProps[prop], isSVG);
231
215
  prevProps[prop] = value;
232
216
  }
233
217
  }
@@ -310,6 +294,29 @@ function toggleClassKey(node, key, value) {
310
294
  const classNames = key.trim().split(/\s+/);
311
295
  for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);
312
296
  }
297
+ function assignProp(node, prop, value, prev, isSVG) {
298
+ let isCE, isProp, isChildProp;
299
+ if (prop === "style") return style(node, value, prev);
300
+ if (prop === "classList") return classList(node, value, prev);
301
+ if (value === prev) return;
302
+ if (prop === "ref") {
303
+ value(node);
304
+ } else if (prop.slice(0, 3) === "on:") {
305
+ node.addEventListener(prop.slice(3), value);
306
+ } else if (prop.slice(0, 10) === "oncapture:") {
307
+ node.addEventListener(prop.slice(10), value, true);
308
+ } else if (prop.slice(0, 2) === "on") {
309
+ const name = prop.slice(2).toLowerCase();
310
+ const delegate = DelegatedEvents.has(name);
311
+ addEventListener(node, name, value, delegate);
312
+ delegate && delegateEvents([name]);
313
+ } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
314
+ if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
315
+ } else {
316
+ const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
317
+ if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
318
+ }
319
+ }
313
320
  function eventHandler(e) {
314
321
  const key = `$$${e.type}`;
315
322
  let node = e.composedPath && e.composedPath()[0] || e.target;