react-native-platform-components 1.4.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.
Files changed (598) hide show
  1. package/PlatformComponents.podspec +1 -1
  2. package/README.md +33 -31
  3. package/android/src/main/java/com/platformcomponents/PCButtonGroupView.kt +175 -9
  4. package/android/src/main/java/com/platformcomponents/PCButtonGroupViewManager.kt +52 -2
  5. package/android/src/main/java/com/platformcomponents/PCButtonSupport.kt +44 -12
  6. package/android/src/main/java/com/platformcomponents/PCButtonView.kt +187 -5
  7. package/android/src/main/java/com/platformcomponents/PCButtonViewManager.kt +85 -7
  8. package/android/src/main/java/com/platformcomponents/PCContextMenuView.kt +41 -151
  9. package/android/src/main/java/com/platformcomponents/PCContextMenuViewManager.kt +7 -63
  10. package/android/src/main/java/com/platformcomponents/PCDatePickerView.kt +310 -115
  11. package/android/src/main/java/com/platformcomponents/PCDatePickerViewManager.kt +23 -3
  12. package/android/src/main/java/com/platformcomponents/PCExpressive.kt +6 -1
  13. package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonView.kt +485 -0
  14. package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonViewManager.kt +109 -0
  15. package/android/src/main/java/com/platformcomponents/PCFloatingToolbarView.kt +132 -0
  16. package/android/src/main/java/com/platformcomponents/PCFloatingToolbarViewManager.kt +8 -0
  17. package/android/src/main/java/com/platformcomponents/PCHaptics.kt +46 -0
  18. package/android/src/main/java/com/platformcomponents/PCImageLoader.kt +42 -7
  19. package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerView.kt +32 -0
  20. package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerViewManager.kt +31 -0
  21. package/android/src/main/java/com/platformcomponents/PCLiquidGlassView.kt +32 -6
  22. package/android/src/main/java/com/platformcomponents/PCLiquidGlassViewManager.kt +4 -0
  23. package/android/src/main/java/com/platformcomponents/PCMenuSupport.kt +280 -0
  24. package/android/src/main/java/com/platformcomponents/PCNavigationBarSupport.kt +332 -0
  25. package/android/src/main/java/com/platformcomponents/PCNavigationRailView.kt +448 -0
  26. package/android/src/main/java/com/platformcomponents/PCNavigationRailViewManager.kt +176 -0
  27. package/android/src/main/java/com/platformcomponents/PCSegmentedControlView.kt +24 -14
  28. package/android/src/main/java/com/platformcomponents/PCSegmentedControlViewManager.kt +14 -2
  29. package/android/src/main/java/com/platformcomponents/PCSelectionMenuView.kt +371 -39
  30. package/android/src/main/java/com/platformcomponents/PCSelectionMenuViewManager.kt +18 -4
  31. package/android/src/main/java/com/platformcomponents/PCTabBarView.kt +397 -0
  32. package/android/src/main/java/com/platformcomponents/PCTabBarViewManager.kt +182 -0
  33. package/android/src/main/java/com/platformcomponents/PCTextFieldView.kt +415 -40
  34. package/android/src/main/java/com/platformcomponents/PCTextFieldViewManager.kt +109 -3
  35. package/android/src/main/java/com/platformcomponents/PCThemeSupport.kt +37 -0
  36. package/android/src/main/java/com/platformcomponents/PlatformComponentsPackage.kt +4 -0
  37. package/android/src/main/res/drawable/pc_ic_search.xml +12 -0
  38. package/android/src/main/res/values/ids.xml +5 -0
  39. package/android/src/main/res/values/styles.xml +24 -0
  40. package/ios/PCButton.mm +122 -7
  41. package/ios/PCButtonGroup.mm +68 -1
  42. package/ios/PCButtonGroupView.swift +225 -6
  43. package/ios/PCButtonSupport.swift +181 -10
  44. package/ios/PCButtonView.swift +297 -14
  45. package/ios/PCConstants.swift +23 -2
  46. package/ios/PCContextMenu.mm +28 -110
  47. package/ios/PCContextMenu.swift +106 -167
  48. package/ios/PCDatePicker.mm +21 -9
  49. package/ios/PCDatePickerView.swift +94 -20
  50. package/ios/PCFloatingActionButton.h +10 -0
  51. package/ios/PCFloatingActionButton.mm +177 -0
  52. package/ios/PCFloatingActionButtonView.swift +426 -0
  53. package/ios/PCFloatingToolbar.mm +27 -0
  54. package/ios/PCFloatingToolbarView.swift +241 -0
  55. package/ios/PCHaptics.swift +91 -0
  56. package/ios/PCImageLoader.swift +76 -12
  57. package/ios/PCLiquidGlass.mm +36 -0
  58. package/ios/PCLiquidGlass.swift +221 -114
  59. package/ios/PCLiquidGlassContainer.h +10 -0
  60. package/ios/PCLiquidGlassContainer.mm +84 -0
  61. package/ios/PCLiquidGlassContainer.swift +69 -0
  62. package/ios/PCMenuItems.h +76 -0
  63. package/ios/PCMenuSupport.swift +350 -0
  64. package/ios/PCNavigationRail.h +10 -0
  65. package/ios/PCNavigationRail.mm +270 -0
  66. package/ios/PCNavigationRailView.swift +415 -0
  67. package/ios/PCSegmentedControl.mm +17 -2
  68. package/ios/PCSegmentedControl.swift +57 -7
  69. package/ios/PCSelectionMenu.mm +36 -8
  70. package/ios/PCSelectionMenu.swift +224 -48
  71. package/ios/PCTabBar.h +10 -0
  72. package/ios/PCTabBar.mm +285 -0
  73. package/ios/PCTabBarAccessory.h +10 -0
  74. package/ios/PCTabBarAccessory.mm +93 -0
  75. package/ios/PCTabBarAccessoryView.swift +96 -0
  76. package/ios/PCTabBarView.swift +671 -0
  77. package/ios/PCTextField.mm +159 -4
  78. package/ios/PCTextFieldView.swift +603 -57
  79. package/lib/commonjs/Button.js +73 -1
  80. package/lib/commonjs/Button.js.map +1 -1
  81. package/lib/commonjs/ButtonGroup.js +13 -3
  82. package/lib/commonjs/ButtonGroup.js.map +1 -1
  83. package/lib/commonjs/ButtonGroupNativeComponent.ts +74 -4
  84. package/lib/commonjs/ButtonNativeComponent.ts +119 -3
  85. package/lib/commonjs/ContextMenu.js +9 -48
  86. package/lib/commonjs/ContextMenu.js.map +1 -1
  87. package/lib/commonjs/ContextMenuNativeComponent.ts +47 -49
  88. package/lib/commonjs/DatePicker.js +98 -2
  89. package/lib/commonjs/DatePicker.js.map +1 -1
  90. package/lib/commonjs/DatePickerNativeComponent.ts +19 -2
  91. package/lib/commonjs/FloatingActionButton.js +60 -0
  92. package/lib/commonjs/FloatingActionButton.js.map +1 -0
  93. package/lib/commonjs/FloatingActionButtonNativeComponent.ts +58 -0
  94. package/lib/commonjs/FloatingToolbar.js +9 -1
  95. package/lib/commonjs/FloatingToolbar.js.map +1 -1
  96. package/lib/commonjs/FloatingToolbarNativeComponent.ts +16 -0
  97. package/lib/commonjs/LiquidGlass.js +7 -1
  98. package/lib/commonjs/LiquidGlass.js.map +1 -1
  99. package/lib/commonjs/LiquidGlassContainer.js +32 -0
  100. package/lib/commonjs/LiquidGlassContainer.js.map +1 -0
  101. package/lib/commonjs/LiquidGlassContainerNativeComponent.ts +17 -0
  102. package/lib/commonjs/LiquidGlassNativeComponent.ts +8 -0
  103. package/lib/commonjs/NavigationRail.js +104 -0
  104. package/lib/commonjs/NavigationRail.js.map +1 -0
  105. package/lib/commonjs/NavigationRailNativeComponent.ts +107 -0
  106. package/lib/commonjs/PlatformComponentsProvider.js +18 -0
  107. package/lib/commonjs/PlatformComponentsProvider.js.map +1 -0
  108. package/lib/commonjs/SegmentedControl.js +7 -0
  109. package/lib/commonjs/SegmentedControl.js.map +1 -1
  110. package/lib/commonjs/SegmentedControlNativeComponent.ts +11 -0
  111. package/lib/commonjs/SelectionMenu.js +27 -3
  112. package/lib/commonjs/SelectionMenu.js.map +1 -1
  113. package/lib/commonjs/SelectionMenuNativeComponent.ts +26 -4
  114. package/lib/commonjs/SplitButton.js +98 -0
  115. package/lib/commonjs/SplitButton.js.map +1 -0
  116. package/lib/commonjs/TabBar.js +203 -0
  117. package/lib/commonjs/TabBar.js.map +1 -0
  118. package/lib/commonjs/TabBarAccessoryNativeComponent.ts +19 -0
  119. package/lib/commonjs/TabBarNativeComponent.ts +145 -0
  120. package/lib/commonjs/TextField.js +171 -8
  121. package/lib/commonjs/TextField.js.map +1 -1
  122. package/lib/commonjs/TextFieldNativeComponent.ts +110 -4
  123. package/lib/commonjs/focusRegistry.js +2 -1
  124. package/lib/commonjs/focusRegistry.js.map +1 -1
  125. package/lib/commonjs/haptics.js +2 -0
  126. package/lib/commonjs/haptics.js.map +1 -0
  127. package/lib/commonjs/icons.js +15 -1
  128. package/lib/commonjs/icons.js.map +1 -1
  129. package/lib/commonjs/index.js +77 -0
  130. package/lib/commonjs/index.js.map +1 -1
  131. package/lib/commonjs/index.web.js +156 -92
  132. package/lib/commonjs/index.web.js.map +1 -1
  133. package/lib/commonjs/jest.js +910 -0
  134. package/lib/commonjs/jest.js.map +1 -0
  135. package/lib/commonjs/menuItems.js +68 -0
  136. package/lib/commonjs/menuItems.js.map +1 -0
  137. package/lib/commonjs/selectionIdentifiers.js +18 -0
  138. package/lib/commonjs/selectionIdentifiers.js.map +1 -0
  139. package/lib/commonjs/submitBehavior.js +19 -0
  140. package/lib/commonjs/submitBehavior.js.map +1 -0
  141. package/lib/commonjs/tabItems.js +49 -0
  142. package/lib/commonjs/tabItems.js.map +1 -0
  143. package/lib/commonjs/web/Button.js +170 -0
  144. package/lib/commonjs/web/Button.js.map +1 -0
  145. package/lib/commonjs/web/ButtonGroup.js +119 -0
  146. package/lib/commonjs/web/ButtonGroup.js.map +1 -0
  147. package/lib/commonjs/web/DatePicker.js +168 -0
  148. package/lib/commonjs/web/DatePicker.js.map +1 -0
  149. package/lib/commonjs/web/DateRangePicker.js +137 -0
  150. package/lib/commonjs/web/DateRangePicker.js.map +1 -0
  151. package/lib/commonjs/web/Dialog.js +54 -0
  152. package/lib/commonjs/web/Dialog.js.map +1 -0
  153. package/lib/commonjs/web/FloatingActionButton.js +98 -0
  154. package/lib/commonjs/web/FloatingActionButton.js.map +1 -0
  155. package/lib/commonjs/web/Icon.js +34 -0
  156. package/lib/commonjs/web/Icon.js.map +1 -0
  157. package/lib/commonjs/web/NativeTheme.js +28 -0
  158. package/lib/commonjs/web/NativeTheme.js.map +1 -0
  159. package/lib/commonjs/web/NavigationRail.js +139 -0
  160. package/lib/commonjs/web/NavigationRail.js.map +1 -0
  161. package/lib/commonjs/web/PlatformComponentsProvider.js +51 -0
  162. package/lib/commonjs/web/PlatformComponentsProvider.js.map +1 -0
  163. package/lib/commonjs/web/SegmentedControl.js +117 -0
  164. package/lib/commonjs/web/SegmentedControl.js.map +1 -0
  165. package/lib/commonjs/web/SelectionMenu.js +142 -0
  166. package/lib/commonjs/web/SelectionMenu.js.map +1 -0
  167. package/lib/commonjs/web/SplitButton.js +35 -0
  168. package/lib/commonjs/web/SplitButton.js.map +1 -0
  169. package/lib/commonjs/web/TabBar.js +131 -0
  170. package/lib/commonjs/web/TabBar.js.map +1 -0
  171. package/lib/commonjs/web/TextField.js +322 -0
  172. package/lib/commonjs/web/TextField.js.map +1 -0
  173. package/lib/commonjs/web/components.js +36 -0
  174. package/lib/commonjs/web/components.js.map +1 -0
  175. package/lib/commonjs/web/containers.js +121 -0
  176. package/lib/commonjs/web/containers.js.map +1 -0
  177. package/lib/commonjs/web/dateInput.js +116 -0
  178. package/lib/commonjs/web/dateInput.js.map +1 -0
  179. package/lib/commonjs/web/shared.js +192 -0
  180. package/lib/commonjs/web/shared.js.map +1 -0
  181. package/lib/commonjs/webComponents.js +6 -0
  182. package/lib/commonjs/webComponents.js.map +1 -0
  183. package/lib/module/Button.js +74 -2
  184. package/lib/module/Button.js.map +1 -1
  185. package/lib/module/ButtonGroup.js +13 -3
  186. package/lib/module/ButtonGroup.js.map +1 -1
  187. package/lib/module/ButtonGroupNativeComponent.ts +74 -4
  188. package/lib/module/ButtonNativeComponent.ts +119 -3
  189. package/lib/module/ContextMenu.js +9 -48
  190. package/lib/module/ContextMenu.js.map +1 -1
  191. package/lib/module/ContextMenuNativeComponent.ts +47 -49
  192. package/lib/module/DatePicker.js +98 -4
  193. package/lib/module/DatePicker.js.map +1 -1
  194. package/lib/module/DatePickerNativeComponent.ts +19 -2
  195. package/lib/module/FloatingActionButton.js +53 -0
  196. package/lib/module/FloatingActionButton.js.map +1 -0
  197. package/lib/module/FloatingActionButtonNativeComponent.ts +58 -0
  198. package/lib/module/FloatingToolbar.js +9 -1
  199. package/lib/module/FloatingToolbar.js.map +1 -1
  200. package/lib/module/FloatingToolbarNativeComponent.ts +16 -0
  201. package/lib/module/LiquidGlass.js +7 -1
  202. package/lib/module/LiquidGlass.js.map +1 -1
  203. package/lib/module/LiquidGlassContainer.js +26 -0
  204. package/lib/module/LiquidGlassContainer.js.map +1 -0
  205. package/lib/module/LiquidGlassContainerNativeComponent.ts +17 -0
  206. package/lib/module/LiquidGlassNativeComponent.ts +8 -0
  207. package/lib/module/NavigationRail.js +99 -0
  208. package/lib/module/NavigationRail.js.map +1 -0
  209. package/lib/module/NavigationRailNativeComponent.ts +107 -0
  210. package/lib/module/PlatformComponentsProvider.js +13 -0
  211. package/lib/module/PlatformComponentsProvider.js.map +1 -0
  212. package/lib/module/SegmentedControl.js +9 -1
  213. package/lib/module/SegmentedControl.js.map +1 -1
  214. package/lib/module/SegmentedControlNativeComponent.ts +11 -0
  215. package/lib/module/SelectionMenu.js +27 -3
  216. package/lib/module/SelectionMenu.js.map +1 -1
  217. package/lib/module/SelectionMenuNativeComponent.ts +26 -4
  218. package/lib/module/SplitButton.js +91 -0
  219. package/lib/module/SplitButton.js.map +1 -0
  220. package/lib/module/TabBar.js +196 -0
  221. package/lib/module/TabBar.js.map +1 -0
  222. package/lib/module/TabBarAccessoryNativeComponent.ts +19 -0
  223. package/lib/module/TabBarNativeComponent.ts +145 -0
  224. package/lib/module/TextField.js +172 -9
  225. package/lib/module/TextField.js.map +1 -1
  226. package/lib/module/TextFieldNativeComponent.ts +110 -4
  227. package/lib/module/focusRegistry.js +1 -0
  228. package/lib/module/focusRegistry.js.map +1 -1
  229. package/lib/module/haptics.js +2 -0
  230. package/lib/module/haptics.js.map +1 -0
  231. package/lib/module/icons.js +15 -1
  232. package/lib/module/icons.js.map +1 -1
  233. package/lib/module/index.js +7 -0
  234. package/lib/module/index.js.map +1 -1
  235. package/lib/module/index.web.js +12 -87
  236. package/lib/module/index.web.js.map +1 -1
  237. package/lib/module/jest.js +840 -0
  238. package/lib/module/jest.js.map +1 -0
  239. package/lib/module/menuItems.js +65 -0
  240. package/lib/module/menuItems.js.map +1 -0
  241. package/lib/module/selectionIdentifiers.js +14 -0
  242. package/lib/module/selectionIdentifiers.js.map +1 -0
  243. package/lib/module/submitBehavior.js +15 -0
  244. package/lib/module/submitBehavior.js.map +1 -0
  245. package/lib/module/tabItems.js +45 -0
  246. package/lib/module/tabItems.js.map +1 -0
  247. package/lib/module/web/Button.js +164 -0
  248. package/lib/module/web/Button.js.map +1 -0
  249. package/lib/module/web/ButtonGroup.js +113 -0
  250. package/lib/module/web/ButtonGroup.js.map +1 -0
  251. package/lib/module/web/DatePicker.js +162 -0
  252. package/lib/module/web/DatePicker.js.map +1 -0
  253. package/lib/module/web/DateRangePicker.js +131 -0
  254. package/lib/module/web/DateRangePicker.js.map +1 -0
  255. package/lib/module/web/Dialog.js +48 -0
  256. package/lib/module/web/Dialog.js.map +1 -0
  257. package/lib/module/web/FloatingActionButton.js +94 -0
  258. package/lib/module/web/FloatingActionButton.js.map +1 -0
  259. package/lib/module/web/Icon.js +29 -0
  260. package/lib/module/web/Icon.js.map +1 -0
  261. package/lib/module/web/NativeTheme.js +23 -0
  262. package/lib/module/web/NativeTheme.js.map +1 -0
  263. package/lib/module/web/NavigationRail.js +133 -0
  264. package/lib/module/web/NavigationRail.js.map +1 -0
  265. package/lib/module/web/PlatformComponentsProvider.js +44 -0
  266. package/lib/module/web/PlatformComponentsProvider.js.map +1 -0
  267. package/lib/module/web/SegmentedControl.js +112 -0
  268. package/lib/module/web/SegmentedControl.js.map +1 -0
  269. package/lib/module/web/SelectionMenu.js +137 -0
  270. package/lib/module/web/SelectionMenu.js.map +1 -0
  271. package/lib/module/web/SplitButton.js +30 -0
  272. package/lib/module/web/SplitButton.js.map +1 -0
  273. package/lib/module/web/TabBar.js +126 -0
  274. package/lib/module/web/TabBar.js.map +1 -0
  275. package/lib/module/web/TextField.js +316 -0
  276. package/lib/module/web/TextField.js.map +1 -0
  277. package/lib/module/web/components.js +33 -0
  278. package/lib/module/web/components.js.map +1 -0
  279. package/lib/module/web/containers.js +112 -0
  280. package/lib/module/web/containers.js.map +1 -0
  281. package/lib/module/web/dateInput.js +109 -0
  282. package/lib/module/web/dateInput.js.map +1 -0
  283. package/lib/module/web/shared.js +179 -0
  284. package/lib/module/web/shared.js.map +1 -0
  285. package/lib/module/webComponents.js +4 -0
  286. package/lib/module/webComponents.js.map +1 -0
  287. package/lib/typescript/commonjs/docs/sidebars.d.ts.map +1 -1
  288. package/lib/typescript/commonjs/src/Button.d.ts +111 -3
  289. package/lib/typescript/commonjs/src/Button.d.ts.map +1 -1
  290. package/lib/typescript/commonjs/src/ButtonGroup.d.ts +21 -6
  291. package/lib/typescript/commonjs/src/ButtonGroup.d.ts.map +1 -1
  292. package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts +64 -3
  293. package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts.map +1 -1
  294. package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts +94 -3
  295. package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts.map +1 -1
  296. package/lib/typescript/commonjs/src/ContextMenu.d.ts +20 -33
  297. package/lib/typescript/commonjs/src/ContextMenu.d.ts.map +1 -1
  298. package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts +45 -47
  299. package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts.map +1 -1
  300. package/lib/typescript/commonjs/src/DatePicker.d.ts +74 -1
  301. package/lib/typescript/commonjs/src/DatePicker.d.ts.map +1 -1
  302. package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts +16 -1
  303. package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts.map +1 -1
  304. package/lib/typescript/commonjs/src/FloatingActionButton.d.ts +67 -0
  305. package/lib/typescript/commonjs/src/FloatingActionButton.d.ts.map +1 -0
  306. package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts +43 -0
  307. package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
  308. package/lib/typescript/commonjs/src/FloatingToolbar.d.ts +30 -0
  309. package/lib/typescript/commonjs/src/FloatingToolbar.d.ts.map +1 -1
  310. package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts +12 -0
  311. package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
  312. package/lib/typescript/commonjs/src/LiquidGlass.d.ts +17 -0
  313. package/lib/typescript/commonjs/src/LiquidGlass.d.ts.map +1 -1
  314. package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts +27 -0
  315. package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts.map +1 -0
  316. package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
  317. package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
  318. package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts +7 -0
  319. package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts.map +1 -1
  320. package/lib/typescript/commonjs/src/NavigationRail.d.ts +86 -0
  321. package/lib/typescript/commonjs/src/NavigationRail.d.ts.map +1 -0
  322. package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts +81 -0
  323. package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts.map +1 -0
  324. package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts +6 -0
  325. package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts.map +1 -0
  326. package/lib/typescript/commonjs/src/SegmentedControl.d.ts +18 -1
  327. package/lib/typescript/commonjs/src/SegmentedControl.d.ts.map +1 -1
  328. package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts +9 -0
  329. package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts.map +1 -1
  330. package/lib/typescript/commonjs/src/SelectionMenu.d.ts +44 -2
  331. package/lib/typescript/commonjs/src/SelectionMenu.d.ts.map +1 -1
  332. package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts +20 -4
  333. package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts.map +1 -1
  334. package/lib/typescript/commonjs/src/SplitButton.d.ts +83 -0
  335. package/lib/typescript/commonjs/src/SplitButton.d.ts.map +1 -0
  336. package/lib/typescript/commonjs/src/TabBar.d.ts +144 -0
  337. package/lib/typescript/commonjs/src/TabBar.d.ts.map +1 -0
  338. package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts +13 -0
  339. package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
  340. package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts +110 -0
  341. package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts.map +1 -0
  342. package/lib/typescript/commonjs/src/TextField.d.ts +166 -8
  343. package/lib/typescript/commonjs/src/TextField.d.ts.map +1 -1
  344. package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts +81 -3
  345. package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts.map +1 -1
  346. package/lib/typescript/commonjs/src/focusRegistry.d.ts.map +1 -1
  347. package/lib/typescript/commonjs/src/haptics.d.ts +20 -0
  348. package/lib/typescript/commonjs/src/haptics.d.ts.map +1 -0
  349. package/lib/typescript/commonjs/src/icons.d.ts +7 -1
  350. package/lib/typescript/commonjs/src/icons.d.ts.map +1 -1
  351. package/lib/typescript/commonjs/src/index.d.ts +7 -0
  352. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  353. package/lib/typescript/commonjs/src/index.web.d.ts +25 -254
  354. package/lib/typescript/commonjs/src/index.web.d.ts.map +1 -1
  355. package/lib/typescript/commonjs/src/jest.d.ts +139 -0
  356. package/lib/typescript/commonjs/src/jest.d.ts.map +1 -0
  357. package/lib/typescript/commonjs/src/menuItems.d.ts +100 -0
  358. package/lib/typescript/commonjs/src/menuItems.d.ts.map +1 -0
  359. package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts +3 -0
  360. package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts.map +1 -0
  361. package/lib/typescript/commonjs/src/submitBehavior.d.ts +9 -0
  362. package/lib/typescript/commonjs/src/submitBehavior.d.ts.map +1 -0
  363. package/lib/typescript/commonjs/src/tabItems.d.ts +55 -0
  364. package/lib/typescript/commonjs/src/tabItems.d.ts.map +1 -0
  365. package/lib/typescript/commonjs/src/web/Button.d.ts +9 -0
  366. package/lib/typescript/commonjs/src/web/Button.d.ts.map +1 -0
  367. package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts +11 -0
  368. package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts.map +1 -0
  369. package/lib/typescript/commonjs/src/web/DatePicker.d.ts +14 -0
  370. package/lib/typescript/commonjs/src/web/DatePicker.d.ts.map +1 -0
  371. package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts +11 -0
  372. package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts.map +1 -0
  373. package/lib/typescript/commonjs/src/web/Dialog.d.ts +12 -0
  374. package/lib/typescript/commonjs/src/web/Dialog.d.ts.map +1 -0
  375. package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts +8 -0
  376. package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts.map +1 -0
  377. package/lib/typescript/commonjs/src/web/Icon.d.ts +12 -0
  378. package/lib/typescript/commonjs/src/web/Icon.d.ts.map +1 -0
  379. package/lib/typescript/commonjs/src/web/NativeTheme.d.ts +10 -0
  380. package/lib/typescript/commonjs/src/web/NativeTheme.d.ts.map +1 -0
  381. package/lib/typescript/commonjs/src/web/NavigationRail.d.ts +8 -0
  382. package/lib/typescript/commonjs/src/web/NavigationRail.d.ts.map +1 -0
  383. package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts +10 -0
  384. package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts.map +1 -0
  385. package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts +8 -0
  386. package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts.map +1 -0
  387. package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts +10 -0
  388. package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts.map +1 -0
  389. package/lib/typescript/commonjs/src/web/SplitButton.d.ts +9 -0
  390. package/lib/typescript/commonjs/src/web/SplitButton.d.ts.map +1 -0
  391. package/lib/typescript/commonjs/src/web/TabBar.d.ts +9 -0
  392. package/lib/typescript/commonjs/src/web/TabBar.d.ts.map +1 -0
  393. package/lib/typescript/commonjs/src/web/TextField.d.ts +9 -0
  394. package/lib/typescript/commonjs/src/web/TextField.d.ts.map +1 -0
  395. package/lib/typescript/commonjs/src/web/components.d.ts +17 -0
  396. package/lib/typescript/commonjs/src/web/components.d.ts.map +1 -0
  397. package/lib/typescript/commonjs/src/web/containers.d.ts +24 -0
  398. package/lib/typescript/commonjs/src/web/containers.d.ts.map +1 -0
  399. package/lib/typescript/commonjs/src/web/dateInput.d.ts +20 -0
  400. package/lib/typescript/commonjs/src/web/dateInput.d.ts.map +1 -0
  401. package/lib/typescript/commonjs/src/web/shared.d.ts +43 -0
  402. package/lib/typescript/commonjs/src/web/shared.d.ts.map +1 -0
  403. package/lib/typescript/commonjs/src/webComponents.d.ts +43 -0
  404. package/lib/typescript/commonjs/src/webComponents.d.ts.map +1 -0
  405. package/lib/typescript/module/docs/sidebars.d.ts.map +1 -1
  406. package/lib/typescript/module/src/Button.d.ts +111 -3
  407. package/lib/typescript/module/src/Button.d.ts.map +1 -1
  408. package/lib/typescript/module/src/ButtonGroup.d.ts +21 -6
  409. package/lib/typescript/module/src/ButtonGroup.d.ts.map +1 -1
  410. package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts +64 -3
  411. package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts.map +1 -1
  412. package/lib/typescript/module/src/ButtonNativeComponent.d.ts +94 -3
  413. package/lib/typescript/module/src/ButtonNativeComponent.d.ts.map +1 -1
  414. package/lib/typescript/module/src/ContextMenu.d.ts +20 -33
  415. package/lib/typescript/module/src/ContextMenu.d.ts.map +1 -1
  416. package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts +45 -47
  417. package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts.map +1 -1
  418. package/lib/typescript/module/src/DatePicker.d.ts +74 -1
  419. package/lib/typescript/module/src/DatePicker.d.ts.map +1 -1
  420. package/lib/typescript/module/src/DatePickerNativeComponent.d.ts +16 -1
  421. package/lib/typescript/module/src/DatePickerNativeComponent.d.ts.map +1 -1
  422. package/lib/typescript/module/src/FloatingActionButton.d.ts +67 -0
  423. package/lib/typescript/module/src/FloatingActionButton.d.ts.map +1 -0
  424. package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts +43 -0
  425. package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
  426. package/lib/typescript/module/src/FloatingToolbar.d.ts +30 -0
  427. package/lib/typescript/module/src/FloatingToolbar.d.ts.map +1 -1
  428. package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts +12 -0
  429. package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
  430. package/lib/typescript/module/src/LiquidGlass.d.ts +17 -0
  431. package/lib/typescript/module/src/LiquidGlass.d.ts.map +1 -1
  432. package/lib/typescript/module/src/LiquidGlassContainer.d.ts +27 -0
  433. package/lib/typescript/module/src/LiquidGlassContainer.d.ts.map +1 -0
  434. package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
  435. package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
  436. package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts +7 -0
  437. package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts.map +1 -1
  438. package/lib/typescript/module/src/NavigationRail.d.ts +86 -0
  439. package/lib/typescript/module/src/NavigationRail.d.ts.map +1 -0
  440. package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts +81 -0
  441. package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts.map +1 -0
  442. package/lib/typescript/module/src/PlatformComponentsProvider.d.ts +6 -0
  443. package/lib/typescript/module/src/PlatformComponentsProvider.d.ts.map +1 -0
  444. package/lib/typescript/module/src/SegmentedControl.d.ts +18 -1
  445. package/lib/typescript/module/src/SegmentedControl.d.ts.map +1 -1
  446. package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts +9 -0
  447. package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts.map +1 -1
  448. package/lib/typescript/module/src/SelectionMenu.d.ts +44 -2
  449. package/lib/typescript/module/src/SelectionMenu.d.ts.map +1 -1
  450. package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts +20 -4
  451. package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts.map +1 -1
  452. package/lib/typescript/module/src/SplitButton.d.ts +83 -0
  453. package/lib/typescript/module/src/SplitButton.d.ts.map +1 -0
  454. package/lib/typescript/module/src/TabBar.d.ts +144 -0
  455. package/lib/typescript/module/src/TabBar.d.ts.map +1 -0
  456. package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts +13 -0
  457. package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
  458. package/lib/typescript/module/src/TabBarNativeComponent.d.ts +110 -0
  459. package/lib/typescript/module/src/TabBarNativeComponent.d.ts.map +1 -0
  460. package/lib/typescript/module/src/TextField.d.ts +166 -8
  461. package/lib/typescript/module/src/TextField.d.ts.map +1 -1
  462. package/lib/typescript/module/src/TextFieldNativeComponent.d.ts +81 -3
  463. package/lib/typescript/module/src/TextFieldNativeComponent.d.ts.map +1 -1
  464. package/lib/typescript/module/src/focusRegistry.d.ts.map +1 -1
  465. package/lib/typescript/module/src/haptics.d.ts +20 -0
  466. package/lib/typescript/module/src/haptics.d.ts.map +1 -0
  467. package/lib/typescript/module/src/icons.d.ts +7 -1
  468. package/lib/typescript/module/src/icons.d.ts.map +1 -1
  469. package/lib/typescript/module/src/index.d.ts +7 -0
  470. package/lib/typescript/module/src/index.d.ts.map +1 -1
  471. package/lib/typescript/module/src/index.web.d.ts +25 -254
  472. package/lib/typescript/module/src/index.web.d.ts.map +1 -1
  473. package/lib/typescript/module/src/jest.d.ts +139 -0
  474. package/lib/typescript/module/src/jest.d.ts.map +1 -0
  475. package/lib/typescript/module/src/menuItems.d.ts +100 -0
  476. package/lib/typescript/module/src/menuItems.d.ts.map +1 -0
  477. package/lib/typescript/module/src/selectionIdentifiers.d.ts +3 -0
  478. package/lib/typescript/module/src/selectionIdentifiers.d.ts.map +1 -0
  479. package/lib/typescript/module/src/submitBehavior.d.ts +9 -0
  480. package/lib/typescript/module/src/submitBehavior.d.ts.map +1 -0
  481. package/lib/typescript/module/src/tabItems.d.ts +55 -0
  482. package/lib/typescript/module/src/tabItems.d.ts.map +1 -0
  483. package/lib/typescript/module/src/web/Button.d.ts +9 -0
  484. package/lib/typescript/module/src/web/Button.d.ts.map +1 -0
  485. package/lib/typescript/module/src/web/ButtonGroup.d.ts +11 -0
  486. package/lib/typescript/module/src/web/ButtonGroup.d.ts.map +1 -0
  487. package/lib/typescript/module/src/web/DatePicker.d.ts +14 -0
  488. package/lib/typescript/module/src/web/DatePicker.d.ts.map +1 -0
  489. package/lib/typescript/module/src/web/DateRangePicker.d.ts +11 -0
  490. package/lib/typescript/module/src/web/DateRangePicker.d.ts.map +1 -0
  491. package/lib/typescript/module/src/web/Dialog.d.ts +12 -0
  492. package/lib/typescript/module/src/web/Dialog.d.ts.map +1 -0
  493. package/lib/typescript/module/src/web/FloatingActionButton.d.ts +8 -0
  494. package/lib/typescript/module/src/web/FloatingActionButton.d.ts.map +1 -0
  495. package/lib/typescript/module/src/web/Icon.d.ts +12 -0
  496. package/lib/typescript/module/src/web/Icon.d.ts.map +1 -0
  497. package/lib/typescript/module/src/web/NativeTheme.d.ts +10 -0
  498. package/lib/typescript/module/src/web/NativeTheme.d.ts.map +1 -0
  499. package/lib/typescript/module/src/web/NavigationRail.d.ts +8 -0
  500. package/lib/typescript/module/src/web/NavigationRail.d.ts.map +1 -0
  501. package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts +10 -0
  502. package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts.map +1 -0
  503. package/lib/typescript/module/src/web/SegmentedControl.d.ts +8 -0
  504. package/lib/typescript/module/src/web/SegmentedControl.d.ts.map +1 -0
  505. package/lib/typescript/module/src/web/SelectionMenu.d.ts +10 -0
  506. package/lib/typescript/module/src/web/SelectionMenu.d.ts.map +1 -0
  507. package/lib/typescript/module/src/web/SplitButton.d.ts +9 -0
  508. package/lib/typescript/module/src/web/SplitButton.d.ts.map +1 -0
  509. package/lib/typescript/module/src/web/TabBar.d.ts +9 -0
  510. package/lib/typescript/module/src/web/TabBar.d.ts.map +1 -0
  511. package/lib/typescript/module/src/web/TextField.d.ts +9 -0
  512. package/lib/typescript/module/src/web/TextField.d.ts.map +1 -0
  513. package/lib/typescript/module/src/web/components.d.ts +17 -0
  514. package/lib/typescript/module/src/web/components.d.ts.map +1 -0
  515. package/lib/typescript/module/src/web/containers.d.ts +24 -0
  516. package/lib/typescript/module/src/web/containers.d.ts.map +1 -0
  517. package/lib/typescript/module/src/web/dateInput.d.ts +20 -0
  518. package/lib/typescript/module/src/web/dateInput.d.ts.map +1 -0
  519. package/lib/typescript/module/src/web/shared.d.ts +43 -0
  520. package/lib/typescript/module/src/web/shared.d.ts.map +1 -0
  521. package/lib/typescript/module/src/webComponents.d.ts +43 -0
  522. package/lib/typescript/module/src/webComponents.d.ts.map +1 -0
  523. package/package.json +32 -2
  524. package/plugin/build/index.d.ts +3 -2
  525. package/plugin/build/index.d.ts.map +1 -1
  526. package/react-native.config.js +3 -0
  527. package/shared/PCFloatingActionButtonComponentDescriptors-custom.h +22 -0
  528. package/shared/PCFloatingActionButtonShadowNode-custom.cpp +48 -0
  529. package/shared/PCFloatingActionButtonShadowNode-custom.h +54 -0
  530. package/shared/PCFloatingActionButtonState-custom.h +61 -0
  531. package/shared/PCNavigationRailComponentDescriptors-custom.h +47 -0
  532. package/shared/PCNavigationRailShadowNode-custom.h +42 -0
  533. package/shared/PCNavigationRailState-custom.h +62 -0
  534. package/shared/PCTabBarComponentDescriptors-custom.h +22 -0
  535. package/shared/PCTabBarShadowNode-custom.cpp +54 -0
  536. package/shared/PCTabBarShadowNode-custom.h +54 -0
  537. package/shared/PCTabBarState-custom.h +62 -0
  538. package/shared/react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h +3 -0
  539. package/src/Button.tsx +222 -7
  540. package/src/ButtonGroup.tsx +29 -11
  541. package/src/ButtonGroupNativeComponent.ts +74 -4
  542. package/src/ButtonNativeComponent.ts +119 -3
  543. package/src/ContextMenu.tsx +34 -81
  544. package/src/ContextMenuNativeComponent.ts +47 -49
  545. package/src/DatePicker.tsx +182 -4
  546. package/src/DatePickerNativeComponent.ts +19 -2
  547. package/src/FloatingActionButton.tsx +121 -0
  548. package/src/FloatingActionButtonNativeComponent.ts +58 -0
  549. package/src/FloatingToolbar.tsx +54 -3
  550. package/src/FloatingToolbarNativeComponent.ts +16 -0
  551. package/src/LiquidGlass.tsx +24 -1
  552. package/src/LiquidGlassContainer.tsx +42 -0
  553. package/src/LiquidGlassContainerNativeComponent.ts +17 -0
  554. package/src/LiquidGlassNativeComponent.ts +8 -0
  555. package/src/NavigationRail.tsx +203 -0
  556. package/src/NavigationRailNativeComponent.ts +107 -0
  557. package/src/PlatformComponentsProvider.tsx +15 -0
  558. package/src/SegmentedControl.tsx +31 -1
  559. package/src/SegmentedControlNativeComponent.ts +11 -0
  560. package/src/SelectionMenu.tsx +81 -6
  561. package/src/SelectionMenuNativeComponent.ts +26 -4
  562. package/src/SplitButton.tsx +198 -0
  563. package/src/TabBar.tsx +373 -0
  564. package/src/TabBarAccessoryNativeComponent.ts +19 -0
  565. package/src/TabBarNativeComponent.ts +145 -0
  566. package/src/TextField.tsx +428 -14
  567. package/src/TextFieldNativeComponent.ts +110 -4
  568. package/src/focusRegistry.ts +1 -0
  569. package/src/haptics.ts +31 -0
  570. package/src/icons.ts +28 -1
  571. package/src/index.tsx +7 -0
  572. package/src/index.web.tsx +51 -391
  573. package/src/jest.tsx +958 -0
  574. package/src/menuItems.ts +152 -0
  575. package/src/selectionIdentifiers.ts +17 -0
  576. package/src/submitBehavior.ts +16 -0
  577. package/src/tabItems.ts +113 -0
  578. package/src/web/Button.tsx +201 -0
  579. package/src/web/ButtonGroup.tsx +154 -0
  580. package/src/web/DatePicker.tsx +204 -0
  581. package/src/web/DateRangePicker.tsx +135 -0
  582. package/src/web/Dialog.tsx +54 -0
  583. package/src/web/FloatingActionButton.tsx +76 -0
  584. package/src/web/Icon.tsx +33 -0
  585. package/src/web/NativeTheme.ts +23 -0
  586. package/src/web/NavigationRail.tsx +148 -0
  587. package/src/web/PlatformComponentsProvider.tsx +48 -0
  588. package/src/web/SegmentedControl.tsx +127 -0
  589. package/src/web/SelectionMenu.tsx +149 -0
  590. package/src/web/SplitButton.tsx +32 -0
  591. package/src/web/TabBar.tsx +150 -0
  592. package/src/web/TextField.tsx +361 -0
  593. package/src/web/components.tsx +71 -0
  594. package/src/web/containers.tsx +130 -0
  595. package/src/web/dateInput.ts +137 -0
  596. package/src/web/shared.ts +176 -0
  597. package/src/webComponents.ts +45 -0
  598. package/android/src/main/java/com/platformcomponents/DateConstraints.kt +0 -83
