octane 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/cjs/context-identity.cjs +29 -0
  2. package/dist/cjs/dom-stage.cjs +24 -18
  3. package/dist/cjs/error-codes.server.generated.cjs +5 -0
  4. package/dist/cjs/hydration-markers.cjs +12 -0
  5. package/dist/cjs/index.cjs +2 -0
  6. package/dist/cjs/runtime.cjs +253 -393
  7. package/dist/cjs/runtime.server.cjs +137 -35
  8. package/dist/cjs/server/index.cjs +2 -0
  9. package/dist/cjs/server/streamed-signals.cjs +41 -9
  10. package/dist/cjs/signals/client.cjs +1 -6
  11. package/dist/cjs/signals/engine.cjs +1 -12
  12. package/dist/cjs/version.cjs +1 -1
  13. package/dist/compiler/client-only-server.js +1 -28
  14. package/dist/compiler/compile-renderer-boundaries.js +1 -22
  15. package/dist/compiler/compile-universal.js +1 -22
  16. package/dist/compiler/compile.js +782 -359
  17. package/dist/compiler/dom-binding-fixed-props.js +11 -1
  18. package/dist/compiler/generated-origin.js +46 -0
  19. package/dist/compiler/hydrate-boundaries.js +88 -52
  20. package/dist/compiler/plain-hook-memo.js +5 -1
  21. package/dist/compiler/pure-factories.js +66 -0
  22. package/dist/compiler/register.js +4 -1
  23. package/dist/compiler/slot-hooks.js +113 -186
  24. package/dist/compiler/typescript-lowering.js +763 -0
  25. package/dist/compiler/void-roots.js +239 -0
  26. package/dist/compiler/volar.js +91 -38
  27. package/dist/context-identity.d.ts +14 -0
  28. package/dist/context-identity.js +28 -0
  29. package/dist/dom-stage.js +24 -18
  30. package/dist/error-codes.server.generated.d.ts +1 -0
  31. package/dist/error-codes.server.generated.js +5 -0
  32. package/dist/hydration/idle.js +1 -0
  33. package/dist/hydration/independent-island.js +53 -2
  34. package/dist/hydration/media.js +1 -0
  35. package/dist/hydration/types.d.ts +5 -0
  36. package/dist/hydration/visible.js +1 -0
  37. package/dist/hydration-markers.d.ts +8 -0
  38. package/dist/hydration-markers.js +8 -0
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.js +2 -0
  41. package/dist/runtime.d.ts +25 -40
  42. package/dist/runtime.js +254 -398
  43. package/dist/runtime.server.d.ts +23 -2
  44. package/dist/runtime.server.js +142 -36
  45. package/dist/server/index.d.ts +1 -1
  46. package/dist/server/index.js +2 -0
  47. package/dist/server/streamed-signals.js +41 -9
  48. package/dist/signals/client.js +3 -8
  49. package/dist/signals/engine.d.ts +0 -2
  50. package/dist/signals/engine.js +1 -13
  51. package/dist/universal-core.js +1 -1
  52. package/dist/version.js +1 -1
  53. package/package.json +1 -1
  54. package/dist/cjs/signals/diagnostic-local-hook.cjs +0 -37
  55. package/dist/compiler/local-void-roots.js +0 -154
  56. package/dist/signals/diagnostic-local-hook.d.ts +0 -8
  57. package/dist/signals/diagnostic-local-hook.js +0 -12
