react-dom 19.2.0-canary-462d08f9-20250517 → 19.2.0-canary-23884812-20250520

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.
@@ -53,8 +53,15 @@ var React = require("react"),
53
53
  REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
54
54
  REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
55
55
  REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
56
- MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
57
- isArrayImpl = Array.isArray;
56
+ MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
57
+ function getIteratorFn(maybeIterable) {
58
+ if (null === maybeIterable || "object" !== typeof maybeIterable) return null;
59
+ maybeIterable =
60
+ (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||
61
+ maybeIterable["@@iterator"];
62
+ return "function" === typeof maybeIterable ? maybeIterable : null;
63
+ }
64
+ var isArrayImpl = Array.isArray;
58
65
  function murmurhash3_32_gc(key, seed) {
59
66
  var remainder = key.length & 3;
60
67
  var bytes = key.length - remainder;
@@ -3257,6 +3264,10 @@ function hoistStyleQueueDependency(styleQueue) {
3257
3264
  function hoistStylesheetDependency(stylesheet) {
3258
3265
  this.stylesheets.add(stylesheet);
3259
3266
  }
3267
+ function hoistHoistables(parentState, childState) {
3268
+ childState.styles.forEach(hoistStyleQueueDependency, parentState);
3269
+ childState.stylesheets.forEach(hoistStylesheetDependency, parentState);
3270
+ }
3260
3271
  var bind = Function.prototype.bind,
3261
3272
  supportsRequestStorage = "function" === typeof AsyncLocalStorage,
3262
3273
  requestStorage = supportsRequestStorage ? new AsyncLocalStorage() : null,
@@ -4118,6 +4129,7 @@ function createRequest(
4118
4129
  rootFormatContext,
4119
4130
  null,
4120
4131
  emptyTreeContext,
4132
+ null,
4121
4133
  null
4122
4134
  );
4123
4135
  pushComponentStack(children);
@@ -4181,15 +4193,17 @@ function pingTask(request, task) {
4181
4193
  }
4182
4194
  function createSuspenseBoundary(
4183
4195
  request,
4196
+ row,
4184
4197
  fallbackAbortableTasks,
4185
4198
  contentPreamble,
4186
4199
  fallbackPreamble
4187
4200
  ) {
4188
- return {
4201
+ fallbackAbortableTasks = {
4189
4202
  status: 0,
4190
4203
  rootSegmentID: -1,
4191
4204
  parentFlushed: !1,
4192
4205
  pendingTasks: 0,
4206
+ row: row,
4193
4207
  completedSegments: [],
4194
4208
  byteSize: 0,
4195
4209
  fallbackAbortableTasks: fallbackAbortableTasks,
@@ -4201,6 +4215,17 @@ function createSuspenseBoundary(
4201
4215
  trackedContentKeyPath: null,
4202
4216
  trackedFallbackNode: null
4203
4217
  };
4218
+ null !== row &&
4219
+ (row.pendingTasks++,
4220
+ (contentPreamble = row.boundaries),
4221
+ null !== contentPreamble &&
4222
+ (request.allPendingTasks++,
4223
+ fallbackAbortableTasks.pendingTasks++,
4224
+ contentPreamble.push(fallbackAbortableTasks)),
4225
+ (request = row.inheritedHoistables),
4226
+ null !== request &&
4227
+ hoistHoistables(fallbackAbortableTasks.contentState, request));
4228
+ return fallbackAbortableTasks;
4204
4229
  }
4205
4230
  function createRenderTask(
4206
4231
  request,
@@ -4216,12 +4241,14 @@ function createRenderTask(
4216
4241
  formatContext,
4217
4242
  context,
4218
4243
  treeContext,
4244
+ row,
4219
4245
  componentStack
4220
4246
  ) {
4221
4247
  request.allPendingTasks++;
4222
4248
  null === blockedBoundary
4223
4249
  ? request.pendingRootTasks++
4224
4250
  : blockedBoundary.pendingTasks++;
4251
+ null !== row && row.pendingTasks++;
4225
4252
  var task = {
4226
4253
  replay: null,
4227
4254
  node: node,
@@ -4238,6 +4265,7 @@ function createRenderTask(
4238
4265
  formatContext: formatContext,
4239
4266
  context: context,
4240
4267
  treeContext: treeContext,
4268
+ row: row,
4241
4269
  componentStack: componentStack,
4242
4270
  thenableState: thenableState
4243
4271
  };
@@ -4257,12 +4285,14 @@ function createReplayTask(
4257
4285
  formatContext,
4258
4286
  context,
4259
4287
  treeContext,
4288
+ row,
4260
4289
  componentStack
4261
4290
  ) {
4262
4291
  request.allPendingTasks++;
4263
4292
  null === blockedBoundary
4264
4293
  ? request.pendingRootTasks++
4265
4294
  : blockedBoundary.pendingTasks++;
4295
+ null !== row && row.pendingTasks++;
4266
4296
  replay.pendingTasks++;
4267
4297
  var task = {
4268
4298
  replay: replay,
@@ -4280,6 +4310,7 @@ function createReplayTask(
4280
4310
  formatContext: formatContext,
4281
4311
  context: context,
4282
4312
  treeContext: treeContext,
4313
+ row: row,
4283
4314
  componentStack: componentStack,
4284
4315
  thenableState: thenableState
4285
4316
  };
@@ -4357,6 +4388,162 @@ function fatalError(request, error) {
4357
4388
  ? ((request.status = 14), closeWithError(request.destination, error))
4358
4389
  : ((request.status = 13), (request.fatalError = error));
4359
4390
  }
4391
+ function finishSuspenseListRow(request, row) {
4392
+ unblockSuspenseListRow(request, row.next, row.hoistables);
4393
+ }
4394
+ function unblockSuspenseListRow(request, unblockedRow, inheritedHoistables) {
4395
+ for (; null !== unblockedRow; ) {
4396
+ null !== inheritedHoistables &&
4397
+ (hoistHoistables(unblockedRow.hoistables, inheritedHoistables),
4398
+ (unblockedRow.inheritedHoistables = inheritedHoistables));
4399
+ var unblockedBoundaries = unblockedRow.boundaries;
4400
+ if (null !== unblockedBoundaries) {
4401
+ unblockedRow.boundaries = null;
4402
+ for (var i = 0; i < unblockedBoundaries.length; i++) {
4403
+ var unblockedBoundary = unblockedBoundaries[i];
4404
+ null !== inheritedHoistables &&
4405
+ hoistHoistables(unblockedBoundary.contentState, inheritedHoistables);
4406
+ finishedTask(request, unblockedBoundary, null, null);
4407
+ }
4408
+ }
4409
+ unblockedRow.pendingTasks--;
4410
+ if (0 < unblockedRow.pendingTasks) break;
4411
+ inheritedHoistables = unblockedRow.hoistables;
4412
+ unblockedRow = unblockedRow.next;
4413
+ }
4414
+ }
4415
+ function tryToResolveTogetherRow(request, togetherRow) {
4416
+ var boundaries = togetherRow.boundaries;
4417
+ if (null !== boundaries && togetherRow.pendingTasks === boundaries.length) {
4418
+ for (var allCompleteAndInlinable = !0, i = 0; i < boundaries.length; i++) {
4419
+ var rowBoundary = boundaries[i];
4420
+ if (
4421
+ 1 !== rowBoundary.pendingTasks ||
4422
+ rowBoundary.parentFlushed ||
4423
+ 500 < rowBoundary.byteSize
4424
+ ) {
4425
+ allCompleteAndInlinable = !1;
4426
+ break;
4427
+ }
4428
+ }
4429
+ allCompleteAndInlinable &&
4430
+ unblockSuspenseListRow(request, togetherRow, togetherRow.hoistables);
4431
+ }
4432
+ }
4433
+ function createSuspenseListRow(previousRow) {
4434
+ var newRow = {
4435
+ pendingTasks: 1,
4436
+ boundaries: null,
4437
+ hoistables: createHoistableState(),
4438
+ inheritedHoistables: null,
4439
+ together: !1,
4440
+ next: null
4441
+ };
4442
+ null !== previousRow &&
4443
+ 0 < previousRow.pendingTasks &&
4444
+ (newRow.pendingTasks++,
4445
+ (newRow.boundaries = []),
4446
+ (previousRow.next = newRow));
4447
+ return newRow;
4448
+ }
4449
+ function renderSuspenseListRows(request, task, keyPath, rows, revealOrder) {
4450
+ var prevKeyPath = task.keyPath,
4451
+ prevTreeContext = task.treeContext,
4452
+ prevRow = task.row;
4453
+ task.keyPath = keyPath;
4454
+ keyPath = rows.length;
4455
+ var previousSuspenseListRow = null;
4456
+ if (null !== task.replay) {
4457
+ var resumeSlots = task.replay.slots;
4458
+ if (null !== resumeSlots && "object" === typeof resumeSlots)
4459
+ for (var n = 0; n < keyPath; n++) {
4460
+ var i = "backwards" !== revealOrder ? n : keyPath - 1 - n,
4461
+ node = rows[i];
4462
+ task.row = previousSuspenseListRow = createSuspenseListRow(
4463
+ previousSuspenseListRow
4464
+ );
4465
+ task.treeContext = pushTreeContext(prevTreeContext, keyPath, i);
4466
+ var resumeSegmentID = resumeSlots[i];
4467
+ "number" === typeof resumeSegmentID
4468
+ ? (resumeNode(request, task, resumeSegmentID, node, i),
4469
+ delete resumeSlots[i])
4470
+ : renderNode(request, task, node, i);
4471
+ 0 === --previousSuspenseListRow.pendingTasks &&
4472
+ finishSuspenseListRow(request, previousSuspenseListRow);
4473
+ }
4474
+ else
4475
+ for (resumeSlots = 0; resumeSlots < keyPath; resumeSlots++)
4476
+ (n =
4477
+ "backwards" !== revealOrder
4478
+ ? resumeSlots
4479
+ : keyPath - 1 - resumeSlots),
4480
+ (i = rows[n]),
4481
+ (task.row = previousSuspenseListRow =
4482
+ createSuspenseListRow(previousSuspenseListRow)),
4483
+ (task.treeContext = pushTreeContext(prevTreeContext, keyPath, n)),
4484
+ renderNode(request, task, i, n),
4485
+ 0 === --previousSuspenseListRow.pendingTasks &&
4486
+ finishSuspenseListRow(request, previousSuspenseListRow);
4487
+ } else if ("backwards" !== revealOrder)
4488
+ for (revealOrder = 0; revealOrder < keyPath; revealOrder++)
4489
+ (resumeSlots = rows[revealOrder]),
4490
+ (task.row = previousSuspenseListRow =
4491
+ createSuspenseListRow(previousSuspenseListRow)),
4492
+ (task.treeContext = pushTreeContext(
4493
+ prevTreeContext,
4494
+ keyPath,
4495
+ revealOrder
4496
+ )),
4497
+ renderNode(request, task, resumeSlots, revealOrder),
4498
+ 0 === --previousSuspenseListRow.pendingTasks &&
4499
+ finishSuspenseListRow(request, previousSuspenseListRow);
4500
+ else {
4501
+ revealOrder = task.blockedSegment;
4502
+ resumeSlots = revealOrder.children.length;
4503
+ n = revealOrder.chunks.length;
4504
+ for (i = keyPath - 1; 0 <= i; i--) {
4505
+ node = rows[i];
4506
+ task.row = previousSuspenseListRow = createSuspenseListRow(
4507
+ previousSuspenseListRow
4508
+ );
4509
+ task.treeContext = pushTreeContext(prevTreeContext, keyPath, i);
4510
+ resumeSegmentID = createPendingSegment(
4511
+ request,
4512
+ n,
4513
+ null,
4514
+ task.formatContext,
4515
+ 0 === i ? revealOrder.lastPushedText : !0,
4516
+ !0
4517
+ );
4518
+ revealOrder.children.splice(resumeSlots, 0, resumeSegmentID);
4519
+ task.blockedSegment = resumeSegmentID;
4520
+ try {
4521
+ renderNode(request, task, node, i),
4522
+ resumeSegmentID.lastPushedText &&
4523
+ resumeSegmentID.textEmbedded &&
4524
+ resumeSegmentID.chunks.push(textSeparator),
4525
+ (resumeSegmentID.status = 1),
4526
+ finishedSegment(request, task.blockedBoundary, resumeSegmentID),
4527
+ 0 === --previousSuspenseListRow.pendingTasks &&
4528
+ finishSuspenseListRow(request, previousSuspenseListRow);
4529
+ } catch (thrownValue) {
4530
+ throw (
4531
+ ((resumeSegmentID.status = 12 === request.status ? 3 : 4),
4532
+ thrownValue)
4533
+ );
4534
+ }
4535
+ }
4536
+ task.blockedSegment = revealOrder;
4537
+ revealOrder.lastPushedText = !1;
4538
+ }
4539
+ null !== prevRow &&
4540
+ null !== previousSuspenseListRow &&
4541
+ 0 < previousSuspenseListRow.pendingTasks &&
4542
+ (prevRow.pendingTasks++, (previousSuspenseListRow.next = prevRow));
4543
+ task.treeContext = prevTreeContext;
4544
+ task.row = prevRow;
4545
+ task.keyPath = prevKeyPath;
4546
+ }
4360
4547
  function renderWithHooks(request, task, keyPath, Component, props, secondArg) {
4361
4548
  var prevThenableState = task.thenableState;
4362
4549
  task.thenableState = null;
@@ -4424,9 +4611,9 @@ function renderElement(request, task, keyPath, type, props, ref) {
4424
4611
  var defaultProps = type.defaultProps;
4425
4612
  if (defaultProps) {
4426
4613
  newProps === props && (newProps = assign({}, newProps, props));
4427
- for (var propName$34 in defaultProps)
4428
- void 0 === newProps[propName$34] &&
4429
- (newProps[propName$34] = defaultProps[propName$34]);
4614
+ for (var propName$43 in defaultProps)
4615
+ void 0 === newProps[propName$43] &&
4616
+ (newProps[propName$43] = defaultProps[propName$43]);
4430
4617
  }
4431
4618
  props = newProps;
4432
4619
  newProps = emptyContextObject;
@@ -4486,16 +4673,16 @@ function renderElement(request, task, keyPath, type, props, ref) {
4486
4673
  defaultProps = ref ? type[0] : newProps.state;
4487
4674
  initialState = !0;
4488
4675
  for (ref = ref ? 1 : 0; ref < type.length; ref++)
4489
- (propName$34 = type[ref]),
4490
- (propName$34 =
4491
- "function" === typeof propName$34
4492
- ? propName$34.call(newProps, defaultProps, props, void 0)
4493
- : propName$34),
4494
- null != propName$34 &&
4676
+ (propName$43 = type[ref]),
4677
+ (propName$43 =
4678
+ "function" === typeof propName$43
4679
+ ? propName$43.call(newProps, defaultProps, props, void 0)
4680
+ : propName$43),
4681
+ null != propName$43 &&
4495
4682
  (initialState
4496
4683
  ? ((initialState = !1),
4497
- (defaultProps = assign({}, defaultProps, propName$34)))
4498
- : assign(defaultProps, propName$34));
4684
+ (defaultProps = assign({}, defaultProps, propName$43)))
4685
+ : assign(defaultProps, propName$43));
4499
4686
  newProps.state = defaultProps;
4500
4687
  }
4501
4688
  else defaultProps.queue = null;
@@ -4570,6 +4757,7 @@ function renderElement(request, task, keyPath, type, props, ref) {
4570
4757
  task.formatContext,
4571
4758
  task.context,
4572
4759
  task.treeContext,
4760
+ task.row,
4573
4761
  task.componentStack
4574
4762
  )),
4575
4763
  pushComponentStack(keyPath),
@@ -4649,10 +4837,45 @@ function renderElement(request, task, keyPath, type, props, ref) {
4649
4837
  (type.lastPushedText = !1));
4650
4838
  return;
4651
4839
  case REACT_SUSPENSE_LIST_TYPE:
4652
- type = task.keyPath;
4653
- task.keyPath = keyPath;
4654
- renderNodeDestructive(request, task, props.children, -1);
4655
- task.keyPath = type;
4840
+ a: {
4841
+ type = props.children;
4842
+ props = props.revealOrder;
4843
+ if ("forwards" === props || "backwards" === props) {
4844
+ if (isArrayImpl(type)) {
4845
+ renderSuspenseListRows(request, task, keyPath, type, props);
4846
+ break a;
4847
+ }
4848
+ if ((newProps = getIteratorFn(type)))
4849
+ if ((newProps = newProps.call(type))) {
4850
+ defaultProps = newProps.next();
4851
+ if (!defaultProps.done) {
4852
+ do defaultProps = newProps.next();
4853
+ while (!defaultProps.done);
4854
+ renderSuspenseListRows(request, task, keyPath, type, props);
4855
+ }
4856
+ break a;
4857
+ }
4858
+ }
4859
+ "together" === props
4860
+ ? ((props = task.keyPath),
4861
+ (newProps = task.row),
4862
+ (defaultProps = task.row = createSuspenseListRow(null)),
4863
+ (defaultProps.boundaries = []),
4864
+ (defaultProps.together = !0),
4865
+ (task.keyPath = keyPath),
4866
+ renderNodeDestructive(request, task, type, -1),
4867
+ 0 === --defaultProps.pendingTasks &&
4868
+ finishSuspenseListRow(request, defaultProps),
4869
+ (task.keyPath = props),
4870
+ (task.row = newProps),
4871
+ null !== newProps &&
4872
+ 0 < defaultProps.pendingTasks &&
4873
+ (newProps.pendingTasks++, (defaultProps.next = newProps)))
4874
+ : ((props = task.keyPath),
4875
+ (task.keyPath = keyPath),
4876
+ renderNodeDestructive(request, task, type, -1),
4877
+ (task.keyPath = props));
4878
+ }
4656
4879
  return;
4657
4880
  case REACT_VIEW_TRANSITION_TYPE:
4658
4881
  case REACT_SCOPE_TYPE:
@@ -4661,21 +4884,26 @@ function renderElement(request, task, keyPath, type, props, ref) {
4661
4884
  a: if (null !== task.replay) {
4662
4885
  type = task.keyPath;
4663
4886
  newProps = task.formatContext;
4887
+ defaultProps = task.row;
4664
4888
  task.keyPath = keyPath;
4665
4889
  task.formatContext = getSuspenseContentFormatContext(
4666
4890
  request.resumableState,
4667
4891
  newProps
4668
4892
  );
4893
+ task.row = null;
4669
4894
  keyPath = props.children;
4670
4895
  try {
4671
4896
  renderNode(request, task, keyPath, -1);
4672
4897
  } finally {
4673
- (task.keyPath = type), (task.formatContext = newProps);
4898
+ (task.keyPath = type),
4899
+ (task.formatContext = newProps),
4900
+ (task.row = defaultProps);
4674
4901
  }
4675
4902
  } else {
4676
4903
  type = task.keyPath;
4677
4904
  ref = task.formatContext;
4678
- propName$34 = task.blockedBoundary;
4905
+ var prevRow = task.row;
4906
+ propName$43 = task.blockedBoundary;
4679
4907
  propName = task.blockedPreamble;
4680
4908
  var parentHoistableState = task.hoistableState,
4681
4909
  parentSegment = task.blockedSegment,
@@ -4686,11 +4914,18 @@ function renderElement(request, task, keyPath, type, props, ref) {
4686
4914
  2 > task.formatContext.insertionMode
4687
4915
  ? createSuspenseBoundary(
4688
4916
  request,
4917
+ task.row,
4689
4918
  fallbackAbortSet,
4690
4919
  createPreambleState(),
4691
4920
  createPreambleState()
4692
4921
  )
4693
- : createSuspenseBoundary(request, fallbackAbortSet, null, null);
4922
+ : createSuspenseBoundary(
4923
+ request,
4924
+ task.row,
4925
+ fallbackAbortSet,
4926
+ null,
4927
+ null
4928
+ );
4694
4929
  null !== request.trackedPostpones &&
4695
4930
  (newBoundary.trackedContentKeyPath = keyPath);
4696
4931
  var boundarySegment = createPendingSegment(
@@ -4731,7 +4966,7 @@ function renderElement(request, task, keyPath, type, props, ref) {
4731
4966
  boundarySegment.textEmbedded &&
4732
4967
  boundarySegment.chunks.push(textSeparator),
4733
4968
  (boundarySegment.status = 1),
4734
- finishedSegment(request, propName$34, boundarySegment);
4969
+ finishedSegment(request, propName$43, boundarySegment);
4735
4970
  } catch (thrownValue) {
4736
4971
  throw (
4737
4972
  ((boundarySegment.status = 12 === request.status ? 3 : 4),
@@ -4760,6 +4995,7 @@ function renderElement(request, task, keyPath, type, props, ref) {
4760
4995
  ),
4761
4996
  task.context,
4762
4997
  task.treeContext,
4998
+ null,
4763
4999
  task.componentStack
4764
5000
  );
4765
5001
  pushComponentStack(task);
@@ -4774,6 +5010,7 @@ function renderElement(request, task, keyPath, type, props, ref) {
4774
5010
  request.resumableState,
4775
5011
  ref
4776
5012
  );
5013
+ task.row = null;
4777
5014
  contentRootSegment.status = 6;
4778
5015
  try {
4779
5016
  if (
@@ -4784,22 +5021,28 @@ function renderElement(request, task, keyPath, type, props, ref) {
4784
5021
  (contentRootSegment.status = 1),
4785
5022
  finishedSegment(request, newBoundary, contentRootSegment),
4786
5023
  queueCompletedSegment(newBoundary, contentRootSegment),
4787
- 0 === newBoundary.pendingTasks &&
4788
- 0 === newBoundary.status &&
4789
- ((newBoundary.status = 1), !(500 < newBoundary.byteSize)))
5024
+ 0 === newBoundary.pendingTasks && 0 === newBoundary.status)
4790
5025
  ) {
4791
- 0 === request.pendingRootTasks &&
4792
- task.blockedPreamble &&
4793
- preparePreamble(request);
4794
- break a;
4795
- }
4796
- } catch (thrownValue$29) {
5026
+ if (((newBoundary.status = 1), !(500 < newBoundary.byteSize))) {
5027
+ null !== prevRow &&
5028
+ 0 === --prevRow.pendingTasks &&
5029
+ finishSuspenseListRow(request, prevRow);
5030
+ 0 === request.pendingRootTasks &&
5031
+ task.blockedPreamble &&
5032
+ preparePreamble(request);
5033
+ break a;
5034
+ }
5035
+ } else
5036
+ null !== prevRow &&
5037
+ prevRow.together &&
5038
+ tryToResolveTogetherRow(request, prevRow);
5039
+ } catch (thrownValue$30) {
4797
5040
  (newBoundary.status = 4),
4798
5041
  12 === request.status
4799
5042
  ? ((contentRootSegment.status = 3),
4800
5043
  (newProps = request.fatalError))
4801
5044
  : ((contentRootSegment.status = 4),
4802
- (newProps = thrownValue$29)),
5045
+ (newProps = thrownValue$30)),
4803
5046
  (defaultProps = getThrownInfo(task.componentStack)),
4804
5047
  (initialState = logRecoverableError(
4805
5048
  request,
@@ -4809,19 +5052,20 @@ function renderElement(request, task, keyPath, type, props, ref) {
4809
5052
  (newBoundary.errorDigest = initialState),
4810
5053
  untrackBoundary(request, newBoundary);
4811
5054
  } finally {
4812
- (task.blockedBoundary = propName$34),
5055
+ (task.blockedBoundary = propName$43),
4813
5056
  (task.blockedPreamble = propName),
4814
5057
  (task.hoistableState = parentHoistableState),
4815
5058
  (task.blockedSegment = parentSegment),
4816
5059
  (task.keyPath = type),
4817
- (task.formatContext = ref);
5060
+ (task.formatContext = ref),
5061
+ (task.row = prevRow);
4818
5062
  }
4819
5063
  task = createRenderTask(
4820
5064
  request,
4821
5065
  null,
4822
5066
  fallback,
4823
5067
  -1,
4824
- propName$34,
5068
+ propName$43,
4825
5069
  boundarySegment,
4826
5070
  newBoundary.fallbackPreamble,
4827
5071
  newBoundary.fallbackState,
@@ -4833,6 +5077,7 @@ function renderElement(request, task, keyPath, type, props, ref) {
4833
5077
  ),
4834
5078
  task.context,
4835
5079
  task.treeContext,
5080
+ task.row,
4836
5081
  task.componentStack
4837
5082
  );
4838
5083
  pushComponentStack(task);
@@ -5052,6 +5297,7 @@ function retryNode(request, task) {
5052
5297
  null === node$jscomp$0[4] ? null : node$jscomp$0[4][3];
5053
5298
  var prevKeyPath = task.keyPath,
5054
5299
  prevContext = task.formatContext,
5300
+ prevRow = task.row,
5055
5301
  previousReplaySet = task.replay,
5056
5302
  parentBoundary = task.blockedBoundary,
5057
5303
  parentHoistableState = task.hoistableState,
@@ -5062,12 +5308,14 @@ function retryNode(request, task) {
5062
5308
  2 > task.formatContext.insertionMode
5063
5309
  ? createSuspenseBoundary(
5064
5310
  request,
5311
+ task.row,
5065
5312
  fallbackAbortSet,
5066
5313
  createPreambleState(),
5067
5314
  createPreambleState()
5068
5315
  )
5069
5316
  : createSuspenseBoundary(
5070
5317
  request,
5318
+ task.row,
5071
5319
  fallbackAbortSet,
5072
5320
  null,
5073
5321
  null
@@ -5081,6 +5329,7 @@ function retryNode(request, task) {
5081
5329
  request.resumableState,
5082
5330
  prevContext
5083
5331
  );
5332
+ task.row = null;
5084
5333
  task.replay = {
5085
5334
  nodes: ref,
5086
5335
  slots: name,
@@ -5117,9 +5366,10 @@ function retryNode(request, task) {
5117
5366
  (task.hoistableState = parentHoistableState),
5118
5367
  (task.replay = previousReplaySet),
5119
5368
  (task.keyPath = prevKeyPath),
5120
- (task.formatContext = prevContext);
5369
+ (task.formatContext = prevContext),
5370
+ (task.row = prevRow);
5121
5371
  }
5122
- task = createReplayTask(
5372
+ childNodes = createReplayTask(
5123
5373
  request,
5124
5374
  null,
5125
5375
  {
@@ -5139,10 +5389,11 @@ function retryNode(request, task) {
5139
5389
  ),
5140
5390
  task.context,
5141
5391
  task.treeContext,
5392
+ task.row,
5142
5393
  task.componentStack
5143
5394
  );
5144
- pushComponentStack(task);
5145
- request.pingedTasks.push(task);
5395
+ pushComponentStack(childNodes);
5396
+ request.pingedTasks.push(childNodes);
5146
5397
  }
5147
5398
  }
5148
5399
  childIndex.splice(node, 1);
@@ -5167,22 +5418,17 @@ function retryNode(request, task) {
5167
5418
  renderChildrenArray(request, task, node, childIndex);
5168
5419
  return;
5169
5420
  }
5170
- null === node || "object" !== typeof node
5171
- ? (childNodes = null)
5172
- : ((childNodes =
5173
- (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
5174
- node["@@iterator"]),
5175
- (childNodes = "function" === typeof childNodes ? childNodes : null));
5176
- if (childNodes && (childNodes = childNodes.call(node))) {
5177
- node = childNodes.next();
5178
- if (!node.done) {
5179
- props = [];
5180
- do props.push(node.value), (node = childNodes.next());
5181
- while (!node.done);
5182
- renderChildrenArray(request, task, props, childIndex);
5421
+ if ((childNodes = getIteratorFn(node)))
5422
+ if ((childNodes = childNodes.call(node))) {
5423
+ node = childNodes.next();
5424
+ if (!node.done) {
5425
+ props = [];
5426
+ do props.push(node.value), (node = childNodes.next());
5427
+ while (!node.done);
5428
+ renderChildrenArray(request, task, props, childIndex);
5429
+ }
5430
+ return;
5183
5431
  }
5184
- return;
5185
- }
5186
5432
  if ("function" === typeof node.then)
5187
5433
  return (
5188
5434
  (task.thenableState = null),
@@ -5325,6 +5571,7 @@ function spawnNewSuspendedReplayTask(request, task, thenableState) {
5325
5571
  task.formatContext,
5326
5572
  task.context,
5327
5573
  task.treeContext,
5574
+ task.row,
5328
5575
  task.componentStack
5329
5576
  );
5330
5577
  }
@@ -5354,6 +5601,7 @@ function spawnNewSuspendedRenderTask(request, task, thenableState) {
5354
5601
  task.formatContext,
5355
5602
  task.context,
5356
5603
  task.treeContext,
5604
+ task.row,
5357
5605
  task.componentStack
5358
5606
  );
5359
5607
  }
@@ -5407,15 +5655,15 @@ function renderNode(request, task, node, childIndex) {
5407
5655
  chunkLength = segment.chunks.length;
5408
5656
  try {
5409
5657
  return renderNodeDestructive(request, task, node, childIndex);
5410
- } catch (thrownValue$51) {
5658
+ } catch (thrownValue$59) {
5411
5659
  if (
5412
5660
  (resetHooksState(),
5413
5661
  (segment.children.length = childrenLength),
5414
5662
  (segment.chunks.length = chunkLength),
5415
5663
  (node =
5416
- thrownValue$51 === SuspenseException
5664
+ thrownValue$59 === SuspenseException
5417
5665
  ? getSuspendedThenable()
5418
- : thrownValue$51),
5666
+ : thrownValue$59),
5419
5667
  "object" === typeof node && null !== node)
5420
5668
  ) {
5421
5669
  if ("function" === typeof node.then) {
@@ -5453,9 +5701,10 @@ function renderNode(request, task, node, childIndex) {
5453
5701
  throw node;
5454
5702
  }
5455
5703
  function abortTaskSoft(task) {
5456
- var boundary = task.blockedBoundary;
5457
- task = task.blockedSegment;
5458
- null !== task && ((task.status = 3), finishedTask(this, boundary, task));
5704
+ var boundary = task.blockedBoundary,
5705
+ segment = task.blockedSegment;
5706
+ null !== segment &&
5707
+ ((segment.status = 3), finishedTask(this, boundary, task.row, segment));
5459
5708
  }
5460
5709
  function abortRemainingReplayNodes(
5461
5710
  request$jscomp$0,
@@ -5482,6 +5731,7 @@ function abortRemainingReplayNodes(
5482
5731
  errorDigest = errorDigest$jscomp$0,
5483
5732
  resumedBoundary = createSuspenseBoundary(
5484
5733
  request,
5734
+ null,
5485
5735
  new Set(),
5486
5736
  null,
5487
5737
  null
@@ -5527,32 +5777,40 @@ function abortTask(task, request, error) {
5527
5777
  boundary.pendingTasks--;
5528
5778
  0 === boundary.pendingTasks &&
5529
5779
  0 < boundary.nodes.length &&
5530
- ((task = logRecoverableError(request, error, segment)),
5780
+ ((segment = logRecoverableError(request, error, segment)),
5531
5781
  abortRemainingReplayNodes(
5532
5782
  request,
5533
5783
  null,
5534
5784
  boundary.nodes,
5535
5785
  boundary.slots,
5536
5786
  error,
5537
- task
5787
+ segment
5538
5788
  ));
5539
5789
  request.pendingRootTasks--;
5540
5790
  0 === request.pendingRootTasks && completeShell(request);
5541
5791
  }
5542
5792
  } else
5543
- boundary.pendingTasks--,
5544
- 4 !== boundary.status &&
5545
- ((boundary.status = 4),
5546
- (task = logRecoverableError(request, error, segment)),
5547
- (boundary.status = 4),
5548
- (boundary.errorDigest = task),
5549
- untrackBoundary(request, boundary),
5550
- boundary.parentFlushed &&
5551
- request.clientRenderedBoundaries.push(boundary)),
5793
+ 4 !== boundary.status &&
5794
+ ((boundary.status = 4),
5795
+ (segment = logRecoverableError(request, error, segment)),
5796
+ (boundary.status = 4),
5797
+ (boundary.errorDigest = segment),
5798
+ untrackBoundary(request, boundary),
5799
+ boundary.parentFlushed &&
5800
+ request.clientRenderedBoundaries.push(boundary)),
5801
+ boundary.pendingTasks--,
5802
+ (segment = boundary.row),
5803
+ null !== segment &&
5804
+ 0 === --segment.pendingTasks &&
5805
+ finishSuspenseListRow(request, segment),
5552
5806
  boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
5553
5807
  return abortTask(fallbackTask, request, error);
5554
5808
  }),
5555
5809
  boundary.fallbackAbortableTasks.clear();
5810
+ task = task.row;
5811
+ null !== task &&
5812
+ 0 === --task.pendingTasks &&
5813
+ finishSuspenseListRow(request, task);
5556
5814
  request.allPendingTasks--;
5557
5815
  0 === request.allPendingTasks && completeAll(request);
5558
5816
  }
@@ -5659,7 +5917,11 @@ function finishedSegment(request, boundary, segment) {
5659
5917
  : (boundary.byteSize += segmentByteSize);
5660
5918
  }
5661
5919
  }
5662
- function finishedTask(request, boundary, segment) {
5920
+ function finishedTask(request, boundary, row, segment) {
5921
+ null !== row &&
5922
+ (0 === --row.pendingTasks
5923
+ ? finishSuspenseListRow(request, row)
5924
+ : row.together && tryToResolveTogetherRow(request, row));
5663
5925
  request.allPendingTasks--;
5664
5926
  if (null === boundary) {
5665
5927
  if (null !== segment && segment.parentFlushed) {
@@ -5683,23 +5945,33 @@ function finishedTask(request, boundary, segment) {
5683
5945
  boundary.parentFlushed &&
5684
5946
  request.completedBoundaries.push(boundary),
5685
5947
  1 === boundary.status &&
5686
- (500 < boundary.byteSize ||
5948
+ ((row = boundary.row),
5949
+ null !== row &&
5950
+ hoistHoistables(row.hoistables, boundary.contentState),
5951
+ 500 < boundary.byteSize ||
5687
5952
  (boundary.fallbackAbortableTasks.forEach(
5688
5953
  abortTaskSoft,
5689
5954
  request
5690
5955
  ),
5691
- boundary.fallbackAbortableTasks.clear()),
5956
+ boundary.fallbackAbortableTasks.clear(),
5957
+ null !== row &&
5958
+ 0 === --row.pendingTasks &&
5959
+ finishSuspenseListRow(request, row)),
5692
5960
  0 === request.pendingRootTasks &&
5693
5961
  null === request.trackedPostpones &&
5694
5962
  null !== boundary.contentPreamble &&
5695
5963
  preparePreamble(request)))
5696
- : null !== segment &&
5697
- segment.parentFlushed &&
5698
- 1 === segment.status &&
5699
- (queueCompletedSegment(boundary, segment),
5700
- 1 === boundary.completedSegments.length &&
5701
- boundary.parentFlushed &&
5702
- request.partialBoundaries.push(boundary)));
5964
+ : (null !== segment &&
5965
+ segment.parentFlushed &&
5966
+ 1 === segment.status &&
5967
+ (queueCompletedSegment(boundary, segment),
5968
+ 1 === boundary.completedSegments.length &&
5969
+ boundary.parentFlushed &&
5970
+ request.partialBoundaries.push(boundary)),
5971
+ (boundary = boundary.row),
5972
+ null !== boundary &&
5973
+ boundary.together &&
5974
+ tryToResolveTogetherRow(request, boundary)));
5703
5975
  0 === request.allPendingTasks && completeAll(request);
5704
5976
  }
5705
5977
  function performWork(request$jscomp$2) {
@@ -5743,7 +6015,12 @@ function performWork(request$jscomp$2) {
5743
6015
  );
5744
6016
  task.replay.pendingTasks--;
5745
6017
  task.abortSet.delete(task);
5746
- finishedTask(request$jscomp$0, task.blockedBoundary, null);
6018
+ finishedTask(
6019
+ request$jscomp$0,
6020
+ task.blockedBoundary,
6021
+ task.row,
6022
+ null
6023
+ );
5747
6024
  } catch (thrownValue) {
5748
6025
  resetHooksState();
5749
6026
  var x =
@@ -5811,7 +6088,12 @@ function performWork(request$jscomp$2) {
5811
6088
  task.abortSet.delete(task),
5812
6089
  (request$jscomp$1.status = 1),
5813
6090
  finishedSegment(request, task.blockedBoundary, request$jscomp$1),
5814
- finishedTask(request, task.blockedBoundary, request$jscomp$1);
6091
+ finishedTask(
6092
+ request,
6093
+ task.blockedBoundary,
6094
+ task.row,
6095
+ request$jscomp$1
6096
+ );
5815
6097
  } catch (thrownValue) {
5816
6098
  resetHooksState();
5817
6099
  request$jscomp$1.children.length = childrenLength;
@@ -5835,26 +6117,36 @@ function performWork(request$jscomp$2) {
5835
6117
  var errorInfo$jscomp$0 = getThrownInfo(task.componentStack);
5836
6118
  task.abortSet.delete(task);
5837
6119
  request$jscomp$1.status = 4;
5838
- var boundary$jscomp$0 = task.blockedBoundary;
6120
+ var boundary$jscomp$0 = task.blockedBoundary,
6121
+ row = task.row;
6122
+ null !== row &&
6123
+ 0 === --row.pendingTasks &&
6124
+ finishSuspenseListRow(request, row);
6125
+ request.allPendingTasks--;
5839
6126
  request$jscomp$0 = logRecoverableError(
5840
6127
  request,
5841
6128
  x$jscomp$0,
5842
6129
  errorInfo$jscomp$0
5843
6130
  );
5844
- null === boundary$jscomp$0
5845
- ? fatalError(request, x$jscomp$0)
5846
- : (boundary$jscomp$0.pendingTasks--,
5847
- 4 !== boundary$jscomp$0.status &&
5848
- ((boundary$jscomp$0.status = 4),
5849
- (boundary$jscomp$0.errorDigest = request$jscomp$0),
5850
- untrackBoundary(request, boundary$jscomp$0),
5851
- boundary$jscomp$0.parentFlushed &&
5852
- request.clientRenderedBoundaries.push(boundary$jscomp$0),
5853
- 0 === request.pendingRootTasks &&
5854
- null === request.trackedPostpones &&
5855
- null !== boundary$jscomp$0.contentPreamble &&
5856
- preparePreamble(request)));
5857
- request.allPendingTasks--;
6131
+ if (null === boundary$jscomp$0) fatalError(request, x$jscomp$0);
6132
+ else if (
6133
+ (boundary$jscomp$0.pendingTasks--,
6134
+ 4 !== boundary$jscomp$0.status)
6135
+ ) {
6136
+ boundary$jscomp$0.status = 4;
6137
+ boundary$jscomp$0.errorDigest = request$jscomp$0;
6138
+ untrackBoundary(request, boundary$jscomp$0);
6139
+ var boundaryRow = boundary$jscomp$0.row;
6140
+ null !== boundaryRow &&
6141
+ 0 === --boundaryRow.pendingTasks &&
6142
+ finishSuspenseListRow(request, boundaryRow);
6143
+ boundary$jscomp$0.parentFlushed &&
6144
+ request.clientRenderedBoundaries.push(boundary$jscomp$0);
6145
+ 0 === request.pendingRootTasks &&
6146
+ null === request.trackedPostpones &&
6147
+ null !== boundary$jscomp$0.contentPreamble &&
6148
+ preparePreamble(request);
6149
+ }
5858
6150
  0 === request.allPendingTasks && completeAll(request);
5859
6151
  }
5860
6152
  } finally {
@@ -6000,20 +6292,24 @@ function flushSegment(request, destination, segment, hoistableState) {
6000
6292
  if (null === boundary)
6001
6293
  return flushSubtree(request, destination, segment, hoistableState);
6002
6294
  boundary.parentFlushed = !0;
6003
- if (4 === boundary.status)
6004
- (boundary = boundary.errorDigest),
6005
- writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary),
6006
- writeChunk(destination, clientRenderedSuspenseBoundaryError1),
6007
- boundary &&
6008
- (writeChunk(destination, clientRenderedSuspenseBoundaryError1A),
6009
- writeChunk(destination, stringToChunk(escapeTextForBrowser(boundary))),
6010
- writeChunk(
6011
- destination,
6012
- clientRenderedSuspenseBoundaryErrorAttrInterstitial
6013
- )),
6014
- writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2),
6015
- flushSubtree(request, destination, segment, hoistableState);
6016
- else if (1 !== boundary.status)
6295
+ if (4 === boundary.status) {
6296
+ var row = boundary.row;
6297
+ null !== row &&
6298
+ 0 === --row.pendingTasks &&
6299
+ finishSuspenseListRow(request, row);
6300
+ boundary = boundary.errorDigest;
6301
+ writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary);
6302
+ writeChunk(destination, clientRenderedSuspenseBoundaryError1);
6303
+ boundary &&
6304
+ (writeChunk(destination, clientRenderedSuspenseBoundaryError1A),
6305
+ writeChunk(destination, stringToChunk(escapeTextForBrowser(boundary))),
6306
+ writeChunk(
6307
+ destination,
6308
+ clientRenderedSuspenseBoundaryErrorAttrInterstitial
6309
+ ));
6310
+ writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2);
6311
+ flushSubtree(request, destination, segment, hoistableState);
6312
+ } else if (1 !== boundary.status)
6017
6313
  0 === boundary.status && (boundary.rootSegmentID = request.nextSegmentId++),
6018
6314
  0 < boundary.completedSegments.length &&
6019
6315
  request.partialBoundaries.push(boundary),
@@ -6022,13 +6318,7 @@ function flushSegment(request, destination, segment, hoistableState) {
6022
6318
  request.renderState,
6023
6319
  boundary.rootSegmentID
6024
6320
  ),
6025
- hoistableState &&
6026
- ((boundary = boundary.fallbackState),
6027
- boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
6028
- boundary.stylesheets.forEach(
6029
- hoistStylesheetDependency,
6030
- hoistableState
6031
- )),
6321
+ hoistableState && hoistHoistables(hoistableState, boundary.fallbackState),
6032
6322
  flushSubtree(request, destination, segment, hoistableState);
6033
6323
  else if (
6034
6324
  500 < boundary.byteSize &&
@@ -6044,10 +6334,12 @@ function flushSegment(request, destination, segment, hoistableState) {
6044
6334
  flushSubtree(request, destination, segment, hoistableState);
6045
6335
  else {
6046
6336
  flushedByteSize += boundary.byteSize;
6047
- hoistableState &&
6048
- ((segment = boundary.contentState),
6049
- segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
6050
- segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
6337
+ hoistableState && hoistHoistables(hoistableState, boundary.contentState);
6338
+ segment = boundary.row;
6339
+ null !== segment &&
6340
+ 500 < boundary.byteSize &&
6341
+ 0 === --segment.pendingTasks &&
6342
+ finishSuspenseListRow(request, segment);
6051
6343
  writeChunkAndReturn(destination, startCompletedSuspenseBoundary);
6052
6344
  segment = boundary.completedSegments;
6053
6345
  if (1 !== segment.length)
@@ -6082,6 +6374,11 @@ function flushCompletedBoundary(request, destination, boundary) {
6082
6374
  completedSegments[i]
6083
6375
  );
6084
6376
  completedSegments.length = 0;
6377
+ completedSegments = boundary.row;
6378
+ null !== completedSegments &&
6379
+ 500 < boundary.byteSize &&
6380
+ 0 === --completedSegments.pendingTasks &&
6381
+ finishSuspenseListRow(request, completedSegments);
6085
6382
  writeHoistablesForBoundary(
6086
6383
  destination,
6087
6384
  boundary.contentState,
@@ -6359,12 +6656,12 @@ function flushCompletedQueues(request, destination) {
6359
6656
  writtenBytes = 0;
6360
6657
  var partialBoundaries = request.partialBoundaries;
6361
6658
  for (i = 0; i < partialBoundaries.length; i++) {
6362
- var boundary$54 = partialBoundaries[i];
6659
+ var boundary$64 = partialBoundaries[i];
6363
6660
  a: {
6364
6661
  clientRenderedBoundaries = request;
6365
6662
  boundary = destination;
6366
- flushedByteSize = boundary$54.byteSize;
6367
- var completedSegments = boundary$54.completedSegments;
6663
+ flushedByteSize = boundary$64.byteSize;
6664
+ var completedSegments = boundary$64.completedSegments;
6368
6665
  for (
6369
6666
  JSCompiler_inline_result = 0;
6370
6667
  JSCompiler_inline_result < completedSegments.length;
@@ -6374,7 +6671,7 @@ function flushCompletedQueues(request, destination) {
6374
6671
  !flushPartiallyCompletedSegment(
6375
6672
  clientRenderedBoundaries,
6376
6673
  boundary,
6377
- boundary$54,
6674
+ boundary$64,
6378
6675
  completedSegments[JSCompiler_inline_result]
6379
6676
  )
6380
6677
  ) {
@@ -6384,9 +6681,20 @@ function flushCompletedQueues(request, destination) {
6384
6681
  break a;
6385
6682
  }
6386
6683
  completedSegments.splice(0, JSCompiler_inline_result);
6684
+ var row = boundary$64.row;
6685
+ null !== row &&
6686
+ row.together &&
6687
+ 1 === boundary$64.pendingTasks &&
6688
+ (1 === row.pendingTasks
6689
+ ? unblockSuspenseListRow(
6690
+ clientRenderedBoundaries,
6691
+ row,
6692
+ row.hoistables
6693
+ )
6694
+ : row.pendingTasks--);
6387
6695
  JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
6388
6696
  boundary,
6389
- boundary$54.contentState,
6697
+ boundary$64.contentState,
6390
6698
  clientRenderedBoundaries.renderState
6391
6699
  );
6392
6700
  }
@@ -6492,17 +6800,17 @@ function abort(request, reason) {
6492
6800
  }
6493
6801
  null !== request.destination &&
6494
6802
  flushCompletedQueues(request, request.destination);
6495
- } catch (error$56) {
6496
- logRecoverableError(request, error$56, {}), fatalError(request, error$56);
6803
+ } catch (error$66) {
6804
+ logRecoverableError(request, error$66, {}), fatalError(request, error$66);
6497
6805
  }
6498
6806
  }
6499
6807
  function ensureCorrectIsomorphicReactVersion() {
6500
6808
  var isomorphicReactPackageVersion = React.version;
6501
- if ("19.2.0-canary-462d08f9-20250517" !== isomorphicReactPackageVersion)
6809
+ if ("19.2.0-canary-23884812-20250520" !== isomorphicReactPackageVersion)
6502
6810
  throw Error(
6503
6811
  'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' +
6504
6812
  (isomorphicReactPackageVersion +
6505
- "\n - react-dom: 19.2.0-canary-462d08f9-20250517\nLearn more: https://react.dev/warnings/version-mismatch")
6813
+ "\n - react-dom: 19.2.0-canary-23884812-20250520\nLearn more: https://react.dev/warnings/version-mismatch")
6506
6814
  );
6507
6815
  }
6508
6816
  ensureCorrectIsomorphicReactVersion();
@@ -6648,4 +6956,4 @@ exports.renderToReadableStream = function (children, options) {
6648
6956
  startWork(request);
6649
6957
  });
6650
6958
  };
6651
- exports.version = "19.2.0-canary-462d08f9-20250517";
6959
+ exports.version = "19.2.0-canary-23884812-20250520";