react-native 0.74.0-rc.2 → 0.74.0-rc.4

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 (63) hide show
  1. package/Libraries/AppDelegate/RCTAppDelegate.h +5 -8
  2. package/Libraries/AppDelegate/RCTAppDelegate.mm +56 -130
  3. package/Libraries/AppDelegate/RCTRootViewFactory.h +123 -0
  4. package/Libraries/AppDelegate/RCTRootViewFactory.mm +253 -0
  5. package/Libraries/Components/View/ReactNativeStyleAttributes.js +1 -0
  6. package/Libraries/Core/ReactNativeVersion.js +1 -1
  7. package/Libraries/Core/registerCallableModule.d.ts +16 -0
  8. package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
  9. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +4 -0
  10. package/Libraries/StyleSheet/StyleSheetTypes.js +3 -0
  11. package/React/Base/RCTBridgeProxy+Cxx.h +20 -0
  12. package/React/Base/RCTBridgeProxy.h +2 -0
  13. package/React/Base/RCTBridgeProxy.mm +15 -0
  14. package/React/Base/RCTConvert.h +3 -0
  15. package/React/Base/RCTConvert.mm +9 -0
  16. package/React/Base/RCTVersion.m +1 -1
  17. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.h +7 -0
  18. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.mm +17 -2
  19. package/React/CoreModules/RCTRedBox.mm +7 -1
  20. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +32 -0
  21. package/React/Views/RCTCursor.h +13 -0
  22. package/React/Views/RCTView.h +3 -0
  23. package/React/Views/RCTView.m +30 -0
  24. package/React/Views/RCTViewManager.m +2 -0
  25. package/ReactAndroid/api/ReactAndroid.api +44 -0
  26. package/ReactAndroid/build.gradle.kts +26 -0
  27. package/ReactAndroid/cmake-utils/ReactNative-application.cmake +6 -0
  28. package/ReactAndroid/gradle.properties +1 -1
  29. package/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java +22 -16
  30. package/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt +9 -0
  31. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +5 -0
  32. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java +1 -1
  33. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +2 -1
  34. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JSIModuleRegistry.java +2 -2
  35. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeArrayInterface.java +1 -1
  36. package/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadHandler.java +0 -11
  37. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHostDelegate.kt +1 -1
  38. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt +11 -6
  39. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
  40. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessCatalystInstance.kt +201 -0
  41. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.java +4 -6
  42. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java +47 -0
  43. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java +1 -1
  44. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java +2 -0
  45. package/ReactAndroid/src/main/jni/react/jni/JMessageQueueThread.cpp +0 -1
  46. package/ReactAndroid/src/main/jni/react/jni/JMessageQueueThread.h +0 -4
  47. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  48. package/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +9 -0
  49. package/ReactCommon/react/renderer/components/view/BaseViewProps.h +2 -0
  50. package/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +1 -1
  51. package/ReactCommon/react/renderer/components/view/conversions.h +22 -0
  52. package/ReactCommon/react/renderer/components/view/primitives.h +2 -0
  53. package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImagePrimitivesConversions.h +2 -2
  54. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm +45 -12
  55. package/ReactCommon/yoga/yoga/algorithm/AbsoluteLayout.cpp +64 -40
  56. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +19 -20
  57. package/package.json +11 -11
  58. package/sdks/hermesc/osx-bin/hermes +0 -0
  59. package/sdks/hermesc/osx-bin/hermesc +0 -0
  60. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  61. package/template/package.json +5 -5
  62. package/types/index.d.ts +1 -0
  63. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultBindingsInstaller.kt +0 -20
@@ -6,7 +6,6 @@
6
6
  */
7
7
 
8
8
  #import "RCTInstance.h"
9
- #import <React/RCTBridgeProxy.h>
10
9
 
11
10
  #import <memory>
12
11
 
@@ -16,6 +15,8 @@
16
15
  #import <React/RCTBridge.h>
17
16
  #import <React/RCTBridgeModule.h>
18
17
  #import <React/RCTBridgeModuleDecorator.h>
18
+ #import <React/RCTBridgeProxy+Cxx.h>
19
+ #import <React/RCTBridgeProxy.h>
19
20
  #import <React/RCTComponentViewFactory.h>
20
21
  #import <React/RCTConstants.h>
21
22
  #import <React/RCTCxxUtils.h>
@@ -28,6 +29,8 @@
28
29
  #import <React/RCTLogBox.h>
29
30
  #import <React/RCTModuleData.h>