package/src/TextField.tsx CHANGED
@@ -8,16 +8,20 @@ import React, {
8
8
  useRef,
9
9
  useState,
10
10
  } from 'react';
11
- import type { NativeSyntheticEvent, ViewProps } from 'react-native';
11
+ import type { ColorValue, NativeSyntheticEvent, ViewProps } from 'react-native';
12
12
 
13
13
  import NativeTextField, {
14
14
  Commands,
15
15
  type TextFieldChangeEvent as NativeChangeEvent,
16
+ type TextFieldSelectionEvent as NativeSelectionEvent,
16
17
  type TextFieldTextEvent as NativeTextEvent,
18
+ type TextFieldToolbarItem as NativeToolbarItem,
19
+ type TextFieldToolbarPressEvent as NativeToolbarPressEvent,
17
20
  } from './TextFieldNativeComponent';
18
- import { resolveIcon, type PlatformIcon } from './icons';
21
+ import { NO_ICON, resolveIcon, type PlatformIcon } from './icons';
19
22
  import { normalizeLabelStyle, type LabelStyle } from './labelStyle';
20
23
  import { focusRegistry } from './focusRegistry';
24
+ import { resolveSubmitBehavior } from './submitBehavior';
21
25
  import type { AndroidMaterialMode } from './sharedTypes';
