diff --git a/CHANGELOG.md b/CHANGELOG.md index edfba39195..4ddd9379c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange ## Unreleased +### Fixed +* [`no-unknown-property`]: support `precedence` prop ([#3829][] @acusti) + +[#3829]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3829 + ## [7.36.1] - 2024.09.12 ### Fixed diff --git a/lib/rules/no-unknown-property.js b/lib/rules/no-unknown-property.js index dc5018007a..f145eea265 100644 --- a/lib/rules/no-unknown-property.js +++ b/lib/rules/no-unknown-property.js @@ -363,16 +363,20 @@ const REACT_ON_PROPS = [ ]; function getDOMPropertyNames(context) { - const ALL_DOM_PROPERTY_NAMES = DOM_PROPERTY_NAMES_TWO_WORDS.concat(DOM_PROPERTY_NAMES_ONE_WORD); + let domPropertyNames = DOM_PROPERTY_NAMES_TWO_WORDS.concat(DOM_PROPERTY_NAMES_ONE_WORD); // this was removed in React v16.1+, see https://github.com/facebook/react/pull/10823 if (!testReactVersion(context, '>= 16.1.0')) { - return ALL_DOM_PROPERTY_NAMES.concat('allowTransparency'); + return domPropertyNames.concat('allowTransparency'); } // these were added in React v16.4.0, see https://reactjs.org/blog/2018/05/23/react-v-16-4.html and https://github.com/facebook/react/pull/12507 if (testReactVersion(context, '>= 16.4.0')) { - return ALL_DOM_PROPERTY_NAMES.concat(REACT_ON_PROPS); + domPropertyNames = domPropertyNames.concat(REACT_ON_PROPS); + // precedence was added in React v19, see https://react.dev/blog/2024/04/25/react-19#support-for-stylesheets + if (testReactVersion(context, '>= 19.0.0-0')) { + domPropertyNames = domPropertyNames.concat('precedence'); + } } - return ALL_DOM_PROPERTY_NAMES; + return domPropertyNames; } // ------------------------------------------------------------------------------ diff --git a/tests/lib/rules/no-unknown-property.js b/tests/lib/rules/no-unknown-property.js index 32e6c6d6b3..39f4198f58 100644 --- a/tests/lib/rules/no-unknown-property.js +++ b/tests/lib/rules/no-unknown-property.js @@ -89,6 +89,12 @@ ruleTester.run('no-unknown-property', rule, { { code: '
' }, { code: '' }, { code: '
' }, + { + code: '', + settings: { + react: { version: '19.0.0-rc.0' }, + }, + }, // Case ignored attributes, for `charset` discussion see https://github.com/jsx-eslint/eslint-plugin-react/pull/1863 { code: ';' }, { code: ';' },