From 72428daeb8c4b81ce124a8d9f3e1c308c9e6a2a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Mon, 5 Oct 2026 01:54:25 -0700 Subject: [PATCH] Reclassify renderer CSS as for-frameworks (#58788) Summary: Pull Request resolved: https://github.com/react/react-native/pull/58788 Reclassify the renderer CSS headers (`react/renderer/css/*.h`) as framework-tier APIs by switching them from the public umbrella guard to the for-frameworks guard. Framework integrations keep access to the fine-grained headers and acknowledge that usage by defining `RN_ALLOW_FRAMEWORKS`. Remove the `React/CSS.h` umbrella and stop publishing it from Buck, CocoaPods, Android prefab, the iOS prebuild header config, and the iOS prebuild header linking step. Its only consumer, the attributed string conversions header (itself framework-tier), now includes the CSS headers it uses (`CSSFontVariant.h` and `CSSValueParser.h`) directly. Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D119642784 --- .../ReactAndroid/build.gradle.kts | 1 - .../renderer/attributedstring/conversions.h | 3 +- .../ReactCommon/react/renderer/css/CSSAngle.h | 2 +- .../react/renderer/css/CSSAngleUnit.h | 2 +- .../react/renderer/css/CSSBackgroundImage.h | 2 +- .../ReactCommon/react/renderer/css/CSSColor.h | 2 +- .../react/renderer/css/CSSColorFunction.h | 2 +- .../react/renderer/css/CSSCompoundDataType.h | 2 +- .../react/renderer/css/CSSDataType.h | 2 +- .../react/renderer/css/CSSFilter.h | 2 +- .../react/renderer/css/CSSFontVariant.h | 2 +- .../react/renderer/css/CSSHexColor.h | 2 +- .../react/renderer/css/CSSKeyword.h | 2 +- .../react/renderer/css/CSSLength.h | 2 +- .../react/renderer/css/CSSLengthPercentage.h | 2 +- .../react/renderer/css/CSSLengthUnit.h | 2 +- .../ReactCommon/react/renderer/css/CSSList.h | 2 +- .../react/renderer/css/CSSNamedColor.h | 2 +- .../react/renderer/css/CSSNumber.h | 2 +- .../react/renderer/css/CSSPercentage.h | 2 +- .../ReactCommon/react/renderer/css/CSSRatio.h | 2 +- .../react/renderer/css/CSSShadow.h | 2 +- .../react/renderer/css/CSSSyntaxParser.h | 2 +- .../ReactCommon/react/renderer/css/CSSToken.h | 2 +- .../react/renderer/css/CSSTokenizer.h | 2 +- .../react/renderer/css/CSSTransform.h | 2 +- .../react/renderer/css/CSSTransformOrigin.h | 2 +- .../react/renderer/css/CSSValueParser.h | 2 +- .../ReactCommon/react/renderer/css/CSSZero.h | 2 +- .../renderer/css/React-renderercss.podspec | 6 -- .../react/renderer/css/React/CSS.h | 62 ------------------- .../__tests__/headers-config-test.js | 30 +++++++++ .../scripts/ios-prebuild/headers-config.js | 5 -- .../scripts/ios-prebuild/setup.js | 1 - 34 files changed, 59 insertions(+), 103 deletions(-) delete mode 100644 packages/react-native/ReactCommon/react/renderer/css/React/CSS.h create mode 100644 packages/react-native/scripts/ios-prebuild/__tests__/headers-config-test.js diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 5d88d6f8f772..381fad13d046 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -143,7 +143,6 @@ val preparePrefab by Pair("../ReactCommon/react/renderer/core/React/", "React/"), // react_renderer_css Pair("../ReactCommon/react/renderer/css/", "react/renderer/css/"), - Pair("../ReactCommon/react/renderer/css/React/", "React/"), // react_debug Pair("../ReactCommon/react/debug/", "react/debug/"), Pair("../ReactCommon/react/debug/React/", "React/"), diff --git a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h index d4d730d69734..263d53e9b864 100644 --- a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h +++ b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h @@ -9,7 +9,6 @@ #include -#include #include #include #include @@ -18,6 +17,8 @@ #include #include #include +#include +#include #include #ifdef RN_SERIALIZABLE_STATE diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSAngle.h b/packages/react-native/ReactCommon/react/renderer/css/CSSAngle.h index e7657e6e6cb5..541e4cdba2b1 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSAngle.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSAngle.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSAngleUnit.h b/packages/react-native/ReactCommon/react/renderer/css/CSSAngleUnit.h index fea9ca1c9a56..112bf7ca22a5 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSAngleUnit.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSAngleUnit.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSBackgroundImage.h b/packages/react-native/ReactCommon/react/renderer/css/CSSBackgroundImage.h index 1af10833c169..11c9daeea6bf 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSBackgroundImage.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSBackgroundImage.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSColor.h b/packages/react-native/ReactCommon/react/renderer/css/CSSColor.h index 48f03dfc2c71..b5e87a146c15 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSColor.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSColor.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSColorFunction.h b/packages/react-native/ReactCommon/react/renderer/css/CSSColorFunction.h index c3abc7f2de13..fccefab6fa1e 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSColorFunction.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSColorFunction.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSCompoundDataType.h b/packages/react-native/ReactCommon/react/renderer/css/CSSCompoundDataType.h index 98ff36fe5153..dd8b1847e7cd 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSCompoundDataType.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSCompoundDataType.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSDataType.h b/packages/react-native/ReactCommon/react/renderer/css/CSSDataType.h index c3b9a8ba23b9..42e1aa00e7ee 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSDataType.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSDataType.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSFilter.h b/packages/react-native/ReactCommon/react/renderer/css/CSSFilter.h index b3a192f6ebad..b413453ab59e 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSFilter.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSFilter.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSFontVariant.h b/packages/react-native/ReactCommon/react/renderer/css/CSSFontVariant.h index 4fc42cc84b1b..e9a61a801f66 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSFontVariant.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSFontVariant.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSHexColor.h b/packages/react-native/ReactCommon/react/renderer/css/CSSHexColor.h index 8734fa35ba2f..db4cfb1c8047 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSHexColor.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSHexColor.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSKeyword.h b/packages/react-native/ReactCommon/react/renderer/css/CSSKeyword.h index eba64a40ef7c..a3ff512f0e47 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSKeyword.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSKeyword.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSLength.h b/packages/react-native/ReactCommon/react/renderer/css/CSSLength.h index 18b3b0a48cc5..188531c4591e 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSLength.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSLength.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSLengthPercentage.h b/packages/react-native/ReactCommon/react/renderer/css/CSSLengthPercentage.h index ba6416bcd59a..cf4f7889c128 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSLengthPercentage.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSLengthPercentage.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSLengthUnit.h b/packages/react-native/ReactCommon/react/renderer/css/CSSLengthUnit.h index 76231f235126..64149e379b2c 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSLengthUnit.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSLengthUnit.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSList.h b/packages/react-native/ReactCommon/react/renderer/css/CSSList.h index 1651ef01d1e6..3b960b23b2af 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSList.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSList.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSNamedColor.h b/packages/react-native/ReactCommon/react/renderer/css/CSSNamedColor.h index 453f064246d9..e9eb2b97872e 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSNamedColor.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSNamedColor.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSNumber.h b/packages/react-native/ReactCommon/react/renderer/css/CSSNumber.h index 68b51cf2a846..77272ae0d5f5 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSNumber.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSNumber.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSPercentage.h b/packages/react-native/ReactCommon/react/renderer/css/CSSPercentage.h index 3d9bf612a1fb..46aa0397c3aa 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSPercentage.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSPercentage.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSRatio.h b/packages/react-native/ReactCommon/react/renderer/css/CSSRatio.h index 426ac6fc151f..3ef6f02d5ffc 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSRatio.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSRatio.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSShadow.h b/packages/react-native/ReactCommon/react/renderer/css/CSSShadow.h index 60a534a82ec4..ea5784c68981 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSShadow.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSShadow.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSSyntaxParser.h b/packages/react-native/ReactCommon/react/renderer/css/CSSSyntaxParser.h index a166e632da06..4254c0b94a6a 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSSyntaxParser.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSSyntaxParser.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSToken.h b/packages/react-native/ReactCommon/react/renderer/css/CSSToken.h index 8d6b8a2415dd..9c22245b1216 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSToken.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSToken.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSTokenizer.h b/packages/react-native/ReactCommon/react/renderer/css/CSSTokenizer.h index 06fb02b11b5b..f8320b03573f 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSTokenizer.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSTokenizer.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSTransform.h b/packages/react-native/ReactCommon/react/renderer/css/CSSTransform.h index 5698bf08da21..7ef7fdf0a0ae 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSTransform.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSTransform.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSTransformOrigin.h b/packages/react-native/ReactCommon/react/renderer/css/CSSTransformOrigin.h index be1818efaae3..2da96f375d05 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSTransformOrigin.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSTransformOrigin.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSValueParser.h b/packages/react-native/ReactCommon/react/renderer/css/CSSValueParser.h index e4a169196e03..5236a58a2f9b 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSValueParser.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSValueParser.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/CSSZero.h b/packages/react-native/ReactCommon/react/renderer/css/CSSZero.h index a39b9275acc4..296a5a68b7e6 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/CSSZero.h +++ b/packages/react-native/ReactCommon/react/renderer/css/CSSZero.h @@ -7,7 +7,7 @@ #pragma once -#include +#include #include diff --git a/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec b/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec index a012eadc5f4e..4b1bd09349fa 100644 --- a/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec +++ b/packages/react-native/ReactCommon/react/renderer/css/React-renderercss.podspec @@ -45,11 +45,5 @@ Pod::Spec.new do |s| add_dependency(s, "React-utils") s.dependency "React-cxxstableapi" - s.subspec "cssUmbrella" do |ss| - ss.source_files = "React/*.h" - ss.header_dir = "" - ss.header_mappings_dir = "." - end - mark_as_react_native_build(s) end diff --git a/packages/react-native/ReactCommon/react/renderer/css/React/CSS.h b/packages/react-native/ReactCommon/react/renderer/css/React/CSS.h deleted file mode 100644 index b36d471b43fb..000000000000 --- a/packages/react-native/ReactCommon/react/renderer/css/React/CSS.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#pragma once - -// ============================================================================= -// Umbrella header for the `react/renderer/css` module - public entry point. -// -// #include -// -// Re-exports the module's public interface headers. React Native's own code -// should keep using the fine-grained `` includes, -// except in headers it exports to consumers: those are preprocessed in the -// consumer's translation unit, where the fine-grained include hits this -// module's . `RN_ALLOW_FRAMEWORKS` does not -// suppress that guard, so a "for frameworks" header must reach this module -// through the umbrella. -// ============================================================================= - -// Marks that the following headers are pulled in through the umbrella, so their -// shared guard () accepts them. The marker -// is saved and restored rather than defined and undefined: the scope ends at -// this block, so later *direct* includes in the same TU are still caught, and -// it nests inside an enclosing umbrella rather than disarming it. -#pragma push_macro("RN_UMBRELLA_CONTEXT") -#undef RN_UMBRELLA_CONTEXT -#define RN_UMBRELLA_CONTEXT 1 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#undef RN_UMBRELLA_CONTEXT -#pragma pop_macro("RN_UMBRELLA_CONTEXT") diff --git a/packages/react-native/scripts/ios-prebuild/__tests__/headers-config-test.js b/packages/react-native/scripts/ios-prebuild/__tests__/headers-config-test.js new file mode 100644 index 000000000000..01eea411a4b0 --- /dev/null +++ b/packages/react-native/scripts/ios-prebuild/__tests__/headers-config-test.js @@ -0,0 +1,30 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + */ + +'use strict'; + +const {PodspecExceptions} = require('../headers-config'); + +describe('React renderer CSS headers', () => { + test('publishes fine-grained headers without a stable umbrella', () => { + const rendererCss = + PodspecExceptions[ + 'ReactCommon/react/renderer/css/React-renderercss.podspec' + ]; + + expect(rendererCss.subSpecs).toEqual([ + { + name: 'css', + headerPatterns: ['*.h'], + headerDir: 'react/renderer/css', + }, + ]); + }); +}); diff --git a/packages/react-native/scripts/ios-prebuild/headers-config.js b/packages/react-native/scripts/ios-prebuild/headers-config.js index e6b5eb70b61c..61addbc7a4c4 100644 --- a/packages/react-native/scripts/ios-prebuild/headers-config.js +++ b/packages/react-native/scripts/ios-prebuild/headers-config.js @@ -655,11 +655,6 @@ const PodspecExceptions /*: {[key: string]: PodSpecConfiguration} */ = { headerPatterns: ['*.h'], headerDir: 'react/renderer/css', }, - { - name: 'cssUmbrella', - headerPatterns: ['React/*.h'], - headerDir: 'React', - }, ], }, 'ReactCommon/react/utils/React-utils.podspec': { diff --git a/packages/react-native/scripts/ios-prebuild/setup.js b/packages/react-native/scripts/ios-prebuild/setup.js index 90be5ec8b93e..c8d6ef4a5324 100644 --- a/packages/react-native/scripts/ios-prebuild/setup.js +++ b/packages/react-native/scripts/ios-prebuild/setup.js @@ -108,7 +108,6 @@ async function setup( link('ReactCommon/react/renderer/componentregistry/React', 'React'); link('ReactCommon/react/renderer/core'); link('ReactCommon/react/renderer/core/React', 'React'); - link('ReactCommon/react/renderer/css/React', 'React'); link('ReactCommon/react/renderer/components/image/React', 'React'); link('ReactCommon/react/renderer/mapbuffer/React', 'React'); link('ReactCommon/react/bridging');