22
26
 
23
27
  /** Keyboard to show; the React Native `TextInput` values. */
@@ -40,25 +44,82 @@ export type TextFieldKeyboardType =
40
44
  export type TextFieldReturnKeyType =
41
45
  'default' | 'done' | 'go' | 'next' | 'search' | 'send' | 'none' | 'previous';
42
46
 
43
- /** Autofill hint; a cross-platform subset of the React Native `TextInput` values. */
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
+ */
44
53
  export type TextFieldAutoComplete =
45
54
  | 'off'
46
55
  | 'username'
56
+ | 'username-new'
47
57
  | 'password'
58
+ | 'current-password'
48
59
  | 'new-password'
60
+ | 'password-new'
49
61
  | 'one-time-code'
62
+ | 'sms-otp'
63
+ | 'email-otp'
64
+ | '2fa-app-otp'
50
65
  | 'email'
51
66
  | 'name'
52
67
  | 'given-name'
53
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'
54
81
  | 'tel'
82
+ | 'tel-country-code'
83
+ | 'tel-national'
84
+ | 'tel-device'
55
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'
56
96
  | 'postal-code'
57
97
  | 'country'
98
+ | 'birthdate-full'
99
+ | 'birthdate-day'
100
+ | 'birthdate-month'
101
+ | 'birthdate-year'
102
+ | 'gender'
58
103
  | 'cc-number'
