@office-iss/react-native-win32 0.0.0-canary.282 → 0.0.0-canary.284
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 +1 -1
- package/CHANGELOG.json +79 -1
- package/CHANGELOG.md +28 -4
- package/IntegrationTests/AccessibilityManagerTest.js +17 -12
- package/IntegrationTests/AppEventsTest.js +47 -32
- package/IntegrationTests/GlobalEvalWithSourceUrlTest.js +10 -14
- package/IntegrationTests/ImageCachePolicyTest.js +64 -81
- package/IntegrationTests/ImageSnapshotTest.js +17 -20
- package/IntegrationTests/IntegrationTestHarnessTest.js +34 -52
- package/IntegrationTests/IntegrationTestsApp.js +11 -6
- package/IntegrationTests/LayoutEventsTest.js +1 -1
- package/IntegrationTests/LoggingTestModule.js +2 -1
- package/IntegrationTests/PromiseTest.js +51 -43
- package/IntegrationTests/SimpleSnapshotTest.js +19 -24
- package/IntegrationTests/SyncMethodTest.js +9 -13
- package/IntegrationTests/TimersTest.js +3 -3
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +3 -3
- package/Libraries/Alert/Alert.js +1 -1
- package/Libraries/Alert/Alert.win32.js +1 -1
- package/Libraries/Alert/RCTAlertManager.android.js +1 -1
- package/Libraries/Alert/RCTAlertManager.ios.js +1 -1
- package/Libraries/Animated/AnimatedMock.js +1 -1
- package/Libraries/Animated/AnimatedWeb.js +27 -9
- package/Libraries/Animated/nodes/AnimatedValue.js +35 -13
- package/Libraries/Animated/useAnimatedProps.js +47 -85
- package/Libraries/AppState/AppState.js +1 -1
- package/Libraries/BatchedBridge/BatchedBridge.js +4 -2
- package/Libraries/BatchedBridge/MessageQueue.js +2 -2
- package/Libraries/BatchedBridge/NativeModules.js +4 -3
- package/Libraries/Blob/Blob.js +4 -4
- package/Libraries/Blob/BlobManager.js +3 -2
- package/Libraries/Blob/BlobRegistry.js +3 -9
- package/Libraries/Blob/File.js +3 -2
- package/Libraries/Blob/FileReader.js +1 -1
- package/Libraries/BugReporting/BugReporting.js +2 -2
- package/Libraries/BugReporting/dumpReactTree.js +2 -2
- package/Libraries/BugReporting/getReactData.js +1 -1
- package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +1 -1
- package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.ios.js +1 -1
- package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.win32.js +1 -1
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +5 -5
- package/Libraries/Components/Button.js +2 -2
- package/Libraries/Components/Button.win32.js +2 -2
- package/Libraries/Components/Clipboard/Clipboard.js +1 -1
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +7 -7
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +1 -2
- package/Libraries/Components/Keyboard/Keyboard.js +9 -9
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +4 -4
- package/Libraries/Components/Pressable/Pressable.js +4 -4
- package/Libraries/Components/Pressable/Pressable.win32.js +4 -4
- package/Libraries/Components/Pressable/useAndroidRippleForView.js +9 -9
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +10 -11
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +1 -1
- package/Libraries/Components/RefreshControl/RefreshControl.js +9 -9
- package/Libraries/Components/ScrollView/ScrollView.js +32 -26
- package/Libraries/Components/ScrollView/ScrollViewCommands.js +2 -2
- package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +2 -2
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
- package/Libraries/Components/ScrollView/processDecelerationRate.js +1 -1
- package/Libraries/Components/Sound/SoundManager.js +1 -1
- package/Libraries/Components/StaticRenderer.js +4 -4
- package/Libraries/Components/StatusBar/StatusBar.js +33 -18
- package/Libraries/Components/Switch/Switch.js +6 -6
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +31 -31
- package/Libraries/Components/TextInput/InputAccessoryView.js +2 -2
- package/Libraries/Components/TextInput/TextInput.flow.js +35 -35
- package/Libraries/Components/TextInput/TextInput.js +35 -35
- package/Libraries/Components/TextInput/TextInput.win32.js +35 -35
- package/Libraries/Components/TextInput/TextInputNativeCommands.js +1 -1
- package/Libraries/Components/ToastAndroid/ToastAndroid.d.ts +68 -6
- package/Libraries/Components/Touchable/TouchableBounce.js +5 -5
- package/Libraries/Components/Touchable/TouchableHighlight.js +11 -11
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +14 -14
- package/Libraries/Components/Touchable/TouchableNativeFeedback.win32.js +6 -6
- package/Libraries/Components/Touchable/TouchableOpacity.js +6 -6
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
- package/Libraries/Components/UnimplementedViews/UnimplementedView.js +9 -1
- package/Libraries/Components/View/ViewAccessibility.js +2 -2
- package/Libraries/Components/View/ViewAccessibility.win32.js +2 -2
- package/Libraries/Components/View/ViewPropTypes.js +22 -22
- package/Libraries/Components/View/ViewPropTypes.win32.js +22 -22
- package/Libraries/Core/RawEventEmitter.js +2 -2
- package/Libraries/Core/ReactNativeVersion.js +3 -5
- package/Libraries/Core/Timers/JSTimers.js +3 -3
- package/Libraries/Core/polyfillPromise.js +1 -1
- package/Libraries/Core/registerCallableModule.js +1 -1
- package/Libraries/Core/setUpAlert.js +1 -1
- package/Libraries/Core/setUpDeveloperTools.js +0 -2
- package/Libraries/Core/setUpErrorHandling.js +6 -1
- package/Libraries/Core/setUpReactDevTools.js +1 -1
- package/Libraries/Core/setUpTimers.js +35 -56
- package/Libraries/Core/setUpXHR.js +5 -5
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -1
- package/Libraries/Events/CustomEvent.js +2 -2
- package/Libraries/Image/AssetRegistry.js +6 -1
- package/Libraries/Image/AssetSourceResolver.js +2 -2
- package/Libraries/Image/ImageProps.js +17 -17
- package/Libraries/Image/nativeImageSource.js +2 -2
- package/Libraries/Inspector/ElementProperties.js +4 -3
- package/Libraries/Inspector/Inspector.js +1 -1
- package/Libraries/Inspector/Inspector.win32.js +1 -1
- package/Libraries/Inspector/InspectorOverlay.js +4 -3
- package/Libraries/Inspector/InspectorOverlay.win32.js +3 -3
- package/Libraries/Inspector/InspectorPanel.js +6 -6
- package/Libraries/Inspector/NetworkOverlay.js +6 -5
- package/Libraries/Inspector/PerformanceOverlay.js +2 -1
- package/Libraries/Inspector/resolveBoxStyle.js +2 -2
- package/Libraries/Interaction/InteractionManager.js +3 -2
- package/Libraries/Interaction/PanResponder.js +6 -6
- package/Libraries/Interaction/TouchHistoryMath.js +26 -0
- package/Libraries/JSInspector/NetworkAgent.js +2 -1
- package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -2
- package/Libraries/Linking/Linking.js +0 -1
- package/Libraries/Lists/FlatList.js +9 -10
- package/Libraries/Lists/SectionList.js +7 -9
- package/Libraries/Lists/SectionListModern.js +6 -6
- package/Libraries/LogBox/Data/LogBoxData.js +14 -14
- package/Libraries/LogBox/Data/LogBoxLog.js +51 -29
- package/Libraries/LogBox/Data/parseLogBoxLog.js +10 -10
- package/Libraries/LogBox/LogBox.js +13 -1
- package/Libraries/LogBox/LogBoxInspectorContainer.js +3 -3
- package/Libraries/LogBox/LogBoxNotificationContainer.js +3 -3
- package/Libraries/LogBox/UI/LogBoxButton.js +4 -4
- package/Libraries/LogBox/UI/LogBoxInspectorBody.js +8 -2
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +50 -31
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +50 -31
- package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorSection.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +2 -2
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +2 -2
- package/Libraries/Modal/Modal.js +7 -7
- package/Libraries/Network/XMLHttpRequest.js +1 -1
- package/Libraries/Network/convertRequestBody.js +3 -1
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
- package/Libraries/Pressability/Pressability.js +10 -10
- package/Libraries/Pressability/Pressability.win32.js +10 -10
- package/Libraries/Pressability/PressabilityDebug.js +2 -2
- package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +2 -2
- package/Libraries/Promise.js +2 -2
- package/Libraries/ReactNative/AppContainer.js +2 -2
- package/Libraries/ReactNative/BridgelessUIManager.js +3 -8
- package/Libraries/ReactNative/I18nManager.js +3 -2
- package/Libraries/ReactNative/PaperUIManager.js +1 -1
- package/Libraries/ReactNative/PaperUIManager.win32.js +1 -1
- package/Libraries/ReactNative/ReactNativeFeatureFlags.js +2 -2
- package/Libraries/ReactNative/ReactNativeRuntimeDiagnostics.js +2 -2
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +3 -2
- package/Libraries/StyleSheet/Rect.js +2 -2
- package/Libraries/StyleSheet/StyleSheet.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.win32.js +1 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +1 -1
- package/Libraries/StyleSheet/private/_TransformStyle.js +18 -18
- package/Libraries/StyleSheet/processBackgroundImage.js +138 -136
- package/Libraries/Text/TextAncestor.js +1 -2
- package/Libraries/TurboModule/TurboModuleRegistry.js +1 -1
- package/Libraries/Types/CodegenTypes.js +2 -1
- package/Libraries/Types/CoreEventTypes.js +40 -40
- package/Libraries/Types/CoreEventTypes.win32.js +40 -40
- package/Libraries/UTFSequence.js +2 -2
- package/Libraries/Utilities/BackHandler.android.js +2 -2
- package/Libraries/Utilities/BackHandler.ios.js +2 -2
- package/Libraries/Utilities/BackHandler.win32.js +2 -2
- package/Libraries/Utilities/HMRClient.js +2 -2
- package/Libraries/Utilities/Platform.android.js +4 -4
- package/Libraries/Utilities/Platform.flow.js +8 -8
- package/Libraries/Utilities/Platform.flow.win32.js +8 -8
- package/Libraries/Utilities/Platform.ios.js +4 -4
- package/Libraries/Utilities/Platform.win32.js +2 -2
- package/Libraries/Utilities/ReactNativeTestTools.js +3 -2
- package/Libraries/Utilities/codegenNativeCommands.js +2 -2
- package/Libraries/Utilities/codegenNativeComponent.js +2 -2
- package/Libraries/Utilities/differ/deepDiffer.js +3 -3
- package/Libraries/Utilities/stringifySafe.js +2 -2
- package/Libraries/Vibration/Vibration.js +1 -1
- package/Libraries/WebSocket/WebSocketEvent.js +1 -1
- package/Libraries/YellowBox/YellowBoxDeprecated.js +4 -3
- package/Libraries/vendor/core/ErrorUtils.js +1 -1
- package/flow/jest.js +14 -14
- package/index.js +16 -13
- package/index.win32.js +16 -13
- package/jest/setup.js +214 -197
- package/overrides.json +26 -26
- package/package.json +16 -16
- package/src/private/featureflags/ReactNativeFeatureFlags.js +11 -30
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +3 -2
- package/src/private/specs/components/ActivityIndicatorViewNativeComponent.js +2 -2
- package/src/private/specs/components/AndroidDrawerLayoutNativeComponent.js +6 -6
- package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +2 -2
- package/src/private/specs/components/AndroidSwipeRefreshLayoutNativeComponent.js +2 -2
- package/src/private/specs/components/AndroidSwitchNativeComponent.js +4 -4
- package/src/private/specs/components/DebuggingOverlayNativeComponent.js +2 -2
- package/src/private/specs/components/ProgressBarAndroidNativeComponent.js +2 -2
- package/src/private/specs/components/PullToRefreshViewNativeComponent.js +2 -2
- package/src/private/specs/components/RCTInputAccessoryViewNativeComponent.js +2 -2
- package/src/private/specs/components/RCTModalHostViewNativeComponent.js +4 -4
- package/src/private/specs/components/RCTSafeAreaViewNativeComponent.js +2 -2
- package/src/private/specs/components/SwitchNativeComponent.js +4 -4
- package/src/private/specs/components/UnimplementedNativeViewNativeComponent.js +2 -2
- package/src/private/specs/modules/NativeAccessibilityManager.js +2 -2
- package/src/private/specs/modules/NativeActionSheetManager.js +7 -7
- package/src/private/specs/modules/NativeAlertManager.js +2 -2
- package/src/private/specs/modules/NativeAnimatedModule.js +2 -2
- package/src/private/specs/modules/NativeAnimatedTurboModule.js +2 -2
- package/src/private/specs/modules/NativeAppState.js +3 -3
- package/src/private/specs/modules/NativeBlobModule.js +1 -1
- package/src/private/specs/modules/NativeClipboard.js +1 -1
- package/src/private/specs/modules/NativeDeviceInfo.js +8 -8
- package/src/private/specs/modules/NativeDialogManagerAndroid.js +4 -4
- package/src/private/specs/modules/NativeExceptionsManager.js +2 -2
- package/src/private/specs/modules/NativeFantom.js +6 -0
- package/src/private/specs/modules/NativeFrameRateLogger.js +1 -1
- package/src/private/specs/modules/NativeI18nManager.js +2 -2
- package/src/private/specs/modules/NativeImageEditor.js +9 -9
- package/src/private/specs/modules/NativeImageLoaderAndroid.js +1 -1
- package/src/private/specs/modules/NativeImageLoaderIOS.js +1 -1
- package/src/private/specs/modules/NativeImageLoaderWin32.js +1 -1
- package/src/private/specs/modules/NativeImageStoreAndroid.js +1 -1
- package/src/private/specs/modules/NativeImageStoreIOS.js +3 -3
- package/src/private/specs/modules/NativeNetworkingIOS.js +2 -2
- package/src/private/specs/modules/NativePlatformConstantsAndroid.js +4 -4
- package/src/private/specs/modules/NativePlatformConstantsIOS.js +4 -4
- package/src/private/specs/modules/NativePlatformConstantsWin.js +5 -10
- package/src/private/specs/modules/NativePushNotificationManagerIOS.js +7 -7
- package/src/private/specs/modules/NativeSampleTurboModule.js +2 -2
- package/src/private/specs/modules/NativeSettingsManager.js +2 -2
- package/src/private/specs/modules/NativeShareModule.js +3 -3
- package/src/private/specs/modules/NativeSourceCode.js +2 -2
- package/src/private/specs/modules/NativeStatusBarManagerAndroid.js +4 -4
- package/src/private/specs/modules/NativeStatusBarManagerIOS.js +6 -6
- package/src/private/specs/modules/NativeToastAndroid.js +2 -2
- package/src/private/specs/modules/NativeVibration.js +1 -1
- package/src/private/specs/modules/NativeWebSocketModule.js +1 -1
- package/src/private/webapis/intersectionobserver/IntersectionObserver.js +2 -2
- package/src/private/webapis/intersectionobserver/{IntersectionObserverManager.js → internals/IntersectionObserverManager.js} +9 -9
- package/src/private/webapis/mutationobserver/MutationObserver.js +2 -2
- package/src/private/webapis/mutationobserver/{MutationObserverManager.js → internals/MutationObserverManager.js} +8 -8
- package/src/private/webapis/performance/EventTiming.js +1 -1
- package/src/private/webapis/performance/Performance.js +3 -3
- package/src/private/webapis/performance/PerformanceObserver.js +2 -2
- package/src/private/webapis/performance/{RawPerformanceEntry.js → internals/RawPerformanceEntry.js} +6 -6
- package/src/private/webapis/performance/{Utilities.js → internals/Utilities.js} +1 -1
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +1 -1
|
@@ -17,13 +17,13 @@ import * as ReactNativeFeatureFlags from '../../src/private/featureflags/ReactNa
|
|
|
17
17
|
import {isPublicInstance as isFabricPublicInstance} from '../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstanceUtils';
|
|
18
18
|
import useRefEffect from '../Utilities/useRefEffect';
|
|
19
19
|
import {AnimatedEvent} from './AnimatedEvent';
|
|
20
|
+
import AnimatedNode from './nodes/AnimatedNode';
|
|
20
21
|
import AnimatedProps from './nodes/AnimatedProps';
|
|
22
|
+
import AnimatedValue from './nodes/AnimatedValue';
|
|
21
23
|
import {
|
|
22
24
|
useCallback,
|
|
23
25
|
useEffect,
|
|
24
26
|
useInsertionEffect,
|
|
25
|
-
useLayoutEffect,
|
|
26
|
-
useMemo,
|
|
27
27
|
useReducer,
|
|
28
28
|
useRef,
|
|
29
29
|
} from 'react';
|
|
@@ -37,10 +37,10 @@ type CallbackRef<T> = T => mixed;
|
|
|
37
37
|
|
|
38
38
|
type UpdateCallback = () => void;
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
type AnimatedValueListeners = Array<{
|
|
41
|
+
propValue: AnimatedValue,
|
|
42
|
+
listenerId: string,
|
|
43
|
+
}>;
|
|
44
44
|
|
|
45
45
|
export default function useAnimatedProps<TProps: {...}, TInstance>(
|
|
46
46
|
props: TProps,
|
|
@@ -50,28 +50,14 @@ export default function useAnimatedProps<TProps: {...}, TInstance>(
|
|
|
50
50
|
const onUpdateRef = useRef<UpdateCallback | null>(null);
|
|
51
51
|
const timerRef = useRef<TimeoutID | null>(null);
|
|
52
52
|
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const node = useMemoOrAnimatedPropsMemo(
|
|
58
|
-
() =>
|
|
59
|
-
new AnimatedProps(
|
|
60
|
-
props,
|
|
61
|
-
() => onUpdateRef.current?.(),
|
|
62
|
-
allowlistIfEnabled,
|
|
63
|
-
),
|
|
64
|
-
[allowlistIfEnabled, props],
|
|
53
|
+
const node = useAnimatedPropsMemo(
|
|
54
|
+
() => new AnimatedProps(props, () => onUpdateRef.current?.(), allowlist),
|
|
55
|
+
[allowlist, props],
|
|
65
56
|
);
|
|
66
57
|
|
|
67
58
|
const useNativePropsInFabric =
|
|
68
59
|
ReactNativeFeatureFlags.shouldUseSetNativePropsInFabric();
|
|
69
60
|
|
|
70
|
-
const useAnimatedPropsLifecycle =
|
|
71
|
-
ReactNativeFeatureFlags.useInsertionEffectsForAnimations()
|
|
72
|
-
? useAnimatedPropsLifecycle_insertionEffects
|
|
73
|
-
: useAnimatedPropsLifecycle_layoutEffects;
|
|
74
|
-
|
|
75
61
|
useAnimatedPropsLifecycle(node);
|
|
76
62
|
|
|
77
63
|
// TODO: This "effect" does three things:
|
|
@@ -162,6 +148,7 @@ export default function useAnimatedProps<TProps: {...}, TInstance>(
|
|
|
162
148
|
|
|
163
149
|
const target = getEventTarget(instance);
|
|
164
150
|
const events = [];
|
|
151
|
+
const animatedValueListeners: AnimatedValueListeners = [];
|
|
165
152
|
|
|
166
153
|
for (const propName in props) {
|
|
167
154
|
// $FlowFixMe[invalid-computed-prop]
|
|
@@ -169,6 +156,8 @@ export default function useAnimatedProps<TProps: {...}, TInstance>(
|
|
|
169
156
|
if (propValue instanceof AnimatedEvent && propValue.__isNative) {
|
|
170
157
|
propValue.__attach(target, propName);
|
|
171
158
|
events.push([propName, propValue]);
|
|
159
|
+
// $FlowFixMe[incompatible-call] - the `addListenersToPropsValue` drills down the propValue.
|
|
160
|
+
addListenersToPropsValue(propValue, animatedValueListeners);
|
|
172
161
|
}
|
|
173
162
|
}
|
|
174
163
|
|
|
@@ -178,6 +167,10 @@ export default function useAnimatedProps<TProps: {...}, TInstance>(
|
|
|
178
167
|
for (const [propName, propValue] of events) {
|
|
179
168
|
propValue.__detach(target, propName);
|
|
180
169
|
}
|
|
170
|
+
|
|
171
|
+
for (const {propValue, listenerId} of animatedValueListeners) {
|
|
172
|
+
propValue.removeListener(listenerId);
|
|
173
|
+
}
|
|
181
174
|
};
|
|
182
175
|
},
|
|
183
176
|
[node, useNativePropsInFabric, props],
|
|
@@ -194,13 +187,40 @@ function reduceAnimatedProps<TProps>(
|
|
|
194
187
|
// Force `collapsable` to be false so that the native view is not flattened.
|
|
195
188
|
// Flattened views cannot be accurately referenced by the native driver.
|
|
196
189
|
return {
|
|
197
|
-
...
|
|
198
|
-
? node.__getValueWithStaticProps(props)
|
|
199
|
-
: node.__getValue()),
|
|
190
|
+
...node.__getValueWithStaticProps(props),
|
|
200
191
|
collapsable: false,
|
|
201
192
|
};
|
|
202
193
|
}
|
|
203
194
|
|
|
195
|
+
function addListenersToPropsValue(
|
|
196
|
+
propValue: AnimatedValue,
|
|
197
|
+
accumulator: AnimatedValueListeners,
|
|
198
|
+
) {
|
|
199
|
+
// propValue can be a scalar value, an array or an object.
|
|
200
|
+
if (propValue instanceof AnimatedValue) {
|
|
201
|
+
const listenerId = propValue.addListener(() => {});
|
|
202
|
+
accumulator.push({propValue, listenerId});
|
|
203
|
+
} else if (Array.isArray(propValue)) {
|
|
204
|
+
// An array can be an array of scalar values, arrays of arrays, or arrays of objects
|
|
205
|
+
for (const prop of propValue) {
|
|
206
|
+
addListenersToPropsValue(prop, accumulator);
|
|
207
|
+
}
|
|
208
|
+
} else if (propValue instanceof Object) {
|
|
209
|
+
addAnimatedValuesListenersToProps(propValue, accumulator);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function addAnimatedValuesListenersToProps(
|
|
214
|
+
props: AnimatedNode,
|
|
215
|
+
accumulator: AnimatedValueListeners,
|
|
216
|
+
) {
|
|
217
|
+
for (const propName in props) {
|
|
218
|
+
// $FlowFixMe[prop-missing] - This is an object contained in a prop, but we don't know the exact type.
|
|
219
|
+
const propValue = props[propName];
|
|
220
|
+
addListenersToPropsValue(propValue, accumulator);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
204
224
|
/**
|
|
205
225
|
* Manages the lifecycle of the supplied `AnimatedProps` by invoking `__attach`
|
|
206
226
|
* and `__detach`. However, this is more complicated because `AnimatedProps`
|
|
@@ -208,7 +228,7 @@ function reduceAnimatedProps<TProps>(
|
|
|
208
228
|
* nodes. So in order to optimize this, we avoid detaching until the next attach
|
|
209
229
|
* unless we are unmounting.
|
|
210
230
|
*/
|
|
211
|
-
function
|
|
231
|
+
function useAnimatedPropsLifecycle(node: AnimatedProps): void {
|
|
212
232
|
const prevNodeRef = useRef<?AnimatedProps>(null);
|
|
213
233
|
const isUnmountingRef = useRef<boolean>(false);
|
|
214
234
|
|
|
@@ -233,51 +253,6 @@ function useAnimatedPropsLifecycle_layoutEffects(node: AnimatedProps): void {
|
|
|
233
253
|
};
|
|
234
254
|
});
|
|
235
255
|
|
|
236
|
-
useLayoutEffect(() => {
|
|
237
|
-
isUnmountingRef.current = false;
|
|
238
|
-
return () => {
|
|
239
|
-
isUnmountingRef.current = true;
|
|
240
|
-
};
|
|
241
|
-
}, []);
|
|
242
|
-
|
|
243
|
-
useLayoutEffect(() => {
|
|
244
|
-
node.__attach();
|
|
245
|
-
if (prevNodeRef.current != null) {
|
|
246
|
-
const prevNode = prevNodeRef.current;
|
|
247
|
-
// TODO: Stop restoring default values (unless `reset` is called).
|
|
248
|
-
prevNode.__restoreDefaultValues();
|
|
249
|
-
prevNode.__detach();
|
|
250
|
-
prevNodeRef.current = null;
|
|
251
|
-
}
|
|
252
|
-
return () => {
|
|
253
|
-
if (isUnmountingRef.current) {
|
|
254
|
-
// NOTE: Do not restore default values on unmount, see D18197735.
|
|
255
|
-
node.__detach();
|
|
256
|
-
} else {
|
|
257
|
-
prevNodeRef.current = node;
|
|
258
|
-
}
|
|
259
|
-
};
|
|
260
|
-
}, [node]);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Manages the lifecycle of the supplied `AnimatedProps` by invoking `__attach`
|
|
265
|
-
* and `__detach`. However, this is more complicated because `AnimatedProps`
|
|
266
|
-
* uses reference counting to determine when to recursively detach its children
|
|
267
|
-
* nodes. So in order to optimize this, we avoid detaching until the next attach
|
|
268
|
-
* unless we are unmounting.
|
|
269
|
-
*/
|
|
270
|
-
function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void {
|
|
271
|
-
const prevNodeRef = useRef<?AnimatedProps>(null);
|
|
272
|
-
const isUnmountingRef = useRef<boolean>(false);
|
|
273
|
-
|
|
274
|
-
useEffect(() => {
|
|
275
|
-
// It is ok for multiple components to call `flushQueue` because it noops
|
|
276
|
-
// if the queue is empty. When multiple animated components are mounted at
|
|
277
|
-
// the same time. Only first component flushes the queue and the others will noop.
|
|
278
|
-
NativeAnimatedHelper.API.flushQueue();
|
|
279
|
-
});
|
|
280
|
-
|
|
281
256
|
useInsertionEffect(() => {
|
|
282
257
|
isUnmountingRef.current = false;
|
|
283
258
|
return () => {
|
|
@@ -287,17 +262,6 @@ function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void {
|
|
|
287
262
|
|
|
288
263
|
useInsertionEffect(() => {
|
|
289
264
|
node.__attach();
|
|
290
|
-
let drivenAnimationEndedListener: ?EventSubscription = null;
|
|
291
|
-
|
|
292
|
-
if (node.__isNative) {
|
|
293
|
-
drivenAnimationEndedListener =
|
|
294
|
-
NativeAnimatedHelper.nativeEventEmitter.addListener(
|
|
295
|
-
'onUserDrivenAnimationEnded',
|
|
296
|
-
data => {
|
|
297
|
-
node.update();
|
|
298
|
-
},
|
|
299
|
-
);
|
|
300
|
-
}
|
|
301
265
|
if (prevNodeRef.current != null) {
|
|
302
266
|
const prevNode = prevNodeRef.current;
|
|
303
267
|
// TODO: Stop restoring default values (unless `reset` is called).
|
|
@@ -312,8 +276,6 @@ function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void {
|
|
|
312
276
|
} else {
|
|
313
277
|
prevNodeRef.current = node;
|
|
314
278
|
}
|
|
315
|
-
|
|
316
|
-
drivenAnimationEndedListener?.remove();
|
|
317
279
|
};
|
|
318
280
|
}, [node]);
|
|
319
281
|
}
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
import typeof MessageQueueT from './MessageQueue';
|
|
14
|
+
|
|
15
|
+
const MessageQueue: MessageQueueT = require('./MessageQueue').default;
|
|
14
16
|
|
|
15
17
|
const BatchedBridge: MessageQueue = new MessageQueue();
|
|
16
18
|
|
|
@@ -25,4 +27,4 @@ Object.defineProperty(global, '__fbBatchedBridge', {
|
|
|
25
27
|
value: BatchedBridge,
|
|
26
28
|
});
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
export default BatchedBridge;
|
|
@@ -14,7 +14,7 @@ const Systrace = require('../Performance/Systrace');
|
|
|
14
14
|
const deepFreezeAndThrowOnMutationInDev = require('../Utilities/deepFreezeAndThrowOnMutationInDev');
|
|
15
15
|
const stringifySafe = require('../Utilities/stringifySafe').default;
|
|
16
16
|
const warnOnce = require('../Utilities/warnOnce');
|
|
17
|
-
const ErrorUtils = require('../vendor/core/ErrorUtils');
|
|
17
|
+
const ErrorUtils = require('../vendor/core/ErrorUtils').default;
|
|
18
18
|
const invariant = require('invariant');
|
|
19
19
|
|
|
20
20
|
export type SpyData = {
|
|
@@ -489,4 +489,4 @@ class MessageQueue {
|
|
|
489
489
|
}
|
|
490
490
|
}
|
|
491
491
|
|
|
492
|
-
|
|
492
|
+
export default MessageQueue;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
import type {ExtendedError} from '../Core/ExtendedError';
|
|
14
14
|
|
|
15
|
-
const BatchedBridge = require('./BatchedBridge');
|
|
15
|
+
const BatchedBridge = require('./BatchedBridge').default;
|
|
16
16
|
const invariant = require('invariant');
|
|
17
17
|
|
|
18
18
|
export type ModuleConfig = [
|
|
@@ -176,7 +176,8 @@ function updateErrorWithErrorData(
|
|
|
176
176
|
return Object.assign(error, errorData || {});
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
-
|
|
179
|
+
/* $FlowFixMe[unclear-type] unclear type of NativeModules */
|
|
180
|
+
let NativeModules: {[moduleName: string]: any, ...} = {};
|
|
180
181
|
if (global.nativeModuleProxy) {
|
|
181
182
|
NativeModules = global.nativeModuleProxy;
|
|
182
183
|
} else {
|
|
@@ -209,4 +210,4 @@ if (global.nativeModuleProxy) {
|
|
|
209
210
|
);
|
|
210
211
|
}
|
|
211
212
|
|
|
212
|
-
|
|
213
|
+
export default NativeModules;
|
package/Libraries/Blob/Blob.js
CHANGED
|
@@ -58,7 +58,7 @@ class Blob {
|
|
|
58
58
|
* Reference: https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob
|
|
59
59
|
*/
|
|
60
60
|
constructor(parts: Array<Blob | string> = [], options?: BlobOptions) {
|
|
61
|
-
const BlobManager = require('./BlobManager');
|
|
61
|
+
const BlobManager = require('./BlobManager').default;
|
|
62
62
|
this.data = BlobManager.createFromParts(parts, options).data;
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -82,7 +82,7 @@ class Blob {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
slice(start?: number, end?: number, contentType: string = ''): Blob {
|
|
85
|
-
const BlobManager = require('./BlobManager');
|
|
85
|
+
const BlobManager = require('./BlobManager').default;
|
|
86
86
|
let {offset, size} = this.data;
|
|
87
87
|
|
|
88
88
|
if (typeof start === 'number') {
|
|
@@ -132,7 +132,7 @@ class Blob {
|
|
|
132
132
|
* `new Blob([blob, ...])` actually copies the data in memory.
|
|
133
133
|
*/
|
|
134
134
|
close() {
|
|
135
|
-
const BlobManager = require('./BlobManager');
|
|
135
|
+
const BlobManager = require('./BlobManager').default;
|
|
136
136
|
BlobManager.release(this.data.blobId);
|
|
137
137
|
this.data = null;
|
|
138
138
|
}
|
|
@@ -155,4 +155,4 @@ class Blob {
|
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
|
|
158
|
+
export default Blob;
|
|
@@ -8,12 +8,13 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import typeof BlobT from './Blob';
|
|
11
12
|
import type {BlobCollector, BlobData, BlobOptions} from './BlobTypes';
|
|
12
13
|
|
|
13
14
|
import NativeBlobModule from './NativeBlobModule';
|
|
14
15
|
import invariant from 'invariant';
|
|
15
16
|
|
|
16
|
-
const Blob = require('./Blob');
|
|
17
|
+
const Blob: BlobT = require('./Blob').default;
|
|
17
18
|
const BlobRegistry = require('./BlobRegistry');
|
|
18
19
|
|
|
19
20
|
/*eslint-disable no-bitwise */
|
|
@@ -176,4 +177,4 @@ class BlobManager {
|
|
|
176
177
|
}
|
|
177
178
|
}
|
|
178
179
|
|
|
179
|
-
|
|
180
|
+
export default BlobManager;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
const registry: Map<string, number> = new Map();
|
|
12
12
|
|
|
13
|
-
const register = (id: string) => {
|
|
13
|
+
export const register = (id: string) => {
|
|
14
14
|
const used = registry.get(id);
|
|
15
15
|
|
|
16
16
|
if (used != null) {
|
|
@@ -20,7 +20,7 @@ const register = (id: string) => {
|
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
-
const unregister = (id: string) => {
|
|
23
|
+
export const unregister = (id: string) => {
|
|
24
24
|
const used = registry.get(id);
|
|
25
25
|
|
|
26
26
|
if (used != null) {
|
|
@@ -32,12 +32,6 @@ const unregister = (id: string) => {
|
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
-
const has = (id: string): number | boolean => {
|
|
35
|
+
export const has = (id: string): number | boolean => {
|
|
36
36
|
return registry.get(id) || false;
|
|
37
37
|
};
|
|
38
|
-
|
|
39
|
-
module.exports = {
|
|
40
|
-
register,
|
|
41
|
-
unregister,
|
|
42
|
-
has,
|
|
43
|
-
};
|
package/Libraries/Blob/File.js
CHANGED
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
import type {BlobOptions} from './BlobTypes';
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
import Blob from './Blob';
|
|
16
|
+
|
|
16
17
|
const invariant = require('invariant');
|
|
17
18
|
|
|
18
19
|
/**
|
|
@@ -52,4 +53,4 @@ class File extends Blob {
|
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
|
|
55
|
-
|
|
56
|
+
export default File;
|
|
@@ -23,7 +23,7 @@ type DebugData = {
|
|
|
23
23
|
|
|
24
24
|
function defaultExtras() {
|
|
25
25
|
BugReporting.addFileSource('react_hierarchy.txt', () =>
|
|
26
|
-
require('./dumpReactTree')(),
|
|
26
|
+
require('./dumpReactTree').default(),
|
|
27
27
|
);
|
|
28
28
|
}
|
|
29
29
|
|
|
@@ -137,4 +137,4 @@ class BugReporting {
|
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
export default BugReporting;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
13
|
/*
|
|
14
|
-
const getReactData = require('getReactData');
|
|
14
|
+
const getReactData = require('getReactData').default;
|
|
15
15
|
|
|
16
16
|
const INDENTATION_SIZE = 2;
|
|
17
17
|
const MAX_DEPTH = 2;
|
|
@@ -148,4 +148,4 @@ function indent(size: number) {
|
|
|
148
148
|
}
|
|
149
149
|
*/
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
export default dumpReactTree;
|
|
@@ -19,22 +19,22 @@ import * as React from 'react';
|
|
|
19
19
|
|
|
20
20
|
const PlatformActivityIndicator =
|
|
21
21
|
Platform.OS === 'android'
|
|
22
|
-
? require('../ProgressBarAndroid/ProgressBarAndroid')
|
|
22
|
+
? require('../ProgressBarAndroid/ProgressBarAndroid').default
|
|
23
23
|
: require('./ActivityIndicatorViewNativeComponent').default;
|
|
24
24
|
|
|
25
25
|
const GRAY = '#999999';
|
|
26
26
|
|
|
27
27
|
type IndicatorSize = number | 'small' | 'large';
|
|
28
28
|
|
|
29
|
-
type IOSProps = $ReadOnly<{
|
|
29
|
+
type IOSProps = $ReadOnly<{
|
|
30
30
|
/**
|
|
31
31
|
Whether the indicator should hide when not animating.
|
|
32
32
|
|
|
33
33
|
@platform ios
|
|
34
34
|
*/
|
|
35
35
|
hidesWhenStopped?: ?boolean,
|
|
36
|
-
|
|
37
|
-
type Props = $ReadOnly<{
|
|
36
|
+
}>;
|
|
37
|
+
type Props = $ReadOnly<{
|
|
38
38
|
...ViewProps,
|
|
39
39
|
...IOSProps,
|
|
40
40
|
|
|
@@ -58,7 +58,7 @@ type Props = $ReadOnly<{|
|
|
|
58
58
|
@type {@platform android} number
|
|
59
59
|
*/
|
|
60
60
|
size?: ?IndicatorSize,
|
|
61
|
-
|
|
61
|
+
}>;
|
|
62
62
|
|
|
63
63
|
const ActivityIndicator = (
|
|
64
64
|
{
|
|
@@ -27,7 +27,7 @@ import View from './View/View';
|
|
|
27
27
|
import invariant from 'invariant';
|
|
28
28
|
import * as React from 'react';
|
|
29
29
|
|
|
30
|
-
type ButtonProps = $ReadOnly<{
|
|
30
|
+
type ButtonProps = $ReadOnly<{
|
|
31
31
|
/**
|
|
32
32
|
Text to display inside the button. On Android the given title will be
|
|
33
33
|
converted to the uppercased form.
|
|
@@ -167,7 +167,7 @@ type ButtonProps = $ReadOnly<{|
|
|
|
167
167
|
importantForAccessibility?: ?('auto' | 'yes' | 'no' | 'no-hide-descendants'),
|
|
168
168
|
accessibilityHint?: ?string,
|
|
169
169
|
accessibilityLanguage?: ?Stringish,
|
|
170
|
-
|
|
170
|
+
}>;
|
|
171
171
|
|
|
172
172
|
/**
|
|
173
173
|
A basic button component that should render nicely on any platform. Supports a
|
|
@@ -28,7 +28,7 @@ import View from './View/View';
|
|
|
28
28
|
import invariant from 'invariant';
|
|
29
29
|
import * as React from 'react';
|
|
30
30
|
|
|
31
|
-
type ButtonProps = $ReadOnly<{
|
|
31
|
+
type ButtonProps = $ReadOnly<{
|
|
32
32
|
/**
|
|
33
33
|
Text to display inside the button. On Android the given title will be
|
|
34
34
|
converted to the uppercased form.
|
|
@@ -170,7 +170,7 @@ type ButtonProps = $ReadOnly<{|
|
|
|
170
170
|
importantForAccessibility?: ?('auto' | 'yes' | 'no' | 'no-hide-descendants'),
|
|
171
171
|
accessibilityHint?: ?string,
|
|
172
172
|
accessibilityLanguage?: ?Stringish,
|
|
173
|
-
|
|
173
|
+
}>;
|
|
174
174
|
|
|
175
175
|
/**
|
|
176
176
|
A basic button component that should render nicely on any platform. Supports a
|
|
@@ -13,7 +13,7 @@ import NativeClipboard from './NativeClipboard';
|
|
|
13
13
|
/**
|
|
14
14
|
* `Clipboard` gives you an interface for setting and getting content from Clipboard on both iOS and Android
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
export default {
|
|
17
17
|
/**
|
|
18
18
|
* Get content of string type, this method returns a `Promise`, so you can use following code to get clipboard content
|
|
19
19
|
* ```javascript
|
|
@@ -31,11 +31,11 @@ const DRAWER_STATES = ['Idle', 'Dragging', 'Settling'];
|
|
|
31
31
|
|
|
32
32
|
type DrawerStates = 'Idle' | 'Dragging' | 'Settling';
|
|
33
33
|
|
|
34
|
-
type DrawerSlideEvent = $ReadOnly<{
|
|
34
|
+
type DrawerSlideEvent = $ReadOnly<{
|
|
35
35
|
offset: number,
|
|
36
|
-
|
|
36
|
+
}>;
|
|
37
37
|
|
|
38
|
-
type Props = $ReadOnly<{
|
|
38
|
+
type Props = $ReadOnly<{
|
|
39
39
|
accessibilityRole?: ?AccessibilityRole,
|
|
40
40
|
|
|
41
41
|
/**
|
|
@@ -116,11 +116,11 @@ type Props = $ReadOnly<{|
|
|
|
116
116
|
|
|
117
117
|
children?: React.Node,
|
|
118
118
|
style?: ?ViewStyleProp,
|
|
119
|
-
|
|
119
|
+
}>;
|
|
120
120
|
|
|
121
|
-
type State = {
|
|
121
|
+
type State = {
|
|
122
122
|
drawerOpened: boolean,
|
|
123
|
-
|
|
123
|
+
};
|
|
124
124
|
|
|
125
125
|
/**
|
|
126
126
|
* React component that wraps the platform `DrawerLayout` (Android only). The
|
|
@@ -391,4 +391,4 @@ const styles = StyleSheet.create({
|
|
|
391
391
|
},
|
|
392
392
|
});
|
|
393
393
|
|
|
394
|
-
|
|
394
|
+
export default DrawerLayoutAndroid;
|
|
@@ -13,5 +13,4 @@
|
|
|
13
13
|
// $FlowFixMe[cannot-resolve-module]
|
|
14
14
|
import typeof DrawerLayoutAndroid from './DrawerLayoutAndroid.android';
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
require('../UnimplementedViews/UnimplementedView') as $FlowFixMe as DrawerLayoutAndroid;
|
|
16
|
+
export default require('../UnimplementedViews/UnimplementedView') as $FlowFixMe as DrawerLayoutAndroid;
|
|
@@ -25,32 +25,32 @@ export type KeyboardEventEasing =
|
|
|
25
25
|
| 'linear'
|
|
26
26
|
| 'keyboard';
|
|
27
27
|
|
|
28
|
-
export type KeyboardMetrics = $ReadOnly<{
|
|
28
|
+
export type KeyboardMetrics = $ReadOnly<{
|
|
29
29
|
screenX: number,
|
|
30
30
|
screenY: number,
|
|
31
31
|
width: number,
|
|
32
32
|
height: number,
|
|
33
|
-
|
|
33
|
+
}>;
|
|
34
34
|
|
|
35
35
|
export type KeyboardEvent = AndroidKeyboardEvent | IOSKeyboardEvent;
|
|
36
36
|
|
|
37
|
-
type BaseKeyboardEvent = {
|
|
37
|
+
type BaseKeyboardEvent = {
|
|
38
38
|
duration: number,
|
|
39
39
|
easing: KeyboardEventEasing,
|
|
40
40
|
endCoordinates: KeyboardMetrics,
|
|
41
|
-
|
|
41
|
+
};
|
|
42
42
|
|
|
43
|
-
export type AndroidKeyboardEvent = $ReadOnly<{
|
|
43
|
+
export type AndroidKeyboardEvent = $ReadOnly<{
|
|
44
44
|
...BaseKeyboardEvent,
|
|
45
45
|
duration: 0,
|
|
46
46
|
easing: 'keyboard',
|
|
47
|
-
|
|
47
|
+
}>;
|
|
48
48
|
|
|
49
|
-
export type IOSKeyboardEvent = $ReadOnly<{
|
|
49
|
+
export type IOSKeyboardEvent = $ReadOnly<{
|
|
50
50
|
...BaseKeyboardEvent,
|
|
51
51
|
startCoordinates: KeyboardMetrics,
|
|
52
52
|
isEventFromThisApp: boolean,
|
|
53
|
-
|
|
53
|
+
}>;
|
|
54
54
|
|
|
55
55
|
type KeyboardEventDefinitions = {
|
|
56
56
|
keyboardWillShow: [KeyboardEvent],
|
|
@@ -202,4 +202,4 @@ class Keyboard {
|
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
|
|
205
|
+
export default (new Keyboard(): Keyboard);
|
|
@@ -27,7 +27,7 @@ import View from '../View/View';
|
|
|
27
27
|
import Keyboard from './Keyboard';
|
|
28
28
|
import * as React from 'react';
|
|
29
29
|
|
|
30
|
-
type Props = $ReadOnly<{
|
|
30
|
+
type Props = $ReadOnly<{
|
|
31
31
|
...ViewProps,
|
|
32
32
|
|
|
33
33
|
/**
|
|
@@ -51,11 +51,11 @@ type Props = $ReadOnly<{|
|
|
|
51
51
|
* may be non-zero in some cases. Defaults to 0.
|
|
52
52
|
*/
|
|
53
53
|
keyboardVerticalOffset?: number,
|
|
54
|
-
|
|
54
|
+
}>;
|
|
55
55
|
|
|
56
|
-
type State = {
|
|
56
|
+
type State = {
|
|
57
57
|
bottom: number,
|
|
58
|
-
|
|
58
|
+
};
|
|
59
59
|
|
|
60
60
|
/**
|
|
61
61
|
* View that moves out of the way when the keyboard appears by automatically
|