@office-iss/react-native-win32 0.71.5 → 0.72.0-preview.2
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/.flowconfig +15 -3
- package/CHANGELOG.json +321 -45
- package/CHANGELOG.md +149 -26
- package/IntegrationTests/IntegrationTestHarnessTest.js +1 -0
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +1 -1
- package/Libraries/Alert/Alert.d.ts +4 -4
- package/Libraries/Alert/Alert.win32.js +1 -0
- package/Libraries/Animated/Animated.d.ts +17 -6
- package/Libraries/Animated/NativeAnimatedHelper.js +18 -6
- package/Libraries/Animated/NativeAnimatedHelper.win32.js +606 -0
- package/Libraries/Animated/bezier.js +1 -1
- package/Libraries/Animated/components/AnimatedFlatList.js +8 -3
- package/Libraries/Animated/components/AnimatedScrollView.js +4 -1
- package/Libraries/Animated/components/AnimatedSectionList.js +12 -3
- package/Libraries/Animated/createAnimatedComponent.js +26 -239
- package/Libraries/Animated/nodes/AnimatedColor.js +47 -80
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +167 -121
- package/Libraries/Animated/nodes/AnimatedNode.js +3 -5
- package/Libraries/Animated/nodes/AnimatedProps.js +7 -6
- package/Libraries/Animated/nodes/AnimatedStyle.js +42 -8
- package/Libraries/Animated/nodes/AnimatedTransform.js +1 -1
- package/Libraries/Animated/nodes/AnimatedValue.js +8 -12
- package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -1
- package/Libraries/Animated/useAnimatedProps.js +7 -10
- package/Libraries/BatchedBridge/MessageQueue.js +2 -1
- package/Libraries/BatchedBridge/NativeModules.d.ts +1 -1
- package/Libraries/BatchedBridge/NativeModules.js +1 -0
- package/Libraries/Blob/Blob.js +4 -0
- package/Libraries/Blob/FileReader.js +30 -2
- package/Libraries/Blob/URL.js +3 -1
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +2 -2
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +2 -3
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +2 -3
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +6 -4
- package/Libraries/Components/Button.js +3 -2
- package/Libraries/Components/Button.win32.js +451 -0
- package/Libraries/Components/Clipboard/Clipboard.js +1 -1
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +4 -0
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -0
- package/Libraries/Components/Pressable/Pressable.d.ts +1 -1
- package/Libraries/Components/Pressable/Pressable.js +1 -1
- package/Libraries/Components/RefreshControl/RefreshControl.js +1 -0
- package/Libraries/Components/SafeAreaView/SafeAreaView.js +1 -2
- package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +1 -2
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +12 -6
- package/Libraries/Components/ScrollView/ScrollView.d.ts +2 -2
- package/Libraries/Components/ScrollView/ScrollView.js +149 -91
- package/Libraries/Components/ScrollView/ScrollView.win32.js +1939 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +16 -6
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +5 -7
- package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +1 -1
- package/Libraries/Components/StatusBar/StatusBar.js +3 -0
- package/Libraries/Components/Switch/Switch.js +3 -1
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +21 -11
- package/Libraries/Components/TextInput/InputAccessoryView.d.ts +1 -1
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +11 -5
- package/Libraries/Components/TextInput/TextInput.Types.win32.d.ts +51 -0
- package/Libraries/Components/TextInput/TextInput.Types.win32.js +3 -0
- package/Libraries/Components/TextInput/TextInput.Types.win32.js.map +1 -0
- package/Libraries/Components/TextInput/TextInput.d.ts +15 -5
- package/Libraries/Components/TextInput/TextInput.flow.js +1 -1
- package/Libraries/Components/TextInput/TextInput.js +130 -103
- package/Libraries/Components/TextInput/TextInput.win32.js +202 -890
- package/Libraries/Components/Touchable/Touchable.d.ts +1 -1
- package/Libraries/Components/Touchable/Touchable.flow.js +30 -4
- package/Libraries/Components/Touchable/Touchable.js +6 -3
- package/Libraries/Components/Touchable/Touchable.win32.js +6 -3
- package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -2
- package/Libraries/Components/Touchable/TouchableOpacity.js +3 -0
- package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +179 -0
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +43 -0
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +26 -0
- package/Libraries/Components/View/View.js +35 -16
- package/Libraries/Components/View/View.win32.js +38 -16
- package/Libraries/Components/View/ViewAccessibility.d.ts +6 -6
- package/Libraries/Components/View/ViewAccessibility.js +10 -1
- package/Libraries/Components/View/ViewAccessibility.win32.d.ts +5 -5
- package/Libraries/Components/View/ViewNativeComponent.js +32 -8
- package/Libraries/Components/View/ViewPropTypes.d.ts +1 -1
- package/Libraries/Components/View/ViewPropTypes.js +1 -1
- package/Libraries/Components/View/ViewPropTypes.win32.d.ts +1 -1
- package/Libraries/Components/View/ViewPropTypes.win32.js +1 -1
- package/Libraries/Components/View/ViewWin32.js +2 -35
- package/Libraries/Core/Devtools/openFileInEditor.js +1 -0
- package/Libraries/Core/Devtools/openURLInBrowser.js +1 -0
- package/Libraries/Core/Devtools/parseErrorStack.js +2 -2
- package/Libraries/Core/Devtools/parseHermesStack.js +54 -34
- package/Libraries/Core/ExceptionsManager.js +2 -2
- package/Libraries/Core/InitializeCore.js +2 -1
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/ReactNativeVersionCheck.js +4 -8
- package/Libraries/Core/ReactNativeVersionCheck.win32.js +4 -8
- package/Libraries/Core/Timers/JSTimers.js +1 -1
- package/Libraries/Core/Timers/immediateShim.js +1 -0
- package/Libraries/Core/Timers/queueMicrotask.js +1 -1
- package/Libraries/Core/setUpAlert.js +1 -1
- package/Libraries/Core/setUpDOM.js +18 -0
- package/Libraries/Core/setUpDeveloperTools.js +1 -1
- package/Libraries/Core/setUpGlobals.js +5 -2
- package/Libraries/Core/setUpNavigator.js +6 -5
- package/Libraries/Core/setUpPerformance.js +23 -13
- package/Libraries/Core/setUpReactDevTools.js +2 -0
- package/Libraries/Core/setUpSegmentFetcher.js +0 -41
- package/Libraries/Core/setUpTimers.js +2 -2
- package/Libraries/DOM/Geometry/DOMRect.js +82 -0
- package/Libraries/DOM/Geometry/DOMRectReadOnly.js +188 -0
- package/Libraries/DOM/Nodes/ReactNativeElement.js +75 -0
- package/Libraries/DOM/Nodes/ReadOnlyElement.js +89 -0
- package/Libraries/DOM/Nodes/ReadOnlyNode.js +167 -0
- package/Libraries/DOM/OldStyleCollections/ArrayLikeUtils.js +46 -0
- package/Libraries/DOM/OldStyleCollections/DOMRectList.js +76 -0
- package/Libraries/DOM/OldStyleCollections/HTMLCollection.js +82 -0
- package/Libraries/DOM/OldStyleCollections/NodeList.js +104 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +35 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +20 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +49 -0
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.win32.js +35 -0
- package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +24 -0
- package/Libraries/EventEmitter/NativeEventEmitter.d.ts +1 -2
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.d.ts +1 -2
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +9 -1
- package/Libraries/Events/EventPolyfill.js +1 -1
- package/Libraries/Image/AssetRegistry.js +1 -1
- package/Libraries/Image/AssetSourceResolver.js +3 -3
- package/Libraries/Image/Image.android.js +4 -1
- package/Libraries/Image/Image.d.ts +63 -2
- package/Libraries/Image/Image.ios.js +3 -0
- package/Libraries/Image/Image.win32.js +3 -0
- package/Libraries/Image/ImageBackground.js +1 -0
- package/Libraries/Image/ImageProps.js +1 -1
- package/Libraries/Image/ImageViewNativeComponent.js +4 -4
- package/Libraries/Image/RelativeImageStub.js +1 -1
- package/Libraries/Image/TextInlineImageNativeComponent.js +1 -1
- package/Libraries/Image/resolveAssetSource.js +1 -1
- package/Libraries/Inspector/DevtoolsOverlay.js +26 -19
- package/Libraries/Inspector/ElementBox.js +4 -1
- package/Libraries/Inspector/Inspector.js +5 -6
- package/Libraries/Inspector/Inspector.win32.js +7 -6
- package/Libraries/Inspector/InspectorOverlay.js +3 -3
- package/Libraries/Inspector/InspectorOverlay.win32.js +2 -1
- package/Libraries/Inspector/NetworkOverlay.js +1 -1
- package/Libraries/Interaction/JSEventLoopWatchdog.js +1 -1
- package/Libraries/Interaction/PanResponder.js +5 -6
- package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -1
- package/Libraries/Linking/Linking.js +1 -4
- package/Libraries/Lists/FillRateHelper.js +4 -238
- package/Libraries/Lists/FlatList.d.ts +15 -22
- package/Libraries/Lists/FlatList.js +9 -6
- package/Libraries/Lists/SectionList.d.ts +10 -6
- package/Libraries/Lists/SectionList.js +5 -3
- package/Libraries/Lists/SectionListModern.js +3 -3
- package/Libraries/Lists/ViewabilityHelper.js +8 -344
- package/Libraries/Lists/VirtualizeUtils.js +4 -244
- package/Libraries/Lists/VirtualizedList.js +10 -1867
- package/Libraries/Lists/VirtualizedListContext.js +6 -104
- package/Libraries/Lists/VirtualizedSectionList.js +9 -602
- package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +1 -0
- package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
- package/Libraries/LogBox/Data/LogBoxData.js +1 -1
- package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
- package/Libraries/LogBox/LogBox.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspector.js +1 -3
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +168 -0
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +3 -0
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +193 -0
- package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +1 -0
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.win32.js +7 -3
- package/Libraries/LogBox/UI/LogBoxMessage.js +87 -5
- package/Libraries/LogBox/UI/LogBoxNotification.js +5 -7
- package/Libraries/Modal/Modal.js +2 -2
- package/Libraries/NativeComponent/BaseViewConfig.android.js +32 -12
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +43 -19
- package/Libraries/NativeComponent/BaseViewConfig.win32.js +43 -19
- package/Libraries/NativeComponent/NativeComponentRegistryUnstable.js +4 -1
- package/Libraries/NativeComponent/ViewConfig.js +1 -0
- package/Libraries/NativeComponent/ViewConfigIgnore.js +1 -4
- package/Libraries/Network/RCTNetworking.android.js +2 -2
- package/Libraries/Network/RCTNetworking.ios.js +1 -1
- package/Libraries/Network/RCTNetworking.win32.js +1 -1
- package/Libraries/Network/XMLHttpRequest.js +1 -1
- package/Libraries/Pressability/Pressability.js +10 -4
- package/Libraries/Pressability/Pressability.win32.js +9 -3
- package/Libraries/ReactNative/AppContainer.js +7 -1
- package/Libraries/ReactNative/AppRegistry.d.ts +1 -1
- package/Libraries/ReactNative/AppRegistry.js +10 -13
- package/Libraries/ReactNative/FabricUIManager.js +24 -8
- package/Libraries/ReactNative/NativeUIManager.js +5 -5
- package/Libraries/ReactNative/ReactNativeFeatureFlags.js +10 -10
- package/Libraries/ReactNative/UIManager.js +168 -1
- package/Libraries/ReactNative/getCachedComponentWithDebugName.js +5 -5
- package/Libraries/ReactNative/getNativeComponentAttributes.js +1 -1
- package/Libraries/ReactNative/requireNativeComponent.d.ts +1 -1
- package/Libraries/ReactNative/requireNativeComponent.js +1 -1
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -0
- package/Libraries/Renderer/implementations/ReactFabric-dev.js +26 -3
- package/Libraries/Renderer/implementations/ReactFabric-prod.js +13 -1
- package/Libraries/Renderer/implementations/ReactFabric-profiling.js +13 -1
- package/Libraries/Renderer/public/ReactFabricPublicInstanceUtils.js +38 -0
- package/Libraries/Renderer/shims/ReactNativeTypes.js +6 -6
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +7 -7
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
- package/Libraries/Share/Share.js +1 -1
- package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.win32.js +1 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +115 -76
- package/Libraries/StyleSheet/StyleSheetTypes.js +188 -33
- package/Libraries/StyleSheet/flattenStyle.js +2 -0
- package/Libraries/StyleSheet/normalizeColor.js +1 -1
- package/Libraries/StyleSheet/processColor.js +1 -1
- package/Libraries/Text/Text.d.ts +12 -2
- package/Libraries/Text/Text.js +50 -41
- package/Libraries/Text/TextProps.js +3 -4
- package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +6 -0
- package/Libraries/Types/CodegenTypes.js +1 -0
- package/Libraries/UTFSequence.js +3 -1
- package/Libraries/Utilities/Appearance.d.ts +10 -0
- package/Libraries/Utilities/Appearance.js +13 -0
- package/Libraries/Utilities/Dimensions.js +1 -1
- package/Libraries/Utilities/Dimensions.win32.js +1 -1
- package/Libraries/Utilities/GlobalPerformanceLogger.js +12 -1
- package/Libraries/Utilities/HMRClient.js +16 -10
- package/Libraries/Utilities/{createPerformanceLogger.d.ts → IPerformanceLogger.d.ts} +4 -4
- package/Libraries/Utilities/IPerformanceLogger.js +49 -0
- package/Libraries/Utilities/LoadingView.android.js +28 -11
- package/Libraries/Utilities/NativeAppearance.js +1 -0
- package/Libraries/Utilities/NativePlatformConstantsWin.js +1 -1
- package/Libraries/Utilities/PixelRatio.js +2 -2
- package/Libraries/Utilities/Platform.win32.js +1 -1
- package/Libraries/Utilities/ReactNativeTestTools.js +1 -1
- package/Libraries/Utilities/__mocks__/PixelRatio.js +1 -1
- package/Libraries/Utilities/codegenNativeCommands.js +2 -0
- package/Libraries/Utilities/createPerformanceLogger.js +55 -43
- package/Libraries/Utilities/stringifySafe.js +2 -7
- package/Libraries/Utilities/useColorScheme.win32.js +26 -0
- package/Libraries/Utilities/useWindowDimensions.js +3 -3
- package/Libraries/WebPerformance/EventCounts.js +78 -0
- package/Libraries/WebPerformance/MemoryInfo.js +54 -0
- package/Libraries/WebPerformance/NativePerformance.js +38 -0
- package/Libraries/WebPerformance/NativePerformanceObserver.js +22 -7
- package/Libraries/WebPerformance/Performance.js +312 -0
- package/Libraries/WebPerformance/PerformanceEntry.js +45 -0
- package/Libraries/WebPerformance/PerformanceEventTiming.js +38 -0
- package/Libraries/WebPerformance/PerformanceObserver.js +196 -101
- package/Libraries/WebPerformance/RawPerformanceEntry.js +87 -0
- package/Libraries/WebPerformance/ReactNativeStartupTiming.js +65 -0
- package/Libraries/WebPerformance/__mocks__/NativePerformance.js +65 -0
- package/Libraries/WebPerformance/__mocks__/NativePerformanceObserver.js +101 -0
- package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -1
- package/Libraries/vendor/core/ErrorUtils.js +1 -1
- package/Libraries/vendor/emitter/EventEmitter.d.ts +2 -2
- package/Libraries/vendor/emitter/EventEmitter.js +9 -1
- package/flow/global.js +29 -4
- package/flow/jest.js +258 -164
- package/flow/use-sync-external-store.js +1 -0
- package/index.js +56 -42
- package/index.win32.js +56 -42
- package/interface.js +1 -1
- package/jest/local-setup.js +33 -0
- package/jest/mockComponent.js +4 -2
- package/jest/mockNativeComponent.js +1 -1
- package/jest/mockScrollView.js +2 -1
- package/jest/react-native-env.js +1 -3
- package/jest/setup.js +11 -8
- package/overrides.json +122 -85
- package/package.json +40 -30
- package/rn-get-polyfills.js +1 -1
- package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +68 -0
- package/src/Libraries/Components/Touchable/TouchableWin32.tsx +3 -3
- package/src/Libraries/Components/View/ViewAccessibility.win32.d.ts +5 -5
- package/src/Libraries/Components/View/ViewPropTypes.win32.d.ts +1 -1
- package/types/index.d.ts +2 -6
- package/types/modules/Codegen.d.ts +4 -4
- package/types/modules/globals.d.ts +27 -25
- package/types/public/DeprecatedPropertiesAlias.d.ts +0 -20
- package/types/public/ReactNativeRenderer.d.ts +2 -7
- package/Libraries/Animated/createAnimatedComponentInjection.js +0 -48
- package/Libraries/Animated/createAnimatedComponent_EXPERIMENTAL.js +0 -48
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.flow.js +0 -208
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.flow.js +0 -58
- package/Libraries/Components/DatePicker/DatePickerIOS.android.js +0 -47
- package/Libraries/Components/DatePicker/DatePickerIOS.d.ts +0 -92
- package/Libraries/Components/DatePicker/DatePickerIOS.flow.android.js +0 -14
- package/Libraries/Components/DatePicker/DatePickerIOS.flow.ios.js +0 -113
- package/Libraries/Components/DatePicker/DatePickerIOS.ios.js +0 -242
- package/Libraries/Components/DatePicker/DatePickerIOS.win32.js +0 -47
- package/Libraries/Components/DatePicker/RCTDatePickerNativeComponent.js +0 -60
- package/Libraries/Components/DatePickerAndroid/NativeDatePickerAndroid.js +0 -26
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.android.js +0 -45
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.d.ts +0 -62
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.ios.js +0 -75
- package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.win32.js +0 -45
- package/Libraries/Components/ProgressViewIOS/RCTProgressViewNativeComponent.js +0 -33
- package/Libraries/Components/SafeAreaView/SafeAreaView.flow.js +0 -19
- package/Libraries/Components/Slider/Slider.d.ts +0 -132
- package/Libraries/Components/Slider/Slider.js +0 -282
- package/Libraries/Components/Slider/SliderNativeComponent.js +0 -56
- package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +0 -23
- package/Libraries/Interaction/Batchinator.js +0 -76
- package/Libraries/Interaction/BridgeSpyStallHandler.js +0 -63
- package/Libraries/Interaction/InteractionStallDebugger.js +0 -23
- package/Libraries/Interaction/PanResponder.flow.js +0 -257
- package/Libraries/Lists/CellRenderMask.js +0 -155
- package/Libraries/Lists/ChildListCollection.js +0 -72
- package/Libraries/Lists/StateSafePureComponent.js +0 -85
- package/Libraries/Lists/VirtualizedList.d.ts +0 -347
- package/Libraries/Lists/VirtualizedListCellRenderer.js +0 -259
- package/Libraries/Lists/VirtualizedListProps.js +0 -279
- package/Libraries/Performance/PureComponentDebug.js +0 -74
- package/Libraries/Reliability/UserFlow.js +0 -158
- package/Libraries/Renderer/implementations/ReactNativeRenderer.d.ts +0 -149
- package/Libraries/Renderer/shims/ReactNativeTypes.d.ts +0 -141
- package/Libraries/Utilities/MatrixMath.js +0 -748
- package/Libraries/Utilities/buildStyleInterpolator.js +0 -209
- package/Libraries/Utilities/clamp.js +0 -23
- package/Libraries/Utilities/deprecatedPropType.js +0 -36
- package/Libraries/Utilities/groupByEveryN.js +0 -51
- package/Libraries/Utilities/mergeIntoFast.js +0 -26
- package/Libraries/Utilities/setAndForwardRef.js +0 -71
- package/Libraries/Utilities/truncate.js +0 -51
- package/flow/JSITimerInternalType.js +0 -30
|
@@ -16,6 +16,8 @@ import type {PlatformConfig} from '../AnimatedPlatformConfig';
|
|
|
16
16
|
import type AnimatedNode from './AnimatedNode';
|
|
17
17
|
|
|
18
18
|
import normalizeColor from '../../StyleSheet/normalizeColor';
|
|
19
|
+
import processColor from '../../StyleSheet/processColor';
|
|
20
|
+
import Easing from '../Easing';
|
|
19
21
|
import NativeAnimatedHelper from '../NativeAnimatedHelper';
|
|
20
22
|
import AnimatedWithChildren from './AnimatedWithChildren';
|
|
21
23
|
import invariant from 'invariant';
|
|
@@ -31,39 +33,17 @@ export type InterpolationConfigType<OutputT: number | string> = $ReadOnly<{
|
|
|
31
33
|
extrapolateRight?: ExtrapolateType,
|
|
32
34
|
}>;
|
|
33
35
|
|
|
34
|
-
const linear = (t: number) => t;
|
|
35
|
-
|
|
36
36
|
/**
|
|
37
37
|
* Very handy helper to map input ranges to output ranges with an easing
|
|
38
38
|
* function and custom behavior outside of the ranges.
|
|
39
39
|
*/
|
|
40
|
-
function
|
|
41
|
-
config: InterpolationConfigType<
|
|
42
|
-
): (input: number) =>
|
|
43
|
-
if (config.outputRange && typeof config.outputRange[0] === 'string') {
|
|
44
|
-
return (createInterpolationFromStringOutputRange((config: any)): any);
|
|
45
|
-
}
|
|
46
|
-
|
|
40
|
+
function createNumericInterpolation(
|
|
41
|
+
config: InterpolationConfigType<number>,
|
|
42
|
+
): (input: number) => number {
|
|
47
43
|
const outputRange: $ReadOnlyArray<number> = (config.outputRange: any);
|
|
48
|
-
|
|
49
44
|
const inputRange = config.inputRange;
|
|
50
45
|
|
|
51
|
-
|
|
52
|
-
checkInfiniteRange('outputRange', outputRange);
|
|
53
|
-
checkInfiniteRange('inputRange', inputRange);
|
|
54
|
-
checkValidInputRange(inputRange);
|
|
55
|
-
|
|
56
|
-
invariant(
|
|
57
|
-
inputRange.length === outputRange.length,
|
|
58
|
-
'inputRange (' +
|
|
59
|
-
inputRange.length +
|
|
60
|
-
') and outputRange (' +
|
|
61
|
-
outputRange.length +
|
|
62
|
-
') must have the same length',
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const easing = config.easing || linear;
|
|
46
|
+
const easing = config.easing || Easing.linear;
|
|
67
47
|
|
|
68
48
|
let extrapolateLeft: ExtrapolateType = 'extend';
|
|
69
49
|
if (config.extrapolateLeft !== undefined) {
|
|
@@ -167,24 +147,49 @@ function interpolate(
|
|
|
167
147
|
return result;
|
|
168
148
|
}
|
|
169
149
|
|
|
170
|
-
|
|
171
|
-
let normalizedColor = normalizeColor(input);
|
|
172
|
-
if (normalizedColor === null || typeof normalizedColor !== 'number') {
|
|
173
|
-
return input;
|
|
174
|
-
}
|
|
150
|
+
const numericComponentRegex = /[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g;
|
|
175
151
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
152
|
+
// Maps string inputs an RGBA color or an array of numeric components
|
|
153
|
+
function mapStringToNumericComponents(
|
|
154
|
+
input: string,
|
|
155
|
+
):
|
|
156
|
+
| {isColor: true, components: [number, number, number, number]}
|
|
157
|
+
| {isColor: false, components: $ReadOnlyArray<number | string>} {
|
|
158
|
+
let normalizedColor = normalizeColor(input);
|
|
159
|
+
invariant(
|
|
160
|
+
normalizedColor == null || typeof normalizedColor !== 'object',
|
|
161
|
+
'PlatformColors are not supported',
|
|
162
|
+
);
|
|
182
163
|
|
|
183
|
-
|
|
164
|
+
if (typeof normalizedColor === 'number') {
|
|
165
|
+
normalizedColor = normalizedColor || 0;
|
|
166
|
+
const r = (normalizedColor & 0xff000000) >>> 24;
|
|
167
|
+
const g = (normalizedColor & 0x00ff0000) >>> 16;
|
|
168
|
+
const b = (normalizedColor & 0x0000ff00) >>> 8;
|
|
169
|
+
const a = (normalizedColor & 0x000000ff) / 255;
|
|
170
|
+
return {isColor: true, components: [r, g, b, a]};
|
|
171
|
+
} else {
|
|
172
|
+
const components: Array<string | number> = [];
|
|
173
|
+
let lastMatchEnd = 0;
|
|
174
|
+
let match: RegExp$matchResult;
|
|
175
|
+
while ((match = (numericComponentRegex.exec(input): any)) != null) {
|
|
176
|
+
if (match.index > lastMatchEnd) {
|
|
177
|
+
components.push(input.substring(lastMatchEnd, match.index));
|
|
178
|
+
}
|
|
179
|
+
components.push(parseFloat(match[0]));
|
|
180
|
+
lastMatchEnd = match.index + match[0].length;
|
|
181
|
+
}
|
|
182
|
+
invariant(
|
|
183
|
+
components.length > 0,
|
|
184
|
+
'outputRange must contain color or value with numeric component',
|
|
185
|
+
);
|
|
186
|
+
if (lastMatchEnd < input.length) {
|
|
187
|
+
components.push(input.substring(lastMatchEnd, input.length));
|
|
188
|
+
}
|
|
189
|
+
return {isColor: false, components};
|
|
190
|
+
}
|
|
184
191
|
}
|
|
185
192
|
|
|
186
|
-
const stringShapeRegex = /[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g;
|
|
187
|
-
|
|
188
193
|
/**
|
|
189
194
|
* Supports string shapes by extracting numbers so new values can be computed,
|
|
190
195
|
* and recombines those values into new strings of the same shape. Supports
|
|
@@ -193,77 +198,70 @@ const stringShapeRegex = /[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g;
|
|
|
193
198
|
* rgba(123, 42, 99, 0.36) // colors
|
|
194
199
|
* -45deg // values with units
|
|
195
200
|
*/
|
|
196
|
-
function
|
|
201
|
+
function createStringInterpolation(
|
|
197
202
|
config: InterpolationConfigType<string>,
|
|
198
203
|
): (input: number) => string {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
outputRange = outputRange.map(colorToRgba);
|
|
202
|
-
checkPattern(outputRange);
|
|
203
|
-
|
|
204
|
-
// ['rgba(0, 100, 200, 0)', 'rgba(50, 150, 250, 0.5)']
|
|
205
|
-
// ->
|
|
206
|
-
// [
|
|
207
|
-
// [0, 50],
|
|
208
|
-
// [100, 150],
|
|
209
|
-
// [200, 250],
|
|
210
|
-
// [0, 0.5],
|
|
211
|
-
// ]
|
|
212
|
-
/* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can
|
|
213
|
-
* return `null`. Need to guard against this possibility. */
|
|
214
|
-
const outputRanges = outputRange[0].match(stringShapeRegex).map(() => []);
|
|
215
|
-
outputRange.forEach(value => {
|
|
216
|
-
/* $FlowFixMe[incompatible-use] (>=0.18.0): `value.match()` can return
|
|
217
|
-
* `null`. Need to guard against this possibility. */
|
|
218
|
-
value.match(stringShapeRegex).forEach((number, i) => {
|
|
219
|
-
outputRanges[i].push(+number);
|
|
220
|
-
});
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
const interpolations = outputRange[0]
|
|
224
|
-
.match(stringShapeRegex)
|
|
225
|
-
/* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can
|
|
226
|
-
* return `null`. Need to guard against this possibility. */
|
|
227
|
-
/* $FlowFixMe[incompatible-call] (>=0.18.0): `outputRange[0].match()` can
|
|
228
|
-
* return `null`. Need to guard against this possibility. */
|
|
229
|
-
.map((value, i) => {
|
|
230
|
-
return createInterpolation({
|
|
231
|
-
...config,
|
|
232
|
-
outputRange: outputRanges[i],
|
|
233
|
-
});
|
|
234
|
-
});
|
|
204
|
+
invariant(config.outputRange.length >= 2, 'Bad output range');
|
|
205
|
+
const outputRange = config.outputRange.map(mapStringToNumericComponents);
|
|
235
206
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
const shouldRound = isRgbOrRgba(outputRange[0]);
|
|
239
|
-
|
|
240
|
-
return input => {
|
|
241
|
-
let i = 0;
|
|
242
|
-
// 'rgba(0, 100, 200, 0)'
|
|
243
|
-
// ->
|
|
244
|
-
// 'rgba(${interpolations[0](input)}, ${interpolations[1](input)}, ...'
|
|
245
|
-
return outputRange[0].replace(stringShapeRegex, () => {
|
|
246
|
-
let val = +interpolations[i++](input);
|
|
247
|
-
if (shouldRound) {
|
|
248
|
-
val = i < 4 ? Math.round(val) : Math.round(val * 1000) / 1000;
|
|
249
|
-
}
|
|
250
|
-
return String(val);
|
|
251
|
-
});
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
function isRgbOrRgba(range: string) {
|
|
256
|
-
return typeof range === 'string' && range.startsWith('rgb');
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
function checkPattern(arr: $ReadOnlyArray<string>) {
|
|
260
|
-
const pattern = arr[0].replace(stringShapeRegex, '');
|
|
261
|
-
for (let i = 1; i < arr.length; ++i) {
|
|
207
|
+
const isColor = outputRange[0].isColor;
|
|
208
|
+
if (__DEV__) {
|
|
262
209
|
invariant(
|
|
263
|
-
|
|
264
|
-
'
|
|
210
|
+
outputRange.every(output => output.isColor === isColor),
|
|
211
|
+
'All elements of output range should either be a color or a string with numeric components',
|
|
212
|
+
);
|
|
213
|
+
const firstOutput = outputRange[0].components;
|
|
214
|
+
invariant(
|
|
215
|
+
outputRange.every(
|
|
216
|
+
output => output.components.length === firstOutput.length,
|
|
217
|
+
),
|
|
218
|
+
'All elements of output range should have the same number of components',
|
|
219
|
+
);
|
|
220
|
+
invariant(
|
|
221
|
+
outputRange.every(output =>
|
|
222
|
+
output.components.every(
|
|
223
|
+
(component, i) =>
|
|
224
|
+
// $FlowIgnoreMe[invalid-compare]
|
|
225
|
+
typeof component === 'number' || component === firstOutput[i],
|
|
226
|
+
),
|
|
227
|
+
),
|
|
228
|
+
'All elements of output range should have the same non-numeric components',
|
|
265
229
|
);
|
|
266
230
|
}
|
|
231
|
+
|
|
232
|
+
const numericComponents: $ReadOnlyArray<$ReadOnlyArray<number>> =
|
|
233
|
+
outputRange.map(output =>
|
|
234
|
+
isColor
|
|
235
|
+
? // $FlowIgnoreMe[incompatible-call]
|
|
236
|
+
output.components
|
|
237
|
+
: // $FlowIgnoreMe[incompatible-call]
|
|
238
|
+
output.components.filter(c => typeof c === 'number'),
|
|
239
|
+
);
|
|
240
|
+
const interpolations = numericComponents[0].map((_, i) =>
|
|
241
|
+
createNumericInterpolation({
|
|
242
|
+
...config,
|
|
243
|
+
outputRange: numericComponents.map(components => components[i]),
|
|
244
|
+
}),
|
|
245
|
+
);
|
|
246
|
+
if (!isColor) {
|
|
247
|
+
return input => {
|
|
248
|
+
const values = interpolations.map(interpolation => interpolation(input));
|
|
249
|
+
let i = 0;
|
|
250
|
+
return outputRange[0].components
|
|
251
|
+
.map(c => (typeof c === 'number' ? values[i++] : c))
|
|
252
|
+
.join('');
|
|
253
|
+
};
|
|
254
|
+
} else {
|
|
255
|
+
return input => {
|
|
256
|
+
const result = interpolations.map((interpolation, i) => {
|
|
257
|
+
const value = interpolation(input);
|
|
258
|
+
// rgba requires that the r,g,b are integers.... so we want to round them, but we *dont* want to
|
|
259
|
+
// round the opacity (4th column).
|
|
260
|
+
return i < 3 ? Math.round(value) : Math.round(value * 1000) / 1000;
|
|
261
|
+
});
|
|
262
|
+
return `rgba(${result[0]}, ${result[1]}, ${result[2]}, ${result[3]})`;
|
|
263
|
+
};
|
|
264
|
+
}
|
|
267
265
|
}
|
|
268
266
|
|
|
269
267
|
function findRange(input: number, inputRange: $ReadOnlyArray<number>) {
|
|
@@ -276,6 +274,24 @@ function findRange(input: number, inputRange: $ReadOnlyArray<number>) {
|
|
|
276
274
|
return i - 1;
|
|
277
275
|
}
|
|
278
276
|
|
|
277
|
+
function checkValidRanges<OutputT: number | string>(
|
|
278
|
+
inputRange: $ReadOnlyArray<number>,
|
|
279
|
+
outputRange: $ReadOnlyArray<OutputT>,
|
|
280
|
+
) {
|
|
281
|
+
checkInfiniteRange('outputRange', outputRange);
|
|
282
|
+
checkInfiniteRange('inputRange', inputRange);
|
|
283
|
+
checkValidInputRange(inputRange);
|
|
284
|
+
|
|
285
|
+
invariant(
|
|
286
|
+
inputRange.length === outputRange.length,
|
|
287
|
+
'inputRange (' +
|
|
288
|
+
inputRange.length +
|
|
289
|
+
') and outputRange (' +
|
|
290
|
+
outputRange.length +
|
|
291
|
+
') must have the same length',
|
|
292
|
+
);
|
|
293
|
+
}
|
|
294
|
+
|
|
279
295
|
function checkValidInputRange(arr: $ReadOnlyArray<number>) {
|
|
280
296
|
invariant(arr.length >= 2, 'inputRange must have at least 2 elements');
|
|
281
297
|
const message =
|
|
@@ -285,7 +301,10 @@ function checkValidInputRange(arr: $ReadOnlyArray<number>) {
|
|
|
285
301
|
}
|
|
286
302
|
}
|
|
287
303
|
|
|
288
|
-
function checkInfiniteRange
|
|
304
|
+
function checkInfiniteRange<OutputT: number | string>(
|
|
305
|
+
name: string,
|
|
306
|
+
arr: $ReadOnlyArray<OutputT>,
|
|
307
|
+
) {
|
|
289
308
|
invariant(arr.length >= 2, name + ' must have at least 2 elements');
|
|
290
309
|
invariant(
|
|
291
310
|
arr.length !== 2 || arr[0] !== -Infinity || arr[1] !== Infinity,
|
|
@@ -294,6 +313,7 @@ function checkInfiniteRange(name: string, arr: $ReadOnlyArray<number>) {
|
|
|
294
313
|
* doesn't cleanly convert to a string, like undefined, null, and object,
|
|
295
314
|
* etc. If you really mean this implicit string conversion, you can do
|
|
296
315
|
* something like String(myThing) */
|
|
316
|
+
// $FlowFixMe[unsafe-addition]
|
|
297
317
|
name + 'cannot be ]-infinity;+infinity[ ' + arr,
|
|
298
318
|
);
|
|
299
319
|
}
|
|
@@ -301,20 +321,34 @@ function checkInfiniteRange(name: string, arr: $ReadOnlyArray<number>) {
|
|
|
301
321
|
export default class AnimatedInterpolation<
|
|
302
322
|
OutputT: number | string,
|
|
303
323
|
> extends AnimatedWithChildren {
|
|
304
|
-
// Export for testing.
|
|
305
|
-
static __createInterpolation: (
|
|
306
|
-
config: InterpolationConfigType<OutputT>,
|
|
307
|
-
) => (input: number) => OutputT = createInterpolation;
|
|
308
|
-
|
|
309
324
|
_parent: AnimatedNode;
|
|
310
325
|
_config: InterpolationConfigType<OutputT>;
|
|
311
|
-
_interpolation: (input: number) => OutputT;
|
|
326
|
+
_interpolation: ?(input: number) => OutputT;
|
|
312
327
|
|
|
313
328
|
constructor(parent: AnimatedNode, config: InterpolationConfigType<OutputT>) {
|
|
314
329
|
super();
|
|
315
330
|
this._parent = parent;
|
|
316
331
|
this._config = config;
|
|
317
|
-
|
|
332
|
+
|
|
333
|
+
if (__DEV__) {
|
|
334
|
+
checkValidRanges(config.inputRange, config.outputRange);
|
|
335
|
+
|
|
336
|
+
// Create interpolation eagerly in dev, so we can signal errors faster
|
|
337
|
+
// even when using the native driver
|
|
338
|
+
this._getInterpolation();
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
_getInterpolation(): number => OutputT {
|
|
343
|
+
if (!this._interpolation) {
|
|
344
|
+
const config = this._config;
|
|
345
|
+
if (config.outputRange && typeof config.outputRange[0] === 'string') {
|
|
346
|
+
this._interpolation = (createStringInterpolation((config: any)): any);
|
|
347
|
+
} else {
|
|
348
|
+
this._interpolation = (createNumericInterpolation((config: any)): any);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
return this._interpolation;
|
|
318
352
|
}
|
|
319
353
|
|
|
320
354
|
__makeNative(platformConfig: ?PlatformConfig) {
|
|
@@ -322,13 +356,13 @@ export default class AnimatedInterpolation<
|
|
|
322
356
|
super.__makeNative(platformConfig);
|
|
323
357
|
}
|
|
324
358
|
|
|
325
|
-
__getValue():
|
|
359
|
+
__getValue(): OutputT {
|
|
326
360
|
const parentValue: number = this._parent.__getValue();
|
|
327
361
|
invariant(
|
|
328
362
|
typeof parentValue === 'number',
|
|
329
363
|
'Cannot interpolate an input which is not a number.',
|
|
330
364
|
);
|
|
331
|
-
return this.
|
|
365
|
+
return this._getInterpolation()(parentValue);
|
|
332
366
|
}
|
|
333
367
|
|
|
334
368
|
interpolate<NewOutputT: number | string>(
|
|
@@ -346,19 +380,31 @@ export default class AnimatedInterpolation<
|
|
|
346
380
|
super.__detach();
|
|
347
381
|
}
|
|
348
382
|
|
|
349
|
-
__transformDataType(range: $ReadOnlyArray<OutputT>): Array<any> {
|
|
350
|
-
return range.map(NativeAnimatedHelper.transformDataType);
|
|
351
|
-
}
|
|
352
|
-
|
|
353
383
|
__getNativeConfig(): any {
|
|
354
384
|
if (__DEV__) {
|
|
355
385
|
NativeAnimatedHelper.validateInterpolation(this._config);
|
|
356
386
|
}
|
|
357
387
|
|
|
388
|
+
// Only the `outputRange` can contain strings so we don't need to transform `inputRange` here
|
|
389
|
+
let outputRange = this._config.outputRange;
|
|
390
|
+
let outputType = null;
|
|
391
|
+
if (typeof outputRange[0] === 'string') {
|
|
392
|
+
// $FlowIgnoreMe[incompatible-cast]
|
|
393
|
+
outputRange = ((outputRange: $ReadOnlyArray<string>).map(value => {
|
|
394
|
+
const processedColor = processColor(value);
|
|
395
|
+
if (typeof processedColor === 'number') {
|
|
396
|
+
outputType = 'color';
|
|
397
|
+
return processedColor;
|
|
398
|
+
} else {
|
|
399
|
+
return NativeAnimatedHelper.transformDataType(value);
|
|
400
|
+
}
|
|
401
|
+
}): any);
|
|
402
|
+
}
|
|
403
|
+
|
|
358
404
|
return {
|
|
359
405
|
inputRange: this._config.inputRange,
|
|
360
|
-
|
|
361
|
-
|
|
406
|
+
outputRange,
|
|
407
|
+
outputType,
|
|
362
408
|
extrapolateLeft:
|
|
363
409
|
this._config.extrapolateLeft || this._config.extrapolate || 'extend',
|
|
364
410
|
extrapolateRight:
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
|
|
13
13
|
import type {PlatformConfig} from '../AnimatedPlatformConfig';
|
|
14
14
|
|
|
15
|
-
import ReactNativeFeatureFlags from '../../ReactNative/ReactNativeFeatureFlags';
|
|
16
15
|
import NativeAnimatedHelper from '../NativeAnimatedHelper';
|
|
17
16
|
import invariant from 'invariant';
|
|
18
17
|
|
|
@@ -30,9 +29,7 @@ export default class AnimatedNode {
|
|
|
30
29
|
__nativeAnimatedValueListener: ?any;
|
|
31
30
|
__attach(): void {}
|
|
32
31
|
__detach(): void {
|
|
33
|
-
|
|
34
|
-
this.removeAllListeners();
|
|
35
|
-
}
|
|
32
|
+
this.removeAllListeners();
|
|
36
33
|
if (this.__isNative && this.__nativeTag != null) {
|
|
37
34
|
NativeAnimatedHelper.API.dropAnimatedNode(this.__nativeTag);
|
|
38
35
|
this.__nativeTag = undefined;
|
|
@@ -44,7 +41,7 @@ export default class AnimatedNode {
|
|
|
44
41
|
}
|
|
45
42
|
__addChild(child: AnimatedNode) {}
|
|
46
43
|
__removeChild(child: AnimatedNode) {}
|
|
47
|
-
__getChildren():
|
|
44
|
+
__getChildren(): $ReadOnlyArray<AnimatedNode> {
|
|
48
45
|
return [];
|
|
49
46
|
}
|
|
50
47
|
|
|
@@ -186,6 +183,7 @@ export default class AnimatedNode {
|
|
|
186
183
|
'This JS animated node type cannot be used as native animated node',
|
|
187
184
|
);
|
|
188
185
|
}
|
|
186
|
+
|
|
189
187
|
toJSON(): any {
|
|
190
188
|
return this.__getValue();
|
|
191
189
|
}
|
|
@@ -90,14 +90,15 @@ export default class AnimatedProps extends AnimatedNode {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
__makeNative(platformConfig: ?PlatformConfig): void {
|
|
93
|
+
for (const key in this._props) {
|
|
94
|
+
const value = this._props[key];
|
|
95
|
+
if (value instanceof AnimatedNode) {
|
|
96
|
+
value.__makeNative(platformConfig);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
93
100
|
if (!this.__isNative) {
|
|
94
101
|
this.__isNative = true;
|
|
95
|
-
for (const key in this._props) {
|
|
96
|
-
const value = this._props[key];
|
|
97
|
-
if (value instanceof AnimatedNode) {
|
|
98
|
-
value.__makeNative(platformConfig);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
102
|
|
|
102
103
|
// Since this does not call the super.__makeNative, we need to store the
|
|
103
104
|
// supplied platformConfig here, before calling __connectAnimatedView
|
|
@@ -13,24 +13,54 @@
|
|
|
13
13
|
import type {PlatformConfig} from '../AnimatedPlatformConfig';
|
|
14
14
|
|
|
15
15
|
import flattenStyle from '../../StyleSheet/flattenStyle';
|
|
16
|
+
import Platform from '../../Utilities/Platform';
|
|
16
17
|
import NativeAnimatedHelper from '../NativeAnimatedHelper';
|
|
17
18
|
import AnimatedNode from './AnimatedNode';
|
|
18
19
|
import AnimatedTransform from './AnimatedTransform';
|
|
19
20
|
import AnimatedWithChildren from './AnimatedWithChildren';
|
|
20
21
|
|
|
22
|
+
function createAnimatedStyle(inputStyle: any): Object {
|
|
23
|
+
// $FlowFixMe[underconstrained-implicit-instantiation]
|
|
24
|
+
const style = flattenStyle(inputStyle);
|
|
25
|
+
const animatedStyles: any = {};
|
|
26
|
+
for (const key in style) {
|
|
27
|
+
const value = style[key];
|
|
28
|
+
if (key === 'transform') {
|
|
29
|
+
animatedStyles[key] = new AnimatedTransform(value);
|
|
30
|
+
} else if (value instanceof AnimatedNode) {
|
|
31
|
+
animatedStyles[key] = value;
|
|
32
|
+
} else if (value && !Array.isArray(value) && typeof value === 'object') {
|
|
33
|
+
animatedStyles[key] = createAnimatedStyle(value);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return animatedStyles;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function createStyleWithAnimatedTransform(inputStyle: any): Object {
|
|
40
|
+
// $FlowFixMe[underconstrained-implicit-instantiation]
|
|
41
|
+
let style = flattenStyle(inputStyle) || ({}: {[string]: any});
|
|
42
|
+
|
|
43
|
+
if (style.transform) {
|
|
44
|
+
style = {
|
|
45
|
+
...style,
|
|
46
|
+
transform: new AnimatedTransform(style.transform),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return style;
|
|
50
|
+
}
|
|
51
|
+
|
|
21
52
|
export default class AnimatedStyle extends AnimatedWithChildren {
|
|
53
|
+
_inputStyle: any;
|
|
22
54
|
_style: Object;
|
|
23
55
|
|
|
24
56
|
constructor(style: any) {
|
|
25
57
|
super();
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
};
|
|
58
|
+
if (Platform.OS === 'web') {
|
|
59
|
+
this._inputStyle = style;
|
|
60
|
+
this._style = createAnimatedStyle(style);
|
|
61
|
+
} else {
|
|
62
|
+
this._style = createStyleWithAnimatedTransform(style);
|
|
32
63
|
}
|
|
33
|
-
this._style = style;
|
|
34
64
|
}
|
|
35
65
|
|
|
36
66
|
// Recursively get values for nested styles (like iOS's shadowOffset)
|
|
@@ -50,7 +80,11 @@ export default class AnimatedStyle extends AnimatedWithChildren {
|
|
|
50
80
|
return updatedStyle;
|
|
51
81
|
}
|
|
52
82
|
|
|
53
|
-
__getValue(): Object {
|
|
83
|
+
__getValue(): Object | Array<Object> {
|
|
84
|
+
if (Platform.OS === 'web') {
|
|
85
|
+
return [this._inputStyle, this._walkStyleAndGetValues(this._style)];
|
|
86
|
+
}
|
|
87
|
+
|
|
54
88
|
return this._walkStyleAndGetValues(this._style);
|
|
55
89
|
}
|
|
56
90
|
|
|
@@ -48,21 +48,18 @@ const NativeAnimatedAPI = NativeAnimatedHelper.API;
|
|
|
48
48
|
* this two-phases process is to deal with composite props such as
|
|
49
49
|
* transform which can receive values from multiple parents.
|
|
50
50
|
*/
|
|
51
|
-
function
|
|
52
|
-
const
|
|
53
|
-
function findAnimatedStyles(node:
|
|
54
|
-
|
|
55
|
-
* suppresses an error found when Flow v0.68 was deployed. To see the error
|
|
56
|
-
* delete this comment and run Flow. */
|
|
51
|
+
export function flushValue(rootNode: AnimatedNode): void {
|
|
52
|
+
const leaves = new Set<{update: () => void, ...}>();
|
|
53
|
+
function findAnimatedStyles(node: AnimatedNode) {
|
|
54
|
+
// $FlowFixMe[prop-missing]
|
|
57
55
|
if (typeof node.update === 'function') {
|
|
58
|
-
|
|
56
|
+
leaves.add((node: any));
|
|
59
57
|
} else {
|
|
60
58
|
node.__getChildren().forEach(findAnimatedStyles);
|
|
61
59
|
}
|
|
62
60
|
}
|
|
63
61
|
findAnimatedStyles(rootNode);
|
|
64
|
-
|
|
65
|
-
animatedStyles.forEach(animatedStyle => animatedStyle.update());
|
|
62
|
+
leaves.forEach(leaf => leaf.update());
|
|
66
63
|
}
|
|
67
64
|
|
|
68
65
|
/**
|
|
@@ -91,7 +88,6 @@ export default class AnimatedValue extends AnimatedWithChildren {
|
|
|
91
88
|
_animation: ?Animation;
|
|
92
89
|
_tracking: ?AnimatedTracking;
|
|
93
90
|
|
|
94
|
-
// $FlowFixMe[missing-local-annot]
|
|
95
91
|
constructor(value: number, config?: ?AnimatedValueConfig) {
|
|
96
92
|
super();
|
|
97
93
|
if (typeof value !== 'number') {
|
|
@@ -291,9 +287,9 @@ export default class AnimatedValue extends AnimatedWithChildren {
|
|
|
291
287
|
|
|
292
288
|
this._value = value;
|
|
293
289
|
if (flush) {
|
|
294
|
-
|
|
290
|
+
flushValue(this);
|
|
295
291
|
}
|
|
296
|
-
|
|
292
|
+
this.__callListeners(this.__getValue());
|
|
297
293
|
}
|
|
298
294
|
|
|
299
295
|
__getNativeConfig(): Object {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
+
import {isPublicInstance as isFabricPublicInstance} from '../Renderer/public/ReactFabricPublicInstanceUtils';
|
|
13
14
|
import useRefEffect from '../Utilities/useRefEffect';
|
|
14
15
|
import {AnimatedEvent} from './AnimatedEvent';
|
|
15
16
|
import NativeAnimatedHelper from './NativeAnimatedHelper';
|
|
@@ -52,7 +53,7 @@ export default function useAnimatedProps<TProps: {...}, TInstance>(
|
|
|
52
53
|
// 2) Update `onUpdateRef`.
|
|
53
54
|
// 3) Update listeners for `AnimatedEvent` props.
|
|
54
55
|
//
|
|
55
|
-
// Ideally, each of these would be
|
|
56
|
+
// Ideally, each of these would be separate "effects" so that they are not
|
|
56
57
|
// unnecessarily re-run when irrelevant dependencies change. For example, we
|
|
57
58
|
// should be able to hoist all `AnimatedEvent` props and only do #3 if either
|
|
58
59
|
// the `AnimatedEvent` props change or `instance` changes.
|
|
@@ -183,7 +184,7 @@ function getEventTarget<TInstance>(instance: TInstance): TInstance {
|
|
|
183
184
|
// $FlowFixMe[unclear-type] - Legacy instance assumptions.
|
|
184
185
|
function isFabricInstance(instance: any): boolean {
|
|
185
186
|
return (
|
|
186
|
-
|
|
187
|
+
isFabricPublicInstance(instance) ||
|
|
187
188
|
// Some components have a setNativeProps function but aren't a host component
|
|
188
189
|
// such as lists like FlatList and SectionList. These should also use
|
|
189
190
|
// forceUpdate in Fabric since setNativeProps doesn't exist on the underlying
|
|
@@ -192,13 +193,9 @@ function isFabricInstance(instance: any): boolean {
|
|
|
192
193
|
// If these components end up using forwardRef then these hacks can go away
|
|
193
194
|
// as instance would actually be the underlying host component and the above check
|
|
194
195
|
// would be sufficient.
|
|
195
|
-
|
|
196
|
-
|
|
196
|
+
isFabricPublicInstance(instance?.getNativeScrollRef?.()) ||
|
|
197
|
+
isFabricPublicInstance(
|
|
198
|
+
instance?.getScrollResponder?.()?.getNativeScrollRef?.(),
|
|
199
|
+
)
|
|
197
200
|
);
|
|
198
201
|
}
|
|
199
|
-
|
|
200
|
-
// $FlowFixMe[unclear-type] - Legacy instance assumptions.
|
|
201
|
-
function hasFabricHandle(instance: any): boolean {
|
|
202
|
-
// eslint-disable-next-line dot-notation
|
|
203
|
-
return instance?.['_internalInstanceHandle']?.stateNode?.canonical != null;
|
|
204
|
-
}
|
|
@@ -207,7 +207,7 @@ class MessageQueue {
|
|
|
207
207
|
});
|
|
208
208
|
warnOnce(
|
|
209
209
|
'excessive-number-of-pending-callbacks',
|
|
210
|
-
`
|
|
210
|
+
`Excessive number of pending callbacks: ${
|
|
211
211
|
this._successCallbacks.size
|
|
212
212
|
}. Some pending callbacks that might have leaked by never being called from native code: ${stringifySafe(
|
|
213
213
|
info,
|
|
@@ -381,6 +381,7 @@ class MessageQueue {
|
|
|
381
381
|
return (
|
|
382
382
|
// $FlowFixMe[cannot-resolve-name]
|
|
383
383
|
typeof DebuggerInternal !== 'undefined' &&
|
|
384
|
+
// $FlowFixMe[cannot-resolve-name]
|
|
384
385
|
DebuggerInternal.shouldPauseOnThrow === true
|
|
385
386
|
);
|
|
386
387
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Interface for NativeModules which allows to augment NativeModules with type
|
|
11
|
+
* Interface for NativeModules which allows to augment NativeModules with type information.
|
|
12
12
|
* See react-native-sensor-manager for example.
|
|
13
13
|
*/
|
|
14
14
|
interface NativeModulesStatic {
|
|
@@ -134,6 +134,7 @@ function genMethod(moduleID: number, methodID: number, type: MethodType) {
|
|
|
134
134
|
const onSuccess: ?(mixed) => void = hasSuccessCallback ? lastArg : null;
|
|
135
135
|
// $FlowFixMe[incompatible-type]
|
|
136
136
|
const onFail: ?(mixed) => void = hasErrorCallback ? secondLastArg : null;
|
|
137
|
+
// $FlowFixMe[unsafe-addition]
|
|
137
138
|
const callbackCount = hasSuccessCallback + hasErrorCallback;
|
|
138
139
|
const newArgs = args.slice(0, args.length - callbackCount);
|
|
139
140
|
if (type === 'sync') {
|