59
104
  | 'cc-exp'
105
+ | 'cc-exp-day'
106
+ | 'cc-exp-month'
107
+ | 'cc-exp-year'
60
108
  | 'cc-csc'
61
- | 'url';
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';
62
123
 
63
124
  export type TextFieldAutoCapitalize =
64
125
  'none' | 'sentences' | 'words' | 'characters';
@@ -78,6 +139,77 @@ export type TextFieldChangeEvent = NativeSyntheticEvent<{
78
139
  eventCount: number;
79
140
  }>;
80
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
+
81
213
  /** Methods available through the `ref`. */
82
214
  export interface TextFieldRef {
83
215
  /** Focuses the field and shows the keyboard. */
@@ -88,6 +220,11 @@ export interface TextFieldRef {
88
220
  clear(): void;
89
221
  /** Whether the field currently has focus. */
90
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;
91
228
  }
92
229
 
93
230
  export interface TextFieldProps extends Omit<
@@ -116,9 +253,33 @@ export interface TextFieldProps extends Omit<
116
253
  /** Called when the field loses focus. */
117
254
  onBlur?: (event: TextFieldEvent) => void;
118
255
 
119
- /** Called when the return key is pressed. Single-line fields only. */
256
+ /**
257
+ * Called when the return key is pressed, unless it inserts a newline (see
258
+ * `submitBehavior`).
259
+ */
120
260
  onSubmitEditing?: (event: TextFieldEvent) => void;
121
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
+
122
283
  /**
123
284
  * Field label. Android: the Material floating label. iOS: a caption above
124
285
  * the field, which takes the tint color while focused.
@@ -153,9 +314,72 @@ export interface TextFieldProps extends Omit<
153
314
  /** Called when the trailing icon is pressed. */
154
315
  onTrailingIconPress?: () => void;
155
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
+
156
379
  /**
157
380
  * When to show a clear button inside the field. Default: `'never'`.
158
381
  * Android shows the Material clear icon while the field has text.
382
+ * Clearing fires `onChange` and `onChangeText('')` on both platforms.
159
383
  */
160
384
  clearButtonMode?: TextFieldClearButtonMode;
161
385
 
@@ -186,7 +410,10 @@ export interface TextFieldProps extends Omit<
186
410
  /** Obscures the text, for passwords. */
187
411
  secureTextEntry?: boolean;
188
412
 
189
- /** Multi-line field that grows with its content. Return inserts a newline. */
413
+ /**
414
+ * Multi-line field that grows with its content, between `minLines` and
415
+ * `maxLines`. Return inserts a newline.
416
+ */
190
417
  multiline?: boolean;
191
418
 
192
419
  /** Whether the text can be edited. Default: `true`. */
@@ -251,6 +478,21 @@ export interface TextFieldProps extends Omit<
251
478
 
252
479
  /** Width of the leading label column, in points. Default: 100. */
253
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;
254
496
  };
