From 7d30cad38ebb971039d10aa6bfff804f98dd6657 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Wed, 15 Jun 2022 17:48:45 +0200 Subject: [PATCH 01/11] Support boolean values for `inert` prop --- .../attribute-behavior/AttributeTableSnapshot.md | 14 +++++++------- .../src/client/ReactDOMComponent.js | 1 + .../src/shared/ReactDOMUnknownPropertyHook.js | 1 + .../src/shared/possibleStandardNames.js | 1 + 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/fixtures/attribute-behavior/AttributeTableSnapshot.md b/fixtures/attribute-behavior/AttributeTableSnapshot.md index f3a8ebfde9923..d95bc47855574 100644 --- a/fixtures/attribute-behavior/AttributeTableSnapshot.md +++ b/fixtures/attribute-behavior/AttributeTableSnapshot.md @@ -5427,20 +5427,20 @@ | Test Case | Flags | Result | | --- | --- | --- | | `inert=(string)`| (changed)| `` | -| `inert=(empty string)`| (changed)| `` | +| `inert=(empty string)`| (initial)| `` | | `inert=(array with string)`| (changed)| `` | | `inert=(empty array)`| (changed)| `` | | `inert=(object)`| (changed)| `` | | `inert=(numeric string)`| (changed)| `` | | `inert=(-1)`| (changed)| `` | -| `inert=(0)`| (changed)| `` | +| `inert=(0)`| (initial)| `` | | `inert=(integer)`| (changed)| `` | -| `inert=(NaN)`| (changed, warning)| `` | +| `inert=(NaN)`| (initial, warning)| `` | | `inert=(float)`| (changed)| `` | -| `inert=(true)`| (initial, warning)| `` | -| `inert=(false)`| (initial, warning)| `` | -| `inert=(string 'true')`| (changed)| `` | -| `inert=(string 'false')`| (changed)| `` | +| `inert=(true)`| (changed)| `` | +| `inert=(false)`| (initial)| `` | +| `inert=(string 'true')`| (changed, warning)| `` | +| `inert=(string 'false')`| (changed, warning)| `` | | `inert=(string 'on')`| (changed)| `` | | `inert=(string 'off')`| (changed)| `` | | `inert=(symbol)`| (initial, warning)| `` | diff --git a/packages/react-dom-bindings/src/client/ReactDOMComponent.js b/packages/react-dom-bindings/src/client/ReactDOMComponent.js index d54573bdffbb1..a31a3d1cf1793 100644 --- a/packages/react-dom-bindings/src/client/ReactDOMComponent.js +++ b/packages/react-dom-bindings/src/client/ReactDOMComponent.js @@ -723,6 +723,7 @@ function setProp( case 'disableRemotePlayback': case 'formNoValidate': case 'hidden': + case 'inert': case 'loop': case 'noModule': case 'noValidate': diff --git a/packages/react-dom-bindings/src/shared/ReactDOMUnknownPropertyHook.js b/packages/react-dom-bindings/src/shared/ReactDOMUnknownPropertyHook.js index 0648059695ecb..555329435c909 100644 --- a/packages/react-dom-bindings/src/shared/ReactDOMUnknownPropertyHook.js +++ b/packages/react-dom-bindings/src/shared/ReactDOMUnknownPropertyHook.js @@ -224,6 +224,7 @@ function validateProperty(tagName, name, value, eventRegistry) { case 'disableRemotePlayback': case 'formNoValidate': case 'hidden': + case 'inert': case 'loop': case 'noModule': case 'noValidate': diff --git a/packages/react-dom-bindings/src/shared/possibleStandardNames.js b/packages/react-dom-bindings/src/shared/possibleStandardNames.js index bd093192a3d32..6c06b47c64ac7 100644 --- a/packages/react-dom-bindings/src/shared/possibleStandardNames.js +++ b/packages/react-dom-bindings/src/shared/possibleStandardNames.js @@ -82,6 +82,7 @@ const possibleStandardNames = { id: 'id', imagesizes: 'imageSizes', imagesrcset: 'imageSrcSet', + inert: 'inert', innerhtml: 'innerHTML', inputmode: 'inputMode', integrity: 'integrity', From d0a7864b30f4b16ee059e5e4466d7cbba36201e4 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Thu, 16 Jun 2022 19:24:20 +0200 Subject: [PATCH 02/11] Add support behind `enableNewBooleanProps` flag --- .../react-dom-bindings/src/client/ReactDOMComponent.js | 4 +++- .../react-dom-bindings/src/server/ReactFizzConfigDOM.js | 2 ++ .../src/shared/ReactDOMUnknownPropertyHook.js | 4 +++- .../react-dom-bindings/src/shared/possibleStandardNames.js | 6 +++++- packages/shared/ReactFeatureFlags.js | 7 +++++++ packages/shared/forks/ReactFeatureFlags.native-fb.js | 1 + packages/shared/forks/ReactFeatureFlags.native-oss.js | 1 + packages/shared/forks/ReactFeatureFlags.test-renderer.js | 1 + .../shared/forks/ReactFeatureFlags.test-renderer.native.js | 1 + .../shared/forks/ReactFeatureFlags.test-renderer.www.js | 1 + packages/shared/forks/ReactFeatureFlags.www-dynamic.js | 1 + packages/shared/forks/ReactFeatureFlags.www.js | 2 ++ 12 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/react-dom-bindings/src/client/ReactDOMComponent.js b/packages/react-dom-bindings/src/client/ReactDOMComponent.js index a31a3d1cf1793..b3ad6c8163305 100644 --- a/packages/react-dom-bindings/src/client/ReactDOMComponent.js +++ b/packages/react-dom-bindings/src/client/ReactDOMComponent.js @@ -73,6 +73,7 @@ import { disableIEWorkarounds, enableTrustedTypesIntegration, enableFilterEmptyStringAttributesDOM, + enableNewBooleanProps, } from 'shared/ReactFeatureFlags'; import { mediaEventTypes, @@ -723,7 +724,7 @@ function setProp( case 'disableRemotePlayback': case 'formNoValidate': case 'hidden': - case 'inert': + case enableNewBooleanProps ? 'inert' : 'formNoValidate': case 'loop': case 'noModule': case 'noValidate': @@ -2509,6 +2510,7 @@ function diffHydratedGenericElement( case 'disableRemotePlayback': case 'formNoValidate': case 'hidden': + case enableNewBooleanProps ? 'inert' : 'formNoValidate': case 'loop': case 'noModule': case 'noValidate': diff --git a/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js b/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js index 5902ece4d718e..00fd29fa100be 100644 --- a/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js +++ b/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js @@ -34,6 +34,7 @@ import { enableFloat, enableFormActions, enableFizzExternalRuntime, + enableNewBooleanProps, } from 'shared/ReactFeatureFlags'; import type { @@ -1289,6 +1290,7 @@ function pushAttribute( case 'disableRemotePlayback': case 'formNoValidate': case 'hidden': + case enableNewBooleanProps ? 'inert' : 'formNoValidate': case 'loop': case 'noModule': case 'noValidate': diff --git a/packages/react-dom-bindings/src/shared/ReactDOMUnknownPropertyHook.js b/packages/react-dom-bindings/src/shared/ReactDOMUnknownPropertyHook.js index 555329435c909..731e86084318d 100644 --- a/packages/react-dom-bindings/src/shared/ReactDOMUnknownPropertyHook.js +++ b/packages/react-dom-bindings/src/shared/ReactDOMUnknownPropertyHook.js @@ -12,6 +12,7 @@ import hasOwnProperty from 'shared/hasOwnProperty'; import { enableCustomElementPropertySupport, enableFormActions, + enableNewBooleanProps, } from 'shared/ReactFeatureFlags'; const warnedProperties = {}; @@ -224,7 +225,7 @@ function validateProperty(tagName, name, value, eventRegistry) { case 'disableRemotePlayback': case 'formNoValidate': case 'hidden': - case 'inert': + case enableNewBooleanProps ? 'inert' : 'formNoValidate': case 'loop': case 'noModule': case 'noValidate': @@ -302,6 +303,7 @@ function validateProperty(tagName, name, value, eventRegistry) { case 'disableRemotePlayback': case 'formNoValidate': case 'hidden': + case enableNewBooleanProps ? 'inert' : 'formNoValidate': case 'loop': case 'noModule': case 'noValidate': diff --git a/packages/react-dom-bindings/src/shared/possibleStandardNames.js b/packages/react-dom-bindings/src/shared/possibleStandardNames.js index 6c06b47c64ac7..d2d90877b53d7 100644 --- a/packages/react-dom-bindings/src/shared/possibleStandardNames.js +++ b/packages/react-dom-bindings/src/shared/possibleStandardNames.js @@ -4,6 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ +import {enableNewBooleanProps} from 'shared/ReactFeatureFlags'; // When adding attributes to the HTML or SVG allowed attribute list, be sure to // also add them to this module to ensure casing and incorrect name @@ -82,7 +83,6 @@ const possibleStandardNames = { id: 'id', imagesizes: 'imageSizes', imagesrcset: 'imageSrcSet', - inert: 'inert', innerhtml: 'innerHTML', inputmode: 'inputMode', integrity: 'integrity', @@ -503,4 +503,8 @@ const possibleStandardNames = { zoomandpan: 'zoomAndPan', }; +if (enableNewBooleanProps) { + possibleStandardNames.inert = 'inert'; +} + export default possibleStandardNames; diff --git a/packages/shared/ReactFeatureFlags.js b/packages/shared/ReactFeatureFlags.js index 3326b3bdc74a0..bba9c827654d0 100644 --- a/packages/shared/ReactFeatureFlags.js +++ b/packages/shared/ReactFeatureFlags.js @@ -237,6 +237,13 @@ export const disableInputAttributeSyncing = false; // Disables children for