react-native-tvos 0.76.0-0rc0 → 0.76.0-0rc2

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 (52) hide show
  1. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +3 -0
  2. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +10 -0
  3. package/Libraries/Components/View/ReactNativeStyleAttributes.js +2 -2
  4. package/Libraries/Core/ReactNativeVersion.js +1 -1
  5. package/Libraries/NativeComponent/BaseViewConfig.android.js +2 -2
  6. package/Libraries/NativeComponent/BaseViewConfig.ios.js +11 -2
  7. package/Libraries/ReactNative/getNativeComponentAttributes.js +4 -0
  8. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +98 -5
  9. package/Libraries/StyleSheet/StyleSheetTypes.js +5 -5
  10. package/Libraries/StyleSheet/processBoxShadow.js +5 -7
  11. package/Libraries/StyleSheet/processFilter.js +4 -4
  12. package/React/Base/RCTVersion.m +1 -1
  13. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +23 -0
  14. package/React/Views/RCTViewManager.m +10 -9
  15. package/React/Views/ScrollView/RCTScrollView.m +20 -0
  16. package/ReactAndroid/api/ReactAndroid.api +27 -0
  17. package/ReactAndroid/build.gradle.kts +17 -8
  18. package/ReactAndroid/gradle.properties +1 -1
  19. package/ReactAndroid/hermes-engine/build.gradle.kts +0 -2
  20. package/ReactAndroid/publish.gradle +1 -1
  21. package/ReactAndroid/src/main/java/com/facebook/react/jstasks/HeadlessJsTaskContext.java +13 -14
  22. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
  23. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessDevSupportManager.java +14 -9
  24. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java +26 -21
  25. package/{sdks/ossonly-soloader/src/main/java/com/facebook/soloader/MergedSoMapping.kt → ReactAndroid/src/main/java/com/facebook/react/soloader/OpenSourceMergedSoMapping.kt} +6 -4
  26. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.kt +2 -2
  27. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java +18 -0
  28. package/ReactAndroid/src/main/jni/first-party/jni-lib-merge/jni_lib_merge.c +2 -1
  29. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  30. package/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +4 -4
  31. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHermesInstance.h +3 -0
  32. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHermesInstance.mm +7 -0
  33. package/cli.js +9 -5
  34. package/gradle/libs.versions.toml +2 -0
  35. package/jest-preset.js +5 -1
  36. package/package.json +12 -11
  37. package/scripts/cocoapods/privacy_manifest_utils.rb +23 -8
  38. package/scripts/cocoapods/utils.rb +10 -2
  39. package/scripts/react-native-xcode.sh +2 -0
  40. package/sdks/hermes-engine/hermes-engine.podspec +1 -1
  41. package/sdks/hermes-engine/utils/build-apple-framework.sh +0 -12
  42. package/sdks/hermes-engine/utils/build-ios-framework.sh +21 -4
  43. package/sdks/hermesc/osx-bin/hermes +0 -0
  44. package/sdks/hermesc/osx-bin/hermesc +0 -0
  45. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  46. package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -9
  47. package/types/experimental.d.ts +12 -98
  48. package/sdks/ossonly-soloader/src/main/java/com/facebook/soloader/DoNotOptimize.kt +0 -10
  49. package/sdks/ossonly-soloader/src/main/java/com/facebook/soloader/SoLoader.kt +0 -53
  50. package/sdks/ossonly-soloader/src/main/java/com/facebook/soloader/nativeloader/NativeLoader.kt +0 -28
  51. package/sdks/ossonly-soloader/src/main/java/com/facebook/soloader/nativeloader/NativeLoaderDelegate.kt +0 -23
  52. package/sdks/ossonly-soloader/src/main/java/com/facebook/soloader/nativeloader/SystemDelegate.kt +0 -10
@@ -161,6 +161,9 @@ export const __INTERNAL_VIEW_CONFIG: PartialViewConfig =
161
161
  snapToInterval: true,
162
162
  snapToOffsets: true,
163
163
  snapToStart: true,
164
+ verticalScrollIndicatorInsets: {
165
+ diff: require('../../Utilities/differ/insetsDiffer'),
166
+ },
164
167
  zoomScale: true,