255
497
 
256
498
  /**
@@ -265,19 +507,72 @@ export interface TextFieldProps extends Omit<
265
507
  */
266
508
  material?: AndroidMaterialMode;
267
509
 
268
- /** Material 3 text field style. Default: `'outlined'`. */
269
- variant?: 'outlined' | 'filled';
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';
270
516
 
271
517
  /** The dense variant, a shorter field. */
272
518
  dense?: boolean;
273
519
  };
274
520
 
275
- /** Test identifier */
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
+ */
276
526
  testID?: string;
277
527
  }
278
528
 
279
529
  type NativeTextFieldInstance = React.ComponentRef<typeof NativeTextField>;
280
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
+
281
576
  export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
282
577
  function TextFieldComponent(props, ref): React.ReactElement {
283
578
  const {
@@ -288,6 +583,9 @@ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
288
583
  onFocus,
289
584
  onBlur,
290
585
  onSubmitEditing,
586
+ submitBehavior,
587
+ onSelectionChange,
588
+ selection,
291
589
  label,
292
590
  placeholder,
293
591
  supportingText,
@@ -297,6 +595,21 @@ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
297
595
  leadingIcon,
298
596
  trailingIcon,
299
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,
300
613
  clearButtonMode,
301
614
  passwordToggle,
302
615
  showCharacterCount,
@@ -327,9 +640,14 @@ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
327
640
  // count JS has seen. Native drops the update when the user has typed
328
641
  // since, and the edit that follows brings JS back in line.
329
642
  const [mostRecentEventCount, setMostRecentEventCount] = useState(0);
643
+ const eventCountRef = useRef(0);
330
644
  const [lastNativeText, setLastNativeText] = useState<string | undefined>(
331
645
  value ?? defaultValue
332
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);
333
651
 
334
652
  // Registered like a TextInput, so Keyboard.dismiss() and the ScrollView
335
653
  // keyboard props treat the field as one (see focusRegistry.ts)
@@ -340,14 +658,41 @@ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
340
658
  return () => focusRegistry.unregister(node);
341
659
  }, []);
