Land enableCustomElementPropertySupport for React 19 (#27450)
We've rolled out this flag internally on WWW. This PR removed flag `enableCustomElementPropertySupport` Test plan: -- `yarn test` Co-authored-by: Ricky Hanlon <rickhanlonii@gmail.com>
Andrey Lunyov committed
Mar 29, 2024 at 13:06 UTC
eb510a33048fabd95d272b1c0b65f941e2909240
18 files changed
+63
-163
packages/react-dom-bindings/src/client/DOMPropertyOperations.js
+6
-16
@@ -8,10 +8,7 @@
8
*/
9
10
import isAttributeNameSafe from '../shared/isAttributeNameSafe';
11
-import {
12
- enableTrustedTypesIntegration,
13
- enableCustomElementPropertySupport,
14
-} from 'shared/ReactFeatureFlags';
11
+import {enableTrustedTypesIntegration} from 'shared/ReactFeatureFlags';
12
import {checkAttributeStringCoercion} from 'shared/CheckStringCoercion';
13
import {getFiberCurrentPropsFromNode} from './ReactDOMComponentTree';
14
@@ -73,25 +70,18 @@ export function getValueForAttributeOnCustomComponent(
70
// it would be expected that they end up not having an attribute.
71
return expected;
72
case 'function':
76
- if (enableCustomElementPropertySupport) {
77
- return expected;
78
- }
79
- break;
73
+ return expected;
74
case 'boolean':
81
- if (enableCustomElementPropertySupport) {
82
- if (expected === false) {
83
- return expected;
84
- }
75
+ if (expected === false) {
76
+ return expected;
77
}
78
}
79
return expected === undefined ? undefined : null;
80
}
81
const value = node.getAttribute(name);
82
91
- if (enableCustomElementPropertySupport) {
92
- if (value === '' && expected === true) {
93
- return true;
94
- }
83
+ if (value === '' && expected === true) {
84
+ return true;
85
}
86
87
if (__DEV__) {
packages/react-dom-bindings/src/client/ReactDOMComponent.js
+31
-44
@@ -67,7 +67,6 @@ import sanitizeURL from '../shared/sanitizeURL';
67
68
import {
69
enableBigIntSupport,
70
- enableCustomElementPropertySupport,
70
disableIEWorkarounds,
71
enableTrustedTypesIntegration,
72
enableFilterEmptyStringAttributesDOM,
@@ -870,9 +869,7 @@ function setProp(
869
}
870
case 'innerText':
871
case 'textContent':
873
- if (enableCustomElementPropertySupport) {
874
- break;
875
- }
872
+ break;
873
// Fall through
874
default: {
875
if (
@@ -983,9 +980,7 @@ function setPropOnCustomElement(
980
}
981
case 'innerText': // Properties
982
case 'textContent':
986
- if (enableCustomElementPropertySupport) {
987
- break;
988
- }
983
+ break;
984
// Fall through
985
default: {
986
if (registrationNameDependencies.hasOwnProperty(key)) {
@@ -993,15 +988,7 @@ function setPropOnCustomElement(
988
warnForInvalidEventListener(key, value);
989
}
990
} else {
996
- if (enableCustomElementPropertySupport) {
997
- setValueForPropertyOnCustomComponent(domElement, key, value);
998
- } else {
999
- if (typeof value === 'boolean') {
1000
- // Special case before the new flag is on
1001
- value = '' + (value: any);
1002
- }
1003
- setValueForAttribute(domElement, key, value);
1004
- }
991
+ setValueForPropertyOnCustomComponent(domElement, key, value);
992
}
993
}
994
}
@@ -2293,35 +2280,30 @@ function diffHydratedCustomComponent(
2280
case 'isContentEditable':
2281
case 'outerText':
2282
case 'outerHTML':
2296
- if (enableCustomElementPropertySupport) {
2297
- extraAttributes.delete(propKey.toLowerCase());
2298
- if (__DEV__) {
2299
- console.error(
2300
- 'Assignment to read-only property will result in a no-op: `%s`',
2301
- propKey,
2302
- );
2303
- }
2304
- continue;
2305
- }
2306
- // Fall through
2307
- case 'className':
2308
- if (enableCustomElementPropertySupport) {
2309
- // className is a special cased property on the server to render as an attribute.
2310
- extraAttributes.delete('class');
2311
- const serverValue = getValueForAttributeOnCustomComponent(
2312
- domElement,
2313
- 'class',
2314
- value,
2315
- );
2316
- warnForPropDifference(
2317
- 'className',
2318
- serverValue,
2319
- value,
2320
- serverDifferences,
2283
+ extraAttributes.delete(propKey.toLowerCase());
2284
+ if (__DEV__) {
2285
+ console.error(
2286
+ 'Assignment to read-only property will result in a no-op: `%s`',
2287
+ propKey,
2288
);
2322
- continue;
2289
}
2290
+ continue;
2291
// Fall through
2292
+ case 'className':
2293
+ // className is a special cased property on the server to render as an attribute.
2294
+ extraAttributes.delete('class');
2295
+ const serverValue = getValueForAttributeOnCustomComponent(
2296
+ domElement,
2297
+ 'class',
2298
+ value,
2299
+ );
2300
+ warnForPropDifference(
2301
+ 'className',
2302
+ serverValue,
2303
+ value,
2304
+ serverDifferences,
2305
+ );
2306
+ continue;
2307
default: {
2308
// This is a DEV-only path
2309
const hostContextDev: HostContextDev = (hostContext: any);
@@ -2335,12 +2317,17 @@ function diffHydratedCustomComponent(
2317
} else {
2318
extraAttributes.delete(propKey);
2319
}
2338
- const serverValue = getValueForAttributeOnCustomComponent(
2320
+ const valueOnCustomComponent = getValueForAttributeOnCustomComponent(
2321
domElement,
2322
propKey,
2323
value,
2324
);
2343
- warnForPropDifference(propKey, serverValue, value, serverDifferences);
2325
+ warnForPropDifference(
2326
+ propKey,
2327
+ valueOnCustomComponent,
2328
+ value,
2329
+ serverDifferences,
2330
+ );
2331
}
2332
}
2333
}
packages/react-dom-bindings/src/events/plugins/ChangeEventPlugin.js
+1
-5
@@ -26,10 +26,7 @@ import {updateValueIfChanged} from '../../client/inputValueTracking';
26
import {setDefaultValue} from '../../client/ReactDOMInput';
27
import {enqueueStateRestore} from '../ReactDOMControlledComponent';
28
29
-import {
30
- disableInputAttributeSyncing,
31
- enableCustomElementPropertySupport,
32
-} from 'shared/ReactFeatureFlags';
29
+import {disableInputAttributeSyncing} from 'shared/ReactFeatureFlags';
30
import {batchedUpdates} from '../ReactDOMUpdateBatching';
31
import {
32
processDispatchQueue,
@@ -311,7 +308,6 @@ function extractEvents(
308
} else if (shouldUseClickEvent(targetNode)) {
309
getTargetInstFunc = getTargetInstForClickEvent;
310
} else if (
314
- enableCustomElementPropertySupport &&
311
targetInst &&
312
isCustomElement(targetInst.elementType, targetInst.memoizedProps)
313
) {
packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js
+9
-14
@@ -30,7 +30,6 @@ import {Children} from 'react';
30
import {
31
enableBigIntSupport,
32
enableFilterEmptyStringAttributesDOM,
33
- enableCustomElementPropertySupport,
33
enableFizzExternalRuntime,
34
enableNewBooleanProps,
35
} from 'shared/ReactFeatureFlags';
@@ -3342,11 +3341,9 @@ function pushStartCustomElement(
3341
// Ignored. These are built-in to React on the client.
3342
break;
3343
case 'className':
3345
- if (enableCustomElementPropertySupport) {
3346
- // className gets rendered as class on the client, so it should be
3347
- // rendered as class on the server.
3348
- attributeName = 'class';
3349
- }
3344
+ // className gets rendered as class on the client, so it should be
3345
+ // rendered as class on the server.
3346
+ attributeName = 'class';
3347
// intentional fallthrough
3348
default:
3349
if (
@@ -3354,14 +3351,12 @@ function pushStartCustomElement(
3351
typeof propValue !== 'function' &&
3352
typeof propValue !== 'symbol'
3353
) {
3357
- if (enableCustomElementPropertySupport) {
3358
- if (propValue === false) {
3359
- continue;
3360
- } else if (propValue === true) {
3361
- propValue = '';
3362
- } else if (typeof propValue === 'object') {
3363
- continue;
3364
- }
3354
+ if (propValue === false) {
3355
+ continue;
3356
+ } else if (propValue === true) {
3357
+ propValue = '';
3358
+ } else if (typeof propValue === 'object') {
3359
+ continue;
3360
}
3361
target.push(
3362
attributeSeparator,
packages/react-dom-bindings/src/shared/ReactDOMUnknownPropertyHook.js
+2
-7
@@ -9,10 +9,7 @@ import {ATTRIBUTE_NAME_CHAR} from './isAttributeNameSafe';
9
import isCustomElement from './isCustomElement';
10
import possibleStandardNames from './possibleStandardNames';
11
import hasOwnProperty from 'shared/hasOwnProperty';
12
-import {
13
- enableCustomElementPropertySupport,
14
- enableNewBooleanProps,
15
-} from 'shared/ReactFeatureFlags';
12
+import {enableNewBooleanProps} from 'shared/ReactFeatureFlags';
13
14
const warnedProperties = {};
15
const EVENT_NAME_REGEX = /^on./;
@@ -189,9 +186,7 @@ function validateProperty(tagName, name, value, eventRegistry) {
186
}
187
case 'innerText': // Properties
188
case 'textContent':
192
- if (enableCustomElementPropertySupport) {
193
- return true;
194
- }
189
+ return true;
190
}
191
192
switch (typeof value) {
packages/react-dom/src/__tests__/DOMPropertyOperations-test.js
+3
-28
@@ -10,10 +10,7 @@
10
'use strict';
11
12
// Set by `yarn test-fire`.
13
-const {
14
- enableCustomElementPropertySupport,
15
- disableInputAttributeSyncing,
16
-} = require('shared/ReactFeatureFlags');
13
+const {disableInputAttributeSyncing} = require('shared/ReactFeatureFlags');
14
15
describe('DOMPropertyOperations', () => {
16
let React;
@@ -234,7 +231,6 @@ describe('DOMPropertyOperations', () => {
231
expect(container.firstChild.hasAttribute('value')).toBe(false);
232
});
233
237
- // @gate enableCustomElementPropertySupport
234
it('custom element custom events lowercase', async () => {
235
const oncustomevent = jest.fn();
236
function Test() {
@@ -251,7 +247,6 @@ describe('DOMPropertyOperations', () => {
247
expect(oncustomevent).toHaveBeenCalledTimes(1);
248
});
249
254
- // @gate enableCustomElementPropertySupport
250
it('custom element custom events uppercase', async () => {
251
const oncustomevent = jest.fn();
252
function Test() {
@@ -268,7 +263,6 @@ describe('DOMPropertyOperations', () => {
263
expect(oncustomevent).toHaveBeenCalledTimes(1);
264
});
265
271
- // @gate enableCustomElementPropertySupport
266
it('custom element custom event with dash in name', async () => {
267
const oncustomevent = jest.fn();
268
function Test() {
@@ -285,7 +279,6 @@ describe('DOMPropertyOperations', () => {
279
expect(oncustomevent).toHaveBeenCalledTimes(1);
280
});
281
288
- // @gate enableCustomElementPropertySupport
282
it('custom element remove event handler', async () => {
283
const oncustomevent = jest.fn();
284
function Test(props) {
@@ -343,12 +336,8 @@ describe('DOMPropertyOperations', () => {
336
expect(customElement.getAttribute('onstring')).toBe('hello');
337
expect(customElement.getAttribute('onobj')).toBe('[object Object]');
338
expect(customElement.getAttribute('onarray')).toBe('one,two');
346
- expect(customElement.getAttribute('ontrue')).toBe(
347
- enableCustomElementPropertySupport ? '' : 'true',
348
- );
349
- expect(customElement.getAttribute('onfalse')).toBe(
350
- enableCustomElementPropertySupport ? null : 'false',
351
- );
339
+ expect(customElement.getAttribute('ontrue')).toBe('');
340
+ expect(customElement.getAttribute('onfalse')).toBe(null);
341
342
// Dispatch the corresponding event names to make sure that nothing crashes.
343
customElement.dispatchEvent(new Event('string'));
@@ -385,7 +374,6 @@ describe('DOMPropertyOperations', () => {
374
expect(syntheticClickEvent.nativeEvent).toBe(nativeClickEvent);
375
});
376
388
- // @gate enableCustomElementPropertySupport
377
it('custom elements should have working onChange event listeners', async () => {
378
let reactChangeEvent = null;
379
const eventHandler = jest.fn(event => (reactChangeEvent = event));
@@ -450,7 +438,6 @@ describe('DOMPropertyOperations', () => {
438
expect(eventHandler).toHaveBeenCalledTimes(expectedHandlerCallCount);
439
});
440
453
- // @gate enableCustomElementPropertySupport
441
it('custom elements should have separate onInput and onChange handling', async () => {
442
const container = document.createElement('div');
443
document.body.appendChild(container);
@@ -476,7 +463,6 @@ describe('DOMPropertyOperations', () => {
463
expect(changeEventHandler).toHaveBeenCalledTimes(1);
464
});
465
479
- // @gate enableCustomElementPropertySupport
466
it('custom elements should be able to remove and re-add custom event listeners', async () => {
467
const container = document.createElement('div');
468
document.body.appendChild(container);
@@ -758,7 +744,6 @@ describe('DOMPropertyOperations', () => {
744
expect(customOnClickHandler).toHaveBeenCalledTimes(0);
745
});
746
761
- // @gate enableCustomElementPropertySupport
747
it('onChange/onInput/onClick on div with various types of children', async () => {
748
const container = document.createElement('div');
749
document.body.appendChild(container);
@@ -951,7 +936,6 @@ describe('DOMPropertyOperations', () => {
936
expect(onClickHandler).toBeCalledTimes(1);
937
});
938
954
- // @gate enableCustomElementPropertySupport
939
it('custom element onChange/onInput/onClick with event target custom element child', async () => {
940
const container = document.createElement('div');
941
document.body.appendChild(container);
@@ -987,7 +971,6 @@ describe('DOMPropertyOperations', () => {
971
expect(onClickHandler).toBeCalledTimes(1);
972
});
973
990
- // @gate enableCustomElementPropertySupport
974
it('custom elements should allow custom events with capture event listeners', async () => {
975
const oncustomeventCapture = jest.fn();
976
const oncustomevent = jest.fn();
@@ -1031,7 +1014,6 @@ describe('DOMPropertyOperations', () => {
1014
expect(customElement.hasChildNodes()).toBe(false);
1015
});
1016
1034
- // @gate enableCustomElementPropertySupport
1017
it('innerText should not work on custom elements', async () => {
1018
const container = document.createElement('div');
1019
const root = ReactDOMClient.createRoot(container);
@@ -1051,7 +1033,6 @@ describe('DOMPropertyOperations', () => {
1033
expect(customElement.hasChildNodes()).toBe(false);
1034
});
1035
1054
- // @gate enableCustomElementPropertySupport
1036
it('textContent should not work on custom elements', async () => {
1037
const container = document.createElement('div');
1038
const root = ReactDOMClient.createRoot(container);
@@ -1071,7 +1052,6 @@ describe('DOMPropertyOperations', () => {
1052
expect(customElement.hasChildNodes()).toBe(false);
1053
});
1054
1074
- // @gate enableCustomElementPropertySupport
1055
it('values should not be converted to booleans when assigning into custom elements', async () => {
1056
const container = document.createElement('div');
1057
document.body.appendChild(container);
@@ -1123,7 +1103,6 @@ describe('DOMPropertyOperations', () => {
1103
expect(customElement.foo).toBe(null);
1104
});
1105
1126
- // @gate enableCustomElementPropertySupport
1106
it('boolean props should not be stringified in attributes', async () => {
1107
const container = document.createElement('div');
1108
document.body.appendChild(container);
@@ -1143,7 +1122,6 @@ describe('DOMPropertyOperations', () => {
1122
expect(customElement.getAttribute('foo')).toBe(null);
1123
});
1124
1146
- // @gate enableCustomElementPropertySupport
1125
it('custom element custom event handlers assign multiple types', async () => {
1126
const container = document.createElement('div');
1127
document.body.appendChild(container);
@@ -1197,7 +1175,6 @@ describe('DOMPropertyOperations', () => {
1175
expect(customelement.getAttribute('oncustomevent')).toBe(null);
1176
});
1177
1200
- // @gate enableCustomElementPropertySupport
1178
it('custom element custom event handlers assign multiple types with setter', async () => {
1179
const container = document.createElement('div');
1180
document.body.appendChild(container);
@@ -1257,7 +1234,6 @@ describe('DOMPropertyOperations', () => {
1234
expect(customelement.getAttribute('oncustomevent')).toBe(null);
1235
});
1236
1260
- // @gate enableCustomElementPropertySupport
1237
it('assigning to a custom element property should not remove attributes', async () => {
1238
const container = document.createElement('div');
1239
document.body.appendChild(container);
@@ -1284,7 +1260,6 @@ describe('DOMPropertyOperations', () => {
1260
expect(customElement.getAttribute('foo')).toBe('one');
1261
});
1262
1287
- // @gate enableCustomElementPropertySupport
1263
it('custom element properties should accept functions', async () => {
1264
const container = document.createElement('div');
1265
document.body.appendChild(container);
packages/react-dom/src/__tests__/ReactDOMComponent-test.js
+2
-6
@@ -3549,15 +3549,11 @@ describe('ReactDOMComponent', () => {
3549
root.render(<some-custom-element foo={true} />);
3550
});
3551
const node = container.firstChild;
3552
- expect(node.getAttribute('foo')).toBe(
3553
- ReactFeatureFlags.enableCustomElementPropertySupport ? '' : 'true',
3554
- );
3552
+ expect(node.getAttribute('foo')).toBe('');
3553
await act(() => {
3554
root.render(<some-custom-element foo={false} />);
3555
});
3558
- expect(node.getAttribute('foo')).toBe(
3559
- ReactFeatureFlags.enableCustomElementPropertySupport ? null : 'false',
3560
- );
3556
+ expect(node.getAttribute('foo')).toBe(null);
3557
await act(() => {
3558
root.render(<some-custom-element />);
3559
});
packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js
+1
-1
@@ -3603,7 +3603,7 @@ describe('ReactDOMFizzServer', () => {
3603
);
3604
});
3605
3606
- // bugfix: https://github.com/facebook/react/issues/27286 affecting enableCustomElementPropertySupport flag
3606
+ // bugfix: https://github.com/facebook/react/issues/27286
3607
it('can render custom elements with children on ther server', async () => {
3608
await act(() => {
3609
renderToPipeableStream(
packages/react-dom/src/__tests__/ReactDOMServerIntegrationAttributes-test.js
+4
-17
@@ -699,13 +699,8 @@ describe('ReactDOMServerIntegration', () => {
699
700
itRenders('className for custom elements', async render => {
701
const e = await render(<custom-element className="test" />, 0);
702
- if (ReactFeatureFlags.enableCustomElementPropertySupport) {
703
- expect(e.getAttribute('className')).toBe(null);
704
- expect(e.getAttribute('class')).toBe('test');
705
- } else {
706
- expect(e.getAttribute('className')).toBe('test');
707
- expect(e.getAttribute('class')).toBe(null);
708
- }
702
+ expect(e.getAttribute('className')).toBe(null);
703
+ expect(e.getAttribute('class')).toBe('test');
704
});
705
706
itRenders('htmlFor property on is elements', async render => {
@@ -738,20 +733,12 @@ describe('ReactDOMServerIntegration', () => {
733
734
itRenders('unknown boolean `true` attributes as strings', async render => {
735
const e = await render(<custom-element foo={true} />);
741
- if (ReactFeatureFlags.enableCustomElementPropertySupport) {
742
- expect(e.getAttribute('foo')).toBe('');
743
- } else {
744
- expect(e.getAttribute('foo')).toBe('true');
745
- }
736
+ expect(e.getAttribute('foo')).toBe('');
737
});
738
739
itRenders('unknown boolean `false` attributes as strings', async render => {
740
const e = await render(<custom-element foo={false} />);
750
- if (ReactFeatureFlags.enableCustomElementPropertySupport) {
751
- expect(e.getAttribute('foo')).toBe(null);
752
- } else {
753
- expect(e.getAttribute('foo')).toBe('false');
754
- }
741
+ expect(e.getAttribute('foo')).toBe(null);
742
});
743
744
itRenders('new boolean `true` attributes', async render => {
packages/react-dom/src/__tests__/ReactServerRendering-test.js
-2
@@ -1085,7 +1085,6 @@ describe('ReactDOMServer', () => {
1085
expect(output).toBe(`<my-custom-element foo="5"></my-custom-element>`);
1086
});
1087
1088
- // @gate enableCustomElementPropertySupport
1088
it('Object properties should not be server rendered for custom elements', () => {
1089
const output = ReactDOMServer.renderToString(
1090
<my-custom-element foo={{foo: 'bar'}} />,
@@ -1093,7 +1092,6 @@ describe('ReactDOMServer', () => {
1092
expect(output).toBe(`<my-custom-element></my-custom-element>`);
1093
});
1094
1096
- // @gate enableCustomElementPropertySupport
1095
it('Array properties should not be server rendered for custom elements', () => {
1096
const output = ReactDOMServer.renderToString(
1097
<my-custom-element foo={['foo', 'bar']} />,
packages/react-dom/src/__tests__/ReactServerRenderingHydration-test.js
+4
-11
@@ -593,23 +593,16 @@ describe('ReactDOMServerHydration', () => {
593
const jsx = React.createElement('my-custom-element', props);
594
const element = document.createElement('div');
595
element.innerHTML = ReactDOMServer.renderToString(jsx);
596
- if (gate(flags => flags.enableCustomElementPropertySupport)) {
597
- await expect(async () => {
598
- await act(() => {
599
- ReactDOMClient.hydrateRoot(element, jsx);
600
- });
601
- }).toErrorDev(
602
- `Warning: Assignment to read-only property will result in a no-op: \`${readOnlyProperty}\``,
603
- );
604
- } else {
596
+ await expect(async () => {
597
await act(() => {
598
ReactDOMClient.hydrateRoot(element, jsx);
599
});
608
- }
600
+ }).toErrorDev(
601
+ `Warning: Assignment to read-only property will result in a no-op: \`${readOnlyProperty}\``,
602
+ );
603
}
604
});
605
612
- // @gate enableCustomElementPropertySupport
606
it('should not re-assign properties on hydration', async () => {
607
const container = document.createElement('div');
608
document.body.appendChild(container);
packages/shared/ReactFeatureFlags.js
-6
@@ -146,12 +146,6 @@ export const useModernStrictMode = __NEXT_MAJOR__;
146
// Remove IE and MsApp specific workarounds for innerHTML
147
export const disableIEWorkarounds = __NEXT_MAJOR__;
148
149
-// Changes the behavior for rendering custom elements in both server rendering
150
-// and client rendering, mostly to allow JSX attributes to apply to the custom
151
-// element's object properties instead of only HTML attributes.
152
-// https://github.com/facebook/react/issues/11347
153
-export const enableCustomElementPropertySupport = __NEXT_MAJOR__;
154
-
149
// Filter certain DOM attributes (e.g. src, href) if their values are empty
150
// strings. This prevents e.g. <img src=""> from making an unnecessary HTTP
151
// request for certain browsers.
packages/shared/forks/ReactFeatureFlags.native-fb.js
-1
@@ -78,7 +78,6 @@ export const enableLazyContextPropagation = false;
78
export const enableLegacyHidden = false;
79
export const forceConcurrentByDefaultForTesting = false;
80
export const allowConcurrentByDefault = false;
81
-export const enableCustomElementPropertySupport = true;
81
export const enableNewBooleanProps = true;
82
83
export const enableTransitionTracing = false;
packages/shared/forks/ReactFeatureFlags.native-oss.js
-1
@@ -53,7 +53,6 @@ export const enableTaint = __NEXT_RN_MAJOR__;
53
export const enableUnifiedSyncLane = __NEXT_RN_MAJOR__;
54
export const enableFizzExternalRuntime = __NEXT_RN_MAJOR__; // DOM-only
55
export const enableBinaryFlight = __NEXT_RN_MAJOR__; // DOM-only
56
-export const enableCustomElementPropertySupport = __NEXT_RN_MAJOR__; // DOM-only
56
export const enableServerComponentKeys = __NEXT_RN_MAJOR__;
57
export const enableServerComponentLogs = __NEXT_RN_MAJOR__;
58
packages/shared/forks/ReactFeatureFlags.test-renderer.js
-1
@@ -57,7 +57,6 @@ export const enableLegacyHidden = false;
57
export const forceConcurrentByDefaultForTesting = false;
58
export const enableUnifiedSyncLane = __EXPERIMENTAL__;
59
export const allowConcurrentByDefault = false;
60
-export const enableCustomElementPropertySupport = false;
60
61
export const consoleManagedByDevToolsDuringStrictMode = false;
62
packages/shared/forks/ReactFeatureFlags.test-renderer.native.js
-1
@@ -59,7 +59,6 @@ export const enableLegacyHidden = false;
59
export const forceConcurrentByDefaultForTesting = false;
60
export const enableUnifiedSyncLane = true;
61
export const allowConcurrentByDefault = true;
62
-export const enableCustomElementPropertySupport = true;
62
export const enableNewBooleanProps = true;
63
64
export const consoleManagedByDevToolsDuringStrictMode = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
-1
@@ -59,7 +59,6 @@ export const enableLegacyHidden = false;
59
export const forceConcurrentByDefaultForTesting = false;
60
export const enableUnifiedSyncLane = true;
61
export const allowConcurrentByDefault = true;
62
-export const enableCustomElementPropertySupport = false;
62
export const enableNewBooleanProps = false;
63
64
export const consoleManagedByDevToolsDuringStrictMode = false;
packages/shared/forks/ReactFeatureFlags.www.js
-1
@@ -54,7 +54,6 @@ export const enableUpdaterTracking = __PROFILE__;
54
export const enableSuspenseAvoidThisFallback = true;
55
export const enableSuspenseAvoidThisFallbackFizz = false;
56
57
-export const enableCustomElementPropertySupport = true;
57
export const enableCPUSuspense = true;
58
export const enableUseMemoCacheHook = true;
59
export const enableUseEffectEventHook = true;