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.
@@ -33,8 +33,15 @@ var util = require("util"),
33
33
  REACT_LEGACY_HIDDEN_TYPE = Symbol.for("react.legacy_hidden"),
34
34
  REACT_MEMO_CACHE_SENTINEL = Symbol.for("react.memo_cache_sentinel"),
35
35
  REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
36
- MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
37
- isArrayImpl = Array.isArray,
36
+ MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
37
+ function getIteratorFn(maybeIterable) {
38
+ if (null === maybeIterable || "object" !== typeof maybeIterable) return null;
39
+ maybeIterable =
40
+ (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||
41
+ maybeIterable["@@iterator"];
42
+ return "function" === typeof maybeIterable ? maybeIterable : null;
43
+ }
44
+ var isArrayImpl = Array.isArray,
38
45
  scheduleMicrotask = queueMicrotask;
39
46
  function flushBuffered(destination) {
40
47
  "function" === typeof destination.flush && destination.flush();
@@ -3167,6 +3174,10 @@ function hoistStyleQueueDependency(styleQueue) {
3167
3174
  function hoistStylesheetDependency(stylesheet) {
3168
3175
  this.stylesheets.add(stylesheet);
3169
3176
  }
3177
+ function hoistHoistables(parentState, childState) {
3178
+ childState.styles.forEach(hoistStyleQueueDependency, parentState);
3179
+ childState.stylesheets.forEach(hoistStylesheetDependency, parentState);
3180
+ }
3170
3181
  var bind = Function.prototype.bind,
3171
3182
  requestStorage = new async_hooks.AsyncLocalStorage(),
3172
3183
  REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
@@ -4024,6 +4035,7 @@ function createRequest(
4024
4035
  rootFormatContext,
4025
4036
  null,
4026
4037
  emptyTreeContext,
4038
+ null,
4027
4039
  null
4028
4040
  );
4029
4041
  pushComponentStack(children);
@@ -4084,15 +4096,17 @@ function pingTask(request, task) {
4084
4096
  }
4085
4097
  function createSuspenseBoundary(
4086
4098
  request,
4099
+ row,
4087
4100
  fallbackAbortableTasks,
4088
4101
  contentPreamble,
4089
4102
  fallbackPreamble
4090
4103
  ) {
4091
- return {
4104
+ fallbackAbortableTasks = {
4092
4105
  status: 0,
4093
4106
  rootSegmentID: -1,
4094
4107
  parentFlushed: !1,
4095
4108
  pendingTasks: 0,
4109
+ row: row,
4096
4110
  completedSegments: [],
4097
4111
  byteSize: 0,
4098
4112
  fallbackAbortableTasks: fallbackAbortableTasks,
@@ -4104,6 +4118,17 @@ function createSuspenseBoundary(
4104
4118
  trackedContentKeyPath: null,
4105
4119
  trackedFallbackNode: null
4106
4120
  };
4121
+ null !== row &&
4122
+ (row.pendingTasks++,
4123
+ (contentPreamble = row.boundaries),
4124
+ null !== contentPreamble &&
4125
+ (request.allPendingTasks++,
4126
+ fallbackAbortableTasks.pendingTasks++,
4127
+ contentPreamble.push(fallbackAbortableTasks)),
4128
+ (request = row.inheritedHoistables),
4129
+ null !== request &&
4130
+ hoistHoistables(fallbackAbortableTasks.contentState, request));
4131
+ return fallbackAbortableTasks;
4107
4132
  }
4108
4133
  function createRenderTask(
4109
4134
  request,
@@ -4119,12 +4144,14 @@ function createRenderTask(
4119
4144
  formatContext,
4120
4145
  context,
4121
4146
  treeContext,
4147
+ row,
4122
4148
  componentStack
4123
4149
  ) {
4124
4150
  request.allPendingTasks++;
4125
4151
  null === blockedBoundary
4126
4152
  ? request.pendingRootTasks++
4127
4153
  : blockedBoundary.pendingTasks++;
4154
+ null !== row && row.pendingTasks++;
4128
4155
  var task = {
4129
4156
  replay: null,
4130
4157
  node: node,
@@ -4141,6 +4168,7 @@ function createRenderTask(
4141
4168
  formatContext: formatContext,
4142
4169
  context: context,
4143
4170
  treeContext: treeContext,
4171
+ row: row,
4144
4172
  componentStack: componentStack,
4145
4173
  thenableState: thenableState
4146
4174
  };
@@ -4160,12 +4188,14 @@ function createReplayTask(
4160
4188
  formatContext,
4161
4189
  context,
4162
4190
  treeContext,
4191
+ row,
4163
4192
  componentStack
4164
4193
  ) {
4165
4194
  request.allPendingTasks++;
4166
4195
  null === blockedBoundary
4167
4196
  ? request.pendingRootTasks++
4168
4197
  : blockedBoundary.pendingTasks++;
4198
+ null !== row && row.pendingTasks++;
4169
4199
  replay.pendingTasks++;
4170
4200
  var task = {
4171
4201
  replay: replay,
@@ -4183,6 +4213,7 @@ function createReplayTask(
4183
4213
  formatContext: formatContext,
4184
4214
  context: context,
4185
4215
  treeContext: treeContext,
4216
+ row: row,
4186
4217
  componentStack: componentStack,
4187
4218
  thenableState: thenableState
4188
4219
  };
@@ -4260,6 +4291,162 @@ function fatalError(request, error) {
4260
4291
  ? ((request.status = 14), request.destination.destroy(error))
4261
4292
  : ((request.status = 13), (request.fatalError = error));
4262
4293
  }
4294
+ function finishSuspenseListRow(request, row) {
4295
+ unblockSuspenseListRow(request, row.next, row.hoistables);
4296
+ }
4297
+ function unblockSuspenseListRow(request, unblockedRow, inheritedHoistables) {
4298
+ for (; null !== unblockedRow; ) {
4299
+ null !== inheritedHoistables &&
4300
+ (hoistHoistables(unblockedRow.hoistables, inheritedHoistables),
4301
+ (unblockedRow.inheritedHoistables = inheritedHoistables));
4302
+ var unblockedBoundaries = unblockedRow.boundaries;
4303
+ if (null !== unblockedBoundaries) {
4304
+ unblockedRow.boundaries = null;
4305
+ for (var i = 0; i < unblockedBoundaries.length; i++) {
4306
+ var unblockedBoundary = unblockedBoundaries[i];
4307
+ null !== inheritedHoistables &&
4308
+ hoistHoistables(unblockedBoundary.contentState, inheritedHoistables);
4309
+ finishedTask(request, unblockedBoundary, null, null);
4310
+ }
4311
+ }
4312
+ unblockedRow.pendingTasks--;
4313
+ if (0 < unblockedRow.pendingTasks) break;
4314
+ inheritedHoistables = unblockedRow.hoistables;
4315
+ unblockedRow = unblockedRow.next;
4316
+ }
4317
+ }
4318
+ function tryToResolveTogetherRow(request, togetherRow) {
4319
+ var boundaries = togetherRow.boundaries;
4320
+ if (null !== boundaries && togetherRow.pendingTasks === boundaries.length) {
4321
+ for (var allCompleteAndInlinable = !0, i = 0; i < boundaries.length; i++) {
4322
+ var rowBoundary = boundaries[i];
4323
+ if (
4324
+ 1 !== rowBoundary.pendingTasks ||
4325
+ rowBoundary.parentFlushed ||
4326
+ 500 < rowBoundary.byteSize
4327
+ ) {
4328
+ allCompleteAndInlinable = !1;
4329
+ break;
4330
+ }
4331
+ }
4332
+ allCompleteAndInlinable &&
4333
+ unblockSuspenseListRow(request, togetherRow, togetherRow.hoistables);
4334
+ }
4335
+ }
4336
+ function createSuspenseListRow(previousRow) {
4337
+ var newRow = {
4338
+ pendingTasks: 1,
4339
+ boundaries: null,
4340
+ hoistables: createHoistableState(),
4341
+ inheritedHoistables: null,
4342
+ together: !1,
4343
+ next: null
4344
+ };
4345
+ null !== previousRow &&
4346
+ 0 < previousRow.pendingTasks &&
4347
+ (newRow.pendingTasks++,
4348
+ (newRow.boundaries = []),
4349
+ (previousRow.next = newRow));
4350
+ return newRow;
4351
+ }
4352
+ function renderSuspenseListRows(request, task, keyPath, rows, revealOrder) {
4353
+ var prevKeyPath = task.keyPath,
4354
+ prevTreeContext = task.treeContext,
4355
+ prevRow = task.row;
4356
+ task.keyPath = keyPath;
4357
+ keyPath = rows.length;
4358
+ var previousSuspenseListRow = null;
4359
+ if (null !== task.replay) {
4360
+ var resumeSlots = task.replay.slots;
4361
+ if (null !== resumeSlots && "object" === typeof resumeSlots)
4362
+ for (var n = 0; n < keyPath; n++) {
4363
+ var i = "backwards" !== revealOrder ? n : keyPath - 1 - n,
4364
+ node = rows[i];
4365
+ task.row = previousSuspenseListRow = createSuspenseListRow(
4366
+ previousSuspenseListRow
4367
+ );
4368
+ task.treeContext = pushTreeContext(prevTreeContext, keyPath, i);
4369
+ var resumeSegmentID = resumeSlots[i];
4370
+ "number" === typeof resumeSegmentID
4371
+ ? (resumeNode(request, task, resumeSegmentID, node, i),
4372
+ delete resumeSlots[i])
4373
+ : renderNode(request, task, node, i);
4374
+ 0 === --previousSuspenseListRow.pendingTasks &&
4375
+ finishSuspenseListRow(request, previousSuspenseListRow);
4376
+ }
4377
+ else
4378
+ for (resumeSlots = 0; resumeSlots < keyPath; resumeSlots++)
4379
+ (n =
4380
+ "backwards" !== revealOrder
4381
+ ? resumeSlots
4382
+ : keyPath - 1 - resumeSlots),
4383
+ (i = rows[n]),
4384
+ (task.row = previousSuspenseListRow =
4385
+ createSuspenseListRow(previousSuspenseListRow)),
4386
+ (task.treeContext = pushTreeContext(prevTreeContext, keyPath, n)),
4387
+ renderNode(request, task, i, n),
4388
+ 0 === --previousSuspenseListRow.pendingTasks &&
4389
+ finishSuspenseListRow(request, previousSuspenseListRow);
4390
+ } else if ("backwards" !== revealOrder)
4391
+ for (revealOrder = 0; revealOrder < keyPath; revealOrder++)
4392
+ (resumeSlots = rows[revealOrder]),
4393
+ (task.row = previousSuspenseListRow =
4394
+ createSuspenseListRow(previousSuspenseListRow)),
4395
+ (task.treeContext = pushTreeContext(
4396
+ prevTreeContext,
4397
+ keyPath,
4398
+ revealOrder
4399
+ )),
4400
+ renderNode(request, task, resumeSlots, revealOrder),
4401
+ 0 === --previousSuspenseListRow.pendingTasks &&
4402
+ finishSuspenseListRow(request, previousSuspenseListRow);
4403
+ else {
4404
+ revealOrder = task.blockedSegment;
4405
+ resumeSlots = revealOrder.children.length;
4406
+ n = revealOrder.chunks.length;
4407
+ for (i = keyPath - 1; 0 <= i; i--) {
4408
+ node = rows[i];
4409
+ task.row = previousSuspenseListRow = createSuspenseListRow(
4410
+ previousSuspenseListRow
4411
+ );
4412
+ task.treeContext = pushTreeContext(prevTreeContext, keyPath, i);
4413
+ resumeSegmentID = createPendingSegment(
4414
+ request,
4415
+ n,
4416
+ null,
4417
+ task.formatContext,
4418
+ 0 === i ? revealOrder.lastPushedText : !0,
4419
+ !0
4420
+ );
4421
+ revealOrder.children.splice(resumeSlots, 0, resumeSegmentID);
4422
+ task.blockedSegment = resumeSegmentID;
4423
+ try {
4424
+ renderNode(request, task, node, i),
4425
+ resumeSegmentID.lastPushedText &&
4426
+ resumeSegmentID.textEmbedded &&
4427
+ resumeSegmentID.chunks.push(textSeparator),
4428
+ (resumeSegmentID.status = 1),
4429
+ finishedSegment(request, task.blockedBoundary, resumeSegmentID),
4430
+ 0 === --previousSuspenseListRow.pendingTasks &&
4431
+ finishSuspenseListRow(request, previousSuspenseListRow);
4432
+ } catch (thrownValue) {
4433
+ throw (
4434
+ ((resumeSegmentID.status = 12 === request.status ? 3 : 4),
4435
+ thrownValue)
4436
+ );
4437
+ }
4438
+ }
4439
+ task.blockedSegment = revealOrder;
4440
+ revealOrder.lastPushedText = !1;
4441
+ }
4442
+ null !== prevRow &&
4443
+ null !== previousSuspenseListRow &&
4444
+ 0 < previousSuspenseListRow.pendingTasks &&
4445
+ (prevRow.pendingTasks++, (previousSuspenseListRow.next = prevRow));
4446
+ task.treeContext = prevTreeContext;
4447
+ task.row = prevRow;
4448
+ task.keyPath = prevKeyPath;
4449
+ }
4263
4450
  function renderWithHooks(request, task, keyPath, Component, props, secondArg) {
4264
4451
  var prevThenableState = task.thenableState;
4265
4452
  task.thenableState = null;
@@ -4327,9 +4514,9 @@ function renderElement(request, task, keyPath, type, props, ref) {
4327
4514
  var defaultProps = type.defaultProps;
4328
4515
  if (defaultProps) {
4329
4516
  newProps === props && (newProps = assign({}, newProps, props));
4330
- for (var propName$34 in defaultProps)
4331
- void 0 === newProps[propName$34] &&
4332
- (newProps[propName$34] = defaultProps[propName$34]);
4517
+ for (var propName$43 in defaultProps)
4518
+ void 0 === newProps[propName$43] &&
4519
+ (newProps[propName$43] = defaultProps[propName$43]);
4333
4520
  }
4334
4521
  props = newProps;
4335
4522
  newProps = emptyContextObject;
@@ -4389,16 +4576,16 @@ function renderElement(request, task, keyPath, type, props, ref) {
4389
4576
  defaultProps = ref ? type[0] : newProps.state;
4390
4577
  initialState = !0;
4391
4578
  for (ref = ref ? 1 : 0; ref < type.length; ref++)
4392
- (propName$34 = type[ref]),
4393
- (propName$34 =
4394
- "function" === typeof propName$34
4395
- ? propName$34.call(newProps, defaultProps, props, void 0)
4396
- : propName$34),
4397
- null != propName$34 &&
4579
+ (propName$43 = type[ref]),
4580
+ (propName$43 =
4581
+ "function" === typeof propName$43
4582
+ ? propName$43.call(newProps, defaultProps, props, void 0)
4583
+ : propName$43),
4584
+ null != propName$43 &&
4398
4585
  (initialState
4399
4586
  ? ((initialState = !1),
4400
- (defaultProps = assign({}, defaultProps, propName$34)))
4401
- : assign(defaultProps, propName$34));
4587
+ (defaultProps = assign({}, defaultProps, propName$43)))
4588
+ : assign(defaultProps, propName$43));
4402
4589
  newProps.state = defaultProps;
4403
4590
  }
4404
4591
  else defaultProps.queue = null;
@@ -4473,6 +4660,7 @@ function renderElement(request, task, keyPath, type, props, ref) {
4473
4660
  task.formatContext,
4474
4661
  task.context,
4475
4662
  task.treeContext,
4663
+ task.row,
4476
4664
  task.componentStack
4477
4665
  )),
4478
4666
  pushComponentStack(keyPath),
@@ -4552,10 +4740,45 @@ function renderElement(request, task, keyPath, type, props, ref) {
4552
4740
  (type.lastPushedText = !1));
4553
4741
  return;
4554
4742
  case REACT_SUSPENSE_LIST_TYPE:
4555
- type = task.keyPath;
4556
- task.keyPath = keyPath;
4557
- renderNodeDestructive(request, task, props.children, -1);
4558
- task.keyPath = type;
4743
+ a: {
4744
+ type = props.children;
4745
+ props = props.revealOrder;
4746
+ if ("forwards" === props || "backwards" === props) {
4747
+ if (isArrayImpl(type)) {
4748
+ renderSuspenseListRows(request, task, keyPath, type, props);
4749
+ break a;
4750
+ }
4751
+ if ((newProps = getIteratorFn(type)))
4752
+ if ((newProps = newProps.call(type))) {
4753
+ defaultProps = newProps.next();
4754
+ if (!defaultProps.done) {
4755
+ do defaultProps = newProps.next();
4756
+ while (!defaultProps.done);
4757
+ renderSuspenseListRows(request, task, keyPath, type, props);
4758
+ }
4759
+ break a;
4760
+ }
4761
+ }
4762
+ "together" === props
4763
+ ? ((props = task.keyPath),
4764
+ (newProps = task.row),
4765
+ (defaultProps = task.row = createSuspenseListRow(null)),
4766
+ (defaultProps.boundaries = []),
4767
+ (defaultProps.together = !0),
4768
+ (task.keyPath = keyPath),
4769
+ renderNodeDestructive(request, task, type, -1),
4770
+ 0 === --defaultProps.pendingTasks &&
4771
+ finishSuspenseListRow(request, defaultProps),
4772
+ (task.keyPath = props),
4773
+ (task.row = newProps),
4774
+ null !== newProps &&
4775
+ 0 < defaultProps.pendingTasks &&
4776
+ (newProps.pendingTasks++, (defaultProps.next = newProps)))
4777
+ : ((props = task.keyPath),
4778
+ (task.keyPath = keyPath),
4779
+ renderNodeDestructive(request, task, type, -1),
4780
+ (task.keyPath = props));
4781
+ }
4559
4782
  return;
4560
4783
  case REACT_VIEW_TRANSITION_TYPE:
4561
4784
  case REACT_SCOPE_TYPE:
@@ -4564,21 +4787,26 @@ function renderElement(request, task, keyPath, type, props, ref) {
4564
4787
  a: if (null !== task.replay) {
4565
4788
  type = task.keyPath;
4566
4789
  newProps = task.formatContext;
4790
+ defaultProps = task.row;
4567
4791
  task.keyPath = keyPath;
4568
4792
  task.formatContext = getSuspenseContentFormatContext(
4569
4793
  request.resumableState,
4570
4794
  newProps
4571
4795
  );
4796
+ task.row = null;
4572
4797
  keyPath = props.children;
4573
4798
  try {
4574
4799
  renderNode(request, task, keyPath, -1);
4575
4800
  } finally {
4576
- (task.keyPath = type), (task.formatContext = newProps);
4801
+ (task.keyPath = type),
4802
+ (task.formatContext = newProps),
4803
+ (task.row = defaultProps);
4577
4804
  }
4578
4805
  } else {
4579
4806
  type = task.keyPath;
4580
4807
  ref = task.formatContext;
4581
- propName$34 = task.blockedBoundary;
4808
+ var prevRow = task.row;
4809
+ propName$43 = task.blockedBoundary;
4582
4810
  propName = task.blockedPreamble;
4583
4811
  var parentHoistableState = task.hoistableState,
4584
4812
  parentSegment = task.blockedSegment,
@@ -4589,11 +4817,18 @@ function renderElement(request, task, keyPath, type, props, ref) {
4589
4817
  2 > task.formatContext.insertionMode
4590
4818
  ? createSuspenseBoundary(
4591
4819
  request,
4820
+ task.row,
4592
4821
  fallbackAbortSet,
4593
4822
  createPreambleState(),
4594
4823
  createPreambleState()
4595
4824
  )
4596
- : createSuspenseBoundary(request, fallbackAbortSet, null, null);
4825
+ : createSuspenseBoundary(
4826
+ request,
4827
+ task.row,
4828
+ fallbackAbortSet,
4829
+ null,
4830
+ null
4831
+ );
4597
4832
  null !== request.trackedPostpones &&
4598
4833
  (newBoundary.trackedContentKeyPath = keyPath);
4599
4834
  var boundarySegment = createPendingSegment(
@@ -4634,7 +4869,7 @@ function renderElement(request, task, keyPath, type, props, ref) {
4634
4869
  boundarySegment.textEmbedded &&
4635
4870
  boundarySegment.chunks.push(textSeparator),
4636
4871
  (boundarySegment.status = 1),
4637
- finishedSegment(request, propName$34, boundarySegment);
4872
+ finishedSegment(request, propName$43, boundarySegment);
4638
4873
  } catch (thrownValue) {
4639
4874
  throw (
4640
4875
  ((boundarySegment.status = 12 === request.status ? 3 : 4),
@@ -4663,6 +4898,7 @@ function renderElement(request, task, keyPath, type, props, ref) {
4663
4898
  ),
4664
4899
  task.context,
4665
4900
  task.treeContext,
4901
+ null,
4666
4902
  task.componentStack
4667
4903
  );
4668
4904
  pushComponentStack(task);
@@ -4677,6 +4913,7 @@ function renderElement(request, task, keyPath, type, props, ref) {
4677
4913
  request.resumableState,
4678
4914
  ref
4679
4915
  );
4916
+ task.row = null;
4680
4917
  contentRootSegment.status = 6;
4681
4918
  try {
4682
4919
  if (
@@ -4687,22 +4924,28 @@ function renderElement(request, task, keyPath, type, props, ref) {
4687
4924
  (contentRootSegment.status = 1),
4688
4925
  finishedSegment(request, newBoundary, contentRootSegment),
4689
4926
  queueCompletedSegment(newBoundary, contentRootSegment),
4690
- 0 === newBoundary.pendingTasks &&
4691
- 0 === newBoundary.status &&
4692
- ((newBoundary.status = 1), !(500 < newBoundary.byteSize)))
4927
+ 0 === newBoundary.pendingTasks && 0 === newBoundary.status)
4693
4928
  ) {
4694
- 0 === request.pendingRootTasks &&
4695
- task.blockedPreamble &&
4696
- preparePreamble(request);
4697
- break a;
4698
- }
4699
- } catch (thrownValue$29) {
4929
+ if (((newBoundary.status = 1), !(500 < newBoundary.byteSize))) {
4930
+ null !== prevRow &&
4931
+ 0 === --prevRow.pendingTasks &&
4932
+ finishSuspenseListRow(request, prevRow);
4933
+ 0 === request.pendingRootTasks &&
4934
+ task.blockedPreamble &&
4935
+ preparePreamble(request);
4936
+ break a;
4937
+ }
4938
+ } else
4939
+ null !== prevRow &&
4940
+ prevRow.together &&
4941
+ tryToResolveTogetherRow(request, prevRow);
4942
+ } catch (thrownValue$30) {
4700
4943
  (newBoundary.status = 4),
4701
4944
  12 === request.status
4702
4945
  ? ((contentRootSegment.status = 3),
4703
4946
  (newProps = request.fatalError))
4704
4947
  : ((contentRootSegment.status = 4),
4705
- (newProps = thrownValue$29)),
4948
+ (newProps = thrownValue$30)),
4706
4949
  (defaultProps = getThrownInfo(task.componentStack)),
4707
4950
  (initialState = logRecoverableError(
4708
4951
  request,
@@ -4712,19 +4955,20 @@ function renderElement(request, task, keyPath, type, props, ref) {
4712
4955
  (newBoundary.errorDigest = initialState),
4713
4956
  untrackBoundary(request, newBoundary);
4714
4957
  } finally {
4715
- (task.blockedBoundary = propName$34),
4958
+ (task.blockedBoundary = propName$43),
4716
4959
  (task.blockedPreamble = propName),
4717
4960
  (task.hoistableState = parentHoistableState),
4718
4961
  (task.blockedSegment = parentSegment),
4719
4962
  (task.keyPath = type),
4720
- (task.formatContext = ref);
4963
+ (task.formatContext = ref),
4964
+ (task.row = prevRow);
4721
4965
  }
4722
4966
  task = createRenderTask(
4723
4967
  request,
4724
4968
  null,
4725
4969
  fallback,
4726
4970
  -1,
4727
- propName$34,
4971
+ propName$43,
4728
4972
  boundarySegment,
4729
4973
  newBoundary.fallbackPreamble,
4730
4974
  newBoundary.fallbackState,
@@ -4736,6 +4980,7 @@ function renderElement(request, task, keyPath, type, props, ref) {
4736
4980
  ),
4737
4981
  task.context,
4738
4982
  task.treeContext,
4983
+ task.row,
4739
4984
  task.componentStack
4740
4985
  );
4741
4986
  pushComponentStack(task);
@@ -4955,6 +5200,7 @@ function retryNode(request, task) {
4955
5200
  null === node$jscomp$0[4] ? null : node$jscomp$0[4][3];
4956
5201
  var prevKeyPath = task.keyPath,
4957
5202
  prevContext = task.formatContext,
5203
+ prevRow = task.row,
4958
5204
  previousReplaySet = task.replay,
4959
5205
  parentBoundary = task.blockedBoundary,
4960
5206
  parentHoistableState = task.hoistableState,
@@ -4965,12 +5211,14 @@ function retryNode(request, task) {
4965
5211
  2 > task.formatContext.insertionMode
4966
5212
  ? createSuspenseBoundary(
4967
5213
  request,
5214
+ task.row,
4968
5215
  fallbackAbortSet,
4969
5216
  createPreambleState(),
4970
5217
  createPreambleState()
4971
5218
  )
4972
5219
  : createSuspenseBoundary(
4973
5220
  request,
5221
+ task.row,
4974
5222
  fallbackAbortSet,
4975
5223
  null,
4976
5224
  null
@@ -4984,6 +5232,7 @@ function retryNode(request, task) {
4984
5232
  request.resumableState,
4985
5233
  prevContext
4986
5234
  );
5235
+ task.row = null;
4987
5236
  task.replay = {
4988
5237
  nodes: ref,
4989
5238
  slots: name,
@@ -5020,9 +5269,10 @@ function retryNode(request, task) {
5020
5269
  (task.hoistableState = parentHoistableState),
5021
5270
  (task.replay = previousReplaySet),
5022
5271
  (task.keyPath = prevKeyPath),
5023
- (task.formatContext = prevContext);
5272
+ (task.formatContext = prevContext),
5273
+ (task.row = prevRow);
5024
5274
  }
5025
- task = createReplayTask(
5275
+ childNodes = createReplayTask(
5026
5276
  request,
5027
5277
  null,
5028
5278
  {
@@ -5042,10 +5292,11 @@ function retryNode(request, task) {
5042
5292
  ),
5043
5293
  task.context,
5044
5294
  task.treeContext,
5295
+ task.row,
5045
5296
  task.componentStack
5046
5297
  );
5047
- pushComponentStack(task);
5048
- request.pingedTasks.push(task);
5298
+ pushComponentStack(childNodes);
5299
+ request.pingedTasks.push(childNodes);
5049
5300
  }
5050
5301
  }
5051
5302
  childIndex.splice(node, 1);
@@ -5070,22 +5321,17 @@ function retryNode(request, task) {
5070
5321
  renderChildrenArray(request, task, node, childIndex);
5071
5322
  return;
5072
5323
  }
5073
- null === node || "object" !== typeof node
5074
- ? (childNodes = null)
5075
- : ((childNodes =
5076
- (MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL]) ||
5077
- node["@@iterator"]),
5078
- (childNodes = "function" === typeof childNodes ? childNodes : null));
5079
- if (childNodes && (childNodes = childNodes.call(node))) {
5080
- node = childNodes.next();
5081
- if (!node.done) {
5082
- props = [];
5083
- do props.push(node.value), (node = childNodes.next());
5084
- while (!node.done);
5085
- renderChildrenArray(request, task, props, childIndex);
5324
+ if ((childNodes = getIteratorFn(node)))
5325
+ if ((childNodes = childNodes.call(node))) {
5326
+ node = childNodes.next();
5327
+ if (!node.done) {
5328
+ props = [];
5329
+ do props.push(node.value), (node = childNodes.next());
5330
+ while (!node.done);
5331
+ renderChildrenArray(request, task, props, childIndex);
5332
+ }
5333
+ return;
5086
5334
  }
5087
- return;
5088
- }
5089
5335
  if ("function" === typeof node.then)
5090
5336
  return (
5091
5337
  (task.thenableState = null),
@@ -5228,6 +5474,7 @@ function spawnNewSuspendedReplayTask(request, task, thenableState) {
5228
5474
  task.formatContext,
5229
5475
  task.context,
5230
5476
  task.treeContext,
5477
+ task.row,
5231
5478
  task.componentStack
5232
5479
  );
5233
5480
  }
@@ -5257,6 +5504,7 @@ function spawnNewSuspendedRenderTask(request, task, thenableState) {
5257
5504
  task.formatContext,
5258
5505
  task.context,
5259
5506
  task.treeContext,
5507
+ task.row,
5260
5508
  task.componentStack
5261
5509
  );
5262
5510
  }
@@ -5310,15 +5558,15 @@ function renderNode(request, task, node, childIndex) {
5310
5558
  chunkLength = segment.chunks.length;
5311
5559
  try {
5312
5560
  return renderNodeDestructive(request, task, node, childIndex);
5313
- } catch (thrownValue$51) {
5561
+ } catch (thrownValue$59) {
5314
5562
  if (
5315
5563
  (resetHooksState(),
5316
5564
  (segment.children.length = childrenLength),
5317
5565
  (segment.chunks.length = chunkLength),
5318
5566
  (node =
5319
- thrownValue$51 === SuspenseException
5567
+ thrownValue$59 === SuspenseException
5320
5568
  ? getSuspendedThenable()
5321
- : thrownValue$51),
5569
+ : thrownValue$59),
5322
5570
  "object" === typeof node && null !== node)
5323
5571
  ) {
5324
5572
  if ("function" === typeof node.then) {
@@ -5356,9 +5604,10 @@ function renderNode(request, task, node, childIndex) {
5356
5604
  throw node;
5357
5605
  }
5358
5606
  function abortTaskSoft(task) {
5359
- var boundary = task.blockedBoundary;
5360
- task = task.blockedSegment;
5361
- null !== task && ((task.status = 3), finishedTask(this, boundary, task));
5607
+ var boundary = task.blockedBoundary,
5608
+ segment = task.blockedSegment;
5609
+ null !== segment &&
5610
+ ((segment.status = 3), finishedTask(this, boundary, task.row, segment));
5362
5611
  }
5363
5612
  function abortRemainingReplayNodes(
5364
5613
  request$jscomp$0,
@@ -5385,6 +5634,7 @@ function abortRemainingReplayNodes(
5385
5634
  errorDigest = errorDigest$jscomp$0,
5386
5635
  resumedBoundary = createSuspenseBoundary(
5387
5636
  request,
5637
+ null,
5388
5638
  new Set(),
5389
5639
  null,
5390
5640
  null
@@ -5430,32 +5680,40 @@ function abortTask(task, request, error) {
5430
5680
  boundary.pendingTasks--;
5431
5681
  0 === boundary.pendingTasks &&
5432
5682
  0 < boundary.nodes.length &&
5433
- ((task = logRecoverableError(request, error, segment)),
5683
+ ((segment = logRecoverableError(request, error, segment)),
5434
5684
  abortRemainingReplayNodes(
5435
5685
  request,
5436
5686
  null,
5437
5687
  boundary.nodes,
5438
5688
  boundary.slots,
5439
5689
  error,
5440
- task
5690
+ segment
5441
5691
  ));
5442
5692
  request.pendingRootTasks--;
5443
5693
  0 === request.pendingRootTasks && completeShell(request);
5444
5694
  }
5445
5695
  } else
5446
- boundary.pendingTasks--,
5447
- 4 !== boundary.status &&
5448
- ((boundary.status = 4),
5449
- (task = logRecoverableError(request, error, segment)),
5450
- (boundary.status = 4),
5451
- (boundary.errorDigest = task),
5452
- untrackBoundary(request, boundary),
5453
- boundary.parentFlushed &&
5454
- request.clientRenderedBoundaries.push(boundary)),
5696
+ 4 !== boundary.status &&
5697
+ ((boundary.status = 4),
5698
+ (segment = logRecoverableError(request, error, segment)),
5699
+ (boundary.status = 4),
5700
+ (boundary.errorDigest = segment),
5701
+ untrackBoundary(request, boundary),
5702
+ boundary.parentFlushed &&
5703
+ request.clientRenderedBoundaries.push(boundary)),
5704
+ boundary.pendingTasks--,
5705
+ (segment = boundary.row),
5706
+ null !== segment &&
5707
+ 0 === --segment.pendingTasks &&
5708
+ finishSuspenseListRow(request, segment),
5455
5709
  boundary.fallbackAbortableTasks.forEach(function (fallbackTask) {
5456
5710
  return abortTask(fallbackTask, request, error);
5457
5711
  }),
5458
5712
  boundary.fallbackAbortableTasks.clear();
5713
+ task = task.row;
5714
+ null !== task &&
5715
+ 0 === --task.pendingTasks &&
5716
+ finishSuspenseListRow(request, task);
5459
5717
  request.allPendingTasks--;
5460
5718
  0 === request.allPendingTasks && completeAll(request);
5461
5719
  }
@@ -5562,7 +5820,11 @@ function finishedSegment(request, boundary, segment) {
5562
5820
  : (boundary.byteSize += segmentByteSize);
5563
5821
  }
5564
5822
  }
5565
- function finishedTask(request, boundary, segment) {
5823
+ function finishedTask(request, boundary, row, segment) {
5824
+ null !== row &&
5825
+ (0 === --row.pendingTasks
5826
+ ? finishSuspenseListRow(request, row)
5827
+ : row.together && tryToResolveTogetherRow(request, row));
5566
5828
  request.allPendingTasks--;
5567
5829
  if (null === boundary) {
5568
5830
  if (null !== segment && segment.parentFlushed) {
@@ -5586,23 +5848,33 @@ function finishedTask(request, boundary, segment) {
5586
5848
  boundary.parentFlushed &&
5587
5849
  request.completedBoundaries.push(boundary),
5588
5850
  1 === boundary.status &&
5589
- (500 < boundary.byteSize ||
5851
+ ((row = boundary.row),
5852
+ null !== row &&
5853
+ hoistHoistables(row.hoistables, boundary.contentState),
5854
+ 500 < boundary.byteSize ||
5590
5855
  (boundary.fallbackAbortableTasks.forEach(
5591
5856
  abortTaskSoft,
5592
5857
  request
5593
5858
  ),
5594
- boundary.fallbackAbortableTasks.clear()),
5859
+ boundary.fallbackAbortableTasks.clear(),
5860
+ null !== row &&
5861
+ 0 === --row.pendingTasks &&
5862
+ finishSuspenseListRow(request, row)),
5595
5863
  0 === request.pendingRootTasks &&
5596
5864
  null === request.trackedPostpones &&
5597
5865
  null !== boundary.contentPreamble &&
5598
5866
  preparePreamble(request)))
5599
- : null !== segment &&
5600
- segment.parentFlushed &&
5601
- 1 === segment.status &&
5602
- (queueCompletedSegment(boundary, segment),
5603
- 1 === boundary.completedSegments.length &&
5604
- boundary.parentFlushed &&
5605
- request.partialBoundaries.push(boundary)));
5867
+ : (null !== segment &&
5868
+ segment.parentFlushed &&
5869
+ 1 === segment.status &&
5870
+ (queueCompletedSegment(boundary, segment),
5871
+ 1 === boundary.completedSegments.length &&
5872
+ boundary.parentFlushed &&
5873
+ request.partialBoundaries.push(boundary)),
5874
+ (boundary = boundary.row),
5875
+ null !== boundary &&
5876
+ boundary.together &&
5877
+ tryToResolveTogetherRow(request, boundary)));
5606
5878
  0 === request.allPendingTasks && completeAll(request);
5607
5879
  }
5608
5880
  function performWork(request$jscomp$2) {
@@ -5646,7 +5918,12 @@ function performWork(request$jscomp$2) {
5646
5918
  );
5647
5919
  task.replay.pendingTasks--;
5648
5920
  task.abortSet.delete(task);
5649
- finishedTask(request$jscomp$0, task.blockedBoundary, null);
5921
+ finishedTask(
5922
+ request$jscomp$0,
5923
+ task.blockedBoundary,
5924
+ task.row,
5925
+ null
5926
+ );
5650
5927
  } catch (thrownValue) {
5651
5928
  resetHooksState();
5652
5929
  var x =
@@ -5714,7 +5991,12 @@ function performWork(request$jscomp$2) {
5714
5991
  task.abortSet.delete(task),
5715
5992
  (request$jscomp$1.status = 1),
5716
5993
  finishedSegment(request, task.blockedBoundary, request$jscomp$1),
5717
- finishedTask(request, task.blockedBoundary, request$jscomp$1);
5994
+ finishedTask(
5995
+ request,
5996
+ task.blockedBoundary,
5997
+ task.row,
5998
+ request$jscomp$1
5999
+ );
5718
6000
  } catch (thrownValue) {
5719
6001
  resetHooksState();
5720
6002
  request$jscomp$1.children.length = childrenLength;
@@ -5738,26 +6020,36 @@ function performWork(request$jscomp$2) {
5738
6020
  var errorInfo$jscomp$0 = getThrownInfo(task.componentStack);
5739
6021
  task.abortSet.delete(task);
5740
6022
  request$jscomp$1.status = 4;
5741
- var boundary$jscomp$0 = task.blockedBoundary;
6023
+ var boundary$jscomp$0 = task.blockedBoundary,
6024
+ row = task.row;
6025
+ null !== row &&
6026
+ 0 === --row.pendingTasks &&
6027
+ finishSuspenseListRow(request, row);
6028
+ request.allPendingTasks--;
5742
6029
  request$jscomp$0 = logRecoverableError(
5743
6030
  request,
5744
6031
  x$jscomp$0,
5745
6032
  errorInfo$jscomp$0
5746
6033
  );
5747
- null === boundary$jscomp$0
5748
- ? fatalError(request, x$jscomp$0)
5749
- : (boundary$jscomp$0.pendingTasks--,
5750
- 4 !== boundary$jscomp$0.status &&
5751
- ((boundary$jscomp$0.status = 4),
5752
- (boundary$jscomp$0.errorDigest = request$jscomp$0),
5753
- untrackBoundary(request, boundary$jscomp$0),
5754
- boundary$jscomp$0.parentFlushed &&
5755
- request.clientRenderedBoundaries.push(boundary$jscomp$0),
5756
- 0 === request.pendingRootTasks &&
5757
- null === request.trackedPostpones &&
5758
- null !== boundary$jscomp$0.contentPreamble &&
5759
- preparePreamble(request)));
5760
- request.allPendingTasks--;
6034
+ if (null === boundary$jscomp$0) fatalError(request, x$jscomp$0);
6035
+ else if (
6036
+ (boundary$jscomp$0.pendingTasks--,
6037
+ 4 !== boundary$jscomp$0.status)
6038
+ ) {
6039
+ boundary$jscomp$0.status = 4;
6040
+ boundary$jscomp$0.errorDigest = request$jscomp$0;
6041
+ untrackBoundary(request, boundary$jscomp$0);
6042
+ var boundaryRow = boundary$jscomp$0.row;
6043
+ null !== boundaryRow &&
6044
+ 0 === --boundaryRow.pendingTasks &&
6045
+ finishSuspenseListRow(request, boundaryRow);
6046
+ boundary$jscomp$0.parentFlushed &&
6047
+ request.clientRenderedBoundaries.push(boundary$jscomp$0);
6048
+ 0 === request.pendingRootTasks &&
6049
+ null === request.trackedPostpones &&
6050
+ null !== boundary$jscomp$0.contentPreamble &&
6051
+ preparePreamble(request);
6052
+ }
5761
6053
  0 === request.allPendingTasks && completeAll(request);
5762
6054
  }
5763
6055
  } finally {
@@ -5903,20 +6195,24 @@ function flushSegment(request, destination, segment, hoistableState) {
5903
6195
  if (null === boundary)
5904
6196
  return flushSubtree(request, destination, segment, hoistableState);
5905
6197
  boundary.parentFlushed = !0;
5906
- if (4 === boundary.status)
5907
- (boundary = boundary.errorDigest),
5908
- writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary),
5909
- writeChunk(destination, clientRenderedSuspenseBoundaryError1),
5910
- boundary &&
5911
- (writeChunk(destination, clientRenderedSuspenseBoundaryError1A),
5912
- writeChunk(destination, escapeTextForBrowser(boundary)),
5913
- writeChunk(
5914
- destination,
5915
- clientRenderedSuspenseBoundaryErrorAttrInterstitial
5916
- )),
5917
- writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2),
5918
- flushSubtree(request, destination, segment, hoistableState);
5919
- else if (1 !== boundary.status)
6198
+ if (4 === boundary.status) {
6199
+ var row = boundary.row;
6200
+ null !== row &&
6201
+ 0 === --row.pendingTasks &&
6202
+ finishSuspenseListRow(request, row);
6203
+ boundary = boundary.errorDigest;
6204
+ writeChunkAndReturn(destination, startClientRenderedSuspenseBoundary);
6205
+ writeChunk(destination, clientRenderedSuspenseBoundaryError1);
6206
+ boundary &&
6207
+ (writeChunk(destination, clientRenderedSuspenseBoundaryError1A),
6208
+ writeChunk(destination, escapeTextForBrowser(boundary)),
6209
+ writeChunk(
6210
+ destination,
6211
+ clientRenderedSuspenseBoundaryErrorAttrInterstitial
6212
+ ));
6213
+ writeChunkAndReturn(destination, clientRenderedSuspenseBoundaryError2);
6214
+ flushSubtree(request, destination, segment, hoistableState);
6215
+ } else if (1 !== boundary.status)
5920
6216
  0 === boundary.status && (boundary.rootSegmentID = request.nextSegmentId++),
5921
6217
  0 < boundary.completedSegments.length &&
5922
6218
  request.partialBoundaries.push(boundary),
@@ -5925,13 +6221,7 @@ function flushSegment(request, destination, segment, hoistableState) {
5925
6221
  request.renderState,
5926
6222
  boundary.rootSegmentID
5927
6223
  ),
5928
- hoistableState &&
5929
- ((boundary = boundary.fallbackState),
5930
- boundary.styles.forEach(hoistStyleQueueDependency, hoistableState),
5931
- boundary.stylesheets.forEach(
5932
- hoistStylesheetDependency,
5933
- hoistableState
5934
- )),
6224
+ hoistableState && hoistHoistables(hoistableState, boundary.fallbackState),
5935
6225
  flushSubtree(request, destination, segment, hoistableState);
5936
6226
  else if (
5937
6227
  500 < boundary.byteSize &&
@@ -5947,10 +6237,12 @@ function flushSegment(request, destination, segment, hoistableState) {
5947
6237
  flushSubtree(request, destination, segment, hoistableState);
5948
6238
  else {
5949
6239
  flushedByteSize += boundary.byteSize;
5950
- hoistableState &&
5951
- ((segment = boundary.contentState),
5952
- segment.styles.forEach(hoistStyleQueueDependency, hoistableState),
5953
- segment.stylesheets.forEach(hoistStylesheetDependency, hoistableState));
6240
+ hoistableState && hoistHoistables(hoistableState, boundary.contentState);
6241
+ segment = boundary.row;
6242
+ null !== segment &&
6243
+ 500 < boundary.byteSize &&
6244
+ 0 === --segment.pendingTasks &&
6245
+ finishSuspenseListRow(request, segment);
5954
6246
  writeChunkAndReturn(destination, startCompletedSuspenseBoundary);
5955
6247
  segment = boundary.completedSegments;
5956
6248
  if (1 !== segment.length)
@@ -5985,6 +6277,11 @@ function flushCompletedBoundary(request, destination, boundary) {
5985
6277
  completedSegments[i]
5986
6278
  );
5987
6279
  completedSegments.length = 0;
6280
+ completedSegments = boundary.row;
6281
+ null !== completedSegments &&
6282
+ 500 < boundary.byteSize &&
6283
+ 0 === --completedSegments.pendingTasks &&
6284
+ finishSuspenseListRow(request, completedSegments);
5988
6285
  writeHoistablesForBoundary(
5989
6286
  destination,
5990
6287
  boundary.contentState,
@@ -6259,12 +6556,12 @@ function flushCompletedQueues(request, destination) {
6259
6556
  destinationHasCapacity$1 = !0;
6260
6557
  var partialBoundaries = request.partialBoundaries;
6261
6558
  for (i = 0; i < partialBoundaries.length; i++) {
6262
- var boundary$54 = partialBoundaries[i];
6559
+ var boundary$64 = partialBoundaries[i];
6263
6560
  a: {
6264
6561
  clientRenderedBoundaries = request;
6265
6562
  boundary = destination;
6266
- flushedByteSize = boundary$54.byteSize;
6267
- var completedSegments = boundary$54.completedSegments;
6563
+ flushedByteSize = boundary$64.byteSize;
6564
+ var completedSegments = boundary$64.completedSegments;
6268
6565
  for (
6269
6566
  JSCompiler_inline_result = 0;
6270
6567
  JSCompiler_inline_result < completedSegments.length;
@@ -6274,7 +6571,7 @@ function flushCompletedQueues(request, destination) {
6274
6571
  !flushPartiallyCompletedSegment(
6275
6572
  clientRenderedBoundaries,
6276
6573
  boundary,
6277
- boundary$54,
6574
+ boundary$64,
6278
6575
  completedSegments[JSCompiler_inline_result]
6279
6576
  )
6280
6577
  ) {
@@ -6284,9 +6581,20 @@ function flushCompletedQueues(request, destination) {
6284
6581
  break a;
6285
6582
  }
6286
6583
  completedSegments.splice(0, JSCompiler_inline_result);
6584
+ var row = boundary$64.row;
6585
+ null !== row &&
6586
+ row.together &&
6587
+ 1 === boundary$64.pendingTasks &&
6588
+ (1 === row.pendingTasks
6589
+ ? unblockSuspenseListRow(
6590
+ clientRenderedBoundaries,
6591
+ row,
6592
+ row.hoistables
6593
+ )
6594
+ : row.pendingTasks--);
6287
6595
  JSCompiler_inline_result$jscomp$0 = writeHoistablesForBoundary(
6288
6596
  boundary,
6289
- boundary$54.contentState,
6597
+ boundary$64.contentState,
6290
6598
  clientRenderedBoundaries.renderState
6291
6599
  );
6292
6600
  }
@@ -6387,17 +6695,17 @@ function abort(request, reason) {
6387
6695
  }
6388
6696
  null !== request.destination &&
6389
6697
  flushCompletedQueues(request, request.destination);
6390
- } catch (error$56) {
6391
- logRecoverableError(request, error$56, {}), fatalError(request, error$56);
6698
+ } catch (error$66) {
6699
+ logRecoverableError(request, error$66, {}), fatalError(request, error$66);
6392
6700
  }
6393
6701
  }
6394
6702
  function ensureCorrectIsomorphicReactVersion() {
6395
6703
  var isomorphicReactPackageVersion = React.version;
6396
- if ("19.2.0-canary-462d08f9-20250517" !== isomorphicReactPackageVersion)
6704
+ if ("19.2.0-canary-23884812-20250520" !== isomorphicReactPackageVersion)
6397
6705
  throw Error(
6398
6706
  'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' +
6399
6707
  (isomorphicReactPackageVersion +
6400
- "\n - react-dom: 19.2.0-canary-462d08f9-20250517\nLearn more: https://react.dev/warnings/version-mismatch")
6708
+ "\n - react-dom: 19.2.0-canary-23884812-20250520\nLearn more: https://react.dev/warnings/version-mismatch")
6401
6709
  );
6402
6710
  }
6403
6711
  ensureCorrectIsomorphicReactVersion();
@@ -6546,4 +6854,4 @@ exports.renderToPipeableStream = function (children, options) {
6546
6854
  }
6547
6855
  };
6548
6856
  };
6549
- exports.version = "19.2.0-canary-462d08f9-20250517";
6857
+ exports.version = "19.2.0-canary-23884812-20250520";