342
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;
343
664
  useLayoutEffect(() => {
344
- if (typeof value !== 'string' || value === lastNativeText) return;
345
- setLastNativeText(value);
346
665
  const node = nativeRef.current;
347
- if (node != null) {
348
- Commands.setText(node, mostRecentEventCount, value);
666
+ if (typeof value === 'string' && value !== lastNativeText) {
667
+ setLastNativeText(value);
668
+ if (node != null) {
669
+ Commands.setText(node, mostRecentEventCount, value);
670
+ }
349
671
  }
350
- }, [value, lastNativeText, mostRecentEventCount]);
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
+ ]);
351
696
 
352
697
  useImperativeHandle(
353
698
  ref,
@@ -365,6 +710,17 @@ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
365
710
  if (node != null) Commands.clear(node);
366
711
  },
367
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
+ },
368
724
  }),
369
725
  []
370
726
  );
@@ -372,6 +728,7 @@ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
372
728
  const handleChange = useCallback(
373
729
  (event: NativeSyntheticEvent<NativeChangeEvent>) => {
374
730
  const { text, eventCount } = event.nativeEvent;
731
+ eventCountRef.current = eventCount;
375
732
  setMostRecentEventCount(eventCount);
376
733
  setLastNativeText(text);
377
734
  onChange?.(event);
@@ -405,10 +762,37 @@ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
405
762
  [onSubmitEditing]
406
763
  );
407
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
+
408
785
  const handleTrailingIconPress = useCallback(() => {
409
786
  onTrailingIconPress?.();
410
787
  }, [onTrailingIconPress]);
411
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
+
412
796
  const nativeLeadingIcon = useMemo(
413
797
  () => resolveIcon(leadingIcon),
414
798
  [leadingIcon]
@@ -433,10 +817,16 @@ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
433
817
  borderStyle: ios?.borderStyle ?? '',
434
818
  labelPlacement: ios?.labelPlacement ?? '',
435
819
  labelWidth: ios?.labelWidth ?? 0,
820
+ passwordRules: ios?.passwordRules ?? '',
436
821
  }),