30
31
  #import <React/RCTPerformanceLogger.h>
32
+ #import <React/RCTRedBox.h>
33
+ #import <React/RCTReloadCommand.h>
31
34
  #import <React/RCTSurfacePresenter.h>
32
35
  #import <ReactCommon/RCTTurboModuleManager.h>
33
36
  #import <ReactCommon/RuntimeExecutor.h>
@@ -122,10 +125,17 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
122
125
  }];
123
126
  }
124
127
 
125
- [[NSNotificationCenter defaultCenter] addObserver:self
126
- selector:@selector(_notifyEventDispatcherObserversOfEvent_DEPRECATED:)
127
- name:@"RCTNotifyEventDispatcherObserversOfEvent_DEPRECATED"
128
- object:nil];
128
+ NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
129
+
130
+ [defaultCenter addObserver:self
131
+ selector:@selector(_notifyEventDispatcherObserversOfEvent_DEPRECATED:)
132
+ name:@"RCTNotifyEventDispatcherObserversOfEvent_DEPRECATED"
133
+ object:nil];
134
+
135
+ [defaultCenter addObserver:self
136
+ selector:@selector(didReceiveReloadCommand)
137
+ name:RCTTriggerReloadCommandNotification
138
+ object:nil];
129
139
 
130
140
  [self _start];
131
141
  }
@@ -247,6 +257,7 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
247
257
  RuntimeExecutor bufferedRuntimeExecutor = _reactInstance->getBufferedRuntimeExecutor();
248
258
  timerManager->setRuntimeExecutor(bufferedRuntimeExecutor);
249
259
 
260
+ auto jsCallInvoker = make_shared<BridgelessJSCallInvoker>(bufferedRuntimeExecutor);
250
261
  RCTBridgeProxy *bridgeProxy =
251
262
  [[RCTBridgeProxy alloc] initWithViewRegistry:_bridgeModuleDecorator.viewRegistry_DEPRECATED
252
263
  moduleRegistry:_bridgeModuleDecorator.moduleRegistry
@@ -265,14 +276,14 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
265
276
  }
266
277
  }
267
278
  runtime:_reactInstance->getJavaScriptContext()];
279
+ bridgeProxy.jsCallInvoker = jsCallInvoker;
268
280
  [RCTBridge setCurrentBridge:(RCTBridge *)bridgeProxy];
269
281
 
270
282
  // Set up TurboModules
271
- _turboModuleManager = [[RCTTurboModuleManager alloc]
272
- initWithBridgeProxy:bridgeProxy
273
- bridgeModuleDecorator:_bridgeModuleDecorator
274
- delegate:self
275
- jsInvoker:std::make_shared<BridgelessJSCallInvoker>(bufferedRuntimeExecutor)];
283
+ _turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridgeProxy:bridgeProxy
284
+ bridgeModuleDecorator:_bridgeModuleDecorator
285
+ delegate:self
286
+ jsInvoker:jsCallInvoker];
276
287
  _turboModuleManager.runtimeHandler = self;
277
288
 
278
289
  #if RCT_DEV
@@ -389,6 +400,24 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
389
400
  }
390
401
  }
391
402
 
403
+ - (void)handleBundleLoadingError:(NSError *)error
404
+ {
405
+ if (!_valid) {
406
+ return;
407
+ }
408
+
409
+ RCTRedBox *redBox = [_turboModuleManager moduleForName:"RedBox"];
410
+
411
+ RCTExecuteOnMainQueue(^{
412
+ [[NSNotificationCenter defaultCenter] postNotificationName:RCTJavaScriptDidFailToLoadNotification
413
+ object:self
414
+ userInfo:@{@"error" : error}];
415
+ [redBox showErrorMessage:[error localizedDescription]];
416
+
417
+ RCTFatal(error);
418
+ });
419
+ }
420
+
392
421
  - (void)_loadJSBundle:(NSURL *)sourceURL
393
422
  {
394
423
  #if RCT_DEV_MENU && __has_include(<React/RCTDevLoadingViewProtocol.h>)
@@ -420,8 +449,7 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
420
449
  }
421
450
 
422
451
  if (error) {
423
- // TODO(T91461138): Properly address bundle loading errors.
424
- RCTLogError(@"RCTInstance: Error while loading bundle: %@", error);
452
+ [strongSelf handleBundleLoadingError:error];
425
453
  [strongSelf invalidate];
426
454
  return;
427
455
  }
@@ -490,4 +518,9 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
490
518
  isFatal:errorMap.getBool(JSErrorHandlerKey::kIsFatal)];