165
168
  ...ConditionallyIgnoredEventHandlers({
166
169
  onScrollBeginDrag: true,
@@ -85,8 +85,15 @@ const RCTTextInputViewConfig = {
85
85
  topContentSizeChange: {
86
86
  registrationName: 'onContentSizeChange',
87
87
  },
88
+ topChangeSync: {
89
+ registrationName: 'onChangeSync',
90
+ },
91
+ topKeyPressSync: {
92
+ registrationName: 'onKeyPressSync',
93
+ },
88
94
  },
89
95
  validAttributes: {
96
+ dynamicTypeRamp: true,
90
97
  fontSize: true,
91
98
  fontWeight: true,
92
99
  fontVariant: true,
@@ -97,6 +104,7 @@ const RCTTextInputViewConfig = {
97
104
  textTransform: true,
98
105
  textAlign: true,
99
106
  fontFamily: true,
107
+ lineBreakModeIOS: true,
100
108
  lineHeight: true,
101
109
  isHighlighted: true,
102
110
  writingDirection: true,
@@ -150,6 +158,8 @@ const RCTTextInputViewConfig = {
150
158
  onSelectionChange: true,
151
159
  onContentSizeChange: true,
152
160
  onScroll: true,
161
+ onChangeSync: true,
162
+ onKeyPressSync: true,
153
163
  }),
154
164
  },
155
165
  };
@@ -120,7 +120,7 @@ const ReactNativeStyleAttributes: {[string]: AnyAttributeType, ...} = {
120
120
  /**
121
121
  * Filter
122
122
  */
123
- experimental_filter: {process: processFilter},
123
+ filter: {process: processFilter},
124
124
 
125
125
  /**
126
126
  * MixBlendMode
@@ -135,7 +135,7 @@ const ReactNativeStyleAttributes: {[string]: AnyAttributeType, ...} = {
135
135
  /*
136
136
  * BoxShadow
137
137
  */
138
- experimental_boxShadow: {process: processBoxShadow},
138
+ boxShadow: {process: processBoxShadow},
139
139
 
140
140
  /**
141
141
  * Linear Gradient
@@ -17,7 +17,7 @@ const version: $ReadOnly<{
17
17
  major: 0,
18
18
  minor: 76,
19
19
  patch: 0,
20
- prerelease: '0rc0',
20
+ prerelease: '0rc2',
21
21
  };
22
22
 
23
23
  module.exports = {version};
@@ -170,10 +170,10 @@ const validAttributesForNonEventProps = {
170
170
  experimental_backgroundImage: {
171
171
  process: require('../StyleSheet/processBackgroundImage').default,
172
172
  },
173
- experimental_boxShadow: {
173
+ boxShadow: {
174
174
  process: require('../StyleSheet/processBoxShadow').default,
175
175
  },
176
- experimental_filter: {
176
+ filter: {
177
177
  process: require('../StyleSheet/processFilter').default,
178
178
  },
179
179
  experimental_mixBlendMode: true,
@@ -199,6 +199,7 @@ const validAttributesForNonEventProps = {
199
199
  testID: true,
200
200
  backgroundColor: {process: require('../StyleSheet/processColor').default},
201
201
  backfaceVisibility: true,
202
+ cursor: true,
202
203
  opacity: true,
203
204
  shadowColor: {process: require('../StyleSheet/processColor').default},
204
205
  shadowOffset: {diff: require('../Utilities/differ/sizesDiffer')},
@@ -217,16 +218,18 @@ const validAttributesForNonEventProps = {
217
218
  role: true,
218
219
  borderRadius: true,
219
220
  borderColor: {process: require('../StyleSheet/processColor').default},
221
+ borderBlockColor: {process: require('../StyleSheet/processColor').default},
220
222
  borderCurve: true,
221
223
  borderWidth: true,
224
+ borderBlockWidth: true,
222
225
  borderStyle: true,
223
226
  hitSlop: {diff: require('../Utilities/differ/insetsDiffer')},
224
227
  collapsable: true,
225
228
  collapsableChildren: true,
226
- experimental_filter: {
229
+ filter: {
227
230
  process: require('../StyleSheet/processFilter').default,
228
231
  },
229
- experimental_boxShadow: {
232
+ boxShadow: {
230
233
  process: require('../StyleSheet/processBoxShadow').default,
231
234
  },
232
235
  experimental_mixBlendMode: true,
@@ -241,9 +244,15 @@ const validAttributesForNonEventProps = {
241
244
  borderLeftWidth: true,
242
245
  borderLeftColor: {process: require('../StyleSheet/processColor').default},
243
246
  borderStartWidth: true,
247
+ borderBlockStartWidth: true,
244
248
  borderStartColor: {process: require('../StyleSheet/processColor').default},
249
+ borderBlockStartColor: {
250
+ process: require('../StyleSheet/processColor').default,
251
+ },
245
252
  borderEndWidth: true,
253
+ borderBlockEndWidth: true,
246
254
  borderEndColor: {process: require('../StyleSheet/processColor').default},
255
+ borderBlockEndColor: {process: require('../StyleSheet/processColor').default},
247
256
 
248
257
  borderTopLeftRadius: true,
249
258
  borderTopRightRadius: true,
@@ -188,6 +188,10 @@ function getProcessorForType(typeName: string): ?(nextProp: any) => any {
188
188
  case 'UIImage':
189
189
  case 'RCTImageSource':
190
190
  return resolveAssetSource;
191
+ case 'BoxShadowArray':
192
+ return processBoxShadow;
193
+ case 'FilterArray':
194
+ return processFilter;
191
195
  // Android Types
192
196
  case 'Color':
193
197
  return processColor;
@@ -110,11 +110,102 @@ export interface FlexStyle {
110
110
  top?: DimensionValue | undefined;
111
111
  width?: DimensionValue | undefined;
112
112
  zIndex?: number | undefined;
113
+ direction?: 'inherit' | 'ltr' | 'rtl' | undefined;
113
114
 
114
115
  /**
115
- * @platform ios
116
+ * Equivalent to `top`, `bottom`, `right` and `left`
116
117
  */
117
- direction?: 'inherit' | 'ltr' | 'rtl' | undefined;
118
+ inset?: DimensionValue | undefined;
119
+
120
+ /**
121
+ * Equivalent to `top`, `bottom`
122
+ */
123
+ insetBlock?: DimensionValue | undefined;
124
+
125
+ /**
126
+ * Equivalent to `bottom`
127
+ */
128
+ insetBlockEnd?: DimensionValue | undefined;
129
+
130
+ /**
131
+ * Equivalent to `top`
132
+ */
133
+ insetBlockStart?: DimensionValue | undefined;
134
+
135
+ /**
136
+ * Equivalent to `right` and `left`
137
+ */
138
+ insetInline?: DimensionValue | undefined;
139
+
140
+ /**
141
+ * Equivalent to `right` or `left`
142
+ */
143
+ insetInlineEnd?: DimensionValue | undefined;
144
+
145
+ /**
146
+ * Equivalent to `right` or `left`
147
+ */
148
+ insetInlineStart?: DimensionValue | undefined;
149
+
150
+ /**
151
+ * Equivalent to `marginVertical`
152
+ */
153
+ marginBlock?: DimensionValue | undefined;
154
+
155
+ /**
156
+ * Equivalent to `marginBottom`
157
+ */
158
+ marginBlockEnd?: DimensionValue | undefined;
159
+
160
+ /**
161
+ * Equivalent to `marginTop`
162
+ */
163
+ marginBlockStart?: DimensionValue | undefined;
164
+
165
+ /**
166
+ * Equivalent to `marginHorizontal`
167
+ */
168
+ marginInline?: DimensionValue | undefined;
169
+
170
+ /**
171
+ * Equivalent to `marginEnd`
172
+ */
173
+ marginInlineEnd?: DimensionValue | undefined;
174
+
175
+ /**
176
+ * Equivalent to `marginStart`
177
+ */
178
+ marginInlineStart?: DimensionValue | undefined;
179
+
180
+ /**
181
+ * Equivalent to `paddingVertical`
182
+ */
183
+ paddingBlock?: DimensionValue | undefined;
184
+
185
+ /**
186
+ * Equivalent to `paddingBottom`
187
+ */
188
+ paddingBlockEnd?: DimensionValue | undefined;
189
+
190
+ /**
191
+ * Equivalent to `paddingTop`
192
+ */
193
+ paddingBlockStart?: DimensionValue | undefined;
194
+
195
+ /**
196
+ * Equivalent to `paddingHorizontal`
197
+ */
198
+ paddingInline?: DimensionValue | undefined;
199
+
200
+ /**
201
+ * Equivalent to `paddingEnd`
202
+ */
203
+ paddingInlineEnd?: DimensionValue | undefined;
204
+
205
+ /**
206
+ * Equivalent to `paddingStart`
207
+ */
208
+ paddingInlineStart?: DimensionValue | undefined;
118
209
  }
119
210
 
120
211
  export interface ShadowStyleIOS {
@@ -239,16 +330,16 @@ export type FilterFunction =
239
330
  | {opacity: number | string}
240
331
  | {saturate: number | string}
241
332
  | {sepia: number | string}
242
- | {dropShadow: DropShadowPrimitive | string};
333
+ | {dropShadow: DropShadowValue | string};
243
334
 
244
- export type DropShadowPrimitive = {
335
+ export type DropShadowValue = {
245
336
  offsetX: number | string;
246
337
  offsetY: number | string;
247
338
  standardDeviation?: number | string | undefined;
248
339
  color?: ColorValue | number | undefined;
249
340
  };
250
341
 
251
- export type BoxShadowPrimitive = {
342
+ export type BoxShadowValue = {
252
343
  offsetX: number | string;
253
344
  offsetY: number | string;
254
345
  color?: string | undefined;
@@ -336,6 +427,8 @@ export interface ViewStyle extends FlexStyle, ShadowStyleIOS, TransformsStyle {
336
427
  pointerEvents?: 'box-none' | 'none' | 'box-only' | 'auto' | undefined;
337
428
  isolation?: 'auto' | 'isolate' | undefined;
338
429
  cursor?: CursorValue | undefined;
430
+ boxShadow?: ReadonlyArray<BoxShadowValue> | string | undefined;
431
+ filter?: ReadonlyArray<FilterFunction> | string | undefined;
339
432
  }
340
433
 
341
434
  export type FontVariant =
@@ -701,9 +701,9 @@ export type FilterFunction =
701
701
  | {opacity: number | string}
702
702
  | {saturate: number | string}
703
703
  | {sepia: number | string}
704
- | {dropShadow: DropShadowPrimitive | string};
704
+ | {dropShadow: DropShadowValue | string};
705
705
 
706
- export type DropShadowPrimitive = {
706
+ export type DropShadowValue = {
707
707
  offsetX: number | string,
708
708
  offsetY: number | string,
709
709
  standardDeviation?: number | string,
@@ -720,7 +720,7 @@ export type GradientValue = {
720
720
  }>,
721
721
  };
722
722
 
723
- export type BoxShadowPrimitive = {
723
+ export type BoxShadowValue = {
724
724
  offsetX: number | string,
725
725
  offsetY: number | string,
726
726
  color?: ____ColorValue_Internal,
@@ -789,8 +789,8 @@ export type ____ViewStyle_InternalCore = $ReadOnly<{
789
789
  elevation?: number,
790
790
  pointerEvents?: 'auto' | 'none' | 'box-none' | 'box-only',
791
791
  cursor?: CursorValue,
792
- experimental_boxShadow?: $ReadOnlyArray<BoxShadowPrimitive> | string,
793
- experimental_filter?: $ReadOnlyArray<FilterFunction> | string,
792
+ boxShadow?: $ReadOnlyArray<BoxShadowValue> | string,
793
+ filter?: $ReadOnlyArray<FilterFunction> | string,
794
794
  experimental_mixBlendMode?: ____BlendMode_Internal,
795
795
  experimental_backgroundImage?: $ReadOnlyArray<GradientValue> | string,
796
796
  isolation?: 'auto' | 'isolate',
@@ -10,7 +10,7 @@
10
10
  */
11
11
 
12
12
  import type {ProcessedColorValue} from './processColor';
13
- import type {BoxShadowPrimitive} from './StyleSheetTypes';
13
+ import type {BoxShadowValue} from './StyleSheetTypes';
14
14
 
15
15
  import processColor from './processColor';
16
16
 
@@ -24,7 +24,7 @@ export type ParsedBoxShadow = {
24
24
  };
25
25
 
26
26
  export default function processBoxShadow(
27
- rawBoxShadows: ?($ReadOnlyArray<BoxShadowPrimitive> | string),
27
+ rawBoxShadows: ?($ReadOnlyArray<BoxShadowValue> | string),
28
28
  ): Array<ParsedBoxShadow> {
29
29
  const result: Array<ParsedBoxShadow> = [];
30
30
  if (rawBoxShadows == null) {
@@ -106,16 +106,14 @@ export default function processBoxShadow(
106
106
  return result;
107
107
  }
108
108
 
109
- function parseBoxShadowString(
110
- rawBoxShadows: string,
111
- ): Array<BoxShadowPrimitive> {
112
- let result: Array<BoxShadowPrimitive> = [];
109
+ function parseBoxShadowString(rawBoxShadows: string): Array<BoxShadowValue> {
110
+ let result: Array<BoxShadowValue> = [];
113
111
 
114
112
  for (const rawBoxShadow of rawBoxShadows
115
113
  .split(/,(?![^()]*\))/) // split by comma that is not in parenthesis
116
114
  .map(bS => bS.trim())
117
115
  .filter(bS => bS !== '')) {
118
- const boxShadow: BoxShadowPrimitive = {
116
+ const boxShadow: BoxShadowValue = {
119
117
  offsetX: 0,
120
118
  offsetY: 0,
121
119
  };
@@ -12,7 +12,7 @@
12
12
  'use strict';
13
13
 
14
14
  import type {ColorValue} from './StyleSheet';
15
- import type {DropShadowPrimitive, FilterFunction} from './StyleSheetTypes';
15
+ import type {DropShadowValue, FilterFunction} from './StyleSheetTypes';
16
16
 
17
17
  import processColor from './processColor';
18
18
 
@@ -179,7 +179,7 @@ function _getFilterAmount(filterName: string, filterArgs: mixed): ?number {
179
179
  }
180
180
 
181
181
  function parseDropShadow(
182
- rawDropShadow: string | DropShadowPrimitive,
182
+ rawDropShadow: string | DropShadowValue,
183
183
  ): ?ParsedDropShadow {
184
184
  const dropShadow =
185
185
  typeof rawDropShadow === 'string'
@@ -248,8 +248,8 @@ function parseDropShadow(
248
248
  return parsedDropShadow;
249
249
  }
250
250
 
251
- function parseDropShadowString(rawDropShadow: string): ?DropShadowPrimitive {
252
- const dropShadow: DropShadowPrimitive = {
251
+ function parseDropShadowString(rawDropShadow: string): ?DropShadowValue {
252
+ const dropShadow: DropShadowValue = {
253
253
  offsetX: 0,
254
254
  offsetY: 0,
255
255
  };
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(76),
26
26
  RCTVersionPatch: @(0),
27
- RCTVersionPrerelease: @"0rc0",
27
+ RCTVersionPrerelease: @"0rc2",
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -740,6 +740,29 @@ static inline UIViewAnimationOptions animationOptionsWithCurve(UIViewAnimationCu
740
740
  [self _handleFinishedScrolling:scrollView];
741
741
  }
742
742
 
743
+ - (void)didMoveToWindow
744
+ {
745
+ [super didMoveToWindow];
746
+
747
+ if (!self.window) {
748
+ // The view is being removed, ensure that the scroll end event is dispatched
749
+ [self _handleScrollEndIfNeeded];
750
+ }
751
+ }
752
+
753
+ - (void)_handleScrollEndIfNeeded
754
+ {
755
+ if (_scrollView.isDecelerating || !_scrollView.isTracking) {
756
+ if (!_eventEmitter) {
757
+ return;
758
+ }
759
+ static_cast<const ScrollViewEventEmitter &>(*_eventEmitter).onMomentumScrollEnd([self _scrollViewMetrics]);
760
+
761
+ [self _updateStateWithContentOffset];
762
+ _isUserTriggeredScrolling = NO;
763
+ }
764
+ }
765
+
743
766
  - (void)_handleFinishedScrolling:(UIScrollView *)scrollView
744
767
  {
745
768
  [self _forceDispatchNextScrollEvent];
@@ -459,18 +459,19 @@ RCT_CUSTOM_VIEW_PROPERTY(experimental_layoutConformance, NSString *, RCTView)
459
459
  // filtered by view configs.
460
460
  }
461
461
 
462
- RCT_CUSTOM_VIEW_PROPERTY(experimental_filter, NSArray *, RCTView)
462
+ typedef NSArray *FilterArray; // Custom type to make the StaticViewConfigValidator Happy
463
+ RCT_CUSTOM_VIEW_PROPERTY(filter, FilterArray, RCTView)
463
464
  {
464
- // Property is only to be used in the new renderer.
465
- // It is necessary to add it here, otherwise it gets
466
- // filtered by view configs.
465
+ // Property is only to be used in the new renderer.
466
+ // It is necessary to add it here, otherwise it gets
467
+ // filtered by view configs.
467
468
  }
468
-
469
- RCT_CUSTOM_VIEW_PROPERTY(experimental_boxShadow, NSArray *, RCTView)
469
+ typedef NSArray *BoxShadowArray; // Custom type to make the StaticViewConfigValidator Happy
470
+ RCT_CUSTOM_VIEW_PROPERTY(boxShadow, BoxShadowArray, RCTView)
470
471
  {
471
- // Property is only to be used in the new renderer.
472
- // It is necessary to add it here, otherwise it gets
473
- // filtered by view configs.
472
+ // Property is only to be used in the new renderer.
473
+ // It is necessary to add it here, otherwise it gets
474
+ // filtered by view configs.
474
475
  }
475
476
 
476
477
  RCT_CUSTOM_VIEW_PROPERTY(experimental_mixBlendMode, NSString *, RCTView)
@@ -896,6 +896,26 @@ RCT_SCROLL_EVENT_HANDLER(scrollViewDidScrollToTop, onScrollToTop)
896
896
  RCT_FORWARD_SCROLL_EVENT(scrollViewDidEndZooming : scrollView withView : view atScale : scale);
897
897
  }
898
898
 
899
+ - (void)didMoveToWindow
900
+ {
901
+ [super didMoveToWindow];
902
+ if (self.window == nil) {
903
+ // Check if the ScrollView was in motion
904
+ if (_scrollView.isDecelerating || !_scrollView.isTracking) {
905
+ // Trigger the onMomentumScrollEnd event manually
906
+ RCT_SEND_SCROLL_EVENT(onMomentumScrollEnd, nil);
907
+ // We can't use the RCT_FORWARD_SCROLL_EVENT here beacuse the `_cmd` parameter passed
908
+ // to `respondsToSelector` is the current method - so it will be `didMoveToWindow` - and not
909
+ // `scrollViewDidEndDecelerating` that is passed.
910
+ for (NSObject<UIScrollViewDelegate> *scrollViewListener in _scrollListeners) {
911
+ if ([scrollViewListener respondsToSelector:@selector(scrollViewDidEndDecelerating:)]) {
912
+ [scrollViewListener scrollViewDidEndDecelerating:_scrollView];
913
+ }
914
+ }
915
+ }
916
+ }
917
+ }
918
+
899
919
  - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
900
920
  {
901
921
  // Fire a final scroll event
@@ -4047,6 +4047,33 @@ public class com/facebook/react/shell/MainReactPackage$$ReactModuleInfoProvider
4047
4047
  public fun getReactModuleInfos ()Ljava/util/Map;
4048
4048
  }
4049
4049
 
4050
+ public final class com/facebook/react/soloader/OpenSourceMergedSoMapping : com/facebook/soloader/ExternalSoMapping {
4051
+ public static final field INSTANCE Lcom/facebook/react/soloader/OpenSourceMergedSoMapping;
4052
+ public fun invokeJniOnload (Ljava/lang/String;)V
4053
+ public final fun libfabricjni_so ()I
4054
+ public final fun libhermes_executor_so ()I
4055
+ public final fun libhermesinstancejni_so ()I
4056
+ public final fun libhermestooling_so ()I
4057
+ public final fun libjscexecutor_so ()I
4058
+ public final fun libjscinstance_so ()I
4059
+ public final fun libjscruntime_so ()I
4060
+ public final fun libjsctooling_so ()I
4061
+ public final fun libjsijniprofiler_so ()I
4062
+ public final fun libjsinspector_so ()I
4063
+ public final fun libmapbufferjni_so ()I
4064
+ public final fun libreact_devsupportjni_so ()I
4065
+ public final fun libreact_featureflagsjni_so ()I
4066
+ public final fun libreact_newarchdefaults_so ()I
4067
+ public final fun libreactnative_so ()I
4068
+ public final fun libreactnativeblob_so ()I
4069
+ public final fun libreactnativejni_so ()I
4070
+ public final fun librninstance_so ()I
4071
+ public final fun libturbomodulejsijni_so ()I
4072
+ public final fun libuimanagerjni_so ()I
4073
+ public final fun libyoga_so ()I
4074
+ public fun mapLibName (Ljava/lang/String;)Ljava/lang/String;
4075
+ }
4076
+
4050
4077
  public final class com/facebook/react/touch/JSResponderHandler : com/facebook/react/touch/OnInterceptTouchEventListener {
4051
4078
  public fun <init> ()V
4052
4079
  public final fun clearJSResponder ()V
@@ -222,10 +222,20 @@ val preparePrefab by
222
222
  Pair(
223
223
  "../ReactCommon/react/renderer/observers/events/",
224
224
  "react/renderer/observers/events/"),
225
+ // react_timing
226
+ Pair("../ReactCommon/react/timing/", "react/timing/"),
225
227
  // yoga
226
228
  Pair("../ReactCommon/yoga/", ""),
227
229
  Pair("src/main/jni/first-party/yogajni/jni", ""),
228
230
  )),
231
+ PrefabPreprocessingEntry("hermestooling",
232
+ // hermes_executor
233
+ Pair("../ReactCommon/hermes/inspector-modern/", "hermes/inspector-modern/")
234
+ ),
235
+ PrefabPreprocessingEntry("jsctooling",
236
+ // jsc
237
+ Pair("../ReactCommon/jsc/", "jsc/")
238
+ ),
229
239
  ))
230
240
  outputDir.set(prefabHeadersDir)
231
241
  }
@@ -552,7 +562,6 @@ android {
552
562
  "src/main/res/views/alert",
553
563
  "src/main/res/views/modal",
554
564
  "src/main/res/views/uimanager"))
555
- kotlin.srcDir(project.file("../sdks/ossonly-soloader/src/main/java"))
556
565
  java.exclude("com/facebook/react/processing")
557
566
  java.exclude("com/facebook/react/module/processing")
558
567
  }
@@ -582,6 +591,8 @@ android {
582
591
  prefab {
583
592
  create("jsi") { headers = File(prefabHeadersDir, "jsi").absolutePath }
584
593
  create("reactnative") { headers = File(prefabHeadersDir, "reactnative").absolutePath }
594
+ create("hermestooling") { headers = File(prefabHeadersDir, "hermestooling").absolutePath }
595
+ create("jsctooling") { headers = File(prefabHeadersDir, "jsctooling").absolutePath }
585
596
  }
586
597
 
587
598
  publishing {
@@ -600,11 +611,6 @@ android {
600
611
  tasks.withType<KotlinCompile>().configureEach { exclude("com/facebook/annotationprocessors/**") }
601
612
 
602
613
  dependencies {
603
- implementation(libs.fresco)
604
- implementation(libs.fresco.middleware)
605
- implementation(libs.fresco.imagepipeline.okhttp3)
606
- implementation(libs.fresco.ui.common)
607
-
608
614
  api(libs.androidx.appcompat)
609
615
  api(libs.androidx.appcompat.resources)
610
616
  api(libs.androidx.autofill)
@@ -612,7 +618,12 @@ dependencies {
612
618
  api(libs.androidx.tracing)
613
619
 
614
620
  api(libs.fbjni)
621
+ api(libs.fresco)
622
+ api(libs.fresco.imagepipeline.okhttp3)
623
+ api(libs.fresco.middleware)
624
+ api(libs.fresco.ui.common)
615
625
  api(libs.infer.annotation)
626
+ api(libs.soloader)
616
627
  api(libs.yoga.proguard.annotations)
617
628
 
618
629
  api(libs.jsr305)
@@ -633,8 +644,6 @@ dependencies {
633
644
  testImplementation(libs.thoughtworks)
634
645
  }
635
646
 
636
- configurations.all { exclude(group = "com.facebook.soloader") }
637
-
638
647
  react {
639
648
  // TODO: The library name is chosen for parity with Fabric components & iOS
640
649
  // This should be changed to a more generic name, e.g. `ReactCoreSpec`.
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.76.0-0rc0
1
+ VERSION_NAME=0.76.0-0rc2
2
2
  react.internal.publishingGroup=io.github.react-native-tvos
3
3
 
4
4
  android.useAndroidX=true
@@ -317,8 +317,6 @@ android {
317
317
  }
318
318
  }
319
319
 
320
- configurations.all { exclude(group = "com.facebook.soloader") }
321
-
322
320
  afterEvaluate {
323
321
  if (!overrideHermesDir) {
324
322
  // If you're not specifying a Hermes Path override, we want to
@@ -20,7 +20,7 @@ def sonatypeUsername = findProperty('SONATYPE_USERNAME')
20
20
  def sonatypePassword = findProperty('SONATYPE_PASSWORD')
21
21
 
22
22
  def reactAndroidProjectDir = project(':packages:react-native:ReactAndroid').projectDir
23
- def mavenTempLocalUrl = 'file:///var/folders/xp/yw_lp59x05d2mp0g0n2f_d240000gn/T/eas-build-workingdir/build/maven_local'
23
+ def mavenTempLocalUrl = 'file:///Users/expo/workingdir/build/maven_local'
24
24
  // Rewritten when copying this to ReactAndroid/publish.gradle
25
25
 
26
26
  publishing {
@@ -169,26 +169,25 @@ public class HeadlessJsTaskContext {
169
169
 
170
170
  /**
171
171
  * Finish a JS task. Doesn't actually stop the task on the JS side, only removes it from the list
172
- * of active tasks and notifies listeners. A task can only be finished once.
172
+ * of active tasks and notifies listeners.
173
173
  *
174
174
  * @param taskId the unique id returned by {@link #startTask}.
175
175
  */
176
176
  public synchronized void finishTask(final int taskId) {
177
- Assertions.assertCondition(
178
- mActiveTasks.remove(taskId), "Tried to finish non-existent task with id " + taskId + ".");
179
- Assertions.assertCondition(
180
- mActiveTaskConfigs.remove(taskId) != null,
181
- "Tried to remove non-existent task config with id " + taskId + ".");
177
+ boolean removed = mActiveTasks.remove(taskId);
178
+ mActiveTaskConfigs.remove(taskId);
182
179
  removeTimeout(taskId);
183
- UiThreadUtil.runOnUiThread(
184
- new Runnable() {
185
- @Override
186
- public void run() {
187
- for (HeadlessJsTaskEventListener listener : mHeadlessJsTaskEventListeners) {
188
- listener.onHeadlessJsTaskFinish(taskId);
180
+ if (removed) {
181
+ UiThreadUtil.runOnUiThread(
182
+ new Runnable() {
183
+ @Override
184
+ public void run() {
185
+ for (HeadlessJsTaskEventListener listener : mHeadlessJsTaskEventListeners) {
186
+ listener.onHeadlessJsTaskFinish(taskId);
187
+ }
189
188
  }
190
- }
191
- });
189
+ });
190
+ }
192
191
  }
193
192
 
194
193
  private void removeTimeout(int taskId) {
@@ -18,5 +18,5 @@ public class ReactNativeVersion {
18
18
  "major", 0,
19
19
  "minor", 76,
20
20
  "patch", 0,
21
- "prerelease", "0rc0");
21
+ "prerelease", "0rc2");
22
22
  }