react-native 0.74.0-nightly-20240128-cfc0ba04a → 1000.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/Libraries/Animated/NativeAnimatedHelper.js +1 -1
  2. package/Libraries/Animated/nodes/AnimatedStyle.js +1 -1
  3. package/Libraries/Animated/useAnimatedProps.js +1 -1
  4. package/Libraries/AppDelegate/RCTAppDelegate.mm +2 -1
  5. package/Libraries/Blob/React-RCTBlob.podspec +1 -0
  6. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.android.js +69 -0
  7. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.d.ts +24 -0
  8. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.js +33 -0
  9. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroidNativeComponent.js +13 -0
  10. package/Libraries/Core/ReactNativeVersion.js +2 -3
  11. package/Libraries/Core/ReactNativeVersionCheck.js +1 -1
  12. package/Libraries/Core/registerCallableModule.js +42 -0
  13. package/Libraries/Image/RCTImageLoader.mm +4 -11
  14. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -1
  15. package/Libraries/ReactNative/BridgelessUIManager.js +31 -13
  16. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +1 -1
  17. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +0 -33
  18. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +12 -0
  19. package/Libraries/Renderer/implementations/ReactFabric-dev.js +24543 -21110
  20. package/Libraries/Renderer/implementations/ReactFabric-prod.js +4104 -3058
  21. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +4352 -3273
  22. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +25038 -21457
  23. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3721 -2600
  24. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +4024 -2869
  25. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +43 -4
  26. package/Libraries/WebPerformance/Performance.js +1 -1
  27. package/React/Base/RCTBridge+Private.h +14 -0
  28. package/React/Base/RCTBridge.mm +6 -0
  29. package/React/Base/RCTKeyCommands.m +12 -1
  30. package/React/Base/RCTVersion.m +3 -3
  31. package/React/CoreModules/RCTAlertController.mm +2 -3
  32. package/React/CoreModules/RCTAppearance.mm +1 -1
  33. package/React/CoreModules/React-CoreModules.podspec +1 -0
  34. package/React/CxxBridge/RCTCxxBridge.mm +21 -3
  35. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropComponentView.mm +22 -1
  36. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +13 -2
  37. package/React/Fabric/RCTConversions.h +2 -18
  38. package/React/React-RCTFabric.podspec +1 -0
  39. package/React-Core.podspec +1 -3
  40. package/ReactAndroid/api/ReactAndroid.api +53 -1
  41. package/ReactAndroid/gradle.properties +1 -1
  42. package/ReactAndroid/src/main/java/com/facebook/react/animated/AnimatedNode.java +3 -1
  43. package/ReactAndroid/src/main/java/com/facebook/react/animated/DecayAnimation.java +2 -0
  44. package/ReactAndroid/src/main/java/com/facebook/react/animated/DiffClampAnimatedNode.java +3 -1
  45. package/ReactAndroid/src/main/java/com/facebook/react/animated/ModulusAnimatedNode.java +3 -1
  46. package/ReactAndroid/src/main/java/com/facebook/react/animated/ObjectAnimatedNode.java +3 -1
  47. package/ReactAndroid/src/main/java/com/facebook/react/animated/SpringAnimation.java +3 -1
  48. package/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +1 -3
  49. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt +5 -2
  50. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +11 -1
  51. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +11 -1
  52. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +3 -1
  53. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +3 -1
  54. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +12 -1
  55. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +3 -1
  56. package/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/JSCExecutor.kt +1 -1
  57. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +3 -3
  58. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +3 -0
  59. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +13 -1
  60. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +7 -0
  61. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +11 -0
  62. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java +9 -1
  63. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java +24 -0
  64. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ScaleTypeStartInside.java +1 -1
  65. package/ReactAndroid/src/main/java/com/facebook/react/views/popupmenu/PopupMenuSelectionEvent.kt +37 -0
  66. package/ReactAndroid/src/main/java/com/facebook/react/views/popupmenu/ReactPopupMenuContainer.kt +49 -0
  67. package/ReactAndroid/src/main/java/com/facebook/react/views/popupmenu/ReactPopupMenuManager.kt +54 -0
  68. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java +2 -2
  69. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +2 -2
  70. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManagerMapBuffer.java +2 -2
  71. package/ReactAndroid/src/main/jni/react/fabric/CoreComponentsRegistry.cpp +2 -0
  72. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +9 -1
  73. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +4 -1
  74. package/ReactAndroid/src/main/jni/react/featureflags/ReactNativeFeatureFlagsProviderHolder.cpp +7 -1
  75. package/ReactAndroid/src/main/jni/react/featureflags/ReactNativeFeatureFlagsProviderHolder.h +2 -1
  76. package/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp +16 -10
  77. package/ReactAndroid/src/main/jni/react/jni/ProxyExecutor.cpp +0 -3
  78. package/ReactAndroid/src/main/jni/react/jni/ProxyExecutor.h +0 -1
  79. package/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultComponentsRegistry.cpp +7 -6
  80. package/ReactCommon/cxxreact/Instance.cpp +34 -18
  81. package/ReactCommon/cxxreact/Instance.h +13 -2
  82. package/ReactCommon/cxxreact/React-cxxreact.podspec +1 -1
  83. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  84. package/ReactCommon/jsinspector-modern/InstanceAgent.cpp +34 -0
  85. package/ReactCommon/jsinspector-modern/InstanceAgent.h +54 -0
  86. package/ReactCommon/jsinspector-modern/InstanceTarget.cpp +25 -0
  87. package/ReactCommon/jsinspector-modern/InstanceTarget.h +58 -0
  88. package/ReactCommon/jsinspector-modern/PageAgent.cpp +65 -0
  89. package/ReactCommon/jsinspector-modern/PageAgent.h +13 -0
  90. package/ReactCommon/jsinspector-modern/PageTarget.cpp +41 -0
  91. package/ReactCommon/jsinspector-modern/PageTarget.h +28 -1
  92. package/ReactCommon/jsinspector-modern/React-jsinspector.podspec +12 -1
  93. package/ReactCommon/jsinspector-modern/ReactCdp.h +1 -0
  94. package/ReactCommon/jsinspector-modern/tests/InspectorMocks.h +2 -0
  95. package/ReactCommon/jsinspector-modern/tests/PageTargetTest.cpp +164 -10
  96. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +5 -1
  97. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +6 -1
  98. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +18 -1
  99. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +3 -1
  100. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +5 -1
  101. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +2 -1
  102. package/ReactCommon/react/featureflags/tests/ReactNativeFeatureFlagsTest.cpp +4 -0
  103. package/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec +1 -0
  104. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +6 -1
  105. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +3 -1
  106. package/ReactCommon/react/renderer/attributedstring/primitives.h +0 -86
  107. package/ReactCommon/react/renderer/components/text/ParagraphShadowNode.cpp +4 -1
  108. package/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h +0 -16
  109. package/ReactCommon/react/renderer/components/view/CSSTokenizer.cpp +187 -0
  110. package/ReactCommon/react/renderer/components/view/CSSTokenizer.h +101 -0
  111. package/ReactCommon/react/renderer/components/view/tests/CSSTokenizerTest.cpp +144 -0
  112. package/ReactCommon/react/renderer/core/ComponentDescriptor.h +0 -1
  113. package/ReactCommon/react/renderer/core/EventEmitter.cpp +14 -6
  114. package/ReactCommon/react/renderer/core/LayoutPrimitives.h +0 -17
  115. package/ReactCommon/react/renderer/core/graphicsConversions.h +2 -23
  116. package/ReactCommon/react/renderer/core/propsConversions.h +0 -1
  117. package/ReactCommon/react/renderer/graphics/Color.h +7 -3
  118. package/ReactCommon/react/renderer/graphics/React-graphics.podspec +6 -1
  119. package/ReactCommon/react/renderer/graphics/fromRawValueShared.h +50 -0
  120. package/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.h +18 -7
  121. package/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/PlatformColorParser.h +16 -4
  122. package/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.h +55 -15
  123. package/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.mm +132 -0
  124. package/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/PlatformColorParser.h +15 -17
  125. package/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/PlatformColorParser.mm +73 -0
  126. package/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.h +8 -2
  127. package/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.mm +14 -3
  128. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextPrimitivesConversions.h +4 -19
  129. package/ReactCommon/react/runtime/ReactInstance.cpp +15 -2
  130. package/ReactCommon/react/runtime/ReactInstance.h +13 -2
  131. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +5 -3
  132. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.h +3 -1
  133. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm +10 -2
  134. package/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.mm +5 -2
  135. package/ReactCommon/react/utils/hash_combine.h +8 -6
  136. package/gradle/libs.versions.toml +1 -1
  137. package/index.js +9 -0
  138. package/package.json +9 -9
  139. package/sdks/hermesc/osx-bin/hermes +0 -0
  140. package/sdks/hermesc/osx-bin/hermesc +0 -0
  141. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  142. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +2 -1
  143. package/src/private/featureflags/ReactNativeFeatureFlags.js +42 -1
  144. package/src/private/specs/components/PopupMenuAndroidNativeComponent.js +47 -0
  145. package/template/Gemfile +3 -1
  146. package/template/package.json +5 -5
  147. package/Libraries/Performance/QuickPerformanceLogger.js +0 -155
  148. package/ReactAndroid/src/main/jni/react/jni/OnLoad.h +0 -16