437
822
  [ios]
438
823
  );
439
824
 
825
+ const nativeToolbarItems = useMemo(
826
+ () => toolbarItems(ios?.keyboardToolbar),
827
+ [ios?.keyboardToolbar]
828
+ );
829
+
440
830
  const nativeAndroid = useMemo(
441
831
  () => ({
442
832
  material: android?.material ?? 'm3',
@@ -469,6 +859,8 @@ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
469
859
  autoCorrect={autoCorrect === false ? 'disabled' : 'enabled'}
470
860
  secureTextEntry={secureTextEntry ? 'secure' : 'plain'}
471
861
  lines={multiline ? 'multiline' : 'single'}
862
+ submitBehavior={resolveSubmitBehavior(submitBehavior, multiline)}
863
+ keyboardToolbarItems={nativeToolbarItems}
472
864
  interactivity={editable === false ? 'disabled' : 'enabled'}
473
865
  autoFocus={autoFocus ? 'focus' : 'none'}
474
866
  selectTextOnFocus={selectTextOnFocus ? 'select' : 'keep'}
@@ -476,15 +868,37 @@ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
476
868
  keyboardAppearance={keyboardAppearance ?? 'default'}
477
869
  textStyle={nativeTextStyle}
478
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'}
479
886
  ios={nativeIOS}
480
887
  android={nativeAndroid}
481
888
  onFieldChange={handleChange}
482
889
  onFieldFocus={handleFocus}
483
890
  onFieldBlur={handleBlur}
484
891
  onFieldSubmit={onSubmitEditing ? handleSubmit : undefined}
892
+ onFieldSelectionChange={
893
+ onSelectionChange || selection ? handleSelectionChange : undefined
894
+ }
895
+ onKeyboardToolbarPress={
896
+ onToolbarItemPress ? handleToolbarPress : undefined
897
+ }
485
898
  onTrailingIconPress={
486
899
  onTrailingIconPress ? handleTrailingIconPress : undefined
487
900
  }
901
+ onFieldPress={pressable ? handlePress : undefined}
488
902
  {...viewProps}
489
903
  />
490
904
  );