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.
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +3 -0
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +10 -0
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +2 -2
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/Libraries/NativeComponent/BaseViewConfig.android.js +2 -2
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +11 -2
- package/Libraries/ReactNative/getNativeComponentAttributes.js +4 -0
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +98 -5
- package/Libraries/StyleSheet/StyleSheetTypes.js +5 -5
- package/Libraries/StyleSheet/processBoxShadow.js +5 -7
- package/Libraries/StyleSheet/processFilter.js +4 -4
- package/React/Base/RCTVersion.m +1 -1
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +23 -0
- package/React/Views/RCTViewManager.m +10 -9
- package/React/Views/ScrollView/RCTScrollView.m +20 -0
- package/ReactAndroid/api/ReactAndroid.api +27 -0
- package/ReactAndroid/build.gradle.kts +17 -8
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/hermes-engine/build.gradle.kts +0 -2
- package/ReactAndroid/publish.gradle +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/jstasks/HeadlessJsTaskContext.java +13 -14
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessDevSupportManager.java +14 -9
- package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java +26 -21
- package/{sdks/ossonly-soloader/src/main/java/com/facebook/soloader/MergedSoMapping.kt → ReactAndroid/src/main/java/com/facebook/react/soloader/OpenSourceMergedSoMapping.kt} +6 -4
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.kt +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java +18 -0
- package/ReactAndroid/src/main/jni/first-party/jni-lib-merge/jni_lib_merge.c +2 -1
- package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
- package/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +4 -4
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHermesInstance.h +3 -0
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHermesInstance.mm +7 -0
- package/cli.js +9 -5
- package/gradle/libs.versions.toml +2 -0
- package/jest-preset.js +5 -1
- package/package.json +12 -11
- package/scripts/cocoapods/privacy_manifest_utils.rb +23 -8
- package/scripts/cocoapods/utils.rb +10 -2
- package/scripts/react-native-xcode.sh +2 -0
- package/sdks/hermes-engine/hermes-engine.podspec +1 -1
- package/sdks/hermes-engine/utils/build-apple-framework.sh +0 -12
- package/sdks/hermes-engine/utils/build-ios-framework.sh +21 -4
- package/sdks/hermesc/osx-bin/hermes +0 -0
- package/sdks/hermesc/osx-bin/hermesc +0 -0
- package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
- package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -9
- package/types/experimental.d.ts +12 -98
- package/sdks/ossonly-soloader/src/main/java/com/facebook/soloader/DoNotOptimize.kt +0 -10
- package/sdks/ossonly-soloader/src/main/java/com/facebook/soloader/SoLoader.kt +0 -53
- package/sdks/ossonly-soloader/src/main/java/com/facebook/soloader/nativeloader/NativeLoader.kt +0 -28
- package/sdks/ossonly-soloader/src/main/java/com/facebook/soloader/nativeloader/NativeLoaderDelegate.kt +0 -23
- 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
|
-
|
|
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
|
-
|
|
138
|
+
boxShadow: {process: processBoxShadow},
|
|
139
139
|
|
|
140
140
|
/**
|
|
141
141
|
* Linear Gradient
|
|
@@ -170,10 +170,10 @@ const validAttributesForNonEventProps = {
|
|
|
170
170
|
experimental_backgroundImage: {
|
|
171
171
|
process: require('../StyleSheet/processBackgroundImage').default,
|
|
172
172
|
},
|
|
173
|
-
|
|
173
|
+
boxShadow: {
|
|
174
174
|
process: require('../StyleSheet/processBoxShadow').default,
|
|
175
175
|
},
|
|
176
|
-
|
|
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
|
-
|
|
229
|
+
filter: {
|
|
227
230
|
process: require('../StyleSheet/processFilter').default,
|
|
228
231
|
},
|
|
229
|
-
|
|
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
|
-
*
|
|
116
|
+
* Equivalent to `top`, `bottom`, `right` and `left`
|
|
116
117
|
*/
|
|
117
|
-
|
|
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:
|
|
333
|
+
| {dropShadow: DropShadowValue | string};
|
|
243
334
|
|
|
244
|
-
export type
|
|
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
|
|
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:
|
|
704
|
+
| {dropShadow: DropShadowValue | string};
|
|
705
705
|
|
|
706
|
-
export type
|
|
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
|
|
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
|
-
|
|
793
|
-
|
|
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 {
|
|
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<
|
|
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
|
-
|
|
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:
|
|
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 {
|
|
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 |
|
|
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): ?
|
|
252
|
-
const dropShadow:
|
|
251
|
+
function parseDropShadowString(rawDropShadow: string): ?DropShadowValue {
|
|
252
|
+
const dropShadow: DropShadowValue = {
|
|
253
253
|
offsetX: 0,
|
|
254
254
|
offsetY: 0,
|
|
255
255
|
};
|
package/React/Base/RCTVersion.m
CHANGED
|
@@ -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
|
-
|
|
462
|
+
typedef NSArray *FilterArray; // Custom type to make the StaticViewConfigValidator Happy
|
|
463
|
+
RCT_CUSTOM_VIEW_PROPERTY(filter, FilterArray, RCTView)
|
|
463
464
|
{
|
|
464
|
-
//
|
|
465
|
-
//
|
|
466
|
-
//
|
|
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(
|
|
469
|
+
typedef NSArray *BoxShadowArray; // Custom type to make the StaticViewConfigValidator Happy
|
|
470
|
+
RCT_CUSTOM_VIEW_PROPERTY(boxShadow, BoxShadowArray, RCTView)
|
|
470
471
|
{
|
|
471
|
-
//
|
|
472
|
-
//
|
|
473
|
-
//
|
|
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`.
|
|
@@ -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:///
|
|
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.
|
|
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
|
-
|
|
178
|
-
|
|
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
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
listener
|
|
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) {
|