@@ -8,23 +8,25 @@
8
8
  #pragma once
9
9
 
10
10
  #include <fbjni/fbjni.h>
11
- #include <react/renderer/core/PropsParserContext.h>
12
- #include <react/renderer/core/RawProps.h>
11
+ #include <react/debug/react_native_expect.h>
12
+ #include <react/renderer/core/RawValue.h>
13
13
  #include <react/renderer/graphics/Color.h>
14
+ #include <react/renderer/graphics/fromRawValueShared.h>
15
+ #include <react/utils/ContextContainer.h>
14
16
  #include <unordered_map>
15
17
 
16
18
  namespace facebook::react {
17
19
 
18
20
  inline SharedColor parsePlatformColor(
19
- const PropsParserContext& context,
21
+ const ContextContainer& contextContainer,
22
+ int32_t surfaceId,
20
23
  const RawValue& value) {
21
24
  ColorComponents colorComponents = {0, 0, 0, 0};
22
25
 
23
26
  if (value.hasType<
24
27
  std::unordered_map<std::string, std::vector<std::string>>>()) {
25
28
  const auto& fabricUIManager =
26
- context.contextContainer.at<jni::global_ref<jobject>>(
27
- "FabricUIManager");
29
+ contextContainer.at<jni::global_ref<jobject>>("FabricUIManager");
28
30
  static auto getColorFromJava =
29
31
  fabricUIManager->getClass()
30
32
  ->getMethod<jint(jint, jni::JArrayClass<jni::JString>)>("getColor");
@@ -37,8 +39,8 @@ inline SharedColor parsePlatformColor(
37
39
  for (int i = 0; i < resourcePaths.size(); i++) {
38
40
  javaResourcePaths->setElement(i, *jni::make_jstring(resourcePaths[i]));
39
41
  }
40
- auto color = getColorFromJava(
41
- fabricUIManager, context.surfaceId, *javaResourcePaths);
42
+ auto color =
43
+ getColorFromJava(fabricUIManager, surfaceId, *javaResourcePaths);
42
44
 
43
45
  auto argb = (int64_t)color;
44
46
  auto ratio = 255.f;
@@ -51,4 +53,13 @@ inline SharedColor parsePlatformColor(
51
53
  return {colorFromComponents(colorComponents)};
52
54
  }
53
55
 
56
+ inline void fromRawValue(
57
+ const ContextContainer& contextContainer,
58
+ int32_t surfaceId,
59
+ const RawValue& value,
60
+ SharedColor& result) {
61
+ fromRawValueShared(
62
+ contextContainer, surfaceId, value, result, parsePlatformColor);
63
+ }
64
+
54
65
  } // namespace facebook::react
@@ -7,15 +7,18 @@
7
7
 
8
8
  #pragma once
9
9
 
10
- #include <react/renderer/core/PropsParserContext.h>
11
- #include <react/renderer/core/RawProps.h>
10
+ #include <react/debug/react_native_expect.h>
11
+ #include <react/renderer/core/RawValue.h>
12
12
  #include <react/renderer/graphics/Color.h>
13
+ #include <react/renderer/graphics/fromRawValueShared.h>
14
+ #include <react/utils/ContextContainer.h>
13
15
 
14
16
  namespace facebook::react {
15
17
 
16
18
  inline SharedColor parsePlatformColor(
17
- const PropsParserContext& context,
18
- const RawValue& value) {
19
+ const ContextContainer& /*contextContainer*/,
20
+ int32_t /*surfaceId*/,
21
+ const RawValue& /*value*/) {
19
22
  float alpha = 0;
20
23
  float red = 0;
21
24
  float green = 0;
@@ -24,4 +27,13 @@ inline SharedColor parsePlatformColor(
24
27
  return {colorFromComponents({red, green, blue, alpha})};
25
28
  }
26
29
 
30
+ inline void fromRawValue(
31
+ const ContextContainer& contextContainer,
32
+ int32_t surfaceId,
33
+ const RawValue& value,
34
+ SharedColor& result) {
35
+ fromRawValueShared(
36
+ contextContainer, surfaceId, value, result, parsePlatformColor);
37
+ }
38
+
27
39
  } // namespace facebook::react
@@ -8,32 +8,72 @@
8
8
  #pragma once
9
9
 
10
10
  #include <react/renderer/graphics/ColorComponents.h>
11
+ #include <react/utils/hash_combine.h>
11
12
  #include <cmath>
12
13
 
13
14
  namespace facebook::react {
14
15
 
15
- using Color = int32_t;
16
+ struct DynamicColor {
17
+ int32_t lightColor = 0;
18
+ int32_t darkColor = 0;
19
+ int32_t highContrastLightColor = 0;
20
+ int32_t highContrastDarkColor = 0;
21
+ };
22
+
23
+ struct Color {
24
+ Color(int32_t color);
25
+ Color(const DynamicColor& dynamicColor);
26
+ Color(const ColorComponents& components);
27
+ Color(std::shared_ptr<void> uiColor);
28
+ int32_t getColor() const;
29
+ std::shared_ptr<void> getUIColor() const {
30
+ return uiColor_;
31
+ }
32
+ ColorComponents getColorComponents() const {
33
+ float ratio = 255;
34
+ int32_t primitiveColor = getColor();
35
+ return ColorComponents{
36
+ (float)((primitiveColor >> 16) & 0xff) / ratio,
37
+ (float)((primitiveColor >> 8) & 0xff) / ratio,
38
+ (float)((primitiveColor >> 0) & 0xff) / ratio,
39
+ (float)((primitiveColor >> 24) & 0xff) / ratio};
40
+ }
41
+ bool operator==(const Color& other) const;
42
+ bool operator!=(const Color& other) const;
43
+ operator int32_t() const {
44
+ return getColor();
45
+ }
46
+
47
+ private:
48
+ std::shared_ptr<void> uiColor_;
49
+ };
16
50
 
17
51
  namespace HostPlatformColor {
18
- static const facebook::react::Color UndefinedColor =
19
- std::numeric_limits<facebook::react::Color>::max();
20
- }
52
+
53
+ #if defined(__clang__)
54
+ #define NO_DESTROY [[clang::no_destroy]]
55
+ #else
56
+ #define NO_DESTROY
57
+ #endif
58
+
59
+ NO_DESTROY static const facebook::react::Color UndefinedColor = Color(nullptr);
60
+ } // namespace HostPlatformColor
21
61
 
22
62
  inline Color hostPlatformColorFromComponents(ColorComponents components) {
23
- float ratio = 255;
24
- return ((int)round(components.alpha * ratio) & 0xff) << 24 |
25
- ((int)round(components.red * ratio) & 0xff) << 16 |
26
- ((int)round(components.green * ratio) & 0xff) << 8 |
27
- ((int)round(components.blue * ratio) & 0xff);
63
+ return Color(components);
28
64
  }
29
65
 
30
66
  inline ColorComponents colorComponentsFromHostPlatformColor(Color color) {
31
- float ratio = 255;
32
- return ColorComponents{
33
- (float)((color >> 16) & 0xff) / ratio,
34
- (float)((color >> 8) & 0xff) / ratio,
35
- (float)((color >> 0) & 0xff) / ratio,
36
- (float)((color >> 24) & 0xff) / ratio};
67
+ return color.getColorComponents();
37
68
  }
38
69
 
39
70
  } // namespace facebook::react
71
+
72
+ template <>
73
+ struct std::hash<facebook::react::Color> {
74
+ size_t operator()(const facebook::react::Color& color) const {
75
+ auto seed = size_t{0};
76
+ facebook::react::hash_combine(seed, color.getColor());
77
+ return seed;
78
+ }
79
+ };
@@ -0,0 +1,132 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #import "HostPlatformColor.h"
9
+
10
+ #import <Foundation/Foundation.h>
11
+ #import <UIKit/UIKit.h>
12
+ #import <react/utils/ManagedObjectWrapper.h>
13
+ #import <string>
14
+
15
+ using namespace facebook::react;
16
+
17
+ NS_ASSUME_NONNULL_BEGIN
18
+
19
+ namespace facebook::react {
20
+
21
+ namespace {
22
+ UIColor *_Nullable UIColorFromInt32(int32_t intColor)
23
+ {
24
+ CGFloat a = CGFloat((intColor >> 24) & 0xFF) / 255.0;
25
+ CGFloat r = CGFloat((intColor >> 16) & 0xFF) / 255.0;
26
+ CGFloat g = CGFloat((intColor >> 8) & 0xFF) / 255.0;
27
+ CGFloat b = CGFloat(intColor & 0xFF) / 255.0;
28
+ return [UIColor colorWithRed:r green:g blue:b alpha:a];
29
+ }
30
+
31
+ UIColor *_Nullable UIColorFromDynamicColor(const facebook::react::DynamicColor &dynamicColor)
32
+ {
33
+ int32_t light = dynamicColor.lightColor;
34
+ int32_t dark = dynamicColor.darkColor;
35
+ int32_t highContrastLight = dynamicColor.highContrastLightColor;
36
+ int32_t highContrastDark = dynamicColor.highContrastDarkColor;
37
+
38
+ UIColor *lightColor = UIColorFromInt32(light);
39
+ UIColor *darkColor = UIColorFromInt32(dark);
40
+ UIColor *highContrastLightColor = UIColorFromInt32(highContrastLight);
41
+ UIColor *highContrastDarkColor = UIColorFromInt32(highContrastDark);
42
+
43
+ if (lightColor != nil && darkColor != nil) {
44
+ UIColor *color = [UIColor colorWithDynamicProvider:^UIColor *_Nonnull(UITraitCollection *_Nonnull collection) {
45
+ if (collection.userInterfaceStyle == UIUserInterfaceStyleDark) {
46
+ if (collection.accessibilityContrast == UIAccessibilityContrastHigh && highContrastDarkColor != nil) {
47
+ return highContrastDarkColor;
48
+ } else {
49
+ return darkColor;
50
+ }
51
+ } else {
52
+ if (collection.accessibilityContrast == UIAccessibilityContrastHigh && highContrastLightColor != nil) {
53
+ return highContrastLightColor;
54
+ } else {
55
+ return lightColor;
56
+ }
57
+ }
58
+ }];
59
+ return color;
60
+ } else {
61
+ return nil;
62
+ }
63
+
64
+ return nil;
65
+ }
66
+
67
+ int32_t ColorFromUIColor(UIColor *color)
68
+ {
69
+ float ratio = 255;
70
+ CGFloat rgba[4];
71
+ [color getRed:&rgba[0] green:&rgba[1] blue:&rgba[2] alpha:&rgba[3]];
72
+ return ((int32_t)round((float)rgba[3] * ratio) & 0xff) << 24 | ((int)round((float)rgba[0] * ratio) & 0xff) << 16 |
73
+ ((int)round((float)rgba[1] * ratio) & 0xff) << 8 | ((int)round((float)rgba[2] * ratio) & 0xff);
74
+ }
75
+
76
+ int32_t ColorFromUIColor(const std::shared_ptr<void> &uiColor)
77
+ {
78
+ UIColor *color = (UIColor *)unwrapManagedObject(uiColor);
79
+ if (color) {
80
+ UITraitCollection *currentTraitCollection = [UITraitCollection currentTraitCollection];
81
+ color = [color resolvedColorWithTraitCollection:currentTraitCollection];
82
+ return ColorFromUIColor(color);
83
+ }
84
+
85
+ return 0;
86
+ }
87
+
88
+ UIColor *_Nullable UIColorFromComponentsColor(const facebook::react::ColorComponents &components)
89
+ {
90
+ return [UIColor colorWithRed:components.red green:components.green blue:components.blue alpha:components.alpha];
91
+ }
92
+ } // anonymous namespace
93
+
94
+ Color::Color(int32_t color)
95
+ {
96
+ uiColor_ = wrapManagedObject(UIColorFromInt32(color));
97
+ }
98
+
99
+ Color::Color(const DynamicColor &dynamicColor)
100
+ {
101
+ uiColor_ = wrapManagedObject(UIColorFromDynamicColor(dynamicColor));
102
+ }
103
+
104
+ Color::Color(const ColorComponents &components)
105
+ {
106
+ uiColor_ = wrapManagedObject(UIColorFromComponentsColor(components));
107
+ }
108
+
109
+ Color::Color(std::shared_ptr<void> uiColor)
110
+ {
111
+ uiColor_ = std::move(uiColor);
112
+ }
113
+
114
+ bool Color::operator==(const Color &other) const
115
+ {
116
+ return (!uiColor_ && !other.uiColor_) ||
117
+ (uiColor_ && other.uiColor_ &&
118
+ [unwrapManagedObject(getUIColor()) isEqual:unwrapManagedObject(other.getUIColor())]);
119
+ }
120
+
121
+ bool Color::operator!=(const Color &other) const
122
+ {
123
+ return !(*this == other);
124
+ }
125
+
126
+ int32_t Color::getColor() const
127
+ {
128
+ return ColorFromUIColor(uiColor_);
129
+ }
130
+ } // namespace facebook::react
131
+
132
+ NS_ASSUME_NONNULL_END
@@ -7,28 +7,26 @@
7
7
 
8
8
  #pragma once
9
9
 
10
- #include <react/renderer/core/PropsParserContext.h>
11
- #include <react/renderer/core/RawProps.h>
10
+ #include <react/debug/react_native_expect.h>
11
+ #include <react/renderer/core/rawValue.h>
12
12
  #include <react/renderer/graphics/Color.h>
13
- #include <react/renderer/graphics/RCTPlatformColorUtils.h>
14
- #include <unordered_map>
13
+ #include <react/renderer/graphics/fromRawValueShared.h>
14
+ #include <react/utils/ContextContainer.h>
15
15
 
16
16
  namespace facebook::react {
17
17
 
18
- inline SharedColor parsePlatformColor(
19
- const PropsParserContext& context,
20
- const RawValue& value) {
21
- if (value.hasType<std::unordered_map<std::string, RawValue>>()) {
22
- auto items = (std::unordered_map<std::string, RawValue>)value;
23
- if (items.find("semantic") != items.end() &&
24
- items.at("semantic").hasType<std::vector<std::string>>()) {
25
- auto semanticItems = (std::vector<std::string>)items.at("semantic");
26
- return {colorFromComponents(
27
- RCTPlatformColorComponentsFromSemanticItems(semanticItems))};
28
- }
29
- }
18
+ SharedColor parsePlatformColor(
19
+ const ContextContainer& contextContainer,
20
+ int32_t surfaceId,
21
+ const RawValue& value);
30
22
 
31
- return clearColor();
23
+ inline void fromRawValue(
24
+ const ContextContainer& contextContainer,
25
+ int32_t surfaceId,
26
+ const RawValue& value,
27
+ SharedColor& result) {
28
+ fromRawValueShared(
29
+ contextContainer, surfaceId, value, result, parsePlatformColor);
32
30
  }
33
31
 
34
32
  } // namespace facebook::react
@@ -0,0 +1,73 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #import "PlatformColorParser.h"
9
+
10
+ #import <react/renderer/core/RawValue.h>
11
+ #import <react/renderer/graphics/HostPlatformColor.h>
12
+ #import <react/renderer/graphics/RCTPlatformColorUtils.h>
13
+ #import <react/utils/ManagedObjectWrapper.h>
14
+ #import <string>
15
+ #import <unordered_map>
16
+
17
+ using namespace facebook::react;
18
+
19
+ NS_ASSUME_NONNULL_BEGIN
20
+
21
+ namespace facebook::react {
22
+
23
+ inline facebook::react::SharedColor RCTPlatformColorComponentsFromDynamicItems(
24
+ const facebook::react::ContextContainer &contextContainer,
25
+ int32_t surfaceId,
26
+ std::unordered_map<std::string, facebook::react::RawValue> &dynamicItems)
27
+ {
28
+ SharedColor lightSharedColor{};
29
+ SharedColor darkSharedColor{};
30
+ SharedColor highContrastLightSharedColor{};
31
+ SharedColor highContrastDarkSharedColor{};
32
+ if (dynamicItems.count("light")) {
33
+ fromRawValue(contextContainer, surfaceId, dynamicItems.at("light"), lightSharedColor);
34
+ }
35
+ if (dynamicItems.count("dark")) {
36
+ fromRawValue(contextContainer, surfaceId, dynamicItems.at("dark"), darkSharedColor);
37
+ }
38
+ if (dynamicItems.count("highContrastLight")) {
39
+ fromRawValue(contextContainer, surfaceId, dynamicItems.at("highContrastLight"), highContrastLightSharedColor);
40
+ }
41
+ if (dynamicItems.count("highContrastDark")) {
42
+ fromRawValue(contextContainer, surfaceId, dynamicItems.at("highContrastDark"), highContrastDarkSharedColor);
43
+ }
44
+
45
+ Color color = Color(DynamicColor{
46
+ (*lightSharedColor).getColor(),
47
+ (*darkSharedColor).getColor(),
48
+ (*highContrastLightSharedColor).getColor(),
49
+ (*highContrastDarkSharedColor).getColor()});
50
+ return SharedColor(color);
51
+ }
52
+
53
+ SharedColor parsePlatformColor(const ContextContainer &contextContainer, int32_t surfaceId, const RawValue &value)
54
+ {
55
+ if (value.hasType<std::unordered_map<std::string, RawValue>>()) {
56
+ auto items = (std::unordered_map<std::string, RawValue>)value;
57
+ if (items.find("semantic") != items.end() && items.at("semantic").hasType<std::vector<std::string>>()) {
58
+ auto semanticItems = (std::vector<std::string>)items.at("semantic");
59
+ return {wrapManagedObject(RCTPlatformColorFromSemanticItems(semanticItems))};
60
+ } else if (
61
+ items.find("dynamic") != items.end() &&
62
+ items.at("dynamic").hasType<std::unordered_map<std::string, RawValue>>()) {
63
+ auto dynamicItems = (std::unordered_map<std::string, RawValue>)items.at("dynamic");
64
+ return RCTPlatformColorComponentsFromDynamicItems(contextContainer, surfaceId, dynamicItems);
65
+ }
66
+ }
67
+
68
+ return clearColor();
69
+ }
70
+
71
+ } // namespace facebook::react
72
+
73
+ NS_ASSUME_NONNULL_END
@@ -5,8 +5,14 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- #include <react/renderer/graphics/ColorComponents.h>
9
- #include <vector>
8
+ #pragma once
9
+
10
+ #import <UIKit/UIKit.h>
11
+ #import <react/renderer/graphics/HostPlatformColor.h>
12
+ #import <vector>
10
13
 
11
14
  facebook::react::ColorComponents RCTPlatformColorComponentsFromSemanticItems(
12
15
  std::vector<std::string>& semanticItems);
16
+ UIColor* RCTPlatformColorFromSemanticItems(
17
+ std::vector<std::string>& semanticItems);
18
+ UIColor* RCTPlatformColorFromColor(const facebook::react::Color& color);
@@ -9,6 +9,7 @@
9
9
 
10
10
  #import <Foundation/Foundation.h>
11
11
  #import <UIKit/UIKit.h>
12
+ #import <react/utils/ManagedObjectWrapper.h>
12
13
 
13
14
  #include <string>
14
15
 
@@ -184,20 +185,30 @@ static inline facebook::react::ColorComponents _ColorComponentsFromUIColor(UICol
184
185
  }
185
186
 
186
187
  facebook::react::ColorComponents RCTPlatformColorComponentsFromSemanticItems(std::vector<std::string> &semanticItems)
188
+ {
189
+ return _ColorComponentsFromUIColor(RCTPlatformColorFromSemanticItems(semanticItems));
190
+ }
191
+
192
+ UIColor *RCTPlatformColorFromSemanticItems(std::vector<std::string> &semanticItems)
187
193
  {
188
194
  for (const auto &semanticCString : semanticItems) {
189
195
  NSString *semanticNSString = _NSStringFromCString(semanticCString);
190
196
  UIColor *uiColor = [UIColor colorNamed:semanticNSString];
191
197
  if (uiColor != nil) {
192
- return _ColorComponentsFromUIColor(uiColor);
198
+ return uiColor;
193
199
  }
194
200
  uiColor = _UIColorFromSemanticString(semanticNSString);
195
201
  if (uiColor != nil) {
196
- return _ColorComponentsFromUIColor(uiColor);
202
+ return uiColor;
197
203
  }
198
204
  }
199
205
 
200
- return {0, 0, 0, 0};
206
+ return UIColor.clearColor;
207
+ }
208
+
209
+ UIColor *RCTPlatformColorFromColor(const facebook::react::Color &color)
210
+ {
211
+ return (UIColor *)facebook::react::unwrapManagedObject(color.getUIColor());
201
212
  }
202
213
 
203
214
  NS_ASSUME_NONNULL_END
@@ -7,6 +7,7 @@
7
7
 
8
8
  #import <UIKit/UIKit.h>
9
9
 
10
+ #include <react/renderer/graphics/RCTPlatformColorUtils.h>
10
11
  #include <react/renderer/textlayoutmanager/RCTFontProperties.h>
11
12
  #include <react/renderer/textlayoutmanager/RCTFontUtils.h>
12
13
 
@@ -94,24 +95,8 @@ inline static NSUnderlineStyle RCTNSUnderlineStyleFromTextDecorationStyle(
94
95
  }
95
96
  }
96
97
 
97
- inline static UIColor *RCTUIColorFromSharedColor(const facebook::react::SharedColor &sharedColor)
98
+ // TODO: this file has some duplicates method, we can remove it
99
+ inline static UIColor *_Nullable RCTUIColorFromSharedColor(const facebook::react::SharedColor &sharedColor)
98
100
  {
99
- if (!sharedColor) {
100
- return nil;
101
- }
102
-
103
- if (*facebook::react::clearColor() == *sharedColor) {
104
- return [UIColor clearColor];
105
- }
106
-
107
- if (*facebook::react::blackColor() == *sharedColor) {
108
- return [UIColor blackColor];
109
- }
110
-
111
- if (*facebook::react::whiteColor() == *sharedColor) {
112
- return [UIColor whiteColor];
113
- }
114
-
115
- auto components = facebook::react::colorComponentsFromColor(sharedColor);
116
- return [UIColor colorWithRed:components.red green:components.green blue:components.blue alpha:components.alpha];
101
+ return RCTPlatformColorFromColor(*sharedColor);
117
102
  }
@@ -29,12 +29,17 @@ ReactInstance::ReactInstance(
29
29
  std::unique_ptr<JSRuntime> runtime,
30
30
  std::shared_ptr<MessageQueueThread> jsMessageQueueThread,
31
31
  std::shared_ptr<TimerManager> timerManager,
32
- JsErrorHandler::JsErrorHandlingFunc jsErrorHandlingFunc)
32
+ JsErrorHandler::JsErrorHandlingFunc jsErrorHandlingFunc,
33
+ jsinspector_modern::PageTarget* parentInspectorTarget)
33
34
  : runtime_(std::move(runtime)),
34
35
  jsMessageQueueThread_(jsMessageQueueThread),
35
36
  timerManager_(std::move(timerManager)),
36
37
  jsErrorHandler_(jsErrorHandlingFunc),
37
- hasFatalJsError_(std::make_shared<bool>(false)) {
38
+ hasFatalJsError_(std::make_shared<bool>(false)),
39
+ parentInspectorTarget_(parentInspectorTarget) {
40
+ if (parentInspectorTarget_) {
41
+ inspectorTarget_ = &parentInspectorTarget_->registerInstance(*this);
42
+ }
38
43
  auto runtimeExecutor = [weakRuntime = std::weak_ptr<JSRuntime>(runtime_),
39
44
  weakTimerManager =
40
45
  std::weak_ptr<TimerManager>(timerManager_),
@@ -95,6 +100,14 @@ ReactInstance::ReactInstance(
95
100
  std::make_shared<BufferedRuntimeExecutor>(pipedRuntimeExecutor);
96
101
  }
97
102
 
103
+ void ReactInstance::unregisterFromInspector() {
104
+ if (inspectorTarget_) {
105
+ assert(parentInspectorTarget_);
106
+ parentInspectorTarget_->unregisterInstance(*inspectorTarget_);
107
+ inspectorTarget_ = nullptr;
108
+ }
109
+ }
110
+
98
111
  RuntimeExecutor ReactInstance::getUnbufferedRuntimeExecutor() noexcept {
99
112
  return [runtimeScheduler = runtimeScheduler_.get()](
100
113
  std::function<void(jsi::Runtime & runtime)>&& callback) {
@@ -11,6 +11,7 @@
11
11
  #include <cxxreact/MessageQueueThread.h>
12
12
  #include <jserrorhandler/JsErrorHandler.h>
13
13
  #include <jsi/jsi.h>
14
+ #include <jsinspector-modern/ReactCdp.h>
14
15
  #include <jsireact/JSIExecutor.h>
15
16
  #include <react/renderer/runtimescheduler/RuntimeScheduler.h>
16
17
  #include <react/runtime/BufferedRuntimeExecutor.h>
@@ -25,7 +26,7 @@ struct CallableModule {
25
26
  jsi::Function factory;
26
27
  };
27
28
 
28
- class ReactInstance final {
29
+ class ReactInstance final : private jsinspector_modern::InstanceTargetDelegate {
29
30
  public:
30
31
  using BindingsInstallFunc = std::function<void(jsi::Runtime& runtime)>;
31
32
 
@@ -33,7 +34,8 @@ class ReactInstance final {
33
34
  std::unique_ptr<JSRuntime> runtime,
34
35
  std::shared_ptr<MessageQueueThread> jsMessageQueueThread,
35
36
  std::shared_ptr<TimerManager> timerManager,
36
- JsErrorHandler::JsErrorHandlingFunc JsErrorHandlingFunc);
37
+ JsErrorHandler::JsErrorHandlingFunc JsErrorHandlingFunc,
38
+ jsinspector_modern::PageTarget* parentInspectorTarget = nullptr);
37
39
 
38
40
  RuntimeExecutor getUnbufferedRuntimeExecutor() noexcept;
39
41
 
@@ -63,6 +65,12 @@ class ReactInstance final {
63
65
 
64
66
  void handleMemoryPressureJs(int pressureLevel);
65
67
 
68
+ /**
69
+ * Unregisters the instance from the inspector. This method must be called
70
+ * on the main (non-JS) thread.
71
+ */
72
+ void unregisterFromInspector();
73
+
66
74
  private:
67
75
  std::shared_ptr<JSRuntime> runtime_;
68
76
  std::shared_ptr<MessageQueueThread> jsMessageQueueThread_;
@@ -74,6 +82,9 @@ class ReactInstance final {
74
82
 
75
83
  // Whether there are errors caught during bundle loading
76
84
  std::shared_ptr<bool> hasFatalJsError_;
85
+
86
+ jsinspector_modern::InstanceTarget* inspectorTarget_{nullptr};
87
+ jsinspector_modern::PageTarget* parentInspectorTarget_{nullptr};
77
88
  };
78
89
 
79
90
  } // namespace facebook::react
@@ -198,7 +198,8 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
198
198
  bundleManager:_bundleManager
199
199
  turboModuleManagerDelegate:_turboModuleManagerDelegate
200
200
  onInitialBundleLoad:_onInitialBundleLoad
201
- moduleRegistry:_moduleRegistry];
201
+ moduleRegistry:_moduleRegistry
202
+ parentInspectorTarget:_inspectorTarget.get()];
202
203
  [_hostDelegate hostDidStart:self];
203
204
  }
204
205
 
@@ -265,7 +266,8 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
265
266
  bundleManager:_bundleManager
266
267
  turboModuleManagerDelegate:_turboModuleManagerDelegate
267
268
  onInitialBundleLoad:_onInitialBundleLoad
268
- moduleRegistry:_moduleRegistry];
269
+ moduleRegistry:_moduleRegistry
270
+ parentInspectorTarget:_inspectorTarget.get()];
269
271
  [_hostDelegate hostDidStart:self];
270
272
 
271
273
  for (RCTFabricSurface *surface in [self _getAttachedSurfaces]) {
@@ -275,12 +277,12 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
275
277
 
276
278
  - (void)dealloc
277
279
  {
280
+ [_instance invalidate];
278
281
  if (_inspectorPageId.has_value()) {
279
282
  facebook::react::jsinspector_modern::getInspectorInstance().removePage(*_inspectorPageId);
280
283
  _inspectorPageId.reset();
281
284
  _inspectorTarget.reset();
282
285
  }
283
- [_instance invalidate];
284
286
  }
285
287
 
286
288
  #pragma mark - RCTInstanceDelegate
@@ -8,6 +8,7 @@
8
8
  #import <UIKit/UIKit.h>
9
9
 
10
10
  #import <React/RCTDefines.h>
11
+ #import <jsinspector-modern/ReactCdp.h>
11
12
  #import <react/renderer/mapbuffer/MapBuffer.h>
12
13
  #import <react/runtime/JSRuntimeFactory.h>
13
14
  #import <react/runtime/ReactInstance.h>
@@ -60,7 +61,8 @@ typedef void (^_Null_unspecified RCTInstanceInitialBundleLoadCompletionBlock)();
60
61
  bundleManager:(RCTBundleManager *)bundleManager
61
62
  turboModuleManagerDelegate:(id<RCTTurboModuleManagerDelegate>)turboModuleManagerDelegate
62
63
  onInitialBundleLoad:(RCTInstanceInitialBundleLoadCompletionBlock)onInitialBundleLoad
63
- moduleRegistry:(RCTModuleRegistry *)moduleRegistry;
64
+ moduleRegistry:(RCTModuleRegistry *)moduleRegistry
65
+ parentInspectorTarget:(facebook::react::jsinspector_modern::PageTarget *)parentInspectorTarget;
64
66
 
65
67
  - (void)callFunctionOnJSModule:(NSString *)moduleName method:(NSString *)method args:(NSArray *)args;
66
68