@office-iss/react-native-win32 0.71.4 → 0.72.0-preview.1
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 +310 -40
- package/CHANGELOG.md +145 -23
- 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/TouchableWithoutFeedback.d.ts +1 -1
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +189 -0
- package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +43 -0
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +26 -0
- package/Libraries/Components/View/View.js +71 -45
- 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/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 +1 -9
- package/Libraries/Core/ReactNativeVersionCheck.win32.js +1 -9
- 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/{Utilities/NativeDevSplitBundleLoader.js → DevToolsSettings/NativeDevToolsSettingsManager.js} +7 -2
- 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 +29 -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 +11 -5
- 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 +142 -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 +38 -20
- 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.js +1 -1
- 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/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 +115 -85
- package/package.json +38 -28
- package/rn-get-polyfills.js +1 -1
- package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +68 -0
- 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
- package/flow/use-sync-external-store.js +0 -19
|
@@ -27,15 +27,20 @@ import StyleSheet, {
|
|
|
27
27
|
import Text from '../../Text/Text';
|
|
28
28
|
import TextAncestor from '../../Text/TextAncestor';
|
|
29
29
|
import Platform from '../../Utilities/Platform';
|
|
30
|
-
import
|
|
30
|
+
import useMergeRefs from '../../Utilities/useMergeRefs';
|
|
31
31
|
import TextInputState from './TextInputState';
|
|
32
32
|
import invariant from 'invariant';
|
|
33
33
|
import nullthrows from 'nullthrows';
|
|
34
34
|
import * as React from 'react';
|
|
35
|
-
|
|
36
|
-
const {useLayoutEffect, useRef, useState} = React;
|
|
35
|
+
import {useCallback, useLayoutEffect, useRef, useState} from 'react';
|
|
37
36
|
|
|
38
37
|
type ReactRefSetter<T> = {current: null | T, ...} | ((ref: null | T) => mixed);
|
|
38
|
+
type TextInputInstance = React.ElementRef<HostComponent<mixed>> & {
|
|
39
|
+
+clear: () => void,
|
|
40
|
+
+isFocused: () => boolean,
|
|
41
|
+
+getNativeRef: () => ?React.ElementRef<HostComponent<mixed>>,
|
|
42
|
+
+setSelection: (start: number, end: number) => void,
|
|
43
|
+
};
|
|
39
44
|
|
|
40
45
|
let AndroidTextInput;
|
|
41
46
|
let AndroidTextInputCommands;
|
|
@@ -592,7 +597,7 @@ export type Props = $ReadOnly<{|
|
|
|
592
597
|
* On Android devices manufactured by Xiaomi with Android Q,
|
|
593
598
|
* when keyboardType equals 'email-address'this will be set
|
|
594
599
|
* in native to 'true' to prevent a system related crash. This
|
|
595
|
-
* will cause cursor to be
|
|
600
|
+
* will cause cursor to be disabled as a side-effect.
|
|
596
601
|
*
|
|
597
602
|
*/
|
|
598
603
|
caretHidden?: ?boolean,
|
|
@@ -614,9 +619,7 @@ export type Props = $ReadOnly<{|
|
|
|
614
619
|
*/
|
|
615
620
|
editable?: ?boolean,
|
|
616
621
|
|
|
617
|
-
forwardedRef?: ?ReactRefSetter<
|
|
618
|
-
React.ElementRef<HostComponent<mixed>> & ImperativeMethods,
|
|
619
|
-
>,
|
|
622
|
+
forwardedRef?: ?ReactRefSetter<TextInputInstance>,
|
|
620
623
|
|
|
621
624
|
/**
|
|
622
625
|
* `enterKeyHint` defines what action label (or icon) to present for the enter key on virtual keyboards.
|
|
@@ -954,13 +957,6 @@ export type Props = $ReadOnly<{|
|
|
|
954
957
|
value?: ?Stringish,
|
|
955
958
|
|}>;
|
|
956
959
|
|
|
957
|
-
type ImperativeMethods = $ReadOnly<{|
|
|
958
|
-
clear: () => void,
|
|
959
|
-
isFocused: () => boolean,
|
|
960
|
-
getNativeRef: () => ?React.ElementRef<HostComponent<mixed>>,
|
|
961
|
-
setSelection: (start: number, end: number) => void,
|
|
962
|
-
|}>;
|
|
963
|
-
|
|
964
960
|
const emptyFunctionThatReturnsTrue = () => true;
|
|
965
961
|
|
|
966
962
|
/**
|
|
@@ -1075,6 +1071,18 @@ const emptyFunctionThatReturnsTrue = () => true;
|
|
|
1075
1071
|
*
|
|
1076
1072
|
*/
|
|
1077
1073
|
function InternalTextInput(props: Props): React.Node {
|
|
1074
|
+
const {
|
|
1075
|
+
'aria-busy': ariaBusy,
|
|
1076
|
+
'aria-checked': ariaChecked,
|
|
1077
|
+
'aria-disabled': ariaDisabled,
|
|
1078
|
+
'aria-expanded': ariaExpanded,
|
|
1079
|
+
'aria-selected': ariaSelected,
|
|
1080
|
+
accessibilityState,
|
|
1081
|
+
id,
|
|
1082
|
+
tabIndex,
|
|
1083
|
+
...otherProps
|
|
1084
|
+
} = props;
|
|
1085
|
+
|
|
1078
1086
|
const inputRef = useRef<null | React.ElementRef<HostComponent<mixed>>>(null);
|
|
1079
1087
|
|
|
1080
1088
|
// Android sends a "onTextChanged" event followed by a "onSelectionChanged" event, for
|
|
@@ -1190,74 +1198,74 @@ function InternalTextInput(props: Props): React.Node {
|
|
|
1190
1198
|
}
|
|
1191
1199
|
}, [inputRef]);
|
|
1192
1200
|
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
inputRef.current,
|
|
1197
|
-
mostRecentEventCount,
|
|
1198
|
-
'',
|
|
1199
|
-
0,
|
|
1200
|
-
0,
|
|
1201
|
-
);
|
|
1202
|
-
}
|
|
1203
|
-
}
|
|
1204
|
-
|
|
1205
|
-
function setSelection(start: number, end: number): void {
|
|
1206
|
-
if (inputRef.current != null) {
|
|
1207
|
-
viewCommands.setTextAndSelection(
|
|
1208
|
-
inputRef.current,
|
|
1209
|
-
mostRecentEventCount,
|
|
1210
|
-
null,
|
|
1211
|
-
start,
|
|
1212
|
-
end,
|
|
1213
|
-
);
|
|
1214
|
-
}
|
|
1215
|
-
}
|
|
1216
|
-
|
|
1217
|
-
// TODO: Fix this returning true on null === null, when no input is focused
|
|
1218
|
-
function isFocused(): boolean {
|
|
1219
|
-
return TextInputState.currentlyFocusedInput() === inputRef.current;
|
|
1220
|
-
}
|
|
1221
|
-
|
|
1222
|
-
function getNativeRef(): ?React.ElementRef<HostComponent<mixed>> {
|
|
1223
|
-
return inputRef.current;
|
|
1224
|
-
}
|
|
1225
|
-
|
|
1226
|
-
const _setNativeRef = setAndForwardRef({
|
|
1227
|
-
getForwardedRef: () => props.forwardedRef,
|
|
1228
|
-
setLocalRef: ref => {
|
|
1229
|
-
inputRef.current = ref;
|
|
1201
|
+
const setLocalRef = useCallback(
|
|
1202
|
+
(instance: TextInputInstance | null) => {
|
|
1203
|
+
inputRef.current = instance;
|
|
1230
1204
|
|
|
1231
1205
|
/*
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
if (
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1206
|
+
Hi reader from the future. I'm sorry for this.
|
|
1207
|
+
|
|
1208
|
+
This is a hack. Ideally we would forwardRef to the underlying
|
|
1209
|
+
host component. However, since TextInput has it's own methods that can be
|
|
1210
|
+
called as well, if we used the standard forwardRef then these
|
|
1211
|
+
methods wouldn't be accessible and thus be a breaking change.
|
|
1212
|
+
|
|
1213
|
+
We have a couple of options of how to handle this:
|
|
1214
|
+
- Return a new ref with everything we methods from both. This is problematic
|
|
1215
|
+
because we need React to also know it is a host component which requires
|
|
1216
|
+
internals of the class implementation of the ref.
|
|
1217
|
+
- Break the API and have some other way to call one set of the methods or
|
|
1218
|
+
the other. This is our long term approach as we want to eventually
|
|
1219
|
+
get the methods on host components off the ref. So instead of calling
|
|
1220
|
+
ref.measure() you might call ReactNative.measure(ref). This would hopefully
|
|
1221
|
+
let the ref for TextInput then have the methods like `.clear`. Or we do it
|
|
1222
|
+
the other way and make it TextInput.clear(textInputRef) which would be fine
|
|
1223
|
+
too. Either way though is a breaking change that is longer term.
|
|
1224
|
+
- Mutate this ref. :( Gross, but accomplishes what we need in the meantime
|
|
1225
|
+
before we can get to the long term breaking change.
|
|
1226
|
+
*/
|
|
1227
|
+
if (instance != null) {
|
|
1228
|
+
// $FlowFixMe[incompatible-use] - See the explanation above.
|
|
1229
|
+
Object.assign(instance, {
|
|
1230
|
+
clear(): void {
|
|
1231
|
+
if (inputRef.current != null) {
|
|
1232
|
+
viewCommands.setTextAndSelection(
|
|
1233
|
+
inputRef.current,
|
|
1234
|
+
mostRecentEventCount,
|
|
1235
|
+
'',
|
|
1236
|
+
0,
|
|
1237
|
+
0,
|
|
1238
|
+
);
|
|
1239
|
+
}
|
|
1240
|
+
},
|
|
1241
|
+
// TODO: Fix this returning true on null === null, when no input is focused
|
|
1242
|
+
isFocused(): boolean {
|
|
1243
|
+
return TextInputState.currentlyFocusedInput() === inputRef.current;
|
|
1244
|
+
},
|
|
1245
|
+
getNativeRef(): ?React.ElementRef<HostComponent<mixed>> {
|
|
1246
|
+
return inputRef.current;
|
|
1247
|
+
},
|
|
1248
|
+
setSelection(start: number, end: number): void {
|
|
1249
|
+
if (inputRef.current != null) {
|
|
1250
|
+
viewCommands.setTextAndSelection(
|
|
1251
|
+
inputRef.current,
|
|
1252
|
+
mostRecentEventCount,
|
|
1253
|
+
null,
|
|
1254
|
+
start,
|
|
1255
|
+
end,
|
|
1256
|
+
);
|
|
1257
|
+
}
|
|
1258
|
+
},
|
|
1259
|
+
});
|
|
1258
1260
|
}
|
|
1259
1261
|
},
|
|
1260
|
-
|
|
1262
|
+
[mostRecentEventCount, viewCommands],
|
|
1263
|
+
);
|
|
1264
|
+
|
|
1265
|
+
const ref = useMergeRefs<TextInputInstance | null>(
|
|
1266
|
+
setLocalRef,
|
|
1267
|
+
props.forwardedRef,
|
|
1268
|
+
);
|
|
1261
1269
|
|
|
1262
1270
|
const _onChange = (event: ChangeEvent) => {
|
|
1263
1271
|
const currentText = event.nativeEvent.text;
|
|
@@ -1395,13 +1403,26 @@ function InternalTextInput(props: Props): React.Node {
|
|
|
1395
1403
|
// so omitting onBlur and onFocus pressability handlers here.
|
|
1396
1404
|
const {onBlur, onFocus, ...eventHandlers} = usePressability(config) || {};
|
|
1397
1405
|
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1406
|
+
let _accessibilityState;
|
|
1407
|
+
if (
|
|
1408
|
+
accessibilityState != null ||
|
|
1409
|
+
ariaBusy != null ||
|
|
1410
|
+
ariaChecked != null ||
|
|
1411
|
+
ariaDisabled != null ||
|
|
1412
|
+
ariaExpanded != null ||
|
|
1413
|
+
ariaSelected != null
|
|
1414
|
+
) {
|
|
1415
|
+
_accessibilityState = {
|
|
1416
|
+
busy: ariaBusy ?? accessibilityState?.busy,
|
|
1417
|
+
checked: ariaChecked ?? accessibilityState?.checked,
|
|
1418
|
+
disabled: ariaDisabled ?? accessibilityState?.disabled,
|
|
1419
|
+
expanded: ariaExpanded ?? accessibilityState?.expanded,
|
|
1420
|
+
selected: ariaSelected ?? accessibilityState?.selected,
|
|
1421
|
+
};
|
|
1422
|
+
}
|
|
1423
|
+
|
|
1424
|
+
// $FlowFixMe[underconstrained-implicit-instantiation]
|
|
1425
|
+
let style = flattenStyle(props.style);
|
|
1405
1426
|
|
|
1406
1427
|
if (Platform.OS === 'ios') {
|
|
1407
1428
|
const RCTTextInputView =
|
|
@@ -1409,10 +1430,7 @@ function InternalTextInput(props: Props): React.Node {
|
|
|
1409
1430
|
? RCTMultilineTextInputView
|
|
1410
1431
|
: RCTSinglelineTextInputView;
|
|
1411
1432
|
|
|
1412
|
-
|
|
1413
|
-
props.multiline === true
|
|
1414
|
-
? StyleSheet.flatten([styles.multilineInput, props.style])
|
|
1415
|
-
: props.style;
|
|
1433
|
+
style = props.multiline === true ? [styles.multilineInput, style] : style;
|
|
1416
1434
|
|
|
1417
1435
|
const useOnChangeSync =
|
|
1418
1436
|
(props.unstable_onChangeSync || props.unstable_onChangeTextSync) &&
|
|
@@ -1420,16 +1438,18 @@ function InternalTextInput(props: Props): React.Node {
|
|
|
1420
1438
|
|
|
1421
1439
|
textInput = (
|
|
1422
1440
|
<RCTTextInputView
|
|
1423
|
-
|
|
1424
|
-
{
|
|
1441
|
+
// $FlowFixMe[incompatible-type] - Figure out imperative + forward refs.
|
|
1442
|
+
ref={ref}
|
|
1443
|
+
{...otherProps}
|
|
1425
1444
|
{...eventHandlers}
|
|
1426
|
-
accessible={accessible}
|
|
1427
1445
|
accessibilityState={_accessibilityState}
|
|
1446
|
+
accessible={accessible}
|
|
1428
1447
|
submitBehavior={submitBehavior}
|
|
1429
1448
|
caretHidden={caretHidden}
|
|
1430
1449
|
dataDetectorTypes={props.dataDetectorTypes}
|
|
1431
|
-
focusable={focusable}
|
|
1450
|
+
focusable={tabIndex !== undefined ? !tabIndex : focusable}
|
|
1432
1451
|
mostRecentEventCount={mostRecentEventCount}
|
|
1452
|
+
nativeID={id ?? props.nativeID}
|
|
1433
1453
|
onBlur={_onBlur}
|
|
1434
1454
|
onKeyPressSync={props.unstable_onKeyPressSync}
|
|
1435
1455
|
onChange={_onChange}
|
|
@@ -1445,7 +1465,6 @@ function InternalTextInput(props: Props): React.Node {
|
|
|
1445
1465
|
/>
|
|
1446
1466
|
);
|
|
1447
1467
|
} else if (Platform.OS === 'android') {
|
|
1448
|
-
const style = [props.style];
|
|
1449
1468
|
const autoCapitalize = props.autoCapitalize || 'sentences';
|
|
1450
1469
|
const _accessibilityLabelledBy =
|
|
1451
1470
|
props?.['aria-labelledby'] ?? props?.accessibilityLabelledBy;
|
|
@@ -1470,19 +1489,21 @@ function InternalTextInput(props: Props): React.Node {
|
|
|
1470
1489
|
* match up exactly with the props for TextInput. This will need to get
|
|
1471
1490
|
* fixed */
|
|
1472
1491
|
<AndroidTextInput
|
|
1473
|
-
|
|
1474
|
-
{
|
|
1492
|
+
// $FlowFixMe[incompatible-type] - Figure out imperative + forward refs.
|
|
1493
|
+
ref={ref}
|
|
1494
|
+
{...otherProps}
|
|
1475
1495
|
{...eventHandlers}
|
|
1476
|
-
accessible={accessible}
|
|
1477
1496
|
accessibilityState={_accessibilityState}
|
|
1478
1497
|
accessibilityLabelledBy={_accessibilityLabelledBy}
|
|
1498
|
+
accessible={accessible}
|
|
1479
1499
|
autoCapitalize={autoCapitalize}
|
|
1480
1500
|
submitBehavior={submitBehavior}
|
|
1481
1501
|
caretHidden={caretHidden}
|
|
1482
1502
|
children={children}
|
|
1483
1503
|
disableFullscreenUI={props.disableFullscreenUI}
|
|
1484
|
-
focusable={focusable}
|
|
1504
|
+
focusable={tabIndex !== undefined ? !tabIndex : focusable}
|
|
1485
1505
|
mostRecentEventCount={mostRecentEventCount}
|
|
1506
|
+
nativeID={id ?? props.nativeID}
|
|
1486
1507
|
numberOfLines={props.rows ?? props.numberOfLines}
|
|
1487
1508
|
onBlur={_onBlur}
|
|
1488
1509
|
onChange={_onChange}
|
|
@@ -1592,7 +1613,7 @@ const autoCompleteWebToTextContentTypeMap = {
|
|
|
1592
1613
|
|
|
1593
1614
|
const ExportedForwardRef: React.AbstractComponent<
|
|
1594
1615
|
React.ElementConfig<typeof InternalTextInput>,
|
|
1595
|
-
|
|
1616
|
+
TextInputInstance,
|
|
1596
1617
|
> = React.forwardRef(function TextInput(
|
|
1597
1618
|
{
|
|
1598
1619
|
allowFontScaling = true,
|
|
@@ -1605,18 +1626,19 @@ const ExportedForwardRef: React.AbstractComponent<
|
|
|
1605
1626
|
enterKeyHint,
|
|
1606
1627
|
returnKeyType,
|
|
1607
1628
|
inputMode,
|
|
1629
|
+
showSoftInputOnFocus,
|
|
1608
1630
|
keyboardType,
|
|
1609
1631
|
...restProps
|
|
1610
1632
|
},
|
|
1611
|
-
forwardedRef: ReactRefSetter<
|
|
1612
|
-
React.ElementRef<HostComponent<mixed>> & ImperativeMethods,
|
|
1613
|
-
>,
|
|
1633
|
+
forwardedRef: ReactRefSetter<TextInputInstance>,
|
|
1614
1634
|
) {
|
|
1615
|
-
|
|
1635
|
+
// $FlowFixMe[underconstrained-implicit-instantiation]
|
|
1636
|
+
let style = flattenStyle(restProps.style);
|
|
1616
1637
|
|
|
1617
1638
|
if (style?.verticalAlign != null) {
|
|
1618
1639
|
style.textAlignVertical =
|
|
1619
1640
|
verticalAlignToTextAlignVerticalMap[style.verticalAlign];
|
|
1641
|
+
delete style.verticalAlign;
|
|
1620
1642
|
}
|
|
1621
1643
|
|
|
1622
1644
|
return (
|
|
@@ -1631,6 +1653,9 @@ const ExportedForwardRef: React.AbstractComponent<
|
|
|
1631
1653
|
keyboardType={
|
|
1632
1654
|
inputMode ? inputModeToKeyboardTypeMap[inputMode] : keyboardType
|
|
1633
1655
|
}
|
|
1656
|
+
showSoftInputOnFocus={
|
|
1657
|
+
inputMode == null ? showSoftInputOnFocus : inputMode !== 'none'
|
|
1658
|
+
}
|
|
1634
1659
|
autoComplete={
|
|
1635
1660
|
Platform.OS === 'android'
|
|
1636
1661
|
? // $FlowFixMe[invalid-computed-prop]
|
|
@@ -1657,6 +1682,8 @@ const ExportedForwardRef: React.AbstractComponent<
|
|
|
1657
1682
|
);
|
|
1658
1683
|
});
|
|
1659
1684
|
|
|
1685
|
+
ExportedForwardRef.displayName = 'TextInput';
|
|
1686
|
+
|
|
1660
1687
|
/**
|
|
1661
1688
|
* Switch to `deprecated-react-native-prop-types` for compatibility with future
|
|
1662
1689
|
* releases. This is deprecated and will be removed in the future.
|