react-native-platform-components 1.3.0 → 1.5.0
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/PlatformComponents.podspec +1 -1
- package/README.md +47 -51
- package/android/src/main/java/com/platformcomponents/PCButtonGroupView.kt +664 -0
- package/android/src/main/java/com/platformcomponents/PCButtonGroupViewManager.kt +241 -0
- package/android/src/main/java/com/platformcomponents/PCButtonSupport.kt +159 -0
- package/android/src/main/java/com/platformcomponents/PCButtonView.kt +527 -0
- package/android/src/main/java/com/platformcomponents/PCButtonViewManager.kt +204 -0
- package/android/src/main/java/com/platformcomponents/PCContextMenuView.kt +41 -151
- package/android/src/main/java/com/platformcomponents/PCContextMenuViewManager.kt +7 -63
- package/android/src/main/java/com/platformcomponents/PCDatePickerView.kt +310 -115
- package/android/src/main/java/com/platformcomponents/PCDatePickerViewManager.kt +23 -3
- package/android/src/main/java/com/platformcomponents/PCExpressive.kt +112 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonView.kt +485 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonViewManager.kt +109 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingToolbarView.kt +247 -0
- package/android/src/main/java/com/platformcomponents/PCFloatingToolbarViewManager.kt +73 -0
- package/android/src/main/java/com/platformcomponents/PCHaptics.kt +46 -0
- package/android/src/main/java/com/platformcomponents/PCImageLoader.kt +42 -7
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerView.kt +32 -0
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerViewManager.kt +31 -0
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassView.kt +32 -6
- package/android/src/main/java/com/platformcomponents/PCLiquidGlassViewManager.kt +4 -0
- package/android/src/main/java/com/platformcomponents/PCMenuSupport.kt +280 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationBarSupport.kt +332 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationRailView.kt +448 -0
- package/android/src/main/java/com/platformcomponents/PCNavigationRailViewManager.kt +176 -0
- package/android/src/main/java/com/platformcomponents/PCSegmentedControlView.kt +35 -17
- package/android/src/main/java/com/platformcomponents/PCSegmentedControlViewManager.kt +20 -3
- package/android/src/main/java/com/platformcomponents/PCSelectionMenuView.kt +371 -39
- package/android/src/main/java/com/platformcomponents/PCSelectionMenuViewManager.kt +18 -4
- package/android/src/main/java/com/platformcomponents/PCTabBarView.kt +397 -0
- package/android/src/main/java/com/platformcomponents/PCTabBarViewManager.kt +182 -0
- package/android/src/main/java/com/platformcomponents/PCTextFieldView.kt +1393 -0
- package/android/src/main/java/com/platformcomponents/PCTextFieldViewManager.kt +354 -0
- package/android/src/main/java/com/platformcomponents/PCThemeSupport.kt +37 -0
- package/android/src/main/java/com/platformcomponents/PlatformComponentsPackage.kt +8 -0
- package/android/src/main/res/drawable/pc_ic_search.xml +12 -0
- package/android/src/main/res/values/attrs.xml +13 -0
- package/android/src/main/res/values/ids.xml +5 -0
- package/android/src/main/res/values/styles.xml +207 -0
- package/ios/PCButton.h +10 -0
- package/ios/PCButton.mm +311 -0
- package/ios/PCButtonGroup.h +10 -0
- package/ios/PCButtonGroup.mm +323 -0
- package/ios/PCButtonGroupView.swift +473 -0
- package/ios/PCButtonSupport.swift +312 -0
- package/ios/PCButtonView.swift +438 -0
- package/ios/PCConstants.swift +23 -2
- package/ios/PCContextMenu.mm +28 -110
- package/ios/PCContextMenu.swift +106 -167
- package/ios/PCDatePicker.mm +21 -9
- package/ios/PCDatePickerView.swift +94 -20
- package/ios/PCFloatingActionButton.h +10 -0
- package/ios/PCFloatingActionButton.mm +177 -0
- package/ios/PCFloatingActionButtonView.swift +426 -0
- package/ios/PCFloatingToolbar.h +10 -0
- package/ios/PCFloatingToolbar.mm +103 -0
- package/ios/PCFloatingToolbarView.swift +336 -0
- package/ios/PCHaptics.swift +91 -0
- package/ios/PCImageLoader.swift +76 -12
- package/ios/PCLiquidGlass.mm +36 -0
- package/ios/PCLiquidGlass.swift +221 -114
- package/ios/PCLiquidGlassContainer.h +10 -0
- package/ios/PCLiquidGlassContainer.mm +84 -0
- package/ios/PCLiquidGlassContainer.swift +69 -0
- package/ios/PCMenuItems.h +76 -0
- package/ios/PCMenuSupport.swift +350 -0
- package/ios/PCNavigationRail.h +10 -0
- package/ios/PCNavigationRail.mm +270 -0
- package/ios/PCNavigationRailView.swift +415 -0
- package/ios/PCSegmentedControl.mm +17 -2
- package/ios/PCSegmentedControl.swift +57 -7
- package/ios/PCSelectionMenu.mm +36 -8
- package/ios/PCSelectionMenu.swift +224 -48
- package/ios/PCTabBar.h +10 -0
- package/ios/PCTabBar.mm +285 -0
- package/ios/PCTabBarAccessory.h +10 -0
- package/ios/PCTabBarAccessory.mm +93 -0
- package/ios/PCTabBarAccessoryView.swift +96 -0
- package/ios/PCTabBarView.swift +671 -0
- package/ios/PCTextField.h +10 -0
- package/ios/PCTextField.mm +546 -0
- package/ios/PCTextFieldView.swift +1558 -0
- package/lib/commonjs/Button.js +149 -0
- package/lib/commonjs/Button.js.map +1 -0
- package/lib/commonjs/ButtonGroup.js +109 -0
- package/lib/commonjs/ButtonGroup.js.map +1 -0
- package/lib/commonjs/ButtonGroupNativeComponent.ts +191 -0
- package/lib/commonjs/ButtonNativeComponent.ts +192 -0
- package/lib/commonjs/ContextMenu.js +9 -48
- package/lib/commonjs/ContextMenu.js.map +1 -1
- package/lib/commonjs/ContextMenuNativeComponent.ts +47 -49
- package/lib/commonjs/DatePicker.js +98 -2
- package/lib/commonjs/DatePicker.js.map +1 -1
- package/lib/commonjs/DatePickerNativeComponent.ts +19 -2
- package/lib/commonjs/FloatingActionButton.js +60 -0
- package/lib/commonjs/FloatingActionButton.js.map +1 -0
- package/lib/commonjs/FloatingActionButtonNativeComponent.ts +58 -0
- package/lib/commonjs/FloatingToolbar.js +77 -0
- package/lib/commonjs/FloatingToolbar.js.map +1 -0
- package/lib/commonjs/FloatingToolbarNativeComponent.ts +47 -0
- package/lib/commonjs/LiquidGlass.js +7 -1
- package/lib/commonjs/LiquidGlass.js.map +1 -1
- package/lib/commonjs/LiquidGlassContainer.js +32 -0
- package/lib/commonjs/LiquidGlassContainer.js.map +1 -0
- package/lib/commonjs/LiquidGlassContainerNativeComponent.ts +17 -0
- package/lib/commonjs/LiquidGlassNativeComponent.ts +8 -0
- package/lib/commonjs/NavigationRail.js +104 -0
- package/lib/commonjs/NavigationRail.js.map +1 -0
- package/lib/commonjs/NavigationRailNativeComponent.ts +107 -0
- package/lib/commonjs/PlatformComponentsProvider.js +18 -0
- package/lib/commonjs/PlatformComponentsProvider.js.map +1 -0
- package/lib/commonjs/SegmentedControl.js +18 -85
- package/lib/commonjs/SegmentedControl.js.map +1 -1
- package/lib/commonjs/SegmentedControlNativeComponent.ts +14 -0
- package/lib/commonjs/SelectionMenu.js +27 -3
- package/lib/commonjs/SelectionMenu.js.map +1 -1
- package/lib/commonjs/SelectionMenuNativeComponent.ts +26 -4
- package/lib/commonjs/SplitButton.js +98 -0
- package/lib/commonjs/SplitButton.js.map +1 -0
- package/lib/commonjs/TabBar.js +203 -0
- package/lib/commonjs/TabBar.js.map +1 -0
- package/lib/commonjs/TabBarAccessoryNativeComponent.ts +19 -0
- package/lib/commonjs/TabBarNativeComponent.ts +145 -0
- package/lib/commonjs/TextField.js +358 -0
- package/lib/commonjs/TextField.js.map +1 -0
- package/lib/commonjs/TextFieldNativeComponent.ts +324 -0
- package/lib/commonjs/focusRegistry.js +79 -0
- package/lib/commonjs/focusRegistry.js.map +1 -0
- package/lib/commonjs/haptics.js +2 -0
- package/lib/commonjs/haptics.js.map +1 -0
- package/lib/commonjs/icons.js +106 -0
- package/lib/commonjs/icons.js.map +1 -0
- package/lib/commonjs/index.js +143 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +157 -63
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/jest.js +910 -0
- package/lib/commonjs/jest.js.map +1 -0
- package/lib/commonjs/labelStyle.js +27 -0
- package/lib/commonjs/labelStyle.js.map +1 -0
- package/lib/commonjs/menuItems.js +68 -0
- package/lib/commonjs/menuItems.js.map +1 -0
- package/lib/commonjs/reactNativeInternals.d.js +2 -0
- package/lib/commonjs/reactNativeInternals.d.js.map +1 -0
- package/lib/commonjs/selectionIdentifiers.js +18 -0
- package/lib/commonjs/selectionIdentifiers.js.map +1 -0
- package/lib/commonjs/submitBehavior.js +19 -0
- package/lib/commonjs/submitBehavior.js.map +1 -0
- package/lib/commonjs/tabItems.js +49 -0
- package/lib/commonjs/tabItems.js.map +1 -0
- package/lib/commonjs/web/Button.js +170 -0
- package/lib/commonjs/web/Button.js.map +1 -0
- package/lib/commonjs/web/ButtonGroup.js +119 -0
- package/lib/commonjs/web/ButtonGroup.js.map +1 -0
- package/lib/commonjs/web/DatePicker.js +168 -0
- package/lib/commonjs/web/DatePicker.js.map +1 -0
- package/lib/commonjs/web/DateRangePicker.js +137 -0
- package/lib/commonjs/web/DateRangePicker.js.map +1 -0
- package/lib/commonjs/web/Dialog.js +54 -0
- package/lib/commonjs/web/Dialog.js.map +1 -0
- package/lib/commonjs/web/FloatingActionButton.js +98 -0
- package/lib/commonjs/web/FloatingActionButton.js.map +1 -0
- package/lib/commonjs/web/Icon.js +34 -0
- package/lib/commonjs/web/Icon.js.map +1 -0
- package/lib/commonjs/web/NativeTheme.js +28 -0
- package/lib/commonjs/web/NativeTheme.js.map +1 -0
- package/lib/commonjs/web/NavigationRail.js +139 -0
- package/lib/commonjs/web/NavigationRail.js.map +1 -0
- package/lib/commonjs/web/PlatformComponentsProvider.js +51 -0
- package/lib/commonjs/web/PlatformComponentsProvider.js.map +1 -0
- package/lib/commonjs/web/SegmentedControl.js +117 -0
- package/lib/commonjs/web/SegmentedControl.js.map +1 -0
- package/lib/commonjs/web/SelectionMenu.js +142 -0
- package/lib/commonjs/web/SelectionMenu.js.map +1 -0
- package/lib/commonjs/web/SplitButton.js +35 -0
- package/lib/commonjs/web/SplitButton.js.map +1 -0
- package/lib/commonjs/web/TabBar.js +131 -0
- package/lib/commonjs/web/TabBar.js.map +1 -0
- package/lib/commonjs/web/TextField.js +322 -0
- package/lib/commonjs/web/TextField.js.map +1 -0
- package/lib/commonjs/web/components.js +36 -0
- package/lib/commonjs/web/components.js.map +1 -0
- package/lib/commonjs/web/containers.js +121 -0
- package/lib/commonjs/web/containers.js.map +1 -0
- package/lib/commonjs/web/dateInput.js +116 -0
- package/lib/commonjs/web/dateInput.js.map +1 -0
- package/lib/commonjs/web/shared.js +192 -0
- package/lib/commonjs/web/shared.js.map +1 -0
- package/lib/commonjs/webComponents.js +6 -0
- package/lib/commonjs/webComponents.js.map +1 -0
- package/lib/module/Button.js +142 -0
- package/lib/module/Button.js.map +1 -0
- package/lib/module/ButtonGroup.js +102 -0
- package/lib/module/ButtonGroup.js.map +1 -0
- package/lib/module/ButtonGroupNativeComponent.ts +191 -0
- package/lib/module/ButtonNativeComponent.ts +192 -0
- package/lib/module/ContextMenu.js +9 -48
- package/lib/module/ContextMenu.js.map +1 -1
- package/lib/module/ContextMenuNativeComponent.ts +47 -49
- package/lib/module/DatePicker.js +98 -4
- package/lib/module/DatePicker.js.map +1 -1
- package/lib/module/DatePickerNativeComponent.ts +19 -2
- package/lib/module/FloatingActionButton.js +53 -0
- package/lib/module/FloatingActionButton.js.map +1 -0
- package/lib/module/FloatingActionButtonNativeComponent.ts +58 -0
- package/lib/module/FloatingToolbar.js +70 -0
- package/lib/module/FloatingToolbar.js.map +1 -0
- package/lib/module/FloatingToolbarNativeComponent.ts +47 -0
- package/lib/module/LiquidGlass.js +7 -1
- package/lib/module/LiquidGlass.js.map +1 -1
- package/lib/module/LiquidGlassContainer.js +26 -0
- package/lib/module/LiquidGlassContainer.js.map +1 -0
- package/lib/module/LiquidGlassContainerNativeComponent.ts +17 -0
- package/lib/module/LiquidGlassNativeComponent.ts +8 -0
- package/lib/module/NavigationRail.js +99 -0
- package/lib/module/NavigationRail.js.map +1 -0
- package/lib/module/NavigationRailNativeComponent.ts +107 -0
- package/lib/module/PlatformComponentsProvider.js +13 -0
- package/lib/module/PlatformComponentsProvider.js.map +1 -0
- package/lib/module/SegmentedControl.js +18 -85
- package/lib/module/SegmentedControl.js.map +1 -1
- package/lib/module/SegmentedControlNativeComponent.ts +14 -0
- package/lib/module/SelectionMenu.js +27 -3
- package/lib/module/SelectionMenu.js.map +1 -1
- package/lib/module/SelectionMenuNativeComponent.ts +26 -4
- package/lib/module/SplitButton.js +91 -0
- package/lib/module/SplitButton.js.map +1 -0
- package/lib/module/TabBar.js +196 -0
- package/lib/module/TabBar.js.map +1 -0
- package/lib/module/TabBarAccessoryNativeComponent.ts +19 -0
- package/lib/module/TabBarNativeComponent.ts +145 -0
- package/lib/module/TextField.js +352 -0
- package/lib/module/TextField.js.map +1 -0
- package/lib/module/TextFieldNativeComponent.ts +324 -0
- package/lib/module/focusRegistry.js +75 -0
- package/lib/module/focusRegistry.js.map +1 -0
- package/lib/module/haptics.js +2 -0
- package/lib/module/haptics.js.map +1 -0
- package/lib/module/icons.js +101 -0
- package/lib/module/icons.js.map +1 -0
- package/lib/module/index.js +13 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +12 -59
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/jest.js +840 -0
- package/lib/module/jest.js.map +1 -0
- package/lib/module/labelStyle.js +23 -0
- package/lib/module/labelStyle.js.map +1 -0
- package/lib/module/menuItems.js +65 -0
- package/lib/module/menuItems.js.map +1 -0
- package/lib/module/reactNativeInternals.d.js +2 -0
- package/lib/module/reactNativeInternals.d.js.map +1 -0
- package/lib/module/selectionIdentifiers.js +14 -0
- package/lib/module/selectionIdentifiers.js.map +1 -0
- package/lib/module/submitBehavior.js +15 -0
- package/lib/module/submitBehavior.js.map +1 -0
- package/lib/module/tabItems.js +45 -0
- package/lib/module/tabItems.js.map +1 -0
- package/lib/module/web/Button.js +164 -0
- package/lib/module/web/Button.js.map +1 -0
- package/lib/module/web/ButtonGroup.js +113 -0
- package/lib/module/web/ButtonGroup.js.map +1 -0
- package/lib/module/web/DatePicker.js +162 -0
- package/lib/module/web/DatePicker.js.map +1 -0
- package/lib/module/web/DateRangePicker.js +131 -0
- package/lib/module/web/DateRangePicker.js.map +1 -0
- package/lib/module/web/Dialog.js +48 -0
- package/lib/module/web/Dialog.js.map +1 -0
- package/lib/module/web/FloatingActionButton.js +94 -0
- package/lib/module/web/FloatingActionButton.js.map +1 -0
- package/lib/module/web/Icon.js +29 -0
- package/lib/module/web/Icon.js.map +1 -0
- package/lib/module/web/NativeTheme.js +23 -0
- package/lib/module/web/NativeTheme.js.map +1 -0
- package/lib/module/web/NavigationRail.js +133 -0
- package/lib/module/web/NavigationRail.js.map +1 -0
- package/lib/module/web/PlatformComponentsProvider.js +44 -0
- package/lib/module/web/PlatformComponentsProvider.js.map +1 -0
- package/lib/module/web/SegmentedControl.js +112 -0
- package/lib/module/web/SegmentedControl.js.map +1 -0
- package/lib/module/web/SelectionMenu.js +137 -0
- package/lib/module/web/SelectionMenu.js.map +1 -0
- package/lib/module/web/SplitButton.js +30 -0
- package/lib/module/web/SplitButton.js.map +1 -0
- package/lib/module/web/TabBar.js +126 -0
- package/lib/module/web/TabBar.js.map +1 -0
- package/lib/module/web/TextField.js +316 -0
- package/lib/module/web/TextField.js.map +1 -0
- package/lib/module/web/components.js +33 -0
- package/lib/module/web/components.js.map +1 -0
- package/lib/module/web/containers.js +112 -0
- package/lib/module/web/containers.js.map +1 -0
- package/lib/module/web/dateInput.js +109 -0
- package/lib/module/web/dateInput.js.map +1 -0
- package/lib/module/web/shared.js +179 -0
- package/lib/module/web/shared.js.map +1 -0
- package/lib/module/webComponents.js +4 -0
- package/lib/module/webComponents.js.map +1 -0
- package/lib/typescript/commonjs/docs/sidebars.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/Button.d.ts +184 -0
- package/lib/typescript/commonjs/src/Button.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts +117 -0
- package/lib/typescript/commonjs/src/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts +154 -0
- package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts +148 -0
- package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/ContextMenu.d.ts +20 -33
- package/lib/typescript/commonjs/src/ContextMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts +45 -47
- package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DatePicker.d.ts +74 -1
- package/lib/typescript/commonjs/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts +16 -1
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/FloatingActionButton.d.ts +67 -0
- package/lib/typescript/commonjs/src/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts +43 -0
- package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingToolbar.d.ts +75 -0
- package/lib/typescript/commonjs/src/FloatingToolbar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts +36 -0
- package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiquidGlass.d.ts +17 -0
- package/lib/typescript/commonjs/src/LiquidGlass.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts +27 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
- package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts +7 -0
- package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/NavigationRail.d.ts +86 -0
- package/lib/typescript/commonjs/src/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts +81 -0
- package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts +6 -0
- package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/SegmentedControl.d.ts +35 -47
- package/lib/typescript/commonjs/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts +11 -0
- package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SelectionMenu.d.ts +44 -2
- package/lib/typescript/commonjs/src/SelectionMenu.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts +20 -4
- package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/SplitButton.d.ts +83 -0
- package/lib/typescript/commonjs/src/SplitButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBar.d.ts +144 -0
- package/lib/typescript/commonjs/src/TabBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts +13 -0
- package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts +110 -0
- package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TextField.d.ts +332 -0
- package/lib/typescript/commonjs/src/TextField.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts +240 -0
- package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/focusRegistry.d.ts +13 -0
- package/lib/typescript/commonjs/src/focusRegistry.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/haptics.d.ts +20 -0
- package/lib/typescript/commonjs/src/haptics.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/icons.d.ts +58 -0
- package/lib/typescript/commonjs/src/icons.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +13 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.web.d.ts +25 -133
- package/lib/typescript/commonjs/src/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/jest.d.ts +139 -0
- package/lib/typescript/commonjs/src/jest.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/labelStyle.d.ts +20 -0
- package/lib/typescript/commonjs/src/labelStyle.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/menuItems.d.ts +100 -0
- package/lib/typescript/commonjs/src/menuItems.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts +3 -0
- package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/sharedTypes.d.ts +6 -1
- package/lib/typescript/commonjs/src/sharedTypes.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/submitBehavior.d.ts +9 -0
- package/lib/typescript/commonjs/src/submitBehavior.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/tabItems.d.ts +55 -0
- package/lib/typescript/commonjs/src/tabItems.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Button.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/Button.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts +11 -0
- package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/DatePicker.d.ts +14 -0
- package/lib/typescript/commonjs/src/web/DatePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts +11 -0
- package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Dialog.d.ts +12 -0
- package/lib/typescript/commonjs/src/web/Dialog.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/Icon.d.ts +12 -0
- package/lib/typescript/commonjs/src/web/Icon.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/NativeTheme.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/NativeTheme.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/NavigationRail.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts +8 -0
- package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts +10 -0
- package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/SplitButton.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/SplitButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/TabBar.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/TabBar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/TextField.d.ts +9 -0
- package/lib/typescript/commonjs/src/web/TextField.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/components.d.ts +17 -0
- package/lib/typescript/commonjs/src/web/components.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/containers.d.ts +24 -0
- package/lib/typescript/commonjs/src/web/containers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/dateInput.d.ts +20 -0
- package/lib/typescript/commonjs/src/web/dateInput.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/web/shared.d.ts +43 -0
- package/lib/typescript/commonjs/src/web/shared.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/webComponents.d.ts +43 -0
- package/lib/typescript/commonjs/src/webComponents.d.ts.map +1 -0
- package/lib/typescript/module/docs/sidebars.d.ts.map +1 -1
- package/lib/typescript/module/src/Button.d.ts +184 -0
- package/lib/typescript/module/src/Button.d.ts.map +1 -0
- package/lib/typescript/module/src/ButtonGroup.d.ts +117 -0
- package/lib/typescript/module/src/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts +154 -0
- package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts +148 -0
- package/lib/typescript/module/src/ButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/ContextMenu.d.ts +20 -33
- package/lib/typescript/module/src/ContextMenu.d.ts.map +1 -1
- package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts +45 -47
- package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePicker.d.ts +74 -1
- package/lib/typescript/module/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts +16 -1
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/FloatingActionButton.d.ts +67 -0
- package/lib/typescript/module/src/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts +43 -0
- package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingToolbar.d.ts +75 -0
- package/lib/typescript/module/src/FloatingToolbar.d.ts.map +1 -0
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts +36 -0
- package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/LiquidGlass.d.ts +17 -0
- package/lib/typescript/module/src/LiquidGlass.d.ts.map +1 -1
- package/lib/typescript/module/src/LiquidGlassContainer.d.ts +27 -0
- package/lib/typescript/module/src/LiquidGlassContainer.d.ts.map +1 -0
- package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
- package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts +7 -0
- package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/NavigationRail.d.ts +86 -0
- package/lib/typescript/module/src/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts +81 -0
- package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/PlatformComponentsProvider.d.ts +6 -0
- package/lib/typescript/module/src/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/SegmentedControl.d.ts +35 -47
- package/lib/typescript/module/src/SegmentedControl.d.ts.map +1 -1
- package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts +11 -0
- package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/SelectionMenu.d.ts +44 -2
- package/lib/typescript/module/src/SelectionMenu.d.ts.map +1 -1
- package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts +20 -4
- package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/SplitButton.d.ts +83 -0
- package/lib/typescript/module/src/SplitButton.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBar.d.ts +144 -0
- package/lib/typescript/module/src/TabBar.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts +13 -0
- package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/TabBarNativeComponent.d.ts +110 -0
- package/lib/typescript/module/src/TabBarNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/TextField.d.ts +332 -0
- package/lib/typescript/module/src/TextField.d.ts.map +1 -0
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts +240 -0
- package/lib/typescript/module/src/TextFieldNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/focusRegistry.d.ts +13 -0
- package/lib/typescript/module/src/focusRegistry.d.ts.map +1 -0
- package/lib/typescript/module/src/haptics.d.ts +20 -0
- package/lib/typescript/module/src/haptics.d.ts.map +1 -0
- package/lib/typescript/module/src/icons.d.ts +58 -0
- package/lib/typescript/module/src/icons.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +13 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/index.web.d.ts +25 -133
- package/lib/typescript/module/src/index.web.d.ts.map +1 -1
- package/lib/typescript/module/src/jest.d.ts +139 -0
- package/lib/typescript/module/src/jest.d.ts.map +1 -0
- package/lib/typescript/module/src/labelStyle.d.ts +20 -0
- package/lib/typescript/module/src/labelStyle.d.ts.map +1 -0
- package/lib/typescript/module/src/menuItems.d.ts +100 -0
- package/lib/typescript/module/src/menuItems.d.ts.map +1 -0
- package/lib/typescript/module/src/selectionIdentifiers.d.ts +3 -0
- package/lib/typescript/module/src/selectionIdentifiers.d.ts.map +1 -0
- package/lib/typescript/module/src/sharedTypes.d.ts +6 -1
- package/lib/typescript/module/src/sharedTypes.d.ts.map +1 -1
- package/lib/typescript/module/src/submitBehavior.d.ts +9 -0
- package/lib/typescript/module/src/submitBehavior.d.ts.map +1 -0
- package/lib/typescript/module/src/tabItems.d.ts +55 -0
- package/lib/typescript/module/src/tabItems.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Button.d.ts +9 -0
- package/lib/typescript/module/src/web/Button.d.ts.map +1 -0
- package/lib/typescript/module/src/web/ButtonGroup.d.ts +11 -0
- package/lib/typescript/module/src/web/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/module/src/web/DatePicker.d.ts +14 -0
- package/lib/typescript/module/src/web/DatePicker.d.ts.map +1 -0
- package/lib/typescript/module/src/web/DateRangePicker.d.ts +11 -0
- package/lib/typescript/module/src/web/DateRangePicker.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Dialog.d.ts +12 -0
- package/lib/typescript/module/src/web/Dialog.d.ts.map +1 -0
- package/lib/typescript/module/src/web/FloatingActionButton.d.ts +8 -0
- package/lib/typescript/module/src/web/FloatingActionButton.d.ts.map +1 -0
- package/lib/typescript/module/src/web/Icon.d.ts +12 -0
- package/lib/typescript/module/src/web/Icon.d.ts.map +1 -0
- package/lib/typescript/module/src/web/NativeTheme.d.ts +10 -0
- package/lib/typescript/module/src/web/NativeTheme.d.ts.map +1 -0
- package/lib/typescript/module/src/web/NavigationRail.d.ts +8 -0
- package/lib/typescript/module/src/web/NavigationRail.d.ts.map +1 -0
- package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts +10 -0
- package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SegmentedControl.d.ts +8 -0
- package/lib/typescript/module/src/web/SegmentedControl.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SelectionMenu.d.ts +10 -0
- package/lib/typescript/module/src/web/SelectionMenu.d.ts.map +1 -0
- package/lib/typescript/module/src/web/SplitButton.d.ts +9 -0
- package/lib/typescript/module/src/web/SplitButton.d.ts.map +1 -0
- package/lib/typescript/module/src/web/TabBar.d.ts +9 -0
- package/lib/typescript/module/src/web/TabBar.d.ts.map +1 -0
- package/lib/typescript/module/src/web/TextField.d.ts +9 -0
- package/lib/typescript/module/src/web/TextField.d.ts.map +1 -0
- package/lib/typescript/module/src/web/components.d.ts +17 -0
- package/lib/typescript/module/src/web/components.d.ts.map +1 -0
- package/lib/typescript/module/src/web/containers.d.ts +24 -0
- package/lib/typescript/module/src/web/containers.d.ts.map +1 -0
- package/lib/typescript/module/src/web/dateInput.d.ts +20 -0
- package/lib/typescript/module/src/web/dateInput.d.ts.map +1 -0
- package/lib/typescript/module/src/web/shared.d.ts +43 -0
- package/lib/typescript/module/src/web/shared.d.ts.map +1 -0
- package/lib/typescript/module/src/webComponents.d.ts +43 -0
- package/lib/typescript/module/src/webComponents.d.ts.map +1 -0
- package/package.json +55 -4
- package/plugin/build/index.d.ts +3 -2
- package/plugin/build/index.d.ts.map +1 -1
- package/react-native.config.js +6 -0
- package/shared/PCButtonComponentDescriptors-custom.h +22 -0
- package/shared/PCButtonGroupComponentDescriptors-custom.h +22 -0
- package/shared/PCButtonGroupShadowNode-custom.cpp +48 -0
- package/shared/PCButtonGroupShadowNode-custom.h +55 -0
- package/shared/PCButtonGroupState-custom.h +61 -0
- package/shared/PCButtonShadowNode-custom.cpp +48 -0
- package/shared/PCButtonShadowNode-custom.h +55 -0
- package/shared/PCButtonState-custom.h +61 -0
- package/shared/PCFloatingActionButtonComponentDescriptors-custom.h +22 -0
- package/shared/PCFloatingActionButtonShadowNode-custom.cpp +48 -0
- package/shared/PCFloatingActionButtonShadowNode-custom.h +54 -0
- package/shared/PCFloatingActionButtonState-custom.h +61 -0
- package/shared/PCNavigationRailComponentDescriptors-custom.h +47 -0
- package/shared/PCNavigationRailShadowNode-custom.h +42 -0
- package/shared/PCNavigationRailState-custom.h +62 -0
- package/shared/PCTabBarComponentDescriptors-custom.h +22 -0
- package/shared/PCTabBarShadowNode-custom.cpp +54 -0
- package/shared/PCTabBarShadowNode-custom.h +54 -0
- package/shared/PCTabBarState-custom.h +62 -0
- package/shared/PCTextFieldComponentDescriptors-custom.h +22 -0
- package/shared/PCTextFieldShadowNode-custom.cpp +47 -0
- package/shared/PCTextFieldShadowNode-custom.h +55 -0
- package/shared/PCTextFieldState-custom.h +61 -0
- package/shared/react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h +6 -0
- package/src/Button.tsx +359 -0
- package/src/ButtonGroup.tsx +251 -0
- package/src/ButtonGroupNativeComponent.ts +191 -0
- package/src/ButtonNativeComponent.ts +192 -0
- package/src/ContextMenu.tsx +34 -81
- package/src/ContextMenuNativeComponent.ts +47 -49
- package/src/DatePicker.tsx +182 -4
- package/src/DatePickerNativeComponent.ts +19 -2
- package/src/FloatingActionButton.tsx +121 -0
- package/src/FloatingActionButtonNativeComponent.ts +58 -0
- package/src/FloatingToolbar.tsx +164 -0
- package/src/FloatingToolbarNativeComponent.ts +47 -0
- package/src/LiquidGlass.tsx +24 -1
- package/src/LiquidGlassContainer.tsx +42 -0
- package/src/LiquidGlassContainerNativeComponent.ts +17 -0
- package/src/LiquidGlassNativeComponent.ts +8 -0
- package/src/NavigationRail.tsx +203 -0
- package/src/NavigationRailNativeComponent.ts +107 -0
- package/src/PlatformComponentsProvider.tsx +15 -0
- package/src/SegmentedControl.tsx +57 -119
- package/src/SegmentedControlNativeComponent.ts +14 -0
- package/src/SelectionMenu.tsx +81 -6
- package/src/SelectionMenuNativeComponent.ts +26 -4
- package/src/SplitButton.tsx +198 -0
- package/src/TabBar.tsx +373 -0
- package/src/TabBarAccessoryNativeComponent.ts +19 -0
- package/src/TabBarNativeComponent.ts +145 -0
- package/src/TextField.tsx +908 -0
- package/src/TextFieldNativeComponent.ts +324 -0
- package/src/focusRegistry.ts +90 -0
- package/src/haptics.ts +31 -0
- package/src/icons.ts +143 -0
- package/src/index.tsx +13 -0
- package/src/index.web.tsx +53 -199
- package/src/jest.tsx +958 -0
- package/src/labelStyle.ts +36 -0
- package/src/menuItems.ts +152 -0
- package/src/reactNativeInternals.d.ts +22 -0
- package/src/selectionIdentifiers.ts +17 -0
- package/src/sharedTypes.ts +7 -1
- package/src/submitBehavior.ts +16 -0
- package/src/tabItems.ts +113 -0
- package/src/web/Button.tsx +201 -0
- package/src/web/ButtonGroup.tsx +154 -0
- package/src/web/DatePicker.tsx +204 -0
- package/src/web/DateRangePicker.tsx +135 -0
- package/src/web/Dialog.tsx +54 -0
- package/src/web/FloatingActionButton.tsx +76 -0
- package/src/web/Icon.tsx +33 -0
- package/src/web/NativeTheme.ts +23 -0
- package/src/web/NavigationRail.tsx +148 -0
- package/src/web/PlatformComponentsProvider.tsx +48 -0
- package/src/web/SegmentedControl.tsx +127 -0
- package/src/web/SelectionMenu.tsx +149 -0
- package/src/web/SplitButton.tsx +32 -0
- package/src/web/TabBar.tsx +150 -0
- package/src/web/TextField.tsx +361 -0
- package/src/web/components.tsx +71 -0
- package/src/web/containers.tsx +130 -0
- package/src/web/dateInput.ts +137 -0
- package/src/web/shared.ts +176 -0
- package/src/webComponents.ts +45 -0
- package/android/src/main/java/com/platformcomponents/DateConstraints.kt +0 -83
|
@@ -0,0 +1,908 @@
|
|
|
1
|
+
// TextField.tsx
|
|
2
|
+
import React, {
|
|
3
|
+
forwardRef,
|
|
4
|
+
useCallback,
|
|
5
|
+
useImperativeHandle,
|
|
6
|
+
useLayoutEffect,
|
|
7
|
+
useMemo,
|
|
8
|
+
useRef,
|
|
9
|
+
useState,
|
|
10
|
+
} from 'react';
|
|
11
|
+
import type { ColorValue, NativeSyntheticEvent, ViewProps } from 'react-native';
|
|
12
|
+
|
|
13
|
+
import NativeTextField, {
|
|
14
|
+
Commands,
|
|
15
|
+
type TextFieldChangeEvent as NativeChangeEvent,
|
|
16
|
+
type TextFieldSelectionEvent as NativeSelectionEvent,
|
|
17
|
+
type TextFieldTextEvent as NativeTextEvent,
|
|
18
|
+
type TextFieldToolbarItem as NativeToolbarItem,
|
|
19
|
+
type TextFieldToolbarPressEvent as NativeToolbarPressEvent,
|
|
20
|
+
} from './TextFieldNativeComponent';
|
|
21
|
+
import { NO_ICON, resolveIcon, type PlatformIcon } from './icons';
|
|
22
|
+
import { normalizeLabelStyle, type LabelStyle } from './labelStyle';
|
|
23
|
+
import { focusRegistry } from './focusRegistry';
|
|
24
|
+
import { resolveSubmitBehavior } from './submitBehavior';
|
|
25
|
+
import type { AndroidMaterialMode } from './sharedTypes';
|
|
26
|
+
|
|
27
|
+
/** Keyboard to show; the React Native `TextInput` values. */
|
|
28
|
+
export type TextFieldKeyboardType =
|
|
29
|
+
| 'default'
|
|
30
|
+
| 'number-pad'
|
|
31
|
+
| 'decimal-pad'
|
|
32
|
+
| 'numeric'
|
|
33
|
+
| 'email-address'
|
|
34
|
+
| 'phone-pad'
|
|
35
|
+
| 'url'
|
|
36
|
+
| 'ascii-capable'
|
|
37
|
+
| 'numbers-and-punctuation'
|
|
38
|
+
| 'name-phone-pad'
|
|
39
|
+
| 'twitter'
|
|
40
|
+
| 'web-search'
|
|
41
|
+
| 'visible-password';
|
|
42
|
+
|
|
43
|
+
/** Return key label; the React Native `TextInput` values. */
|
|
44
|
+
export type TextFieldReturnKeyType =
|
|
45
|
+
'default' | 'done' | 'go' | 'next' | 'search' | 'send' | 'none' | 'previous';
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Autofill hint: the React Native `TextInput` `autoComplete` values, which
|
|
49
|
+
* include the HTML autocomplete names. iOS maps them to `textContentType`,
|
|
50
|
+
* Android to autofill hints. A value one platform has no equivalent for is
|
|
51
|
+
* ignored there.
|
|
52
|
+
*/
|
|
53
|
+
export type TextFieldAutoComplete =
|
|
54
|
+
| 'off'
|
|
55
|
+
| 'username'
|
|
56
|
+
| 'username-new'
|
|
57
|
+
| 'password'
|
|
58
|
+
| 'current-password'
|
|
59
|
+
| 'new-password'
|
|
60
|
+
| 'password-new'
|
|
61
|
+
| 'one-time-code'
|
|
62
|
+
| 'sms-otp'
|
|
63
|
+
| 'email-otp'
|
|
64
|
+
| '2fa-app-otp'
|
|
65
|
+
| 'email'
|
|
66
|
+
| 'name'
|
|
67
|
+
| 'given-name'
|
|
68
|
+
| 'family-name'
|
|
69
|
+
| 'additional-name'
|
|
70
|
+
| 'name-given'
|
|
71
|
+
| 'name-family'
|
|
72
|
+
| 'name-middle'
|
|
73
|
+
| 'name-middle-initial'
|
|
74
|
+
| 'name-prefix'
|
|
75
|
+
| 'name-suffix'
|
|
76
|
+
| 'honorific-prefix'
|
|
77
|
+
| 'honorific-suffix'
|
|
78
|
+
| 'nickname'
|
|
79
|
+
| 'organization'
|
|
80
|
+
| 'organization-title'
|
|
81
|
+
| 'tel'
|
|
82
|
+
| 'tel-country-code'
|
|
83
|
+
| 'tel-national'
|
|
84
|
+
| 'tel-device'
|
|
85
|
+
| 'street-address'
|
|
86
|
+
| 'address-line1'
|
|
87
|
+
| 'address-line2'
|
|
88
|
+
| 'postal-address'
|
|
89
|
+
| 'postal-address-country'
|
|
90
|
+
| 'postal-address-extended'
|
|
91
|
+
| 'postal-address-extended-postal-code'
|
|
92
|
+
| 'postal-address-locality'
|
|
93
|
+
| 'postal-address-region'
|
|
94
|
+
| 'postal-address-dependent-locality'
|
|
95
|
+
| 'postal-address-unit'
|
|
96
|
+
| 'postal-code'
|
|
97
|
+
| 'country'
|
|
98
|
+
| 'birthdate-full'
|
|
99
|
+
| 'birthdate-day'
|
|
100
|
+
| 'birthdate-month'
|
|
101
|
+
| 'birthdate-year'
|
|
102
|
+
| 'gender'
|
|
103
|
+
| 'cc-number'
|
|
104
|
+
| 'cc-exp'
|
|
105
|
+
| 'cc-exp-day'
|
|
106
|
+
| 'cc-exp-month'
|
|
107
|
+
| 'cc-exp-year'
|
|
108
|
+
| 'cc-csc'
|
|
109
|
+
| 'cc-name'
|
|
110
|
+
| 'cc-given-name'
|
|
111
|
+
| 'cc-middle-name'
|
|
112
|
+
| 'cc-family-name'
|
|
113
|
+
| 'cc-type'
|
|
114
|
+
| 'url'
|
|
115
|
+
| 'flight-number'
|
|
116
|
+
| 'flight-confirmation-code'
|
|
117
|
+
| 'gift-card-number'
|
|
118
|
+
| 'gift-card-pin'
|
|
119
|
+
| 'loyalty-account-number'
|
|
120
|
+
| 'promo-code'
|
|
121
|
+
| 'upi-vpa'
|
|
122
|
+
| 'wifi-password';
|
|
123
|
+
|
|
124
|
+
export type TextFieldAutoCapitalize =
|
|
125
|
+
'none' | 'sentences' | 'words' | 'characters';
|
|
126
|
+
|
|
127
|
+
export type TextFieldClearButtonMode =
|
|
128
|
+
'never' | 'while-editing' | 'unless-editing' | 'always';
|
|
129
|
+
|
|
130
|
+
/** An iOS text trait: the system default, on, or off. */
|
|
131
|
+
export type TextFieldIOSChoice = 'default' | 'yes' | 'no';
|
|
132
|
+
|
|
133
|
+
/** Focus, blur and submit events carry the text at that moment. */
|
|
134
|
+
export type TextFieldEvent = NativeSyntheticEvent<{ text: string }>;
|
|
135
|
+
|
|
136
|
+
/** Change events carry the text and the native edit counter. */
|
|
137
|
+
export type TextFieldChangeEvent = NativeSyntheticEvent<{
|
|
138
|
+
text: string;
|
|
139
|
+
eventCount: number;
|
|
140
|
+
}>;
|
|
141
|
+
|
|
142
|
+
/** A cursor position or selected range, as UTF-16 offsets into the text. */
|
|
143
|
+
export type TextFieldSelection = { start: number; end: number };
|
|
144
|
+
|
|
145
|
+
/** Selection events carry the new selection, as on `TextInput`. */
|
|
146
|
+
export type TextFieldSelectionChangeEvent = NativeSyntheticEvent<{
|
|
147
|
+
selection: TextFieldSelection;
|
|
148
|
+
}>;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* What the return key does, as on `TextInput`: `'blurAndSubmit'` calls
|
|
152
|
+
* `onSubmitEditing` and dismisses the keyboard, `'submit'` calls it and keeps
|
|
153
|
+
* the keyboard up, `'newline'` inserts a newline (multi-line fields).
|
|
154
|
+
*/
|
|
155
|
+
export type TextFieldSubmitBehavior = 'submit' | 'blurAndSubmit' | 'newline';
|
|
156
|
+
|
|
157
|
+
/** A system button of the iOS keyboard toolbar (`UIBarButtonItem.SystemItem`). */
|
|
158
|
+
export type TextFieldToolbarSystemItem =
|
|
159
|
+
| 'done'
|
|
160
|
+
| 'cancel'
|
|
161
|
+
| 'save'
|
|
162
|
+
| 'add'
|
|
163
|
+
| 'edit'
|
|
164
|
+
| 'close'
|
|
165
|
+
| 'search'
|
|
166
|
+
| 'compose'
|
|
167
|
+
| 'reply'
|
|
168
|
+
| 'action'
|
|
169
|
+
| 'camera'
|
|
170
|
+
| 'trash'
|
|
171
|
+
| 'undo'
|
|
172
|
+
| 'redo';
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* An item of the iOS keyboard toolbar: a button, or `'flexibleSpace'` to push
|
|
176
|
+
* the next items to the end.
|
|
177
|
+
*/
|
|
178
|
+
export type TextFieldToolbarItem =
|
|
179
|
+
| 'flexibleSpace'
|
|
180
|
+
| {
|
|
181
|
+
/** Passed to `onItemPress`. */
|
|
182
|
+
id: string;
|
|
183
|
+
/** Button title. */
|
|
184
|
+
title?: string;
|
|
185
|
+
/** An icon instead of the title: an SF Symbol name or an image. */
|
|
186
|
+
icon?: PlatformIcon;
|
|
187
|
+
/** A system button, with its own localized title or symbol. */
|
|
188
|
+
systemItem?: TextFieldToolbarSystemItem;
|
|
189
|
+
/** The prominent style: bold, or tinted glass on iOS 26. */
|
|
190
|
+
prominent?: boolean;
|
|
191
|
+
/** Screen-reader label; defaults to the title. */
|
|
192
|
+
accessibilityLabel?: string;
|
|
193
|
+
/** Test identifier of the button. */
|
|
194
|
+
testID?: string;
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
/** The iOS keyboard toolbar, a `UIToolbar` shown above the keyboard. */
|
|
198
|
+
export interface TextFieldKeyboardToolbar {
|
|
199
|
+
/**
|
|
200
|
+
* A Done button at the end of the toolbar that dismisses the keyboard
|
|
201
|
+
* (`onBlur` is called; `onSubmitEditing` is not). `true` is the system
|
|
202
|
+
* Done button; a string is a prominent button with that title.
|
|
203
|
+
*/
|
|
204
|
+
done?: boolean | string;
|
|
205
|
+
/** Buttons at the start of the toolbar, before Done. */
|
|
206
|
+
items?: TextFieldToolbarItem[];
|
|
207
|
+
/** Called with the `id` of a pressed item. */
|
|
208
|
+
onItemPress?: (id: string) => void;
|
|
209
|
+
/** Test identifier of the Done button. */
|
|
210
|
+
doneTestID?: string;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/** Methods available through the `ref`. */
|
|
214
|
+
export interface TextFieldRef {
|
|
215
|
+
/** Focuses the field and shows the keyboard. */
|
|
216
|
+
focus(): void;
|
|
217
|
+
/** Removes focus and hides the keyboard. */
|
|
218
|
+
blur(): void;
|
|
219
|
+
/** Clears the text. Fires `onChangeText('')`. */
|
|
220
|
+
clear(): void;
|
|
221
|
+
/** Whether the field currently has focus. */
|
|
222
|
+
isFocused(): boolean;
|
|
223
|
+
/**
|
|
224
|
+
* Moves the cursor to `start`, or selects `start`..`end`, in UTF-16
|
|
225
|
+
* offsets clamped to the text.
|
|
226
|
+
*/
|
|
227
|
+
setSelection(start: number, end?: number): void;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export interface TextFieldProps extends Omit<
|
|
231
|
+
ViewProps,
|
|
232
|
+
'onFocus' | 'onBlur' | 'children'
|
|
233
|
+
> {
|
|
234
|
+
/**
|
|
235
|
+
* Controlled text. Native keeps what the user typed until the next
|
|
236
|
+
* `onChangeText` round-trip, so updating state from `onChangeText` never
|
|
237
|
+
* drops characters.
|
|
238
|
+
*/
|
|
239
|
+
value?: string;
|
|
240
|
+
|
|
241
|
+
/** Initial text of an uncontrolled field. */
|
|
242
|
+
defaultValue?: string;
|
|
243
|
+
|
|
244
|
+
/** Called with the new text on every edit. */
|
|
245
|
+
onChangeText?: (text: string) => void;
|
|
246
|
+
|
|
247
|
+
/** Called on every edit with the native event. */
|
|
248
|
+
onChange?: (event: TextFieldChangeEvent) => void;
|
|
249
|
+
|
|
250
|
+
/** Called when the field gains focus. */
|
|
251
|
+
onFocus?: (event: TextFieldEvent) => void;
|
|
252
|
+
|
|
253
|
+
/** Called when the field loses focus. */
|
|
254
|
+
onBlur?: (event: TextFieldEvent) => void;
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Called when the return key is pressed, unless it inserts a newline (see
|
|
258
|
+
* `submitBehavior`).
|
|
259
|
+
*/
|
|
260
|
+
onSubmitEditing?: (event: TextFieldEvent) => void;
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* What the return key does. Default: `'blurAndSubmit'` for single-line
|
|
264
|
+
* fields, `'newline'` for multi-line fields. `'submit'` keeps the keyboard
|
|
265
|
+
* up, for a chat composer that sends on return.
|
|
266
|
+
*/
|
|
267
|
+
submitBehavior?: TextFieldSubmitBehavior;
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Called when the cursor moves or the selection changes, with
|
|
271
|
+
* `nativeEvent.selection` in UTF-16 offsets.
|
|
272
|
+
*/
|
|
273
|
+
onSelectionChange?: (event: TextFieldSelectionChangeEvent) => void;
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Controlled cursor position or selection, in UTF-16 offsets; `end`
|
|
277
|
+
* defaults to `start`, a cursor. Like `value`, the field returns to it
|
|
278
|
+
* when the user moves the cursor, so update it from `onSelectionChange`.
|
|
279
|
+
* For a one-off move, use the ref's `setSelection` instead.
|
|
280
|
+
*/
|
|
281
|
+
selection?: { start: number; end?: number };
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Field label. Android: the Material floating label. iOS: a caption above
|
|
285
|
+
* the field, which takes the tint color while focused.
|
|
286
|
+
*/
|
|
287
|
+
label?: string;
|
|
288
|
+
|
|
289
|
+
/** Placeholder shown while the field is empty. */
|
|
290
|
+
placeholder?: string;
|
|
291
|
+
|
|
292
|
+
/** Helper text below the field. */
|
|
293
|
+
supportingText?: string;
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Error state. A string is shown below the field in place of the
|
|
297
|
+
* supporting text; `true` marks the field as invalid and keeps the
|
|
298
|
+
* supporting text.
|
|
299
|
+
*/
|
|
300
|
+
error?: boolean | string;
|
|
301
|
+
|
|
302
|
+
/** Text shown before the input, inside the field (a currency sign). */
|
|
303
|
+
prefix?: string;
|
|
304
|
+
|
|
305
|
+
/** Text shown after the input, inside the field (a unit). */
|
|
306
|
+
suffix?: string;
|
|
307
|
+
|
|
308
|
+
/** Icon at the start of the field. */
|
|
309
|
+
leadingIcon?: PlatformIcon;
|
|
310
|
+
|
|
311
|
+
/** Icon at the end of the field. Pressing it calls `onTrailingIconPress`. */
|
|
312
|
+
trailingIcon?: PlatformIcon;
|
|
313
|
+
|
|
314
|
+
/** Called when the trailing icon is pressed. */
|
|
315
|
+
onTrailingIconPress?: () => void;
|
|
316
|
+
|
|
317
|
+
/** Test identifier of the leading icon (Android: Material fields only). */
|
|
318
|
+
leadingIconTestID?: string;
|
|
319
|
+
|
|
320
|
+
/** Screen-reader label of the leading icon, which is decorative without one. */
|
|
321
|
+
leadingIconAccessibilityLabel?: string;
|
|
322
|
+
|
|
323
|
+
/** Test identifier of the trailing icon (Android: Material fields only). */
|
|
324
|
+
trailingIconTestID?: string;
|
|
325
|
+
|
|
326
|
+
/** Screen-reader label of the trailing icon. */
|
|
327
|
+
trailingIconAccessibilityLabel?: string;
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Called when a field with `editable={false}` is pressed, for a field that
|
|
331
|
+
* opens a menu, a date picker or another screen. The field doesn't focus
|
|
332
|
+
* or show the keyboard, keeps its enabled look, and is announced as a
|
|
333
|
+
* button. Ignored while the field is editable.
|
|
334
|
+
*/
|
|
335
|
+
onPress?: () => void;
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Color of the focused outline (underline for filled fields), the focused
|
|
339
|
+
* label and the cursor. Default: the tint / Material primary color.
|
|
340
|
+
*/
|
|
341
|
+
activeColor?: ColorValue;
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Color of the unfocused outline (underline for filled fields). iOS draws
|
|
345
|
+
* the rounded-rect border itself when this, `activeColor` or
|
|
346
|
+
* `containerColor` is set.
|
|
347
|
+
*/
|
|
348
|
+
outlineColor?: ColorValue;
|
|
349
|
+
|
|
350
|
+
/** Color of the outline, label and message in the error state. */
|
|
351
|
+
errorColor?: ColorValue;
|
|
352
|
+
|
|
353
|
+
/** Background of the field's box. The host `style.backgroundColor` paints the whole view. */
|
|
354
|
+
containerColor?: ColorValue;
|
|
355
|
+
|
|
356
|
+
/** Color of the typed text. */
|
|
357
|
+
textColor?: ColorValue;
|
|
358
|
+
|
|
359
|
+
/** Color of the placeholder. */
|
|
360
|
+
placeholderTextColor?: ColorValue;
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Largest scale the field's text may reach with the system text size
|
|
364
|
+
* (Dynamic Type / font scale), as on React Native `Text`: `2` caps a 17pt
|
|
365
|
+
* font at 34pt. Unset or `0`: no cap. Applies to the input, label,
|
|
366
|
+
* placeholder, prefix, suffix and supporting text.
|
|
367
|
+
*/
|
|
368
|
+
maxFontSizeMultiplier?: number;
|
|
369
|
+
|
|
370
|
+
/** Horizontal alignment of the text. Default: the natural (leading) alignment. */
|
|
371
|
+
textAlign?: 'left' | 'center' | 'right';
|
|
372
|
+
|
|
373
|
+
/** Multi-line fields: the height in lines the field starts at. */
|
|
374
|
+
minLines?: number;
|
|
375
|
+
|
|
376
|
+
/** Multi-line fields: the lines the field grows to before it scrolls. */
|
|
377
|
+
maxLines?: number;
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* When to show a clear button inside the field. Default: `'never'`.
|
|
381
|
+
* Android shows the Material clear icon while the field has text.
|
|
382
|
+
* Clearing fires `onChange` and `onChangeText('')` on both platforms.
|
|
383
|
+
*/
|
|
384
|
+
clearButtonMode?: TextFieldClearButtonMode;
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Shows a button that toggles `secureTextEntry`, for password fields.
|
|
388
|
+
* Android: the Material password toggle. iOS: an eye button.
|
|
389
|
+
*/
|
|
390
|
+
passwordToggle?: boolean;
|
|
391
|
+
|
|
392
|
+
/** Shows the character count below the field (`12 / 100` with `maxLength`). */
|
|
393
|
+
showCharacterCount?: boolean;
|
|
394
|
+
|
|
395
|
+
/** Maximum number of characters. */
|
|
396
|
+
maxLength?: number;
|
|
397
|
+
|
|
398
|
+
/** Keyboard to show. Default: `'default'`. */
|
|
399
|
+
keyboardType?: TextFieldKeyboardType;
|
|
400
|
+
|
|
401
|
+
/** Return key label. Default: `'default'`. */
|
|
402
|
+
returnKeyType?: TextFieldReturnKeyType;
|
|
403
|
+
|
|
404
|
+
/** Automatic capitalization. Default: `'sentences'`. */
|
|
405
|
+
autoCapitalize?: TextFieldAutoCapitalize;
|
|
406
|
+
|
|
407
|
+
/** Auto-correction and suggestions. Default: `true`. */
|
|
408
|
+
autoCorrect?: boolean;
|
|
409
|
+
|
|
410
|
+
/** Obscures the text, for passwords. */
|
|
411
|
+
secureTextEntry?: boolean;
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Multi-line field that grows with its content, between `minLines` and
|
|
415
|
+
* `maxLines`. Return inserts a newline.
|
|
416
|
+
*/
|
|
417
|
+
multiline?: boolean;
|
|
418
|
+
|
|
419
|
+
/** Whether the text can be edited. Default: `true`. */
|
|
420
|
+
editable?: boolean;
|
|
421
|
+
|
|
422
|
+
/** Focuses the field when it mounts. */
|
|
423
|
+
autoFocus?: boolean;
|
|
424
|
+
|
|
425
|
+
/** Selects all text when the field gains focus. */
|
|
426
|
+
selectTextOnFocus?: boolean;
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Autofill hint. Android: autofill hints. iOS: `textContentType`, which
|
|
430
|
+
* also enables the password and one-time-code suggestions.
|
|
431
|
+
*/
|
|
432
|
+
autoComplete?: TextFieldAutoComplete;
|
|
433
|
+
|
|
434
|
+
/** iOS: keyboard appearance. Default: `'default'`. */
|
|
435
|
+
keyboardAppearance?: 'default' | 'light' | 'dark';
|
|
436
|
+
|
|
437
|
+
/** Font of the input text. */
|
|
438
|
+
textStyle?: LabelStyle;
|
|
439
|
+
|
|
440
|
+
/** Screen-reader label. Defaults to `label`. */
|
|
441
|
+
accessibilityLabel?: string;
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* iOS-specific configuration. Each trait defaults to the system default.
|
|
445
|
+
*/
|
|
446
|
+
ios?: {
|
|
447
|
+
/**
|
|
448
|
+
* Writing Tools (iOS 18): `'complete'` allows rewrites in place,
|
|
449
|
+
* `'limited'` only the overlay panel, `'none'` disables them.
|
|
450
|
+
*/
|
|
451
|
+
writingTools?: 'default' | 'complete' | 'limited' | 'none';
|
|
452
|
+
|
|
453
|
+
/** Inline predictive text (iOS 17). */
|
|
454
|
+
inlinePrediction?: TextFieldIOSChoice;
|
|
455
|
+
|
|
456
|
+
/** Smart quotes. */
|
|
457
|
+
smartQuotes?: TextFieldIOSChoice;
|
|
458
|
+
|
|
459
|
+
/** Smart dashes. */
|
|
460
|
+
smartDashes?: TextFieldIOSChoice;
|
|
461
|
+
|
|
462
|
+
/** Smart insert and delete (spaces around pasted words). */
|
|
463
|
+
smartInsertDelete?: TextFieldIOSChoice;
|
|
464
|
+
|
|
465
|
+
/** Math expression completion, `1+1=` (iOS 18). */
|
|
466
|
+
mathExpressionCompletion?: TextFieldIOSChoice;
|
|
467
|
+
|
|
468
|
+
/** `UITextField.borderStyle`. Default: `'roundedRect'`. */
|
|
469
|
+
borderStyle?: 'roundedRect' | 'none' | 'line' | 'bezel';
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* Where the label sits: above the field (default), or in a leading
|
|
473
|
+
* column with the field beside it, the layout of the grouped forms in
|
|
474
|
+
* Contacts and Settings. Pair `'leading'` with `borderStyle: 'none'`
|
|
475
|
+
* inside your own grouped row.
|
|
476
|
+
*/
|
|
477
|
+
labelPlacement?: 'above' | 'leading';
|
|
478
|
+
|
|
479
|
+
/** Width of the leading label column, in points. Default: 100. */
|
|
480
|
+
labelWidth?: number;
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* A toolbar above the keyboard (`inputAccessoryView`) with a Done
|
|
484
|
+
* button and your own buttons. Number and phone pads have no return
|
|
485
|
+
* key, so this is how they are dismissed.
|
|
486
|
+
*/
|
|
487
|
+
keyboardToolbar?: TextFieldKeyboardToolbar;
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Requirements for the strong passwords iOS suggests, as a
|
|
491
|
+
* `UITextInputPasswordRules` descriptor, e.g.
|
|
492
|
+
* `'minlength: 12; required: lower; required: upper; required: digit;'`.
|
|
493
|
+
* Use with `autoComplete="new-password"`.
|
|
494
|
+
*/
|
|
495
|
+
passwordRules?: string;
|
|
496
|
+
};
|
|
497
|
+
|
|
498
|
+
/**
|
|
499
|
+
* Android-specific configuration
|
|
500
|
+
*/
|
|
501
|
+
android?: {
|
|
502
|
+
/**
|
|
503
|
+
* Material preference: the Material 3 text field (default), or
|
|
504
|
+
* `'system'` for the platform `EditText` (the hint as placeholder,
|
|
505
|
+
* supporting text below, icons as compound drawables; no box, floating
|
|
506
|
+
* label, clear button, password toggle, counter, prefix or suffix).
|
|
507
|
+
*/
|
|
508
|
+
material?: AndroidMaterialMode;
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Material 3 text field style. Default: `'outlined'`. `'plain'` has no
|
|
512
|
+
* box or underline (the label still floats), for a large standalone
|
|
513
|
+
* input such as an amount; the iOS equivalent is `ios.borderStyle: 'none'`.
|
|
514
|
+
*/
|
|
515
|
+
variant?: 'outlined' | 'filled' | 'plain';
|
|
516
|
+
|
|
517
|
+
/** The dense variant, a shorter field. */
|
|
518
|
+
dense?: boolean;
|
|
519
|
+
};
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* Test identifier. It is set on the inner text input (the `UITextField` /
|
|
523
|
+
* `UITextView` on iOS, the `EditText` on Android) rather than the host
|
|
524
|
+
* view, so E2E drivers such as Detox can type into and clear the field.
|
|
525
|
+
*/
|
|
526
|
+
testID?: string;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
type NativeTextFieldInstance = React.ComponentRef<typeof NativeTextField>;
|
|
530
|
+
|
|
531
|
+
const TOOLBAR_ITEM: NativeToolbarItem = {
|
|
532
|
+
kind: 'button',
|
|
533
|
+
itemId: '',
|
|
534
|
+
title: '',
|
|
535
|
+
systemItem: '',
|
|
536
|
+
...NO_ICON,
|
|
537
|
+
prominent: 'false',
|
|
538
|
+
accessibilityLabel: '',
|
|
539
|
+
testID: '',
|
|
540
|
+
};
|
|
541
|
+
|
|
542
|
+
/** The keyboard toolbar as flat items: yours, then a Done button at the end. */
|
|
543
|
+
function toolbarItems(
|
|
544
|
+
toolbar: TextFieldKeyboardToolbar | undefined
|
|
545
|
+
): NativeToolbarItem[] {
|
|
546
|
+
if (toolbar == null) return [];
|
|
547
|
+
const items = (toolbar.items ?? []).map((item): NativeToolbarItem =>
|
|
548
|
+
item === 'flexibleSpace'
|
|
549
|
+
? { ...TOOLBAR_ITEM, kind: 'flexibleSpace' }
|
|
550
|
+
: {
|
|
551
|
+
...TOOLBAR_ITEM,
|
|
552
|
+
itemId: item.id,
|
|
553
|
+
title: item.title ?? '',
|
|
554
|
+
systemItem: item.systemItem ?? '',
|
|
555
|
+
...resolveIcon(item.icon),
|
|
556
|
+
prominent: item.prominent ? 'true' : 'false',
|
|
557
|
+
accessibilityLabel: item.accessibilityLabel ?? '',
|
|
558
|
+
testID: item.testID ?? '',
|
|
559
|
+
}
|
|
560
|
+
);
|
|
561
|
+
if (toolbar.done) {
|
|
562
|
+
if (items[items.length - 1]?.kind !== 'flexibleSpace') {
|
|
563
|
+
items.push({ ...TOOLBAR_ITEM, kind: 'flexibleSpace' });
|
|
564
|
+
}
|
|
565
|
+
items.push({
|
|
566
|
+
...TOOLBAR_ITEM,
|
|
567
|
+
kind: 'done',
|
|
568
|
+
title: typeof toolbar.done === 'string' ? toolbar.done : '',
|
|
569
|
+
prominent: 'true',
|
|
570
|
+
testID: toolbar.doneTestID ?? '',
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
return items;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
|
|
577
|
+
function TextFieldComponent(props, ref): React.ReactElement {
|
|
578
|
+
const {
|
|
579
|
+
value,
|
|
580
|
+
defaultValue,
|
|
581
|
+
onChangeText,
|
|
582
|
+
onChange,
|
|
583
|
+
onFocus,
|
|
584
|
+
onBlur,
|
|
585
|
+
onSubmitEditing,
|
|
586
|
+
submitBehavior,
|
|
587
|
+
onSelectionChange,
|
|
588
|
+
selection,
|
|
589
|
+
label,
|
|
590
|
+
placeholder,
|
|
591
|
+
supportingText,
|
|
592
|
+
error,
|
|
593
|
+
prefix,
|
|
594
|
+
suffix,
|
|
595
|
+
leadingIcon,
|
|
596
|
+
trailingIcon,
|
|
597
|
+
onTrailingIconPress,
|
|
598
|
+
leadingIconTestID,
|
|
599
|
+
leadingIconAccessibilityLabel,
|
|
600
|
+
trailingIconTestID,
|
|
601
|
+
trailingIconAccessibilityLabel,
|
|
602
|
+
onPress,
|
|
603
|
+
activeColor,
|
|
604
|
+
outlineColor,
|
|
605
|
+
errorColor,
|
|
606
|
+
containerColor,
|
|
607
|
+
textColor,
|
|
608
|
+
placeholderTextColor,
|
|
609
|
+
maxFontSizeMultiplier,
|
|
610
|
+
textAlign,
|
|
611
|
+
minLines,
|
|
612
|
+
maxLines,
|
|
613
|
+
clearButtonMode,
|
|
614
|
+
passwordToggle,
|
|
615
|
+
showCharacterCount,
|
|
616
|
+
maxLength,
|
|
617
|
+
keyboardType,
|
|
618
|
+
returnKeyType,
|
|
619
|
+
autoCapitalize,
|
|
620
|
+
autoCorrect,
|
|
621
|
+
secureTextEntry,
|
|
622
|
+
multiline,
|
|
623
|
+
editable,
|
|
624
|
+
autoFocus,
|
|
625
|
+
selectTextOnFocus,
|
|
626
|
+
autoComplete,
|
|
627
|
+
keyboardAppearance,
|
|
628
|
+
textStyle,
|
|
629
|
+
accessibilityLabel,
|
|
630
|
+
ios,
|
|
631
|
+
android,
|
|
632
|
+
...viewProps
|
|
633
|
+
} = props;
|
|
634
|
+
|
|
635
|
+
const nativeRef = useRef<NativeTextFieldInstance>(null);
|
|
636
|
+
const focused = useRef(false);
|
|
637
|
+
|
|
638
|
+
// The same synchronization as React Native's TextInput: every native edit
|
|
639
|
+
// reports an event count, and a controlled value is pushed with the last
|
|
640
|
+
// count JS has seen. Native drops the update when the user has typed
|
|
641
|
+
// since, and the edit that follows brings JS back in line.
|
|
642
|
+
const [mostRecentEventCount, setMostRecentEventCount] = useState(0);
|
|
643
|
+
const eventCountRef = useRef(0);
|
|
644
|
+
const [lastNativeText, setLastNativeText] = useState<string | undefined>(
|
|
645
|
+
value ?? defaultValue
|
|
646
|
+
);
|
|
647
|
+
// The selection last reported by native or pushed from here; a
|
|
648
|
+
// `selection` prop that differs from it is pushed, the same way
|
|
649
|
+
const [lastNativeSelection, setLastNativeSelection] =
|
|
650
|
+
useState<TextFieldSelection | null>(null);
|
|
651
|
+
|
|
652
|
+
// Registered like a TextInput, so Keyboard.dismiss() and the ScrollView
|
|
653
|
+
// keyboard props treat the field as one (see focusRegistry.ts)
|
|
654
|
+
useLayoutEffect(() => {
|
|
655
|
+
const node = nativeRef.current;
|
|
656
|
+
if (node == null) return undefined;
|
|
657
|
+
focusRegistry.register(node);
|
|
658
|
+
return () => focusRegistry.unregister(node);
|
|
659
|
+
}, []);
|
|
660
|
+
|
|
661
|
+
// Text first, then the selection, which may point into the new text
|
|
662
|
+
const selectionStart = selection?.start;
|
|
663
|
+
const selectionEnd = selection?.end ?? selectionStart;
|
|
664
|
+
useLayoutEffect(() => {
|
|
665
|
+
const node = nativeRef.current;
|
|
666
|
+
if (typeof value === 'string' && value !== lastNativeText) {
|
|
667
|
+
setLastNativeText(value);
|
|
668
|
+
if (node != null) {
|
|
669
|
+
Commands.setText(node, mostRecentEventCount, value);
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
if (
|
|
673
|
+
selectionStart != null &&
|
|
674
|
+
selectionEnd != null &&
|
|
675
|
+
(lastNativeSelection?.start !== selectionStart ||
|
|
676
|
+
lastNativeSelection?.end !== selectionEnd)
|
|
677
|
+
) {
|
|
678
|
+
setLastNativeSelection({ start: selectionStart, end: selectionEnd });
|
|
679
|
+
if (node != null) {
|
|
680
|
+
Commands.setSelection(
|
|
681
|
+
node,
|
|
682
|
+
mostRecentEventCount,
|
|
683
|
+
selectionStart,
|
|
684
|
+
selectionEnd
|
|
685
|
+
);
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
}, [
|
|
689
|
+
value,
|
|
690
|
+
lastNativeText,
|
|
691
|
+
mostRecentEventCount,
|
|
692
|
+
selectionStart,
|
|
693
|
+
selectionEnd,
|
|
694
|
+
lastNativeSelection,
|
|
695
|
+
]);
|
|
696
|
+
|
|
697
|
+
useImperativeHandle(
|
|
698
|
+
ref,
|
|
699
|
+
() => ({
|
|
700
|
+
focus: () => {
|
|
701
|
+
const node = nativeRef.current;
|
|
702
|
+
if (node != null) Commands.focus(node);
|
|
703
|
+
},
|
|
704
|
+
blur: () => {
|
|
705
|
+
const node = nativeRef.current;
|
|
706
|
+
if (node != null) Commands.blur(node);
|
|
707
|
+
},
|
|
708
|
+
clear: () => {
|
|
709
|
+
const node = nativeRef.current;
|
|
710
|
+
if (node != null) Commands.clear(node);
|
|
711
|
+
},
|
|
712
|
+
isFocused: () => focused.current,
|
|
713
|
+
setSelection: (start: number, end?: number) => {
|
|
714
|
+
const node = nativeRef.current;
|
|
715
|
+
if (node != null) {
|
|
716
|
+
Commands.setSelection(
|
|
717
|
+
node,
|
|
718
|
+
eventCountRef.current,
|
|
719
|
+
start,
|
|
720
|
+
end ?? start
|
|
721
|
+
);
|
|
722
|
+
}
|
|
723
|
+
},
|
|
724
|
+
}),
|
|
725
|
+
[]
|
|
726
|
+
);
|
|
727
|
+
|
|
728
|
+
const handleChange = useCallback(
|
|
729
|
+
(event: NativeSyntheticEvent<NativeChangeEvent>) => {
|
|
730
|
+
const { text, eventCount } = event.nativeEvent;
|
|
731
|
+
eventCountRef.current = eventCount;
|
|
732
|
+
setMostRecentEventCount(eventCount);
|
|
733
|
+
setLastNativeText(text);
|
|
734
|
+
onChange?.(event);
|
|
735
|
+
onChangeText?.(text);
|
|
736
|
+
},
|
|
737
|
+
[onChange, onChangeText]
|
|
738
|
+
);
|
|
739
|
+
|
|
740
|
+
const handleFocus = useCallback(
|
|
741
|
+
(event: NativeSyntheticEvent<NativeTextEvent>) => {
|
|
742
|
+
focused.current = true;
|
|
743
|
+
focusRegistry.focused(nativeRef.current);
|
|
744
|
+
onFocus?.(event);
|
|
745
|
+
},
|
|
746
|
+
[onFocus]
|
|
747
|
+
);
|
|
748
|
+
|
|
749
|
+
const handleBlur = useCallback(
|
|
750
|
+
(event: NativeSyntheticEvent<NativeTextEvent>) => {
|
|
751
|
+
focused.current = false;
|
|
752
|
+
focusRegistry.blurred(nativeRef.current);
|
|
753
|
+
onBlur?.(event);
|
|
754
|
+
},
|
|
755
|
+
[onBlur]
|
|
756
|
+
);
|
|
757
|
+
|
|
758
|
+
const handleSubmit = useCallback(
|
|
759
|
+
(event: NativeSyntheticEvent<NativeTextEvent>) => {
|
|
760
|
+
onSubmitEditing?.(event);
|
|
761
|
+
},
|
|
762
|
+
[onSubmitEditing]
|
|
763
|
+
);
|
|
764
|
+
|
|
765
|
+
const handleSelectionChange = useCallback(
|
|
766
|
+
(event: NativeSyntheticEvent<NativeSelectionEvent>) => {
|
|
767
|
+
const { start, end } = event.nativeEvent;
|
|
768
|
+
setLastNativeSelection({ start, end });
|
|
769
|
+
onSelectionChange?.({
|
|
770
|
+
...event,
|
|
771
|
+
nativeEvent: { selection: { start, end } },
|
|
772
|
+
});
|
|
773
|
+
},
|
|
774
|
+
[onSelectionChange]
|
|
775
|
+
);
|
|
776
|
+
|
|
777
|
+
const onToolbarItemPress = ios?.keyboardToolbar?.onItemPress;
|
|
778
|
+
const handleToolbarPress = useCallback(
|
|
779
|
+
(event: NativeSyntheticEvent<NativeToolbarPressEvent>) => {
|
|
780
|
+
onToolbarItemPress?.(event.nativeEvent.itemId);
|
|
781
|
+
},
|
|
782
|
+
[onToolbarItemPress]
|
|
783
|
+
);
|
|
784
|
+
|
|
785
|
+
const handleTrailingIconPress = useCallback(() => {
|
|
786
|
+
onTrailingIconPress?.();
|
|
787
|
+
}, [onTrailingIconPress]);
|
|
788
|
+
|
|
789
|
+
const handlePress = useCallback(() => {
|
|
790
|
+
onPress?.();
|
|
791
|
+
}, [onPress]);
|
|
792
|
+
|
|
793
|
+
// A read-only field with onPress acts as a button
|
|
794
|
+
const pressable = editable === false && onPress != null;
|
|
795
|
+
|
|
796
|
+
const nativeLeadingIcon = useMemo(
|
|
797
|
+
() => resolveIcon(leadingIcon),
|
|
798
|
+
[leadingIcon]
|
|
799
|
+
);
|
|
800
|
+
const nativeTrailingIcon = useMemo(
|
|
801
|
+
() => resolveIcon(trailingIcon),
|
|
802
|
+
[trailingIcon]
|
|
803
|
+
);
|
|
804
|
+
const nativeTextStyle = useMemo(
|
|
805
|
+
() => normalizeLabelStyle(textStyle),
|
|
806
|
+
[textStyle]
|
|
807
|
+
);
|
|
808
|
+
|
|
809
|
+
const nativeIOS = useMemo(
|
|
810
|
+
() => ({
|
|
811
|
+
writingTools: ios?.writingTools ?? '',
|
|
812
|
+
inlinePrediction: ios?.inlinePrediction ?? '',
|
|
813
|
+
smartQuotes: ios?.smartQuotes ?? '',
|
|
814
|
+
smartDashes: ios?.smartDashes ?? '',
|
|
815
|
+
smartInsertDelete: ios?.smartInsertDelete ?? '',
|
|
816
|
+
mathExpressionCompletion: ios?.mathExpressionCompletion ?? '',
|
|
817
|
+
borderStyle: ios?.borderStyle ?? '',
|
|
818
|
+
labelPlacement: ios?.labelPlacement ?? '',
|
|
819
|
+
labelWidth: ios?.labelWidth ?? 0,
|
|
820
|
+
passwordRules: ios?.passwordRules ?? '',
|
|
821
|
+
}),
|
|
822
|
+
[ios]
|
|
823
|
+
);
|
|
824
|
+
|
|
825
|
+
const nativeToolbarItems = useMemo(
|
|
826
|
+
() => toolbarItems(ios?.keyboardToolbar),
|
|
827
|
+
[ios?.keyboardToolbar]
|
|
828
|
+
);
|
|
829
|
+
|
|
830
|
+
const nativeAndroid = useMemo(
|
|
831
|
+
() => ({
|
|
832
|
+
material: android?.material ?? 'm3',
|
|
833
|
+
variant: android?.variant ?? 'outlined',
|
|
834
|
+
density: android?.dense ? 'dense' : 'standard',
|
|
835
|
+
}),
|
|
836
|
+
[android]
|
|
837
|
+
);
|
|
838
|
+
|
|
839
|
+
return (
|
|
840
|
+
<NativeTextField
|
|
841
|
+
ref={nativeRef}
|
|
842
|
+
initialText={value ?? defaultValue ?? ''}
|
|
843
|
+
label={label ?? ''}
|
|
844
|
+
placeholder={placeholder ?? ''}
|
|
845
|
+
supportingText={supportingText ?? ''}
|
|
846
|
+
errorState={error ? 'error' : 'none'}
|
|
847
|
+
errorText={typeof error === 'string' ? error : ''}
|
|
848
|
+
prefix={prefix ?? ''}
|
|
849
|
+
suffix={suffix ?? ''}
|
|
850
|
+
leadingIcon={nativeLeadingIcon}
|
|
851
|
+
trailingIcon={nativeTrailingIcon}
|
|
852
|
+
clearButtonMode={clearButtonMode ?? 'never'}
|
|
853
|
+
passwordToggle={passwordToggle ? 'shown' : 'hidden'}
|
|
854
|
+
characterCount={showCharacterCount ? 'shown' : 'hidden'}
|
|
855
|
+
maxLength={maxLength ?? 0}
|
|
856
|
+
keyboardType={keyboardType ?? 'default'}
|
|
857
|
+
returnKeyType={returnKeyType ?? 'default'}
|
|
858
|
+
autoCapitalize={autoCapitalize ?? 'sentences'}
|
|
859
|
+
autoCorrect={autoCorrect === false ? 'disabled' : 'enabled'}
|
|
860
|
+
secureTextEntry={secureTextEntry ? 'secure' : 'plain'}
|
|
861
|
+
lines={multiline ? 'multiline' : 'single'}
|
|
862
|
+
submitBehavior={resolveSubmitBehavior(submitBehavior, multiline)}
|
|
863
|
+
keyboardToolbarItems={nativeToolbarItems}
|
|
864
|
+
interactivity={editable === false ? 'disabled' : 'enabled'}
|
|
865
|
+
autoFocus={autoFocus ? 'focus' : 'none'}
|
|
866
|
+
selectTextOnFocus={selectTextOnFocus ? 'select' : 'keep'}
|
|
867
|
+
autoComplete={autoComplete ?? ''}
|
|
868
|
+
keyboardAppearance={keyboardAppearance ?? 'default'}
|
|
869
|
+
textStyle={nativeTextStyle}
|
|
870
|
+
spokenLabel={accessibilityLabel ?? ''}
|
|
871
|
+
leadingIconTestID={leadingIconTestID ?? ''}
|
|
872
|
+
leadingIconSpokenLabel={leadingIconAccessibilityLabel ?? ''}
|
|
873
|
+
trailingIconTestID={trailingIconTestID ?? ''}
|
|
874
|
+
trailingIconSpokenLabel={trailingIconAccessibilityLabel ?? ''}
|
|
875
|
+
activeColor={activeColor}
|
|
876
|
+
outlineColor={outlineColor}
|
|
877
|
+
errorColor={errorColor}
|
|
878
|
+
containerColor={containerColor}
|
|
879
|
+
textColor={textColor}
|
|
880
|
+
placeholderTextColor={placeholderTextColor}
|
|
881
|
+
maxFontSizeMultiplier={maxFontSizeMultiplier ?? 0}
|
|
882
|
+
textAlign={textAlign ?? ''}
|
|
883
|
+
minLines={minLines ?? 0}
|
|
884
|
+
maxLines={maxLines ?? 0}
|
|
885
|
+
pressMode={pressable ? 'button' : 'none'}
|
|
886
|
+
ios={nativeIOS}
|
|
887
|
+
android={nativeAndroid}
|
|
888
|
+
onFieldChange={handleChange}
|
|
889
|
+
onFieldFocus={handleFocus}
|
|
890
|
+
onFieldBlur={handleBlur}
|
|
891
|
+
onFieldSubmit={onSubmitEditing ? handleSubmit : undefined}
|
|
892
|
+
onFieldSelectionChange={
|
|
893
|
+
onSelectionChange || selection ? handleSelectionChange : undefined
|
|
894
|
+
}
|
|
895
|
+
onKeyboardToolbarPress={
|
|
896
|
+
onToolbarItemPress ? handleToolbarPress : undefined
|
|
897
|
+
}
|
|
898
|
+
onTrailingIconPress={
|
|
899
|
+
onTrailingIconPress ? handleTrailingIconPress : undefined
|
|
900
|
+
}
|
|
901
|
+
onFieldPress={pressable ? handlePress : undefined}
|
|
902
|
+
{...viewProps}
|
|
903
|
+
/>
|
|
904
|
+
);
|
|
905
|
+
}
|
|
906
|
+
);
|
|
907
|
+
|
|
908
|
+
TextField.displayName = 'TextField';
|