@@ -38,6 +38,7 @@ __export(runtime_exports, {
38
38
  __useLinkedStateWithGetter: () => __useLinkedStateWithGetter,
39
39
  __useReducerWithGetter: () => __useReducerWithGetter,
40
40
  __useStateWithGetter: () => __useStateWithGetter,
41
+ __voidRootProps: () => __voidRootProps,
41
42
  __vtSeen: () => __vtSeen,
42
43
  act: () => act,
43
44
  activityBlock: () => activityBlock,
@@ -158,7 +159,6 @@ __export(runtime_exports, {
158
159
  isChildrenBlock: () => isChildrenBlock,
159
160
  isHydratingStyle: () => isHydratingStyle,
160
161
  isInActScope: () => isInActScope,
161
- isNativeSignalDiagnosticProbe: () => isNativeSignalDiagnosticProbe,
162
162
  isValidElement: () => isValidElement,
163
163
  keyedForBlock: () => keyedForBlock,
164
164
  lazy: () => lazy,
@@ -358,7 +358,6 @@ var import_transition_state = require("./signals/transition-state.cjs");
358
358
  var import_transition_candidate = require("./signals/transition-candidate.cjs");
359
359
  var import_read_protocol = require("./signals/read-protocol.cjs");
360
360
  var import_native_read_events = require("./signals/native-read-events.cjs");
361
- var import_diagnostic_local_hook = require("./signals/diagnostic-local-hook.cjs");
362
361
  var import_native_read_seeds = require("./signals/native-read-seeds.cjs");
363
362
  var import_owner_context = require("./signals/owner-context.cjs");
364
363
  var import_document_owner = require("./signals/document-owner.cjs");
@@ -596,10 +595,34 @@ function enableSignalBindings(abi = 1, potentialOnly = false) {
596
595
  SIGNAL_BINDINGS_ENABLED = true;
597
596
  if (!potentialOnly) (0, import_document_owner.enableSignalDocument)(abi);
598
597
  }
599
- function signalIdentityKey(value) {
598
+ function signalIdentityToken(value, position) {
600
599
  if (value === null) return "null";
601
600
  const kind = typeof value;
602
- return kind === "string" || kind === "number" || kind === "bigint" || kind === "boolean" ? kind.charCodeAt(0).toString(36) + ":" + String(value) : kind === "undefined" ? "u:" : "o:" + String(value);
601
+ return kind === "string" || kind === "number" || kind === "bigint" || kind === "boolean" ? kind.charCodeAt(0).toString(36) + ":" + String(value) : kind === "undefined" ? "u:" : { value, position };
602
+ }
603
+ function signalIdentityKey(token, base, site, parents, componentKey, ids) {
604
+ if (typeof token === "string") return token;
605
+ const namespace = base + JSON.stringify([site ?? "legacy", parents, componentKey]);
606
+ const state = ids.signalState ??= { prefix: ids.prefix, next: 0 };
607
+ const namespaces = state.opaqueKeys ??= /* @__PURE__ */ new Map();
608
+ let keys = namespaces.get(namespace);
609
+ if (keys === void 0) {
610
+ keys = { objects: /* @__PURE__ */ new WeakMap(), symbols: /* @__PURE__ */ new Map(), used: /* @__PURE__ */ new Set(), next: 0 };
611
+ namespaces.set(namespace, keys);
612
+ }
613
+ const value = token.value;
614
+ let id = typeof value === "symbol" ? keys.symbols.get(value) : keys.objects.get(value);
615
+ if (id === void 0) {
616
+ id = token.position;
617
+ if (id === void 0 || keys.used.has(id)) {
618
+ while (keys.used.has(keys.next)) keys.next++;
619
+ id = keys.next++;
620
+ }
621
+ keys.used.add(id);
622
+ if (typeof value === "symbol") keys.symbols.set(value, id);
623
+ else keys.objects.set(value, id);
624
+ }
625
+ return "o:" + id.toString(36);
603
626
  }
604
627
  function rootSignalInstanceKey(ids) {
605
628
  return JSON.stringify([ids.signalState?.prefix ?? ids.prefix, "root"]);
@@ -631,14 +654,14 @@ function stampSignalInstanceKey(scope, key) {
631
654
  }
632
655
  function structuralSignalInstanceKey(parentScope, invocationSite, key, hasKey) {
633
656
  let base = resolveSignalInstanceKey(parentScope);
634
- const itemKeys = [];
657
+ const itemTokens = [];
635
658
  const visited = /* @__PURE__ */ new Set();
636
659
  let scope = parentScope;
637
660
  while (base === void 0 && scope !== null) {
638
661
  const block2 = scope.block;
639
662
  if (!visited.has(block2)) {
640
663
  visited.add(block2);
641
- if (block2.forSlot !== null) itemKeys.push(signalIdentityKey(block2.key));
664
+ if (block2.forSlot !== null) itemTokens.push(signalIdentityToken(block2.key, block2.itemIndex));
642
665
  base = resolveSignalInstanceKey(block2);
643
666
  }
644
667
  scope = scope.parent;
@@ -648,14 +671,28 @@ function structuralSignalInstanceKey(parentScope, invocationSite, key, hasKey) {
648
671
  while (base === void 0 && block !== null) {
649
672
  if (!visited.has(block)) {
650
673
  visited.add(block);
651
- if (block.forSlot !== null) itemKeys.push(signalIdentityKey(block.key));
674
+ if (block.forSlot !== null) itemTokens.push(signalIdentityToken(block.key, block.itemIndex));
652
675
  }
653
676
  base = resolveSignalInstanceKey(block);
654
677
  block = block.parentBlock;
655
678
  }
656
679
  base ??= rootSignalInstanceKey(parentScope.block.idState);
657
- itemKeys.reverse();
658
- return base + JSON.stringify([invocationSite ?? "legacy", itemKeys, hasKey ? signalIdentityKey(key) : ""]);
680
+ itemTokens.reverse();
681
+ const ids = parentScope.block.idState;
682
+ let itemKeys = itemTokens;
683
+ for (const token of itemTokens) {
684
+ if (typeof token === "string") continue;
685
+ itemKeys = [];
686
+ for (const entry of itemTokens) {
687
+ itemKeys.push(signalIdentityKey(entry, base, invocationSite, itemKeys, false, ids));
688
+ }
689
+ break;
690
+ }
691
+ return base + JSON.stringify([
692
+ invocationSite ?? "legacy",
693
+ itemKeys,
694
+ hasKey ? signalIdentityKey(signalIdentityToken(key), base, invocationSite, itemKeys, true, ids) : ""
695
+ ]);
659
696
  }
660
697
  function stampSignalInstance(scope, parentScope, invocationSite, key, hasKey) {
661
698
  if (SIGNAL_BINDINGS_ENABLED || import_document_owner.signalDocumentEnabled) {
@@ -676,6 +713,19 @@ function scopeSignalOwner(scope) {
676
713
  }
677
714
  if (documentOwner === void 0) return;
678
715
  let owner = SCOPE_SIGNAL_OWNERS.get(scope);
716
+ if ((owner === void 0 || owner === false) && scope.block.forSlot === null && scope.signalInstanceParent === null && scope.signalInstanceResolved === void 0) {
717
+ let parent = scope.parent ?? scope.block.parentBlock;
718
+ while (parent !== null) {
719
+ if (parent instanceof LiteBlockImpl) break;
720
+ if (parent.signalInstanceParent !== null || parent.signalInstanceResolved !== void 0)
721
+ break;
722
+ if (parent.block.forSlot?.signalSite !== void 0) {
723
+ SCOPE_SIGNAL_OWNERS.set(scope, false);
724
+ return scopeSignalOwner(parent);
725
+ }
726
+ parent = parent.parent ?? parent.block.parentBlock;
727
+ }
728
+ }
679
729
  const retired = owner === null;
680
730
  if (!owner || owner.documentOwner !== documentOwner) {
681
731
  const ids = scope.block.idState;
@@ -697,7 +747,7 @@ function scopeSignalOwner(scope) {
697
747
  scopeKey: documentOwner.scopeKey,
698
748
  documentOwner,
699
749
  instanceOwner: scope,
700
- instanceKey: resolveSignalInstanceKey(scope) ?? rootSignalInstanceKey(ids)
750
+ instanceKey: resolveSignalInstanceKey(scope) ?? (scope.block.forSlot?.signalSite !== void 0 ? structuralSignalInstanceKey(scope, scope.block.forSlot.signalSite, void 0, false) : rootSignalInstanceKey(ids))
701
751
  };
702
752
  identity.instanceOwner = identity;
703
753
  owner = Object.freeze(identity);
@@ -710,8 +760,7 @@ function scopeSignalOwner(scope) {
710
760
  }
711
761
  function runWithBlockSignalOwner(scope, callback) {
712
762
  const owner = scopeSignalOwner(scope);
713
- if (owner !== void 0 && (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null))
714
- (0, import_document_owner.streamedSignalOwnerActivator)?.(owner);
763
+ if (owner !== void 0) (0, import_document_owner.streamedSignalOwnerActivator)?.(owner);
715
764
  return owner === void 0 || (0, import_owner_context.currentSignalOwner)() === owner ? callback() : (0, import_owner_context.runWithSignalOwner)(owner, callback);
716
765
  }
717
766
  function disposeNativeStyleBinding(binding) {
@@ -724,9 +773,49 @@ function nativeStyleBody(props, scope) {
724
773
  journalRootProperty(scope.slots, 0, scope.slots[0]);
725
774
  scope.slots[0] = value;
726
775
  }
727
- function nativeStyleBinding(owner, slotIndex, el, value) {
776
+ function nativeStyleBinding(owner, slotIndex, el, value, literal) {
777
+ if (literal === 1) {
778
+ const binding = owner.slots[slotIndex];
779
+ if ((binding === void 0 || binding.block === null) && isScalarStyleLiteral(value)) {
780
+ writeScalarNativeStyle(owner, slotIndex, binding, el, value);
781
+ return;
782
+ }
783
+ }
728
784
  nativePresentationBinding(owner, slotIndex, el, nativeStyleBody, { el, value });
729
785
  }
786
+ function isScalarStyleLiteral(value) {
787
+ for (const name in value) {
788
+ const item = value[name];
789
+ if (item !== null && (typeof item === "object" || typeof item === "function")) return false;
790
+ }
791
+ return true;
792
+ }
793
+ function writeScalarNativeStyle(owner, slotIndex, binding, el, value) {
794
+ if (binding === void 0) {
795
+ binding = {
796
+ __kind: "nativeStyleBinding",
797
+ __flags: SLOT_FLAG_TEARDOWN,
798
+ __teardown: disposeNativeStyleBinding,
799
+ block: null,
800
+ el,
801
+ style: void 0
802
+ };
803
+ if (owner.slots.length === 0) owner.slots.push(void 0);
804
+ owner.slots[slotIndex] = binding;
805
+ registerSlot(owner, binding);
806
+ } else if (binding.el !== el) {
807
+ if (TRANSITION_JOURNAL !== null) {
808
+ TRANSITION_JOURNAL.push(JOURNAL_PROP, binding, "el", binding.el);
809
+ TRANSITION_JOURNAL.push(JOURNAL_PROP, binding, "style", binding.style);
810
+ }
811
+ binding.el = el;
812
+ binding.style = void 0;
813
+ }
814
+ setStyle(el, value, binding.style);
815
+ if (TRANSITION_JOURNAL !== null)
816
+ TRANSITION_JOURNAL.push(JOURNAL_PROP, binding, "style", binding.style);
817
+ binding.style = value;
818
+ }
730
819
  function prepareNativeProjection(props, scope) {
731
820
  const prepare = () => {
732
821
  const projected = props.compute();
@@ -805,8 +894,6 @@ function nativeProjectionBinding(owner, slotIndex, el, compute, fields) {
805
894
  nativePresentationBinding(owner, slotIndex, el, nativeProjectionBody, { el, compute, fields });
806
895
  }
807
896
  function nativePresentationBinding(owner, slotIndex, el, body, props) {
808
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null && el.ownerDocument !== hydrateAttributeProbe.document)
809
- throw new PresentationAdoptionMiss(void 0, false);
810
897
  let binding = owner.slots[slotIndex];
811
898
  if (binding === void 0) {
812
899
  const block = createBlock("control-flow", owner.block, el, null, null, body, props);
@@ -815,11 +902,19 @@ function nativePresentationBinding(owner, slotIndex, el, body, props) {
815
902
  __kind: "nativeStyleBinding",
816
903
  __flags: SLOT_FLAG_TEARDOWN,
817
904
  __teardown: disposeNativeStyleBinding,
818
- block
905
+ block,
906
+ el: null,
907
+ style: void 0
819
908
  };
820
909
  if (owner.slots.length === 0) owner.slots.push(void 0);
821
910
  owner.slots[slotIndex] = binding;
822
911
  registerSlot(owner, binding);
912
+ } else if (binding.block === null) {
913
+ const block = createBlock("control-flow", owner.block, el, null, null, body, props);
914
+ block.parent = owner;
915
+ if (binding.el === el) block.slots[0] = binding.style;
916
+ journalRootProperty(binding, "block", binding.block);
917
+ binding.block = block;
823
918
  } else {
824
919
  const block = binding.block;
825
920
  if (block.parentNode !== el) {
@@ -835,19 +930,16 @@ function nativePresentationBinding(owner, slotIndex, el, body, props) {
835
930
  }
836
931
  function enableNativeReadCollection(abi = 1) {
837
932
  if (abi !== 1) throw new Error((0, import_error_codes_client_generated.formatClientError)(58));
838
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
839
933
  ensureNativeReadDriver();
840
934
  }
841
935
  function beginNativeReadScope(scope, abi = 1) {
842
936
  if (abi !== 1) throw new Error((0, import_error_codes_client_generated.formatClientError)(58));
843
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return -1;
844
937
  const block = CURRENT_BLOCK;
845
938
  const owner = scope ?? CURRENT_SCOPE;
846
939
  if (block === null || owner === null) return -1;
847
940
  return ensureNativeReadDriver().beginScope(owner, block);
848
941
  }
849
942
  function beginActiveNativeReadScope(scope) {
850
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return -1;
851
943
  const block = CURRENT_BLOCK;
852
944
  return block === null ? -1 : NATIVE_READ_DRIVER.beginScope(scope, block);
853
945
  }
@@ -956,14 +1048,12 @@ function endNativeReadScope(token, _completed) {
956
1048
  if (token >= 0) NATIVE_READ_DRIVER.endScope(token);
957
1049
  }
958
1050
  function beginNativeReadWitness(detached = false) {
959
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return -1;
960
1051
  return detached ? ensureNativeReadDriver().beginWitness(true) : NATIVE_READ_DRIVER?.beginWitness() ?? -1;
961
1052
  }
962
1053
  function finishNativeReadWitness(token, completed) {
963
1054
  return token < 0 ? null : NATIVE_READ_DRIVER.finishWitness(token, completed);
964
1055
  }
965
1056
  function replayNativeReadWitness(witness) {
966
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
967
1057
  NATIVE_READ_DRIVER?.replay(witness);
968
1058
  }
969
1059
  function retainNativeRetryReads(block, reads) {
@@ -1084,13 +1174,13 @@ function hydrationMismatchMode(el) {
1084
1174
  }
1085
1175
  function warnHydrationValueMismatch(loc, what, serverVal, clientVal) {
1086
1176
  if (process.env.NODE_ENV === "production") return;
1087
- if (!loc || hydrateAttributeProbe !== null) return;
1177
+ if (!loc) return;
1088
1178
  console.error(
1089
1179
  `Octane hydration mismatch at ${loc}: server rendered ${what} ${JSON.stringify(serverVal)} but the client rendered ${JSON.stringify(clientVal)}. The client value was used. If this difference is intentional (e.g. a timestamp or random id), add suppressHydrationWarning to the element.`
1090
1180
  );
1091
1181
  }
1092
1182
  function warnHydrationKeptServerValue(loc, what, serverVal, clientVal) {
1093
- if (process.env.NODE_ENV === "production" || !loc || hydrateAttributeProbe !== null) return;
1183
+ if (process.env.NODE_ENV === "production" || !loc) return;
1094
1184
  console.error(
1095
1185
  `Octane hydration mismatch at ${loc}: server rendered ${what} ${JSON.stringify(serverVal)} but the client rendered ${JSON.stringify(clientVal)}. The server value was kept. If this difference is intentional, add suppressHydrationWarning to the element.`
1096
1186
  );
@@ -1109,7 +1199,7 @@ function describeHydrationNode(node) {
1109
1199
  }
1110
1200
  function warnHydrationStructuralMismatch(loc, expected, actual) {
1111
1201
  if (process.env.NODE_ENV === "production") return;
1112
- if (!loc || hydrateAttributeProbe !== null) return;
1202
+ if (!loc) return;
1113
1203
  console.error(
1114
1204
  `Octane hydration mismatch at ${loc}: the client expected ${expected} but the server rendered ${actual}. The mismatched subtree was rebuilt on the client.`
1115
1205
  );
@@ -6615,8 +6705,7 @@ function captureRenderPhaseUpdate(cell, key) {
6615
6705
  function renderBlock(block) {
6616
6706
  if (import_document_owner.signalDocumentEnabled || block.idState.renderOwner?.signalOwner !== void 0) {
6617
6707
  const owner = scopeSignalOwner(block);
6618
- if (owner !== void 0 && (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null))
6619
- (0, import_document_owner.streamedSignalOwnerActivator)?.(owner);
6708
+ if (owner !== void 0) (0, import_document_owner.streamedSignalOwnerActivator)?.(owner);
6620
6709
  if (owner !== void 0 && (0, import_owner_context.currentSignalOwner)() !== owner) {
6621
6710
  (0, import_owner_context.runWithSignalOwner)(owner, () => renderBlock(block));
6622
6711
  return;
@@ -6793,8 +6882,7 @@ function renderBlockInner(block) {
6793
6882
  let profileThrown;
6794
6883
  let renderCompleted = false;
6795
6884
  let renderRetry = false;
6796
- if (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null)
6797
- NATIVE_READ_DRIVER?.beginRender(block);
6885
+ NATIVE_READ_DRIVER?.beginRender(block);
6798
6886
  NATIVE_BLOCK_RETRIES?.get(block)?.clear();
6799
6887
  try {
6800
6888
  if (urgentTransitionRender !== null)
@@ -6862,8 +6950,7 @@ function renderBlockInner(block) {
6862
6950
  CURRENT_SCOPE = prevScope;
6863
6951
  CURRENT_BLOCK = prevBlock;
6864
6952
  try {
6865
- if (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null)
6866
- NATIVE_READ_DRIVER?.endRender(block, renderCompleted, isSuspenseException(profileThrown));
6953
+ NATIVE_READ_DRIVER?.endRender(block, renderCompleted, isSuspenseException(profileThrown));
6867
6954
  } finally {
6868
6955
  if (urgentTransitionRender !== null)
6869
6956
  urgentTransitionDriver.endUrgent(block, urgentTransitionRender);
@@ -7176,8 +7263,7 @@ function componentSlotLite(parentScope, slotKey, host, comp, props, anchor, invo
7176
7263
  try {
7177
7264
  if (import_document_owner.signalDocumentEnabled || scope.block.idState.renderOwner?.signalOwner !== void 0) {
7178
7265
  const owner = scopeSignalOwner(scope);
7179
- if (owner !== void 0 && (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null))
7180
- (0, import_document_owner.streamedSignalOwnerActivator)?.(owner);
7266
+ if (owner !== void 0) (0, import_document_owner.streamedSignalOwnerActivator)?.(owner);
7181
7267
  if (owner === void 0 || (0, import_owner_context.currentSignalOwner)() === owner) {
7182
7268
  comp(props, scope, void 0);
7183
7269
  } else (0, import_owner_context.runWithSignalOwner)(owner, () => comp(props, scope, void 0));
@@ -7481,20 +7567,13 @@ function resolveSlot(slot) {
7481
7567
  const resolved = (0, import_hook_slot_cache.resolveHookPath)(slotStack, slot, false);
7482
7568
  return typeof __OCTANE_PROFILE_ENABLED__ !== "undefined" && __OCTANE_PROFILE_ENABLED__ ? (0, import_profiling.__profileResolveHook)(resolved, typeof slot === "symbol" ? slot : void 0) : resolved;
7483
7569
  }
7484
- function isNativeSignalDiagnosticProbe() {
7485
- return process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null;
7486
- }
7487
- function nativeLocalHook(name, initialize, dispose, slot, diagnosticInitialize) {
7488
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null && (name !== "useSignal$" || diagnosticInitialize === void 0 || !(0, import_diagnostic_local_hook.isNativeSignalDiagnosticInitializer)(diagnosticInitialize)))
7489
- throw new PresentationAdoptionMiss(void 0, false);
7570
+ function nativeLocalHook(name, initialize, dispose, slot) {
7490
7571
  slot = resolveSlot(slot);
7491
7572
  if (slot === void 0 || CURRENT_SCOPE === null) missingSlot(name);
7492
7573
  const scope = CURRENT_SCOPE;
7493
7574
  let cell = scope.hooks?.get(slot);
7494
7575
  if (cell === void 0) {
7495
- cell = {
7496
- nativeValue: process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null ? diagnosticInitialize() : initialize()
7497
- };
7576
+ cell = { nativeValue: initialize() };
7498
7577
  ensureHooks(scope).set(slot, cell);
7499
7578
  const value = cell.nativeValue;
7500
7579
  registerHookCleanup(scope, () => dispose(value));
@@ -8523,10 +8602,7 @@ function __createCompiledContext(defaultValue) {
8523
8602
  const dialect = children[CHILDREN_BODY] ?? children;
8524
8603
  const previous = scope.hooks?.get(CHILDREN_DIALECT_SLOT);
8525
8604
  if (previous !== dialect) {
8526
- if (previous !== void 0 && (previous === 2 || dialect === 2)) {
8527
- resetScopeChildren(scope);
8528
- if (scope.block.disposed) return;
8529
- } else if (previous !== void 0) {
8605
+ if (previous !== void 0) {
8530
8606
  invalidateSharedBodyOutput(scope);
8531
8607
  if (TRANSITION_JOURNAL !== null && !ROOT_RENDER_ROLLBACK) {
8532
8608
  const hooks = scope.hooks;
@@ -8545,19 +8621,7 @@ function initializeContext(ctx, defaultValue) {
8545
8621
  ctx.$$version = 0;
8546
8622
  (0, import_context_identity.registerContext)(ctx);
8547
8623
  if (process.env.NODE_ENV !== "production") {
8548
- let consumerWarned = false;
8549
- Object.defineProperty(ctx, "Consumer", {
8550
- configurable: true,
8551
- get() {
8552
- if (!consumerWarned) {
8553
- consumerWarned = true;
8554
- console.error(
8555
- "Octane has no Context.Consumer. Read the context directly with use(Context) or useContext(Context) in the child component \u2014 Octane hooks are call-site keyed, so the read is legal behind any condition the render-prop form was working around."
8556
- );
8557
- }
8558
- return void 0;
8559
- }
8560
- });
8624
+ (0, import_context_identity.defineRemovedContextMembers)(ctx);
8561
8625
  }
8562
8626
  return ctx;
8563
8627
  }
@@ -8628,28 +8692,23 @@ function provideContext(scope, context, value) {
8628
8692
  if (had) values.set(context, previous);
8629
8693
  else values.delete(context);
8630
8694
  });
8631
- if (had && (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null)) {
8695
+ if (had) {
8632
8696
  context.$$version++;
8633
8697
  (0, import_context_epoch.bumpContextEpoch)();
8634
8698
  }
8635
8699
  values.set(context, value);
8636
8700
  }
8637
8701
  const CHILDREN_BODY = /* @__PURE__ */ Symbol.for("octane.childrenBody");
8638
- const CHILDREN_DIAGNOSTIC_CAPTURES = /* @__PURE__ */ Symbol.for(
8639
- "octane.childrenDiagnosticCaptures"
8640
- );
8702
+ const CHILDREN_CAPTURES = /* @__PURE__ */ Symbol.for("octane.childrenCaptures");
8641
8703
  function markSingleRoot(component) {
8642
8704
  component.$$singleRoot = true;
8643
8705
  return component;
8644
8706
  }
8645
- function markChildrenBlock(fn, body) {
8707
+ function markChildrenBlock(fn, body, captures) {
8646
8708
  if (typeof fn === "function") {
8647
8709
  fn[import_runtime_tags.CHILDREN_BLOCK_TAG] = true;
8648
8710
  if (body !== void 0) fn[CHILDREN_BODY] = body;
8649
- if (process.env.NODE_ENV !== "production") {
8650
- const captures = arguments[2];
8651
- if (captures !== void 0) fn[CHILDREN_DIAGNOSTIC_CAPTURES] = captures;
8652
- }
8711
+ if (captures !== void 0) fn[CHILDREN_CAPTURES] = captures;
8653
8712
  }
8654
8713
  return fn;
8655
8714
  }
@@ -8799,20 +8858,7 @@ const HYDRATE_STREAM_SCAN_MASK = 1 | 128;
8799
8858
  let hydrateStreamWaitCleanups = null;
8800
8859
  let preservedHydrateActivations = null;
8801
8860
  let preservedHydrateActivationCount = 0;
8802
- let initialHydrateAttributes = null;
8803
- let hydrateAttributeProbe = null;
8804
- function copyHydrateDiagnosticIds(ids) {
8805
- const first = { prefix: ids.prefix, next: ids.next };
8806
- let copy = first;
8807
- while (true) {
8808
- if (ids.limit !== void 0) copy.limit = ids.limit;
8809
- if (ids.signalState !== void 0) copy.signalState = { ...ids.signalState };
8810
- if (ids.overflow === void 0) return first;
8811
- ids = ids.overflow;
8812
- copy = copy.overflow = { prefix: ids.prefix, next: ids.next };
8813
- }
8814
- }
8815
- function copyHydrateDiagnosticContexts(scope) {
8861
+ function collectHydrateContexts(scope) {
8816
8862
  let contexts = null;
8817
8863
  const add = (values) => {
8818
8864
  if (values === null) return;
@@ -8827,7 +8873,7 @@ function copyHydrateDiagnosticContexts(scope) {
8827
8873
  add(block.$$ctxValues);
8828
8874
  return contexts;
8829
8875
  }
8830
- function changedHydrateDiagnosticContexts(initial, next) {
8876
+ function changedHydrateContexts(initial, next) {
8831
8877
  if ((initial?.size ?? 0) !== (next?.size ?? 0)) return true;
8832
8878
  if (initial !== null) {
8833
8879
  for (const [context, value] of initial) {
@@ -8836,24 +8882,23 @@ function changedHydrateDiagnosticContexts(initial, next) {
8836
8882
  }
8837
8883
  return false;
8838
8884
  }
8839
- function changedHydrateDiagnosticCaptures(initial, next) {
8885
+ function changedHydrateCaptures(initial, next) {
8886
+ if (initial === next) return false;
8840
8887
  if (initial.__data === void 0 || next.__data === void 0)
8841
- return changedHydrateDiagnosticChildren(initial.children, next.children);
8888
+ return changedHydrateChildren(initial.children, next.children);
8842
8889
  if (initial.__data.length !== next.__data.length) return true;
8843
8890
  for (let i = 0; i < initial.__data.length; i++) {
8844
8891
  if (!Object.is(initial.__data[i], next.__data[i])) return true;
8845
8892
  }
8846
8893
  return false;
8847
8894
  }
8848
- function changedHydrateDiagnosticChildren(initial, next) {
8895
+ function changedHydrateChildren(initial, next) {
8849
8896
  if (initial === next) return false;
8850
8897
  if (typeof initial !== "function" || typeof next !== "function") return true;
8851
8898
  try {
8852
8899
  const body = initial[CHILDREN_BODY];
8853
- const initialCaptures = initial[CHILDREN_DIAGNOSTIC_CAPTURES];
8854
- const nextCaptures = next[CHILDREN_DIAGNOSTIC_CAPTURES];
8855
- if (initialCaptures === void 0 && nextCaptures === void 0 && isChildrenBlock(initial) && isChildrenBlock(next))
8856
- return false;
8900
+ const initialCaptures = initial[CHILDREN_CAPTURES];
8901
+ const nextCaptures = next[CHILDREN_CAPTURES];
8857
8902
  if (body === void 0 || body !== next[CHILDREN_BODY] || initialCaptures == null || nextCaptures == null)
8858
8903
  return true;
8859
8904
  const before = initialCaptures();
@@ -8867,177 +8912,16 @@ function changedHydrateDiagnosticChildren(initial, next) {
8867
8912
  return true;
8868
8913
  }
8869
8914
  }
8870
- function recordInitialHydrateAttribute(el, name, server, next) {
8871
- const probe = hydrateAttributeProbe;
8872
- const original = probe?.originals.get(el);
8873
- if (original === void 0) return;
8874
- let values = probe.attributes.get(original);
8875
- if (values === void 0) probe.attributes.set(original, values = /* @__PURE__ */ new Map());
8876
- const previous = values.get(name);
8877
- values.set(name, {
8878
- server: previous === void 0 ? server : previous.server,
8879
- next,
8880
- suppressed: isHydrationSuppressed(el),
8881
- checked: false
8882
- });
8883
- }
8884
- function checkInitialHydrateAttribute(hydration, el, name, server) {
8885
- const initial = hydration.attributeBaselines?.attributes.get(el)?.get(name);
8886
- if (initial === void 0) return false;
8887
- if (initial.checked) return true;
8888
- initial.checked = true;
8889
- if (!initial.suppressed && initial.server !== initial.next && !(name !== "class" && name !== "style" && initial.next !== null && isAttributeParserNormalizedMatch(initial.server, initial.next)) && import_dom_binding_claims.domBindingClaims.get(el)?.get(name) !== server) {
8890
- warnHydrationValueMismatch(
8891
- el.__oct_loc,
8892
- name === "style" ? "style" : `attribute \`${name}\``,
8893
- name === "style" ? initial.server ?? "" : initial.server,
8894
- name === "style" ? initial.next ?? "" : initial.next
8895
- );
8896
- }
8897
- return true;
8898
- }
8899
- function probeInitialHydrateAttributes(state) {
8900
- const snapshot = initialHydrateAttributes?.get(state);
8901
- if (snapshot === void 0 || !changedHydrateDiagnosticCaptures(snapshot.props, state.props) && !changedHydrateDiagnosticContexts(
8902
- snapshot.contexts,
8903
- copyHydrateDiagnosticContexts(
8915
+ function hydrateServerValuesStale(state) {
8916
+ const initial = state.initialCaptures;
8917
+ if (initial === null) return false;
8918
+ if (initial.stale || changedHydrateCaptures(initial.props, state.props)) return true;
8919
+ return initial.contextEpoch !== (0, import_context_epoch.contextEpochNow)() && changedHydrateContexts(
8920
+ initial.contexts,
8921
+ collectHydrateContexts(
8904
8922
  CURRENT_SCOPE?.block === state.parentBlock ? CURRENT_SCOPE : state.parentBlock
8905
8923
  )
8906
- ))
8907
- return;
8908
- try {
8909
- return collectInitialHydrateAttributes(state, snapshot);
8910
- } catch {
8911
- return;
8912
- }
8913
- }
8914
- function collectInitialHydrateAttributes(state, snapshot) {
8915
- const ownerDocument = document.implementation.createHTMLDocument("");
8916
- const originalWrapper = state.wrapper;
8917
- const source = STAGED_DOM?.view(originalWrapper) ?? originalWrapper;
8918
- const template2 = ownerDocument.createElement("template");
8919
- template2.innerHTML = source.outerHTML;
8920
- const wrapper = ownerDocument.adoptNode(template2.content.firstElementChild);
8921
- const probe = {
8922
- document: ownerDocument,
8923
- originals: /* @__PURE__ */ new WeakMap(),
8924
- attributes: /* @__PURE__ */ new WeakMap(),
8925
- boundaries: /* @__PURE__ */ new WeakMap()
8926
- };
8927
- probe.originals.set(wrapper, originalWrapper);
8928
- const originals = source.querySelectorAll("*");
8929
- const copies = wrapper.querySelectorAll("*");
8930
- if (originals.length !== copies.length) return;
8931
- for (let i = 0; i < originals.length; i++) {
8932
- const original = originals[i];
8933
- const copy = copies[i];
8934
- if (copy.localName !== original.localName || copy.namespaceURI !== original.namespaceURI || probe.originals.get(copy.parentElement) !== (STAGED_DOM?.view(original) ?? original).parentElement)
8935
- return;
8936
- probe.originals.set(copy, original);
8937
- }
8938
- const start = wrapper.firstChild;
8939
- if (start === null || !isBlockOpen(start)) return;
8940
- const end = findMatchingClose(start, /* @__PURE__ */ new WeakMap());
8941
- const initialChild = (_props, scope, extra) => {
8942
- if (state.loadedBody !== null) state.loadedBody(snapshot.props.__data, scope, extra);
8943
- else childrenAsBody(snapshot.props.children)(void 0, scope, extra);
8944
- };
8945
- const body = (_props, scope) => {
8946
- tryBlock(scope, 0, wrapper, initialChild, null, null, end);
8947
- };
8948
- const block = createBlock("control-flow", null, wrapper, start, end, body, void 0);
8949
- block.idState = copyHydrateDiagnosticIds(snapshot.ids);
8950
- block.$$ctxValues = snapshot.contexts === null ? null : new Map(snapshot.contexts);
8951
- const hydration = new HydrationCapability(block, start.nextSibling, null);
8952
- if (state.seedRaw !== null) hydration.seeds = hydration.parseSeeds(state.seedRaw);
8953
- hydration.protectRootAnchor(end);
8954
- const capture = createOffscreenCapture();
8955
- const diagnosticNative = state.nativeSeedRaw === void 0 ? void 0 : (0, import_native_read_seeds.createNativeAdoptionState)((0, import_native_read_seeds.parseNativeSignalManifest)(state.nativeSeedRaw));
8956
- const previousHydration = currentHydration;
8957
- const previousCapture = WIP_CAPTURE;
8958
- const previousProbe = hydrateAttributeProbe;
8959
- const previousTransaction = ROOT_RENDER_TRANSACTION;
8960
- const previousJournal = TRANSITION_JOURNAL;
8961
- const previousAttempt = ACTIVE_TRANSITION_ATTEMPT;
8962
- const previousScopedReadTracking = SCOPED_READ_TRACKING;
8963
- const previousScopedReads = SCOPED_READS;
8964
- const previousWarm = CURRENT_WARM;
8965
- const previousWarmClaims = CURRENT_WARM_CLAIMS;
8966
- const previousWarmEpisode = CURRENT_WARM_EPISODE;
8967
- const previousWarmPlans = ACTIVE_WARM_PLANS.splice(0);
8968
- const previousStagedDom = STAGED_DOM;
8969
- const previousStagedCapture = STAGED_COMMIT_CAPTURE;
8970
- const previousPresentation = PRESENTATION_HYDRATION;
8971
- const previousSelectSyncs = SELECT_SYNCS;
8972
- const previousSelectDefaultSyncs = SELECT_DEFAULT_SYNCS;
8973
- const previousFormChecks = DEV_FORM_CHECKS;
8974
- const previousAutofocus = AUTOFOCUS_QUEUE;
8975
- const diagnosticDriver = NATIVE_READ_DRIVER;
8976
- const nativeProbeToken = diagnosticDriver?.pauseLifecycle() ?? -1;
8977
- const previousWriteGuard = (0, import_read_protocol.beginNativeWriteGuard)();
8978
- const previousNative = (0, import_read_protocol.setNativeAdoptionResolver)(diagnosticNative?.resolve ?? null);
8979
- const refDetachCheckpoint = refDetachQueue.length;
8980
- currentHydration = hydration;
8981
- WIP_CAPTURE = capture;
8982
- hydrateAttributeProbe = probe;
8983
- ROOT_RENDER_TRANSACTION = null;
8984
- TRANSITION_JOURNAL = null;
8985
- ACTIVE_TRANSITION_ATTEMPT = null;
8986
- SCOPED_READ_TRACKING = false;
8987
- SCOPED_READS = null;
8988
- CURRENT_WARM = null;
8989
- CURRENT_WARM_CLAIMS = null;
8990
- CURRENT_WARM_EPISODE = 0;
8991
- STAGED_DOM = null;
8992
- STAGED_COMMIT_CAPTURE = null;
8993
- PRESENTATION_HYDRATION = null;
8994
- SELECT_SYNCS = [];
8995
- SELECT_DEFAULT_SYNCS = [];
8996
- DEV_FORM_CHECKS = [];
8997
- AUTOFOCUS_QUEUE = [];
8998
- try {
8999
- renderBlock(block);
9000
- drainHydrationRenderPhaseUpdates(block);
9001
- hydration.flushClassWrites();
9002
- } catch {
9003
- } finally {
9004
- try {
9005
- disposeWip({ block, start, end, capture, domParent: wrapper, refDetachCheckpoint });
9006
- drainHydrationRenderPhaseUpdates(block);
9007
- } finally {
9008
- try {
9009
- diagnosticNative?.release();
9010
- } finally {
9011
- try {
9012
- (0, import_read_protocol.setNativeAdoptionResolver)(previousNative);
9013
- (0, import_read_protocol.endNativeWriteGuard)(previousWriteGuard);
9014
- if (nativeProbeToken >= 0) diagnosticDriver.resumeLifecycle(nativeProbeToken);
9015
- } finally {
9016
- currentHydration = previousHydration;
9017
- WIP_CAPTURE = previousCapture;
9018
- hydrateAttributeProbe = previousProbe;
9019
- ROOT_RENDER_TRANSACTION = previousTransaction;
9020
- TRANSITION_JOURNAL = previousJournal;
9021
- ACTIVE_TRANSITION_ATTEMPT = previousAttempt;
9022
- SCOPED_READ_TRACKING = previousScopedReadTracking;
9023
- SCOPED_READS = previousScopedReads;
9024
- CURRENT_WARM = previousWarm;
9025
- CURRENT_WARM_CLAIMS = previousWarmClaims;
9026
- CURRENT_WARM_EPISODE = previousWarmEpisode;
9027
- ACTIVE_WARM_PLANS.length = 0;
9028
- ACTIVE_WARM_PLANS.push(...previousWarmPlans);
9029
- STAGED_DOM = previousStagedDom;
9030
- STAGED_COMMIT_CAPTURE = previousStagedCapture;
9031
- PRESENTATION_HYDRATION = previousPresentation;
9032
- SELECT_SYNCS = previousSelectSyncs;
9033
- SELECT_DEFAULT_SYNCS = previousSelectDefaultSyncs;
9034
- DEV_FORM_CHECKS = previousFormChecks;
9035
- AUTOFOCUS_QUEUE = previousAutofocus;
9036
- }
9037
- }
9038
- }
9039
- }
9040
- return probe;
8924
+ );
9041
8925
  }
9042
8926
  function releasePreservedHydrateActivation(state) {
9043
8927
  if (preservedHydrateActivations?.delete(state)) preservedHydrateActivationCount--;
@@ -9221,7 +9105,7 @@ function createHydrateBoundaryBody(state, renderChild, pendingBody) {
9221
9105
  }
9222
9106
  function failHydrateBoundary(state, error) {
9223
9107
  if (state.hasError || state.block.disposed) return;
9224
- if (process.env.NODE_ENV !== "production") initialHydrateAttributes?.delete(state);
9108
+ state.initialCaptures = null;
9225
9109
  cleanupHydrateStreamWait(state);
9226
9110
  state.hasError = true;
9227
9111
  state.error = error;
@@ -9339,7 +9223,7 @@ function teardownHydrateBoundary(state) {
9339
9223
  }
9340
9224
  if (DEFERRED_LAYOUT_DRIVER?.stageAction(() => teardownHydrateBoundary(state), true) === true)
9341
9225
  return;
9342
- if (process.env.NODE_ENV !== "production") initialHydrateAttributes?.delete(state);
9226
+ state.initialCaptures = null;
9343
9227
  cleanupHydrateInstallers(state);
9344
9228
  cleanupHydrateStreamWait(state);
9345
9229
  if (preserved !== void 0) {
@@ -9717,25 +9601,22 @@ function createHydrateSlot(props, scope, boundaryId, boundaryBody) {
9717
9601
  hasError: false,
9718
9602
  error: void 0,
9719
9603
  replays: [],
9720
- independent: props.__independent !== void 0
9604
+ independent: props.__independent !== void 0,
9605
+ initialCaptures: null
9721
9606
  };
9722
9607
  if (nativeSeedRaw !== null) state.nativeSeedRaw = nativeSeedRaw;
9723
- if (process.env.NODE_ENV !== "production" && serverPreserved && !state.independent) {
9724
- const original = hydrateAttributeProbe?.originals.get(wrapper);
9725
- const inherited = hydration?.attributeBaselines?.boundaries.get(wrapper);
9726
- const snapshot = inherited ?? {
9608
+ if (serverPreserved && !state.independent) {
9609
+ state.initialCaptures = {
9727
9610
  props,
9728
- ids: copyHydrateDiagnosticIds(idState),
9729
- contexts: copyHydrateDiagnosticContexts(scope)
9611
+ contexts: collectHydrateContexts(scope),
9612
+ contextEpoch: (0, import_context_epoch.contextEpochNow)(),
9613
+ stale: hydration.staleServerValues
9730
9614
  };
9731
- (initialHydrateAttributes ??= /* @__PURE__ */ new WeakMap()).set(state, snapshot);
9732
- if (original !== void 0) hydrateAttributeProbe.boundaries.set(original, snapshot);
9733
9615
  }
9734
9616
  scope.slots[0] = state;
9735
9617
  registerSlot(scope, state);
9736
9618
  if (!state.independent) (0, import_event_capture.registerHydrationIntentBoundary)(wrapper, intentBoundary);
9737
9619
  block.body = boundaryBody(state);
9738
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return state;
9739
9620
  const initialStrategy = resolveHydrateStrategy(state);
9740
9621
  const pendingIntents = state.independent ? void 0 : (0, import_event_capture.takePendingHydrationIntents)(wrapper);
9741
9622
  if (state.independent) {
@@ -9762,9 +9643,9 @@ function activateHydrateBoundary(state) {
9762
9643
  return;
9763
9644
  }
9764
9645
  const hydration = preserved?.hydration ?? new HydrationCapability(block, getNextSibling(state.start), null);
9646
+ if (!hydration.staleServerValues && hydrateServerValuesStale(state))
9647
+ hydration.staleServerValues = true;
9765
9648
  if (preserved === void 0) {
9766
- if (process.env.NODE_ENV !== "production")
9767
- hydration.attributeBaselines = probeInitialHydrateAttributes(state);
9768
9649
  if (state.seedRaw !== null) hydration.seeds = hydration.parseSeeds(state.seedRaw);
9769
9650
  hydration.protectRootAnchor(state.end);
9770
9651
  }
@@ -9839,7 +9720,7 @@ function activateHydrateBoundary(state) {
9839
9720
  if (nativeRecovery !== void 0) {
9840
9721
  noteRecoverableHydrationError(() => nativeRecovery, block);
9841
9722
  state.serverPreserved = false;
9842
- if (process.env.NODE_ENV !== "production") initialHydrateAttributes?.delete(state);
9723
+ state.initialCaptures = null;
9843
9724
  state.serverActivationStarted = false;
9844
9725
  state.seedRaw = null;
9845
9726
  state.nativeSeedRaw = void 0;
@@ -9870,7 +9751,7 @@ function activateHydrateBoundary(state) {
9870
9751
  return;
9871
9752
  }
9872
9753
  if (completed) {
9873
- if (process.env.NODE_ENV !== "production") initialHydrateAttributes?.delete(state);
9754
+ state.initialCaptures = null;
9874
9755
  releasePreservedHydrateActivation(state);
9875
9756
  spliceOffscreenCapture(capture);
9876
9757
  }
@@ -9980,7 +9861,7 @@ function notifyHydrateBoundary(state, scope) {
9980
9861
  return;
9981
9862
  }
9982
9863
  state.didNotify = true;
9983
- if (process.env.NODE_ENV !== "production") initialHydrateAttributes?.delete(state);
9864
+ state.initialCaptures = null;
9984
9865
  cleanupHydrateInstallers(state);
9985
9866
  state.props.onHydrated?.();
9986
9867
  domNode(state.wrapper).removeAttribute(import_constants.HYDRATE_WHEN_ATTR);
@@ -11485,6 +11366,8 @@ class HydrationCapability {
11485
11366
  rootBlock;
11486
11367
  node;
11487
11368
  seeds;
11369
+ /** Parent captures changed before this dormant boundary activated. */
11370
+ staleServerValues = false;
11488
11371
  depth = 0;
11489
11372
  seedCursor = 0;
11490
11373
  hasAdjacentRangePair = false;
@@ -11555,6 +11438,7 @@ class HydrationCapability {
11555
11438
  warnHydrationStructuralMismatch(loc, expected, actual);
11556
11439
  }
11557
11440
  recordTextMismatch(node, loc, server) {
11441
+ if (this.staleServerValues) return;
11558
11442
  if (process.env.NODE_ENV === "production" && ROOT_ERROR_HANDLERS === null) return;
11559
11443
  if (!this.textWarnings.has(node)) this.textWarnings.set(node, { loc, server });
11560
11444
  }
@@ -11778,6 +11662,9 @@ class HydrationCapability {
11778
11662
  describeHydrationNode(cursor)
11779
11663
  );
11780
11664
  if (isBlockClose(cursor)) return this.freshClone(template2);
11665
+ const target = CURRENT_BLOCK?.parentNode;
11666
+ if (!claimsRoot && target != null && (STAGED_DOM?.view(cursor) ?? cursor).parentNode !== target)
11667
+ return this.freshClone(template2);
11781
11668
  if (isBlockOpen(cursor)) {
11782
11669
  const close = this.close(cursor);
11783
11670
  this.node = getNextSibling(close);
@@ -11859,6 +11746,11 @@ class HydrationCapability {
11859
11746
  return created;
11860
11747
  }
11861
11748
  htextSwap(posNode, text) {
11749
+ if (isEmptyTextSlot(posNode)) {
11750
+ const empty = (STAGED_DOM?.view(document) ?? document).createTextNode("");
11751
+ domNode((STAGED_DOM?.view(posNode) ?? posNode).parentNode).replaceChild(empty, posNode);
11752
+ posNode = empty;
11753
+ }
11862
11754
  if (posNode !== null && posNode.nodeType === 3) {
11863
11755
  const server = (STAGED_DOM?.view(posNode) ?? posNode).nodeValue;
11864
11756
  if (server !== text && !isTextParserNormalizedMatch(server, text)) {
@@ -11900,7 +11792,8 @@ class HydrationCapability {
11900
11792
  cursor = getNextSibling(cursor);
11901
11793
  if (isTextSeparator(cursor)) {
11902
11794
  const after = getNextSibling(cursor);
11903
- if (after !== null && (after.nodeType === 3 || isTextSeparator(after))) cursor = after;
11795
+ if (after !== null && (after.nodeType === 3 || isTextSeparator(after) || isEmptyTextSlot(after)))
11796
+ cursor = after;
11904
11797
  }
11905
11798
  }
11906
11799
  return cursor;
@@ -11911,20 +11804,13 @@ class HydrationCapability {
11911
11804
  ns,
11912
11805
  name.indexOf(":") >= 0 ? name.slice(name.indexOf(":") + 1) : name
11913
11806
  ) : (STAGED_DOM?.view(el) ?? el).getAttribute(name);
11914
- if (process.env.NODE_ENV !== "production") {
11915
- if (hydrateAttributeProbe !== null) {
11916
- recordInitialHydrateAttribute(el, name, server, next);
11917
- } else {
11918
- checkInitialHydrateAttribute(this, el, name, server);
11919
- }
11920
- }
11921
11807
  if (server === next) return false;
11922
11808
  if (import_dom_binding_claims.domBindingClaims.get(el)?.get(name) === server) return false;
11923
11809
  if (next !== null && isAttributeParserNormalizedMatch(server, next)) return false;
11924
11810
  const mode = hydrationMismatchMode(el);
11925
11811
  if (mode === 0) return true;
11926
11812
  if (mode === 1) return false;
11927
- if (process.env.NODE_ENV !== "production" && !checkInitialHydrateAttribute(this, el, name, server))
11813
+ if (process.env.NODE_ENV !== "production" && !this.staleServerValues)
11928
11814
  warnHydrationValueMismatch(el.__oct_loc, `attribute \`${name}\``, server, next);
11929
11815
  return true;
11930
11816
  }
@@ -11932,15 +11818,11 @@ class HydrationCapability {
11932
11818
  const mode = hydrationMismatchMode(el);
11933
11819
  const rawServer = (STAGED_DOM?.view(el) ?? el).getAttribute("class");
11934
11820
  const server = absentIsEmpty && rawServer === null ? "" : rawServer;
11935
- if (process.env.NODE_ENV !== "production") {
11936
- if (hydrateAttributeProbe !== null) recordInitialHydrateAttribute(el, "class", server, next);
11937
- else checkInitialHydrateAttribute(this, el, "class", rawServer);
11938
- }
11939
11821
  if (server === next) return true;
11940
11822
  if (import_dom_binding_claims.domBindingClaims.get(el)?.get("class") === rawServer) return false;
11941
11823
  if (mode === 0) return true;
11942
11824
  if (mode === 1) return false;
11943
- if (process.env.NODE_ENV !== "production" && !checkInitialHydrateAttribute(this, el, "class", rawServer))
11825
+ if (process.env.NODE_ENV !== "production" && !this.staleServerValues)
11944
11826
  warnHydrationValueMismatch(el.__oct_loc, "attribute `class`", server, next);
11945
11827
  return true;
11946
11828
  }
@@ -11951,11 +11833,7 @@ class HydrationCapability {
11951
11833
  try {
11952
11834
  for (const [el, write] of this.classWrites) {
11953
11835
  const rawTarget = write.remove ? null : write.next;
11954
- if ((STAGED_DOM?.view(el) ?? el).getAttribute("class") === rawTarget) {
11955
- if (process.env.NODE_ENV !== "production")
11956
- this.allowClass(el, write.next, write.absentIsEmpty);
11957
- continue;
11958
- }
11836
+ if ((STAGED_DOM?.view(el) ?? el).getAttribute("class") === rawTarget) continue;
11959
11837
  if (!this.allowClass(el, write.next, write.absentIsEmpty)) continue;
11960
11838
  if (write.remove) (STAGED_DOM?.view(el) ?? el).removeAttribute("class");
11961
11839
  else if (write.useAttribute)
@@ -11968,21 +11846,7 @@ class HydrationCapability {
11968
11846
  }
11969
11847
  applyStyle(el, value, _prev, staticCss, entries) {
11970
11848
  const mode = hydrationMismatchMode(el);
11971
- if (mode === 1) {
11972
- if (process.env.NODE_ENV !== "production") {
11973
- if (hydrateAttributeProbe !== null) recordInitialHydrateAttribute(el, "style", null, null);
11974
- else {
11975
- const current = STAGED_DOM?.view(el) ?? el;
11976
- checkInitialHydrateAttribute(
11977
- this,
11978
- el,
11979
- "style",
11980
- current.hasAttribute("style") ? current.style.cssText : null
11981
- );
11982
- }
11983
- }
11984
- return true;
11985
- }
11849
+ if (mode === 1) return true;
11986
11850
  const style = (STAGED_DOM?.view(el) ?? el).style;
11987
11851
  const hadStyleAttribute = (STAGED_DOM?.view(el) ?? el).hasAttribute("style");
11988
11852
  const before = style.cssText;
@@ -11998,11 +11862,7 @@ class HydrationCapability {
11998
11862
  applyStyleProperty(el, expectedStyle, entries[i], entry);
11999
11863
  }
12000
11864
  }
12001
- let claims = import_dom_binding_claims.domBindingClaims.get(el);
12002
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) {
12003
- const original = hydrateAttributeProbe.originals.get(el);
12004
- if (original !== void 0) claims = import_dom_binding_claims.domBindingClaims.get(original);
12005
- }
11865
+ const claims = import_dom_binding_claims.domBindingClaims.get(el);
12006
11866
  if (claims !== void 0) {
12007
11867
  for (const [channel, published] of claims) {
12008
11868
  if (!channel.startsWith("style:")) continue;
@@ -12016,20 +11876,10 @@ class HydrationCapability {
12016
11876
  }
12017
11877
  const expected = expectedStyle.cssText;
12018
11878
  const expectsStyleAttribute = expected !== "";
12019
- if (process.env.NODE_ENV !== "production") {
12020
- if (hydrateAttributeProbe !== null)
12021
- recordInitialHydrateAttribute(
12022
- el,
12023
- "style",
12024
- hadStyleAttribute ? before : null,
12025
- expectsStyleAttribute ? expected : null
12026
- );
12027
- else checkInitialHydrateAttribute(this, el, "style", hadStyleAttribute ? before : null);
12028
- }
12029
11879
  if (before === expected && hadStyleAttribute === expectsStyleAttribute) return true;
12030
11880
  if (expectsStyleAttribute) style.cssText = expected;
12031
11881
  else (STAGED_DOM?.view(el) ?? el).removeAttribute("style");
12032
- if (mode === 2 && process.env.NODE_ENV !== "production" && !checkInitialHydrateAttribute(this, el, "style", hadStyleAttribute ? before : null)) {
11882
+ if (mode === 2 && process.env.NODE_ENV !== "production" && !this.staleServerValues) {
12033
11883
  warnHydrationValueMismatch(el.__oct_loc, "style", before, expected);
12034
11884
  }
12035
11885
  return true;
@@ -12543,7 +12393,7 @@ function endPresentationHydration(frame, completed = true) {
12543
12393
  }
12544
12394
  function preparedPresentationAttribute(el, name, value, kind) {
12545
12395
  if (kind === "class") return value == null || value === false ? null : (0, import_css.normalizeClass)(value);
12546
- if (kind === "booleanAttr")
12396
+ if (kind === "booleanAttr" || kind === setBooleanAttribute)
12547
12397
  return !!value && typeof value !== "function" && typeof value !== "symbol";
12548
12398
  const result = coerceAttrValue(el, name, value);
12549
12399
  return result === "" && import_constants.BOOLEAN_ATTR_PROPS.has(name.toLowerCase()) ? true : result;
@@ -12553,7 +12403,7 @@ function preparePresentationSignalBinding(args, frame, text = false) {
12553
12403
  const name = text ? void 0 : args[3];
12554
12404
  const value = args[text ? 3 : 4];
12555
12405
  const site = args[text ? 4 : 5];
12556
- const attributeKind = text ? void 0 : args[6] ?? "attr";
12406
+ const attributeKind = text ? void 0 : args[6];
12557
12407
  const policy = text ? args[5] ? DIRECT_SIGNAL_TEXT_ONLY_POLICY : DIRECT_SIGNAL_TEXT_POLICY : DIRECT_SIGNAL_ATTRIBUTE_POLICY;
12558
12408
  return runWithBlockSignalOwner(scope, () => {
12559
12409
  const handle = isSignalHandle(value) ? value : null;
@@ -12918,6 +12768,9 @@ function isBlockClose(node) {
12918
12768
  function isTextSeparator(node) {
12919
12769
  return node !== null && node.nodeType === 8 && (STAGED_DOM?.view(node) ?? node).data === import_constants.HYDRATION_TEXT_SEP;
12920
12770
  }
12771
+ function isEmptyTextSlot(node) {
12772
+ return node !== null && node.nodeType === 8 && (STAGED_DOM?.view(node) ?? node).data === "";
12773
+ }
12921
12774
  function findMatchingClose(open, matches) {
12922
12775
  let nested = null;
12923
12776
  let node = getNextSibling(open);
@@ -13113,23 +12966,10 @@ function writeDirectSignalText(target, value, kind, previous) {
13113
12966
  }
13114
12967
  function writeDirectSignalAttribute(target, value, _kind, _previous, name, attributeKind) {
13115
12968
  const element = target;
13116
- switch (attributeKind) {
13117
- case "class":
13118
- if (element.namespaceURI === HTML_NS) setClassName(element, value);
13119
- else setClassAttr(element, value);
13120
- break;
13121
- case "booleanAttr":
13122
- setBooleanAttribute(element, name, value);
13123
- break;
13124
- case "ariaAttr":
13125
- setAriaAttribute(element, name, value);
13126
- break;
13127
- case "stringData":
13128
- setStringData(element, name, value);
13129
- break;
13130
- default:
13131
- setAttribute(element, name, value);
13132
- }
12969
+ if (attributeKind === "class") {
12970
+ if (element.namespaceURI === HTML_NS) setClassName(element, value);
12971
+ else setClassAttr(element, value);
12972
+ } else attributeKind(element, name, value);
13133
12973
  return value;
13134
12974
  }
13135
12975
  function writeDirectSignalValue(target, value, _kind, _previous, _name, _attributeKind) {
@@ -13167,6 +13007,7 @@ const DIRECT_SIGNAL_CONTROL_POLICY = {
13167
13007
  if (snapshot !== null) validateDirectSignalControl(target, site);
13168
13008
  return snapshot;
13169
13009
  },
13010
+ restored: (target, value) => (0, import_control_capture.isRestoredHydrationTextarea)(target, value),
13170
13011
  activate(binding, revision) {
13171
13012
  installDirectSignalControl(binding);
13172
13013
  if (!binding.pendingControl) (0, import_event_capture.consumeHydrationControl)(binding.target, revision);
@@ -13275,7 +13116,9 @@ function createDirectSignalBinding(scope, target, value, site, policy, name, att
13275
13116
  if (text !== void 0) binding.text = text;
13276
13117
  const controlSnapshot = policy.control?.snapshot(target, site) ?? null;
13277
13118
  const initial = handle === null ? value : readSignalBinding(handle);
13278
- binding.pendingControl = activeHydration() !== null && isWritableSignal(handle) && controlSnapshot !== null && (controlSnapshot.editRevision > 0 || (0, import_control_capture.isRestoredHydrationTextarea)(target, initial));
13119
+ binding.pendingControl = activeHydration() !== null && isWritableSignal(handle) && controlSnapshot !== null && // Only control policies snapshot, so text/attribute bindings never retain
13120
+ // the restored-textarea adoption graph.
13121
+ (controlSnapshot.editRevision > 0 || policy.control.restored(target, initial));
13279
13122
  if (binding.pendingControl) binding.value = initial;
13280
13123
  if (!binding.pendingControl) writeDirectSignalBinding(binding, initial);
13281
13124
  if (STAGED_COMMIT_CAPTURE !== null) {
@@ -13295,14 +13138,14 @@ function bindDirectSignal(scope, previous, target, value, site, policy, name, at
13295
13138
  const kind = policy.kind;
13296
13139
  const prior = typeof previous === "object" && previous !== null && previous[DIRECT_SIGNAL_BINDING] === true ? previous : null;
13297
13140
  const handle = isSignalHandle(value) ? value : null;
13298
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null && handle !== null)
13299
- throw new PresentationAdoptionMiss(void 0, false);
13300
13141
  if (handle !== null && (!import_document_owner.signalDocumentEnabled || (0, import_owner_context.currentSignalOwner)() !== SCOPE_SIGNAL_OWNERS.get(scope))) {
13301
13142
  if (!import_document_owner.signalDocumentEnabled) enableSignalBindings();
13302
- return runWithBlockSignalOwner(
13303
- scope,
13304
- () => bindDirectSignal(scope, previous, target, value, site, policy, name, attributeKind)
13305
- );
13143
+ if ((0, import_owner_context.currentSignalOwner)() !== scopeSignalOwner(scope)) {
13144
+ return runWithBlockSignalOwner(
13145
+ scope,
13146
+ () => bindDirectSignal(scope, previous, target, value, site, policy, name, attributeKind)
13147
+ );
13148
+ }
13306
13149
  }
13307
13150
  if (handle === null && prior === null) {
13308
13151
  if (kind === "attribute" && previous === value) {
@@ -13385,7 +13228,7 @@ function bindSignalText(scope, previous, position, value, site, onlyChild = fals
13385
13228
  onlyChild ? DIRECT_SIGNAL_TEXT_ONLY_POLICY : DIRECT_SIGNAL_TEXT_POLICY
13386
13229
  );
13387
13230
  }
13388
- function bindSignalAttribute(scope, previous, element, name, value, site, attributeKind = "attr") {
13231
+ function bindSignalAttribute(scope, previous, element, name, value, site, attributeKind) {
13389
13232
  if (previous === value && value !== void 0 && (value === null || typeof value !== "object" && typeof value !== "function"))
13390
13233
  return previous;
13391
13234
  return bindDirectSignal(
@@ -13495,7 +13338,15 @@ function setHTML(el, value) {
13495
13338
  if (hydration !== null && !hydration.isFresh(el)) {
13496
13339
  const server = el.localName === "script" ? (STAGED_DOM?.view(el) ?? el).textContent ?? "" : (STAGED_DOM?.view(el) ?? el).innerHTML;
13497
13340
  const expected = el.localName === "script" ? normalizeScriptTextForHydration(escapeInlineScriptContentForHydration(next)) : normalizeHTMLForHydration(el, next);
13498
- if (server === expected || isHydrationSuppressed(el)) return;
13341
+ if (server === expected) {
13342
+ if (el.localName !== "script") {
13343
+ const host2 = STAGED_DOM?.view(el) ?? el;
13344
+ journalRootProperty(el, DANGER_HTML_VALUE, host2[DANGER_HTML_VALUE]);
13345
+ host2[DANGER_HTML_VALUE] = next;
13346
+ }
13347
+ return;
13348
+ }
13349
+ if (isHydrationSuppressed(el)) return;
13499
13350
  warnHydrationKeptServerValue(
13500
13351
  el.__oct_loc,
13501
13352
  "`dangerouslySetInnerHTML` content",
@@ -13504,8 +13355,14 @@ function setHTML(el, value) {
13504
13355
  );
13505
13356
  return;
13506
13357
  }
13507
- if (el.localName === "script") setScriptText(el, next);
13508
- else if (ROOT_RENDER_TRANSACTION !== null && !ROOT_RENDER_ROLLBACK) {
13358
+ if (el.localName === "script") {
13359
+ setScriptText(el, next);
13360
+ return;
13361
+ }
13362
+ const host = STAGED_DOM?.view(el) ?? el;
13363
+ if (host[DANGER_HTML_VALUE] === next) return;
13364
+ journalRootProperty(el, DANGER_HTML_VALUE, host[DANGER_HTML_VALUE]);
13365
+ if (ROOT_RENDER_TRANSACTION !== null && !ROOT_RENDER_ROLLBACK) {
13509
13366
  journalBag();
13510
13367
  journalRootRange(el, null, null);
13511
13368
  deferRootRange(el, getFirstChild(el), (STAGED_DOM?.view(el) ?? el).lastChild);
@@ -13514,7 +13371,9 @@ function setHTML(el, value) {
13514
13371
  while (getFirstChild(fresh) !== null)
13515
13372
  (STAGED_DOM?.view(el) ?? el).appendChild(getFirstChild(fresh));
13516
13373
  } else (STAGED_DOM?.view(el) ?? el).innerHTML = next;
13374
+ host[DANGER_HTML_VALUE] = next;
13517
13375
  }
13376
+ const DANGER_HTML_VALUE = /* @__PURE__ */ Symbol("octane.dangerHTMLValue");
13518
13377
  const DANGER_HTML_ACTIVE = "__oct_dangerHTML";
13519
13378
  let DANGER_HTML_EVER_ACTIVE = false;
13520
13379
  const DANGER_HTML_STATIC_CHILD = "__oct_dangerChild";
@@ -13539,7 +13398,14 @@ function setDangerouslySetInnerHTML(el, value) {
13539
13398
  const wasActive = (STAGED_DOM?.view(el) ?? el)[DANGER_HTML_ACTIVE] === true;
13540
13399
  if (value == null) {
13541
13400
  (STAGED_DOM?.view(el) ?? el)[DANGER_HTML_ACTIVE] = false;
13542
- if (wasActive) setHTML(el, null);
13401
+ if (wasActive) {
13402
+ setHTML(el, null);
13403
+ const host = STAGED_DOM?.view(el) ?? el;
13404
+ if (host[DANGER_HTML_VALUE] !== void 0) {
13405
+ journalRootProperty(el, DANGER_HTML_VALUE, host[DANGER_HTML_VALUE]);
13406
+ host[DANGER_HTML_VALUE] = void 0;
13407
+ }
13408
+ }
13543
13409
  return;
13544
13410
  }
13545
13411
  if (value != null && import_constants.VOID_ELEMENTS.has(el.localName)) {
@@ -15611,7 +15477,6 @@ function namespaceHeadElement(headKey, tag, attrs, text, authoredKey) {
15611
15477
  return createElement(namespaceHead, config);
15612
15478
  }
15613
15479
  function injectStyle(id, css, nonce) {
15614
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
15615
15480
  if (typeof document === "undefined") {
15616
15481
  _injectedStyles.add(id);
15617
15482
  return;
@@ -17825,8 +17690,6 @@ function registerValuePortalFragmentOwners(portal2, parentBlock, anchor) {
17825
17690
  }
17826
17691
  }
17827
17692
  function renderPortalState(prev, parentBlock, target, rawBody, rawProps, host, env, key = null) {
17828
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null && target.ownerDocument !== hydrateAttributeProbe.document)
17829
- target = hydrateAttributeProbe.document.createDocumentFragment();
17830
17693
  const hydration = activeHydration();
17831
17694
  if (hydration !== null) {
17832
17695
  return hydration.suspend(
@@ -20547,7 +20410,8 @@ function renderPreparedChildList(state, parentBlock, domParent, preparedList, hy
20547
20410
  adopt: null,
20548
20411
  plainDeopt: false,
20549
20412
  mappedNative: void 0,
20550
- selectionItems: void 0
20413
+ selectionItems: void 0,
20414
+ signalSite: void 0
20551
20415
  };
20552
20416
  if (upgradeArmed) {
20553
20417
  state.forSlot.adopt = buildDeoptAdoptQueue(upgradeChildren, state.start, state.end);
@@ -21732,7 +21596,7 @@ function shallowEqualProps(a, b) {
21732
21596
  let count = 0;
21733
21597
  for (const k in a) {
21734
21598
  const v = a[k];
21735
- if (!Object.is(v, b[k]) || v === void 0 && !import_has_own.hasOwnProp.call(b, k)) return false;
21599
+ if (!import_has_own.hasOwnProp.call(b, k) || !Object.is(v, b[k])) return false;
21736
21600
  count++;
21737
21601
  }
21738
21602
  for (const _k in b) count--;
@@ -21830,8 +21694,7 @@ function hmr(fn) {
21830
21694
  }
21831
21695
  };
21832
21696
  function wrapper(props, scope, extra) {
21833
- if (scope !== void 0 && (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null))
21834
- meta.liveBlocks.add(scope.block);
21697
+ if (scope !== void 0) meta.liveBlocks.add(scope.block);
21835
21698
  return meta.fn(props, scope, extra);
21836
21699
  }
21837
21700
  Object.defineProperty(wrapper, HMR, {
@@ -22230,8 +22093,7 @@ function mountPassthroughPending(state, thenable) {
22230
22093
  setTryBranch(state, -1);
22231
22094
  scheduleRender(state.parentBlock);
22232
22095
  };
22233
- if (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null)
22234
- thenable.then(retry, retry);
22096
+ thenable.then(retry, retry);
22235
22097
  }
22236
22098
  function renderPassthroughTry(state) {
22237
22099
  if (state.branch === 0 && state.block !== null) {
@@ -22735,10 +22597,10 @@ function takeInitialSuspenseHydration(state, hydration) {
22735
22597
  if (payload === void 0) {
22736
22598
  payload = {
22737
22599
  seedRaw: typeof stash?.[boundaryId] === "string" ? stash[boundaryId] : null,
22738
- nativeRaw: (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null) && typeof stash?.[boundaryId + "$signals"] === "string" ? stash[boundaryId + "$signals"] : null
22600
+ nativeRaw: typeof stash?.[boundaryId + "$signals"] === "string" ? stash[boundaryId + "$signals"] : null
22739
22601
  };
22740
22602
  (initialStreamedPayloads ??= /* @__PURE__ */ new WeakMap()).set(owner, payload);
22741
- if (stash !== void 0 && (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null)) {
22603
+ if (stash !== void 0) {
22742
22604
  delete stash[boundaryId];
22743
22605
  delete stash[boundaryId + "$signals"];
22744
22606
  }
@@ -22776,8 +22638,7 @@ function takeInitialSuspenseHydration(state, hydration) {
22776
22638
  continue;
22777
22639
  if (attr === import_constants.SUSPENSE_RESOLVED_SEED_ATTR)
22778
22640
  seedRaw = (STAGED_DOM?.view(script) ?? script).textContent;
22779
- else if (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null)
22780
- nativeRaw = (STAGED_DOM?.view(script) ?? script).textContent;
22641
+ else nativeRaw = (STAGED_DOM?.view(script) ?? script).textContent;
22781
22642
  sidecars.push(script);
22782
22643
  cursor = getNextSibling(script);
22783
22644
  }
@@ -22818,8 +22679,7 @@ function renderInitialSuspenseHydration(state, initial) {
22818
22679
  hydration.claimRootRemainder(initial.end);
22819
22680
  hydration.protectRootAnchor(initial.end);
22820
22681
  const previousHydration = currentHydration;
22821
- if (process.env.NODE_ENV !== "production")
22822
- hydration.attributeBaselines = previousHydration?.attributeBaselines;
22682
+ if (previousHydration?.staleServerValues) hydration.staleServerValues = true;
22823
22683
  if (previousHydration?.retryPresentation !== void 0)
22824
22684
  hydration.retryPresentation = previousHydration.retryPresentation;
22825
22685
  const previousCapture = WIP_CAPTURE;
@@ -22888,8 +22748,7 @@ function renderInitialSuspenseHydration(state, initial) {
22888
22748
  return;
22889
22749
  scheduleRender(state.parentBlock);
22890
22750
  };
22891
- if (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null)
22892
- suspended.then(resume, resume);
22751
+ suspended.then(resume, resume);
22893
22752
  return;
22894
22753
  }
22895
22754
  initialSuspenseHydrations?.delete(state);
@@ -22956,8 +22815,7 @@ function mountTry(state) {
22956
22815
  const raw = stash !== void 0 ? stash[streamedBoundaryId] : void 0;
22957
22816
  if (typeof raw === "string") scopedSeeds = hydration.parseSeeds(raw);
22958
22817
  const nativeRaw = stash?.[streamedBoundaryId + "$signals"];
22959
- if (typeof nativeRaw === "string" && (process.env.NODE_ENV === "production" || hydrateAttributeProbe === null))
22960
- scopedNativeRaw = nativeRaw;
22818
+ if (typeof nativeRaw === "string") scopedNativeRaw = nativeRaw;
22961
22819
  adoptCursor = getNextSibling(adoptCursor);
22962
22820
  } else if (
22963
22821
  // A shell hydrated before its streamed segment swaps still has the
@@ -23919,7 +23777,6 @@ function flushStagedReveals() {
23919
23777
  }
23920
23778
  }
23921
23779
  function attachResume(state, thenable) {
23922
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
23923
23780
  if (state.pendingThenable === thenable) return;
23924
23781
  state.pendingThenable = thenable;
23925
23782
  const retry = () => {
@@ -25267,7 +25124,6 @@ function queueCurrentActivityRefs(activity) {
25267
25124
  }
25268
25125
  }
25269
25126
  function suspendHiddenActivity(state, thenable) {
25270
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
25271
25127
  if (state.pendingThenable === thenable) return;
25272
25128
  state.pendingThenable = thenable;
25273
25129
  const block = state.block;
@@ -25662,7 +25518,7 @@ function switchBlock(parentScope, slotKey, domParent, discriminant, cases, defau
25662
25518
  }
25663
25519
  renderBranchSlot(parentScope, slotKey, state, domParent, nextIdx, body, "switch", env);
25664
25520
  }
25665
- function forBlock(parentScope, slotKey, domParent, inputItems, getKey, itemBody, flags, deps, emptyBody, anchor, ownEnd) {
25521
+ function forBlock(parentScope, slotKey, domParent, inputItems, getKey, itemBody, flags, deps, emptyBody, anchor, ownEnd, signalSite) {
25666
25522
  if (CURRENT_BLOCK?.pending && !CURRENT_BLOCK.crossRenderUpdate) return;
25667
25523
  const items = Array.isArray(inputItems) ? inputItems : Array.from(inputItems);
25668
25524
  const parentBlock = parentScope.block;
@@ -25708,7 +25564,8 @@ function forBlock(parentScope, slotKey, domParent, inputItems, getKey, itemBody,
25708
25564
  // one hidden class and the stamp in childSlot transitions nothing.
25709
25565
  plainDeopt: false,
25710
25566
  mappedNative: void 0,
25711
- selectionItems: void 0
25567
+ selectionItems: void 0,
25568
+ signalSite
25712
25569
  };
25713
25570
  parentScope.slots[slotKey] = state;
25714
25571
  registerSlot(parentScope, state);
@@ -25824,7 +25681,7 @@ function forBlock(parentScope, slotKey, domParent, inputItems, getKey, itemBody,
25824
25681
  }
25825
25682
  if (hydration !== null) hydration.node = getNextSibling(state.end);
25826
25683
  }
25827
- function keyedForBlock(parentScope, slotKey, domParent, items, getKey, itemBody, flags, deps, emptyBody, anchor, ownEnd, selectionBody) {
25684
+ function keyedForBlock(parentScope, slotKey, domParent, items, getKey, itemBody, flags, deps, emptyBody, anchor, ownEnd, selectionBody, signalSite) {
25828
25685
  if (CURRENT_BLOCK?.pending && !CURRENT_BLOCK.crossRenderUpdate) return;
25829
25686
  const state = parentScope.slots[slotKey];
25830
25687
  if (TRANSITION_JOURNAL !== null && ROOT_RENDER_TRANSACTION === null) {
@@ -25855,7 +25712,8 @@ function keyedForBlock(parentScope, slotKey, domParent, items, getKey, itemBody,
25855
25712
  deps,
25856
25713
  emptyBody,
25857
25714
  anchor,
25858
- ownEnd
25715
+ ownEnd,
25716
+ signalSite
25859
25717
  );
25860
25718
  if (TRANSITION_JOURNAL === null || ROOT_RENDER_TRANSACTION !== null) {
25861
25719
  const rendered = parentScope.slots[slotKey];
@@ -27239,7 +27097,7 @@ function coalesceHydratedRanges(rootBlock, liteRanges) {
27239
27097
  mergeExactRanges(outer, inner);
27240
27098
  }
27241
27099
  }
27242
- function visitSlot(state) {
27100
+ function visitSlot(state, scope) {
27243
27101
  const kind = state.__kind;
27244
27102
  if (kind === "componentSlotSlot") {
27245
27103
  if (state.block !== null) visitBlock(state.block, state);
@@ -27248,6 +27106,11 @@ function coalesceHydratedRanges(rootBlock, liteRanges) {
27248
27106
  if (kind === "childSlot") {
27249
27107
  const child2 = state;
27250
27108
  if (child2.block !== null) visitBlock(child2.block, child2);
27109
+ else if (child2.borrowed) {
27110
+ const own = blockGroups.get(scope.block);
27111
+ if (own !== void 0 && child2.start === own.start && child2.end === own.end)
27112
+ attachOwner(own, child2);
27113
+ }
27251
27114
  if (child2.forSlot !== null) visitForSlot(child2.forSlot);
27252
27115
  if (child2.portal?.block != null) visitBlock(child2.portal.block);
27253
27116
  return;
@@ -27279,7 +27142,7 @@ function coalesceHydratedRanges(rootBlock, liteRanges) {
27279
27142
  for (let i = 0; i < children.length; i++) visitNestedScope(children[i].scope);
27280
27143
  const registered = scope._slots;
27281
27144
  if (registered === null) return;
27282
- for (let i = 0; i < registered.length; i++) visitSlot(registered[i]);
27145
+ for (let i = 0; i < registered.length; i++) visitSlot(registered[i], scope);
27283
27146
  }
27284
27147
  visitBlock(rootBlock);
27285
27148
  for (let i = 0; i < groups.length; i++) {
@@ -27874,6 +27737,7 @@ function makeRoot(container, rootBlock, currentBody, currentKey, idState, output
27874
27737
  currentKey = null;
27875
27738
  }
27876
27739
  } finally {
27740
+ idState.signalState?.opaqueKeys?.clear();
27877
27741
  NATIVE_READ_DRIVER?.clearDeferredRefs(renderOwner);
27878
27742
  renderOwner.current = null;
27879
27743
  renderOwner.retry = noop;
@@ -27926,6 +27790,10 @@ function createRoot(container, options) {
27926
27790
  function __createVoidRoot(container, options) {
27927
27791
  return createRootWithOutputHandler(container, options, null);
27928
27792
  }
27793
+ function __voidRootProps(type, props) {
27794
+ (0, import_shared_value_helpers.applyElementDefaultProps)(type, props);
27795
+ return props;
27796
+ }
27929
27797
  function hydrateRoot(container, bodyOrElement, propsOrOptions, rootOptions) {
27930
27798
  return hydrateRootWithOutputHandler(
27931
27799
  container,
@@ -28225,6 +28093,7 @@ function createIndependentHydrateActivator(body) {
28225
28093
  if (notify !== null) useEffect(notify, [scope], HYDRATE_NOTIFY_SLOT);
28226
28094
  };
28227
28095
  const framed = (_props, scope) => {
28096
+ stampSignalInstanceKey(scope, rootSignalInstanceKey(scope.block.idState));
28228
28097
  tryBlock(scope, 0, scope.block.parentNode, content, null, null, scope.block.endMarker);
28229
28098
  };
28230
28099
  const adapter = (_props, scope) => {
@@ -28320,7 +28189,6 @@ function applyHintAttrs(el, opts) {
28320
28189
  }
28321
28190
  }
28322
28191
  function preload(href, options) {
28323
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
28324
28192
  if (process.env.NODE_ENV !== "production") {
28325
28193
  const warning = (0, import_resource_hint_diagnostics.resourceHintWarning)("preload", href, options);
28326
28194
  if (warning !== null) console.error(warning);
@@ -28358,7 +28226,6 @@ function preload(href, options) {
28358
28226
  });
28359
28227
  }
28360
28228
  function preinit(href, options) {
28361
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
28362
28229
  if (process.env.NODE_ENV !== "production") {
28363
28230
  const warning = (0, import_resource_hint_diagnostics.resourceHintWarning)("preinit", href, options);
28364
28231
  if (warning !== null) console.error(warning);
@@ -28383,7 +28250,6 @@ function preinit(href, options) {
28383
28250
  }
28384
28251
  }
28385
28252
  function preconnect(href, options) {
28386
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
28387
28253
  if (process.env.NODE_ENV !== "production") {
28388
28254
  const warning = (0, import_resource_hint_diagnostics.resourceHintWarning)("preconnect", href, options);
28389
28255
  if (warning !== null) console.error(warning);
@@ -28405,7 +28271,6 @@ function preconnect(href, options) {
28405
28271
  });
28406
28272
  }
28407
28273
  function prefetchDNS(href) {
28408
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
28409
28274
  if (process.env.NODE_ENV !== "production") {
28410
28275
  const warning = (0, import_resource_hint_diagnostics.resourceHintWarning)("prefetchDNS", href, arguments[1], arguments.length > 1);
28411
28276
  if (warning !== null) console.error(warning);
@@ -28421,7 +28286,6 @@ function prefetchDNS(href) {
28421
28286
  });
28422
28287
  }
28423
28288
  function preloadModule(href, options) {
28424
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
28425
28289
  if (process.env.NODE_ENV !== "production") {
28426
28290
  const warning = (0, import_resource_hint_diagnostics.resourceHintWarning)("preloadModule", href, options);
28427
28291
  if (warning !== null) console.error(warning);
@@ -28443,7 +28307,6 @@ function preloadModule(href, options) {
28443
28307
  });
28444
28308
  }
28445
28309
  function preinitModule(href, options) {
28446
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
28447
28310
  if (process.env.NODE_ENV !== "production") {
28448
28311
  const warning = (0, import_resource_hint_diagnostics.resourceHintWarning)("preinitModule", href, options);
28449
28312
  if (warning !== null) console.error(warning);
@@ -28552,7 +28415,6 @@ function warnInvalidStylesheetResource(reason) {
28552
28415
  );
28553
28416
  }
28554
28417
  function stylesheetResource(attrs, invalidReason) {
28555
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
28556
28418
  if (process.env.NODE_ENV !== "production" && invalidReason !== void 0) {
28557
28419
  warnInvalidStylesheetResource(invalidReason);
28558
28420
  return;
@@ -28572,7 +28434,6 @@ function stylesheetResource(attrs, invalidReason) {
28572
28434
  state.sheets.add(href);
28573
28435
  }
28574
28436
  function styleResource(attrs, css, development) {
28575
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
28576
28437
  if (typeof document === "undefined" || attrs == null) return;
28577
28438
  const href = attrs.href;
28578
28439
  if (typeof href !== "string" || href === "") return;
@@ -28603,7 +28464,6 @@ function resetFloatResourceState() {
28603
28464
  if (typeof window !== "undefined") delete window.$OCTFR;
28604
28465
  }
28605
28466
  function scriptResource(attrs) {
28606
- if (process.env.NODE_ENV !== "production" && hydrateAttributeProbe !== null) return;
28607
28467
  if (typeof document === "undefined" || attrs == null) return;
28608
28468
  const src = attrs.src;
28609
28469
  if (typeof src !== "string" || src === "") return;
@@ -28639,6 +28499,7 @@ function scriptResource(attrs) {
28639
28499
  __useLinkedStateWithGetter,
28640
28500
  __useReducerWithGetter,
28641
28501
  __useStateWithGetter,
28502
+ __voidRootProps,
28642
28503
  __vtSeen,
28643
28504
  act,
28644
28505
  activityBlock,
@@ -28759,7 +28620,6 @@ function scriptResource(attrs) {
28759
28620
  isChildrenBlock,
28760
28621
  isHydratingStyle,
28761
28622
  isInActScope,
28762
- isNativeSignalDiagnosticProbe,
28763
28623
  isValidElement,
28764
28624
  keyedForBlock,
28765
28625
  lazy,