491
519
  }
492
520
 
521
+ - (void)didReceiveReloadCommand
522
+ {
523
+ [self _loadJSBundle:[_bridgeModuleDecorator.bundleManager bundleURL]];
524
+ }
525
+
493
526
  @end
@@ -480,14 +480,10 @@ void layoutAbsoluteDescendants(
480
480
  LayoutData& layoutMarkerData,
481
481
  uint32_t currentDepth,
482
482
  uint32_t generationCount,
483
- float currentNodeMainOffsetFromContainingBlock,
484
- float currentNodeCrossOffsetFromContainingBlock,
483
+ float currentNodeLeftOffsetFromContainingBlock,
484
+ float currentNodeTopOffsetFromContainingBlock,
485
485
  float containingNodeAvailableInnerWidth,
486
486
  float containingNodeAvailableInnerHeight) {
487
- const FlexDirection mainAxis = resolveDirection(
488
- currentNode->style().flexDirection(), currentNodeDirection);
489
- const FlexDirection crossAxis =
490
- resolveCrossDirection(mainAxis, currentNodeDirection);
491
487
  for (auto child : currentNode->getChildren()) {
492
488
  if (child->style().display() == Display::None) {
493
489
  continue;
@@ -516,45 +512,73 @@ void layoutAbsoluteDescendants(
516
512
  currentDepth,
517
513
  generationCount);
518
514
 
519
- const bool isMainAxisRow = isRow(mainAxis);
520
- const bool mainInsetsDefined = isMainAxisRow
521
- ? child->style().horizontalInsetsDefined()
522
- : child->style().verticalInsetsDefined();
523
- const bool crossInsetsDefined = isMainAxisRow
524
- ? child->style().verticalInsetsDefined()
525
- : child->style().horizontalInsetsDefined();
526
-
527
- const float childMainOffsetFromParent = mainInsetsDefined
528
- ? (child->getLayout().position(flexStartEdge(mainAxis)) -
529
- currentNodeMainOffsetFromContainingBlock)
530
- : child->getLayout().position(flexStartEdge(mainAxis));
531
- const float childCrossOffsetFromParent = crossInsetsDefined
532
- ? (child->getLayout().position(flexStartEdge(crossAxis)) -
533
- currentNodeCrossOffsetFromContainingBlock)
534
- : child->getLayout().position(flexStartEdge(crossAxis));
535
-
536
- child->setLayoutPosition(
537
- childMainOffsetFromParent, flexStartEdge(mainAxis));
538
- child->setLayoutPosition(
539
- childCrossOffsetFromParent, flexStartEdge(crossAxis));
540
-
541
- if (needsTrailingPosition(mainAxis)) {
542
- setChildTrailingPosition(currentNode, child, mainAxis);
515
+ /*
516
+ * At this point the child has its position set but only on its the
517
+ * parent's flexStart edge. Additionally, this position should be
518
+ * interpreted relative to the containing block of the child if it had
519
+ * insets defined. So we need to adjust the position by subtracting the
520
+ * the parents offset from the containing block. However, getting that
521
+ * offset is complicated since the two nodes can have different main/cross
522
+ * axes.
523
+ */
524
+ const FlexDirection parentMainAxis = resolveDirection(
525
+ currentNode->style().flexDirection(), currentNodeDirection);
526
+ const FlexDirection parentCrossAxis =
527
+ resolveCrossDirection(parentMainAxis, currentNodeDirection);
528
+
529
+ if (needsTrailingPosition(parentMainAxis)) {
530
+ const bool mainInsetsDefined = isRow(parentMainAxis)
531
+ ? child->style().horizontalInsetsDefined()
532
+ : child->style().verticalInsetsDefined();
533
+ setChildTrailingPosition(
534
+ mainInsetsDefined ? containingNode : currentNode,
535
+ child,
536
+ parentMainAxis);
543
537
  }
544
- if (needsTrailingPosition(crossAxis)) {
545
- setChildTrailingPosition(currentNode, child, crossAxis);
538
+ if (needsTrailingPosition(parentCrossAxis)) {
539
+ const bool crossInsetsDefined = isRow(parentCrossAxis)
540
+ ? child->style().horizontalInsetsDefined()
541
+ : child->style().verticalInsetsDefined();
542
+ setChildTrailingPosition(
543
+ crossInsetsDefined ? containingNode : currentNode,
544
+ child,
545
+ parentCrossAxis);
546
546
  }
547
+
548
+ /*
549
+ * At this point we know the left and top physical edges of the child are
550
+ * set with positions that are relative to the containing block if insets
551
+ * are defined
552
+ */
553
+ const float childLeftPosition =
554
+ child->getLayout().position(PhysicalEdge::Left);
555
+ const float childTopPosition =
556
+ child->getLayout().position(PhysicalEdge::Top);
557
+
558
+ const float childLeftOffsetFromParent =
559
+ child->style().horizontalInsetsDefined()
560
+ ? (childLeftPosition - currentNodeLeftOffsetFromContainingBlock)
561
+ : childLeftPosition;
562
+ const float childTopOffsetFromParent =
563
+ child->style().verticalInsetsDefined()
564
+ ? (childTopPosition - currentNodeTopOffsetFromContainingBlock)
565
+ : childTopPosition;
566
+
567
+ child->setLayoutPosition(childLeftOffsetFromParent, PhysicalEdge::Left);
568
+ child->setLayoutPosition(childTopOffsetFromParent, PhysicalEdge::Top);
547
569
  } else if (
548
570
  child->style().positionType() == PositionType::Static &&
549
571
  !child->alwaysFormsContainingBlock()) {
550
572
  const Direction childDirection =
551
573
  child->resolveDirection(currentNodeDirection);
552
- const float childMainOffsetFromContainingBlock =
553
- currentNodeMainOffsetFromContainingBlock +
554
- child->getLayout().position(flexStartEdge(mainAxis));
555
- const float childCrossOffsetFromContainingBlock =
556
- currentNodeCrossOffsetFromContainingBlock +
557
- child->getLayout().position(flexStartEdge(crossAxis));
574
+ // By now all descendants of the containing block that are not absolute
575
+ // will have their positions set for left and top.
576
+ const float childLeftOffsetFromContainingBlock =
577
+ currentNodeLeftOffsetFromContainingBlock +
578
+ child->getLayout().position(PhysicalEdge::Left);
579
+ const float childTopOffsetFromContainingBlock =
580
+ currentNodeTopOffsetFromContainingBlock +
581
+ child->getLayout().position(PhysicalEdge::Top);
558
582
 
559
583
  layoutAbsoluteDescendants(
560
584
  containingNode,
@@ -564,8 +588,8 @@ void layoutAbsoluteDescendants(
564
588
  layoutMarkerData,
565
589
  currentDepth + 1,
566
590
  generationCount,
567
- childMainOffsetFromContainingBlock,
568
- childCrossOffsetFromContainingBlock,
591
+ childLeftOffsetFromContainingBlock,
592
+ childTopOffsetFromContainingBlock,
569
593
  containingNodeAvailableInnerWidth,
570
594
  containingNodeAvailableInnerHeight);
571
595
  }
@@ -2045,26 +2045,7 @@ static void calculateLayoutImpl(
2045
2045
  }
2046
2046
 
2047
2047
  if (performLayout) {
2048
- // STEP 10: SIZING AND POSITIONING ABSOLUTE CHILDREN
2049
- // Let the containing block layout its absolute descendants. By definition
2050
- // the containing block will not be static unless we are at the root.
2051
- if (node->style().positionType() != PositionType::Static ||
2052
- node->alwaysFormsContainingBlock() || depth == 1) {
2053
- layoutAbsoluteDescendants(
2054
- node,
2055
- node,
2056
- isMainAxisRow ? sizingModeMainDim : sizingModeCrossDim,
2057
- direction,
2058
- layoutMarkerData,
2059
- depth,
2060
- generationCount,
2061
- 0.0f,
2062
- 0.0f,
2063
- availableInnerWidth,
2064
- availableInnerHeight);
2065
- }
2066
-
2067
- // STEP 11: SETTING TRAILING POSITIONS FOR CHILDREN
2048
+ // STEP 10: SETTING TRAILING POSITIONS FOR CHILDREN
2068
2049
  const bool needsMainTrailingPos = needsTrailingPosition(mainAxis);
2069
2050
  const bool needsCrossTrailingPos = needsTrailingPosition(crossAxis);
2070
2051
 
@@ -2087,6 +2068,24 @@ static void calculateLayoutImpl(
2087
2068
  }
2088
2069
  }
2089
2070
  }
2071
+
2072
+ // STEP 11: SIZING AND POSITIONING ABSOLUTE CHILDREN
2073
+ // Let the containing block layout its absolute descendants.
2074
+ if (node->style().positionType() != PositionType::Static ||
2075
+ node->alwaysFormsContainingBlock() || depth == 1) {
2076
+ layoutAbsoluteDescendants(
2077
+ node,
2078
+ node,
2079
+ isMainAxisRow ? sizingModeMainDim : sizingModeCrossDim,
2080
+ direction,
2081
+ layoutMarkerData,
2082
+ depth,
2083
+ generationCount,
2084
+ 0.0f,
2085
+ 0.0f,
2086
+ availableInnerWidth,
2087
+ availableInnerHeight);
2088
+ }
2090
2089
  }
2091
2090
  }
2092
2091
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native",
3
- "version": "0.74.0-rc.2",
3
+ "version": "0.74.0-rc.4",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -98,16 +98,16 @@
98
98
  },
99
99
  "dependencies": {
100
100
  "@jest/create-cache-key-function": "^29.6.3",
101
- "@react-native-community/cli": "13.6.1",
102
- "@react-native-community/cli-platform-android": "13.6.1",
103
- "@react-native-community/cli-platform-ios": "13.6.1",
104
- "@react-native/assets-registry": "0.74.0",
105
- "@react-native/codegen": "0.74.2",
106
- "@react-native/community-cli-plugin": "0.74.4",
107
- "@react-native/gradle-plugin": "0.74.1",
108
- "@react-native/js-polyfills": "0.74.0",
109
- "@react-native/normalize-colors": "0.74.1",
110
- "@react-native/virtualized-lists": "0.74.1",
101
+ "@react-native-community/cli": "13.6.2",
102
+ "@react-native-community/cli-platform-android": "13.6.2",
103
+ "@react-native-community/cli-platform-ios": "13.6.2",
104
+ "@react-native/assets-registry": "0.74.75",
105
+ "@react-native/codegen": "0.74.75",
106
+ "@react-native/community-cli-plugin": "0.74.75",
107
+ "@react-native/gradle-plugin": "0.74.75",
108
+ "@react-native/js-polyfills": "0.74.75",
109
+ "@react-native/normalize-colors": "0.74.75",
110
+ "@react-native/virtualized-lists": "0.74.75",
111
111
  "abort-controller": "^3.0.0",
112
112
  "anser": "^1.4.9",
113
113
  "ansi-regex": "^5.0.0",
Binary file
Binary file
Binary file
@@ -11,16 +11,16 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "react": "18.2.0",
14
- "react-native": "0.74.0-rc.2"
14
+ "react-native": "0.74.0-rc.4"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@babel/core": "^7.20.0",
18
18
  "@babel/preset-env": "^7.20.0",
19
19
  "@babel/runtime": "^7.20.0",
20
- "@react-native/babel-preset": "0.74.2",
21
- "@react-native/eslint-config": "0.74.1",
22
- "@react-native/metro-config": "0.74.2",
23
- "@react-native/typescript-config": "0.74.1",
20
+ "@react-native/babel-preset": "0.74.75",
21
+ "@react-native/eslint-config": "0.74.75",
22
+ "@react-native/metro-config": "0.74.75",
23
+ "@react-native/typescript-config": "0.74.75",
24
24
  "@types/react": "^18.2.6",
25
25
  "@types/react-test-renderer": "^18.0.0",
26
26
  "babel-jest": "^29.6.3",
package/types/index.d.ts CHANGED
@@ -103,6 +103,7 @@ export * from '../Libraries/Components/View/View';
103
103
  export * from '../Libraries/Components/View/ViewAccessibility';
104
104
  export * from '../Libraries/Components/View/ViewPropTypes';
105
105
  export * from '../Libraries/Components/Button';
106
+ export * from '../Libraries/Core/registerCallableModule';
106
107
  export * from '../Libraries/DevToolsSettings/DevToolsSettingsManager';
107
108
  export * from '../Libraries/EventEmitter/NativeEventEmitter';
108
109
  export * from '../Libraries/EventEmitter/RCTDeviceEventEmitter';
@@ -1,20 +0,0 @@
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
- package com.facebook.react.defaults
9
-
10
- import com.facebook.jni.annotations.DoNotStrip
11
- import com.facebook.react.common.annotations.UnstableReactNativeAPI
12
- import com.facebook.react.runtime.BindingsInstaller
13
-
14
- /**
15
- * A utility class that provides users a default [BindingsInstaller] class that's used to initialize
16
- * [ReactHostDelegate]
17
- */
18
- @DoNotStrip
19
- @UnstableReactNativeAPI
20
- public class DefaultBindingsInstaller : BindingsInstaller(null) {}