@@ -5112,18 +5112,27 @@ __DEV__ &&
5112
5112
function validateFragmentProps(element, fiber, returnFiber) {
5113
5113
for (var keys = Object.keys(element.props), i = 0; i < keys.length; i++) {
5114
5114
var key = keys[i];
5115
- if ("children" !== key && "key" !== key) {
5115
+ if (
5116
+ "children" !== key &&
5117
+ "key" !== key &&
5118
+ (enableFragmentRefs ? "ref" !== key : 1)
5119
+ ) {
5116
5120
null === fiber &&
5117
5121
((fiber = createFiberFromElement(element, returnFiber.mode, 0)),
5118
5122
(fiber._debugInfo = currentDebugInfo),
5119
5123
(fiber.return = returnFiber));
5120
5124
runWithFiberInDEV(
5121
5125
fiber,
5122
5126
function (erroredKey) {
5123
- console.error(
5124
- "Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",
5125
- erroredKey
5126
- );
5127
+ enableFragmentRefs
5128
+ ? console.error(
5129
+ "Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key`, `ref`, and `children` props.",
5130
+ erroredKey
5131
+ )
5132
+ : console.error(
5133
+ "Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",
5134
+ erroredKey
5135
+ );
5127
5136
},
5128
5137
key
5129
5138
);
@@ -5276,6 +5285,7 @@ __DEV__ &&
5276
5285
lanes,
5277
5286
element.key
5278
5287
)),
5288
+ enableFragmentRefs && coerceRef(current, element),
5279
5289
validateFragmentProps(element, current, returnFiber),
5280
5290
current
5281
5291
);
@@ -5868,6 +5878,7 @@ __DEV__ &&
5868
5878
null !== newChild &&
5869
5879
newChild.type === REACT_FRAGMENT_TYPE &&
5870
5880
null === newChild.key &&
5881
+ (enableFragmentRefs ? void 0 === newChild.props.ref : 1) &&
5871
5882
(validateFragmentProps(newChild, null, returnFiber),
5872
5883
(newChild = newChild.props.children));
5873
5884
if ("object" === typeof newChild && null !== newChild) {
@@ -5888,6 +5899,7 @@ __DEV__ &&
5888
5899
currentFirstChild,
5889
5900
newChild.props.children
5890
5901
);
5902
+ enableFragmentRefs && coerceRef(lanes, newChild);
5891
5903
lanes.return = returnFiber;
5892
5904
lanes._debugOwner = newChild._owner;
5893
5905
lanes._debugInfo = currentDebugInfo;
@@ -5930,6 +5942,7 @@ __DEV__ &&
5930
5942
lanes,
5931
5943
newChild.key
5932
5944
)),
5945
+ enableFragmentRefs && coerceRef(lanes, newChild),
5933
5946
(lanes.return = returnFiber),
5934
5947
(lanes._debugOwner = returnFiber),
5935
5948
(lanes._debugTask = returnFiber._debugTask),
@@ -8869,10 +8882,12 @@ __DEV__ &&
8869
8882
);
8870
8883
case 7:
8871
8884
return (
8885
+ (returnFiber = workInProgress.pendingProps),
8886
+ enableFragmentRefs && markRef(current, workInProgress),
8872
8887
reconcileChildren(
8873
8888
current,
8874
8889
workInProgress,
8875
- workInProgress.pendingProps ,
8890
+ returnFiber ,
8876
8891
renderLanes
8877
8892
),
8878
8893
workInProgress.child
@@ -10309,6 +10324,15 @@ __DEV__ &&
10309
10324
instanceToUse = instanceToUse.ref;
10310
10325
break;
10311
10326
}
10327
+ instanceToUse = finishedWork.stateNode;
10328
+ break;
10329
+ case 7:
10330
+ if (enableFragmentRefs) {
10331
+ null === finishedWork.stateNode &&
10332
+ (finishedWork.stateNode = null);
10333
+ instanceToUse = finishedWork.stateNode;
10334
+ break;
10335
+ }
10312
10336
default:
10313
10337
instanceToUse = finishedWork.stateNode;
10314
10338
}
@@ -10538,34 +10562,54 @@ __DEV__ &&
10538
10562
(node = node.sibling);
10539
10563
}
10540
10564
function commitPlacement(finishedWork) {
10541
- a: {
10542
- for (var parent = finishedWork.return; null !== parent; ) {
10543
- if (isHostParent(parent)) {
10544
- var parentFiber = parent;
10545
- break a;
10546
- }
10547
- parent = parent.return;
10565
+ for (
10566
+ var hostParentFiber,
10567
+ parentFragmentInstances = null,
10568
+ parentFiber = finishedWork.return;
10569
+ null !== parentFiber;
10570
+
10571
+ ) {
10572
+ if (
10573
+ enableFragmentRefs &&
10574
+ parentFiber &&
10575
+ 7 === parentFiber.tag &&
10576
+ null !== parentFiber.stateNode
10577
+ ) {
10578
+ var fragmentInstance = parentFiber.stateNode;
10579
+ null === parentFragmentInstances
10580
+ ? (parentFragmentInstances = [fragmentInstance])
10581
+ : parentFragmentInstances.push(fragmentInstance);
10582
+ }
10583
+ if (isHostParent(parentFiber)) {
10584
+ hostParentFiber = parentFiber;
10585
+ break;
10548
10586
}
10587
+ parentFiber = parentFiber.return;
10588
+ }
10589
+ if (null == hostParentFiber)
10549
10590
throw Error(
10550
10591
"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue."
10551
10592
);
10552
- }
10553
- switch (parentFiber.tag) {
10593
+ switch (hostParentFiber.tag) {
10554
10594
case 27:
10555
10595
case 5:
10556
- parent = parentFiber.stateNode;
10557
- parentFiber.flags & 32 && (parentFiber.flags &= -33);
10558
- parentFiber = getHostSibling(finishedWork);
10559
- insertOrAppendPlacementNode(finishedWork, parentFiber, parent);
10596
+ parentFragmentInstances = hostParentFiber.stateNode;
10597
+ hostParentFiber.flags & 32 && (hostParentFiber.flags &= -33);
10598
+ hostParentFiber = getHostSibling(finishedWork);
10599
+ insertOrAppendPlacementNode(
10600
+ finishedWork,
10601
+ hostParentFiber,
10602
+ parentFragmentInstances
10603
+ );
10560
10604
break;
10561
10605
case 3:
10562
10606
case 4:
10563
- parent = parentFiber .stateNode.containerInfo;
10564
- parentFiber = getHostSibling(finishedWork);
10607
+ hostParentFiber = hostParentFiber .stateNode.containerInfo;
10608
+ parentFragmentInstances = getHostSibling(finishedWork);
10565
10609
insertOrAppendPlacementNodeIntoContainer(
10566
10610
finishedWork,
10567
- parentFiber ,
10568
- parent
10611
+ parentFragmentInstances ,
10612
+ hostParentFiber
10569
10613
);
10570
10614
break;
10571
10615
default:
@@ -11084,11 +11128,14 @@ __DEV__ &&
11084
11128
: safelyDetachRef(finishedWork, finishedWork.return));
11085
11129
break;
11086
11130
case 30:
11087
- if (enableViewTransition) {
11088
- recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
11089
- flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);
11090
- break;
11091
- }
11131
+ enableViewTransition &&
11132
+ (recursivelyTraverseLayoutEffects(finishedRoot, finishedWork),
11133
+ flags & 512 && safelyAttachRef(finishedWork, finishedWork.return));
11134
+ break;
11135
+ case 7:
11136
+ enableFragmentRefs &&
11137
+ flags & 512 &&
11138
+ safelyAttachRef(finishedWork, finishedWork.return);
11092
11139
default:
11093
11140
recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
11094
11141
}
@@ -11485,6 +11532,10 @@ __DEV__ &&
11485
11532
);
11486
11533
offscreenSubtreeWasHidden = _prevHostParent;
11487
11534
break;
11535
+ case 7:
11536
+ enableFragmentRefs &&
11537
+ (offscreenSubtreeWasHidden ||
11538
+ safelyDetachRef(deletedFiber, nearestMountedAncestor));
11488
11539
default:
11489
11540
recursivelyTraverseDeletionEffects(
11490
11541
finishedRoot,
@@ -11885,25 +11936,24 @@ __DEV__ &&
11885
11936
attachSuspenseRetryListeners(finishedWork, flags)));
11886
11937
break;
11887
11938
case 30:
11888
- if ( enableViewTransition) {
11889
- flags & 512 &&
11939
+ enableViewTransition &&
11940
+ ( flags & 512 &&
11890
11941
(offscreenSubtreeWasHidden ||
11891
11942
null === current ||
11892
- safelyDetachRef(current, current.return));
11943
+ safelyDetachRef(current, current.return)),
11893
11944
enableViewTransition
11894
11945
? ((flags = viewTransitionMutationContext),
11895
11946
(viewTransitionMutationContext = !1))
11896
- : (flags = !1);
11897
- recursivelyTraverseMutationEffects(root, finishedWork, lanes);
11898
- commitReconciliationEffects(finishedWork);
11947
+ : (flags = !1),
11948
+ recursivelyTraverseMutationEffects(root, finishedWork, lanes),
11949
+ commitReconciliationEffects(finishedWork),
11899
11950
enableViewTransition &&
11900
11951
(lanes & 335544064) === lanes &&
11901
11952
null !== current &&
11902
11953
viewTransitionMutationContext &&
11903
- (finishedWork.flags |= 4);
11904
- enableViewTransition && (viewTransitionMutationContext = flags);
11905
- break;
11906
- }
11954
+ (finishedWork.flags |= 4),
11955
+ enableViewTransition && (viewTransitionMutationContext = flags));
11956
+ break;
11907
11957
case 21:
11908
11958
recursivelyTraverseMutationEffects(root, finishedWork, lanes);
11909
11959
commitReconciliationEffects(finishedWork);
@@ -11992,6 +12042,11 @@ __DEV__ &&
11992
12042
case 30:
11993
12043
enableViewTransition &&
11994
12044
safelyDetachRef(finishedWork, finishedWork.return);
12045
+ recursivelyTraverseDisappearLayoutEffects(finishedWork);
12046
+ break;
12047
+ case 7:
12048
+ enableFragmentRefs &&
12049
+ safelyDetachRef(finishedWork, finishedWork.return);
11995
12050
default:
11996
12051
recursivelyTraverseDisappearLayoutEffects(finishedWork);
11997
12052
}
@@ -12129,15 +12184,17 @@ __DEV__ &&
12129
12184
safelyAttachRef(finishedWork, finishedWork.return);
12130
12185
break;
12131
12186
case 30:
12132
- if ( enableViewTransition) {
12133
- recursivelyTraverseReappearLayoutEffects(
12187
+ enableViewTransition &&
12188
+ ( recursivelyTraverseReappearLayoutEffects(
12134
12189
finishedRoot,
12135
12190
finishedWork,
12136
12191
includeWorkInProgressEffects
12137
- );
12192
+ ),
12193
+ safelyAttachRef(finishedWork, finishedWork.return));
12194
+ break;
12195
+ case 7:
12196
+ enableFragmentRefs &&
12138
12197
safelyAttachRef(finishedWork, finishedWork.return);
12139
- break;
12140
- }
12141
12198
default:
12142
12199
recursivelyTraverseReappearLayoutEffects(
12143
12200
finishedRoot,
@@ -16190,6 +16247,7 @@ __DEV__ &&
16190
16247
enableViewTransition = dynamicFeatureFlags.enableViewTransition,
16191
16248
enableComponentPerformanceTrack =
16192
16249
dynamicFeatureFlags.enableComponentPerformanceTrack,
16250
+ enableFragmentRefs = dynamicFeatureFlags.enableFragmentRefs,
16193
16251
enableSchedulingProfiler = dynamicFeatureFlags.enableSchedulingProfiler,
16194
16252
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
16195
16253
REACT_ELEMENT_TYPE = renameElementSymbol
@@ -18486,10 +18544,10 @@ __DEV__ &&
18486
18544
(function () {
18487
18545
var internals = {
18488
18546
bundleType: 1,
18489
- version: "19.1.0-www-classic-ca8f91f6-20250311 ",
18547
+ version: "19.1.0-www-classic-6aa8254b-20250312 ",
18490
18548
rendererPackageName: "react-art",
18491
18549
currentDispatcherRef: ReactSharedInternals,
18492
- reconcilerVersion: "19.1.0-www-classic-ca8f91f6-20250311 "
18550
+ reconcilerVersion: "19.1.0-www-classic-6aa8254b-20250312 "
18493
18551
};
18494
18552
internals.overrideHookState = overrideHookState;
18495
18553
internals.overrideHookStateDeletePath = overrideHookStateDeletePath;
@@ -18523,7 +18581,7 @@ __DEV__ &&
18523
18581
exports.Shape = Shape;
18524
18582
exports.Surface = Surface;
18525
18583
exports.Text = Text;
18526
- exports.version = "19.1.0-www-classic-ca8f91f6-20250311 ";
18584
+ exports.version = "19.1.0-www-classic-6aa8254b-20250312 ";
18527
18585
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
18528
18586
"function" ===
18529
18587
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&
0 commit comments