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
@@ -0,0 +1,361 @@
1
+ // web/TextField.tsx
2
+ import React, {
3
+ forwardRef,
4
+ useImperativeHandle,
5
+ useRef,
6
+ useState,
7
+ } from 'react';
8
+ import { Pressable, Text, TextInput, View } from 'react-native';
9
+
10
+ import type {
11
+ TextFieldChangeEvent,
12
+ TextFieldEvent,
13
+ TextFieldProps,
14
+ TextFieldRef,
15
+ } from '../TextField';
16
+ import { resolveSubmitBehavior } from '../submitBehavior';
17
+ import { Icon } from './Icon';
18
+ import { usePrimaryColor } from './shared';
19
+
20
+ const ERROR_COLOR = '#B3261E';
21
+ const MUTED_COLOR = 'rgba(128, 128, 128, 1)';
22
+ const OUTLINE_COLOR = 'rgba(128, 128, 128, 0.5)';
23
+
24
+ function textEvent(text: string): TextFieldEvent {
25
+ return { nativeEvent: { text } } as TextFieldEvent;
26
+ }
27
+
28
+ /**
29
+ * A text input with the TextField extras around it: a label above, prefix and
30
+ * suffix, icons, a clear button, a password toggle, and supporting, error and
31
+ * counter text below.
32
+ */
33
+ export const TextField = forwardRef<TextFieldRef, TextFieldProps>(
34
+ function TextFieldComponent(props, ref): React.ReactElement {
35
+ const {
36
+ value,
37
+ defaultValue,
38
+ onChangeText,
39
+ onChange,
40
+ onFocus,
41
+ onBlur,
42
+ onSubmitEditing,
43
+ submitBehavior,
44
+ onSelectionChange,
45
+ selection,
46
+ label,
47
+ placeholder,
48
+ supportingText,
49
+ error,
50
+ prefix,
51
+ suffix,
52
+ leadingIcon,
53
+ trailingIcon,
54
+ onTrailingIconPress,
55
+ leadingIconTestID,
56
+ leadingIconAccessibilityLabel,
57
+ trailingIconTestID,
58
+ trailingIconAccessibilityLabel,
59
+ onPress,
60
+ activeColor,
61
+ outlineColor,
62
+ errorColor,
63
+ containerColor,
64
+ textColor,
65
+ placeholderTextColor,
66
+ maxFontSizeMultiplier,
67
+ textAlign,
68
+ minLines,
69
+ maxLines,
70
+ clearButtonMode = 'never',
71
+ passwordToggle,
72
+ showCharacterCount,
73
+ maxLength,
74
+ keyboardType,
75
+ returnKeyType,
76
+ autoCapitalize,
77
+ autoCorrect,
78
+ secureTextEntry,
79
+ multiline,
80
+ editable = true,
81
+ autoFocus,
82
+ selectTextOnFocus,
83
+ autoComplete,
84
+ keyboardAppearance,
85
+ textStyle,
86
+ accessibilityLabel,
87
+ ios,
88
+ android,
89
+ style,
90
+ testID,
91
+ ...viewProps
92
+ } = props;
93
+
94
+ const primary = usePrimaryColor();
95
+ const inputRef = useRef<React.ComponentRef<typeof TextInput> | null>(null);
96
+ const eventCount = useRef(0);
97
+ const [uncontrolledText, setUncontrolledText] = useState(
98
+ defaultValue ?? ''
99
+ );
100
+ const [focused, setFocused] = useState(false);
101
+ const [revealed, setRevealed] = useState(false);
102
+
103
+ const text = value ?? uncontrolledText;
104
+ const errorText = typeof error === 'string' ? error : undefined;
105
+ const invalid = error !== undefined && error !== false && error !== '';
106
+
107
+ const changeText = (next: string) => {
108
+ setUncontrolledText(next);
109
+ eventCount.current += 1;
110
+ onChangeText?.(next);
111
+ onChange?.({
112
+ nativeEvent: { text: next, eventCount: eventCount.current },
113
+ } as TextFieldChangeEvent);
114
+ };
115
+
116
+ useImperativeHandle(ref, () => ({
117
+ focus: () => inputRef.current?.focus(),
118
+ blur: () => inputRef.current?.blur(),
119
+ clear: () => changeText(''),
120
+ isFocused: () => inputRef.current?.isFocused() ?? false,
121
+ setSelection: (start: number, end?: number) => {
122
+ // react-native-web's TextInput ref is the DOM input
123
+ const node = inputRef.current as unknown as {
124
+ setSelectionRange?: (start: number, end: number) => void;
125
+ } | null;
126
+ node?.setSelectionRange?.(start, end ?? start);
127
+ },
128
+ }));
129
+
130
+ // The keyboard toolbar and password rules are iOS only
131
+ const returnKey = resolveSubmitBehavior(submitBehavior, multiline);
132
+ // react-native-web submits a multi-line field only when it also blurs;
133
+ // Enter without Shift submits one that keeps focus
134
+ const submitsOnEnter = multiline && returnKey === 'submit';
135
+
136
+ const showClear =
137
+ editable &&
138
+ text.length > 0 &&
139
+ (clearButtonMode === 'always' ||
140
+ (clearButtonMode === 'while-editing' && focused) ||
141
+ (clearButtonMode === 'unless-editing' && !focused));
142
+
143
+ const errorTint = errorColor ?? ERROR_COLOR;
144
+ const accent = invalid
145
+ ? errorTint
146
+ : focused
147
+ ? (activeColor ?? primary)
148
+ : undefined;
149
+ // A read-only field with onPress acts as a button
150
+ const actsAsButton = !editable && onPress != null;
151
+ // A disabled Pressable marks every focusable descendant aria-disabled.
152
+ // Editable inputs need a neutral container, including their icon actions.
153
+ // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-disabled
154
+ const FieldContainer = actsAsButton ? Pressable : View;
155
+ const lineHeight = (textStyle?.fontSize ?? 16) * 1.25;
156
+ const bottomText = errorText ?? supportingText;
157
+ const counter = showCharacterCount
158
+ ? maxLength !== undefined
159
+ ? `${text.length} / ${maxLength}`
160
+ : `${text.length}`
161
+ : undefined;
162
+
163
+ return (
164
+ <View {...viewProps} style={[{ gap: 4 }, style]}>
165
+ {label ? (
166
+ <Text style={{ fontSize: 13, color: accent ?? MUTED_COLOR }}>
167
+ {label}
168
+ </Text>
169
+ ) : null}
170
+ <FieldContainer
171
+ onPress={actsAsButton ? onPress : undefined}
172
+ accessibilityLabel={
173
+ actsAsButton ? (accessibilityLabel ?? label) : undefined
174
+ }
175
+ role={actsAsButton ? 'button' : undefined}
176
+ style={{
177
+ flexDirection: 'row',
178
+ alignItems: multiline ? 'flex-start' : 'center',
179
+ gap: 8,
180
+ minHeight: 40,
181
+ paddingHorizontal: 12,
182
+ borderWidth: 1,
183
+ borderRadius: 8,
184
+ borderColor: accent ?? outlineColor ?? OUTLINE_COLOR,
185
+ backgroundColor: containerColor,
186
+ opacity: editable || actsAsButton ? 1 : 0.6,
187
+ cursor: actsAsButton ? 'pointer' : undefined,
188
+ }}
189
+ >
190
+ <View
191
+ testID={leadingIconTestID}
192
+ accessibilityLabel={leadingIconAccessibilityLabel}
193
+ >
194
+ <Icon icon={leadingIcon} color={MUTED_COLOR} />
195
+ </View>
196
+ {prefix ? <Text style={{ color: MUTED_COLOR }}>{prefix}</Text> : null}
197
+ <TextInput
198
+ ref={inputRef}
199
+ testID={testID}
200
+ value={text}
201
+ onChangeText={changeText}
202
+ onFocus={() => {
203
+ setFocused(true);
204
+ onFocus?.(textEvent(text));
205
+ }}
206
+ onBlur={() => {
207
+ setFocused(false);
208
+ onBlur?.(textEvent(text));
209
+ }}
210
+ onSubmitEditing={
211
+ multiline && returnKey !== 'blurAndSubmit'
212
+ ? undefined
213
+ : () => onSubmitEditing?.(textEvent(text))
214
+ }
215
+ submitBehavior={returnKey}
216
+ blurOnSubmit={returnKey === 'blurAndSubmit'}
217
+ onKeyPress={
218
+ submitsOnEnter
219
+ ? (event) => {
220
+ const { key, shiftKey } = event.nativeEvent as {
221
+ key: string;
222
+ shiftKey?: boolean;
223
+ };
224
+ if (key !== 'Enter' || shiftKey) return;
225
+ event.preventDefault();
226
+ onSubmitEditing?.(textEvent(text));
227
+ }
228
+ : undefined
229
+ }
230
+ selection={
231
+ selection
232
+ ? {
233
+ start: selection.start,
234
+ end: selection.end ?? selection.start,
235
+ }
236
+ : undefined
237
+ }
238
+ onSelectionChange={onSelectionChange}
239
+ placeholder={placeholder}
240
+ placeholderTextColor={placeholderTextColor}
241
+ maxLength={maxLength}
242
+ keyboardType={keyboardType}
243
+ returnKeyType={returnKeyType === 'none' ? undefined : returnKeyType}
244
+ autoCapitalize={autoCapitalize}
245
+ autoCorrect={autoCorrect}
246
+ secureTextEntry={secureTextEntry && !revealed}
247
+ multiline={multiline}
248
+ numberOfLines={multiline ? minLines : undefined}
249
+ editable={editable}
250
+ pointerEvents={actsAsButton ? 'none' : undefined}
251
+ tabIndex={actsAsButton ? -1 : undefined}
252
+ autoFocus={autoFocus}
253
+ selectTextOnFocus={selectTextOnFocus}
254
+ autoComplete={autoComplete}
255
+ accessibilityLabel={accessibilityLabel ?? label}
256
+ aria-invalid={invalid}
257
+ style={{
258
+ flex: 1,
259
+ minWidth: 0,
260
+ paddingVertical: 8,
261
+ maxHeight:
262
+ multiline && maxLines ? lineHeight * maxLines + 16 : undefined,
263
+ textAlign,
264
+ color: textColor,
265
+ fontSize: textStyle?.fontSize ?? 16,
266
+ fontFamily: textStyle?.fontFamily,
267
+ fontWeight: textStyle?.fontWeight,
268
+ fontStyle: textStyle?.fontStyle,
269
+ outlineWidth: 0,
270
+ }}
271
+ />
272
+ {suffix ? <Text style={{ color: MUTED_COLOR }}>{suffix}</Text> : null}
273
+ {showClear ? (
274
+ <FieldButton label="Clear text" onPress={() => changeText('')}>
275
+ ✕
276
+ </FieldButton>
277
+ ) : null}
278
+ {passwordToggle ? (
279
+ <FieldButton
280
+ label={revealed ? 'Hide password' : 'Show password'}
281
+ onPress={() => setRevealed((r) => !r)}
282
+ >
283
+ {revealed ? 'Hide' : 'Show'}
284
+ </FieldButton>
285
+ ) : null}
286
+ {trailingIcon ? (
287
+ onTrailingIconPress ? (
288
+ <Pressable
289
+ role="button"
290
+ testID={trailingIconTestID}
291
+ accessibilityLabel={trailingIconAccessibilityLabel}
292
+ onPress={onTrailingIconPress}
293
+ style={{ padding: 4 }}
294
+ >
295
+ <Icon icon={trailingIcon} color={MUTED_COLOR} />
296
+ </Pressable>
297
+ ) : (
298
+ <View
299
+ testID={trailingIconTestID}
300
+ accessibilityLabel={trailingIconAccessibilityLabel}
301
+ >
302
+ <Icon icon={trailingIcon} color={MUTED_COLOR} />
303
+ </View>
304
+ )
305
+ ) : null}
306
+ </FieldContainer>
307
+ {bottomText || counter ? (
308
+ <View style={{ flexDirection: 'row', gap: 8 }}>
309
+ <Text
310
+ style={{
311
+ flex: 1,
312
+ fontSize: 12,
313
+ color: errorText ? errorTint : MUTED_COLOR,
314
+ }}
315
+ >
316
+ {bottomText ?? ''}
317
+ </Text>
318
+ {counter ? (
319
+ <Text style={{ fontSize: 12, color: MUTED_COLOR }}>
320
+ {counter}
321
+ </Text>
322
+ ) : null}
323
+ </View>
324
+ ) : null}
325
+ </View>
326
+ );
327
+ }
328
+ );
329
+
330
+ function FieldButton({
331
+ label,
332
+ onPress,
333
+ children,
334
+ }: {
335
+ label: string;
336
+ onPress: () => void;
337
+ children: React.ReactNode;
338
+ }): React.ReactElement {
339
+ return (
340
+ <button
341
+ type="button"
342
+ aria-label={label}
343
+ // Keep focus in the input, so a clear button shown only while editing
344
+ // is still there when the click lands.
345
+ onMouseDown={(event) => event.preventDefault()}
346
+ onClick={onPress}
347
+ style={{
348
+ padding: '4px 6px',
349
+ border: 'none',
350
+ borderRadius: 4,
351
+ fontFamily: 'inherit',
352
+ fontSize: 13,
353
+ color: MUTED_COLOR,
354
+ backgroundColor: 'transparent',
355
+ cursor: 'pointer',
356
+ }}
357
+ >
358
+ {children}
359
+ </button>
360
+ );
361
+ }
@@ -0,0 +1,71 @@
1
+ import { withWebComponent } from './PlatformComponentsProvider';
2
+ import type { WebComponents } from '../webComponents';
3
+ import { Button as DefaultButton } from './Button';
4
+ import { ButtonGroup as DefaultButtonGroup } from './ButtonGroup';
5
+ import { SplitButton as DefaultSplitButton } from './SplitButton';
6
+ import { DatePicker as DefaultDatePicker } from './DatePicker';
7
+ import { DateRangePicker as DefaultDateRangePicker } from './DateRangePicker';
8
+ import { FloatingActionButton as DefaultFloatingActionButton } from './FloatingActionButton';
9
+ import { NavigationRail as DefaultNavigationRail } from './NavigationRail';
10
+ import { SegmentedControl as DefaultSegmentedControl } from './SegmentedControl';
11
+ import { SelectionMenu as DefaultSelectionMenu } from './SelectionMenu';
12
+ import { TabBar as DefaultTabBar } from './TabBar';
13
+ import { TextField as DefaultTextField } from './TextField';
14
+ import {
15
+ ContextMenu as DefaultContextMenu,
16
+ FloatingToolbar as DefaultFloatingToolbar,
17
+ LiquidGlass as DefaultLiquidGlass,
18
+ LiquidGlassContainer as DefaultLiquidGlassContainer,
19
+ } from './containers';
20
+
21
+ // Explicit types keep published declarations tied to a resolvable type import.
22
+ export const Button: WebComponents['Button'] = withWebComponent(
23
+ 'Button',
24
+ DefaultButton
25
+ );
26
+ export const ButtonGroup: WebComponents['ButtonGroup'] = withWebComponent(
27
+ 'ButtonGroup',
28
+ DefaultButtonGroup
29
+ );
30
+ export const SplitButton: WebComponents['SplitButton'] = withWebComponent(
31
+ 'SplitButton',
32
+ DefaultSplitButton
33
+ );
34
+ export const DatePicker: WebComponents['DatePicker'] = withWebComponent(
35
+ 'DatePicker',
36
+ DefaultDatePicker
37
+ );
38
+ export const DateRangePicker: WebComponents['DateRangePicker'] =
39
+ withWebComponent('DateRangePicker', DefaultDateRangePicker);
40
+ export const FloatingActionButton: WebComponents['FloatingActionButton'] =
41
+ withWebComponent('FloatingActionButton', DefaultFloatingActionButton);
42
+ export const NavigationRail: WebComponents['NavigationRail'] = withWebComponent(
43
+ 'NavigationRail',
44
+ DefaultNavigationRail
45
+ );
46
+ export const SegmentedControl: WebComponents['SegmentedControl'] =
47
+ withWebComponent('SegmentedControl', DefaultSegmentedControl);
48
+ export const SelectionMenu: WebComponents['SelectionMenu'] = withWebComponent(
49
+ 'SelectionMenu',
50
+ DefaultSelectionMenu
51
+ );
52
+ export const TabBar: WebComponents['TabBar'] = withWebComponent(
53
+ 'TabBar',
54
+ DefaultTabBar
55
+ );
56
+ export const TextField: WebComponents['TextField'] = withWebComponent(
57
+ 'TextField',
58
+ DefaultTextField
59
+ );
60
+ export const ContextMenu: WebComponents['ContextMenu'] = withWebComponent(
61
+ 'ContextMenu',
62
+ DefaultContextMenu
63
+ );
64
+ export const FloatingToolbar: WebComponents['FloatingToolbar'] =
65
+ withWebComponent('FloatingToolbar', DefaultFloatingToolbar);
66
+ export const LiquidGlass: WebComponents['LiquidGlass'] = withWebComponent(
67
+ 'LiquidGlass',
68
+ DefaultLiquidGlass
69
+ );
70
+ export const LiquidGlassContainer: WebComponents['LiquidGlassContainer'] =
71
+ withWebComponent('LiquidGlassContainer', DefaultLiquidGlassContainer);
@@ -0,0 +1,130 @@
1
+ // web/containers.tsx
2
+ //
3
+ // The components that wrap children: ContextMenu, FloatingToolbar,
4
+ // LiquidGlass and LiquidGlassContainer. They keep their layout on web and
5
+ // render their children.
6
+ import React from 'react';
7
+ import { View } from 'react-native';
8
+
9
+ import type { ContextMenuProps } from '../ContextMenu';
10
+ import type { FloatingToolbarProps } from '../FloatingToolbar';
11
+ import type { LiquidGlassProps } from '../LiquidGlass';
12
+ import type { LiquidGlassContainerProps } from '../LiquidGlassContainer';
13
+ import { warnOnce } from './shared';
14
+
15
+ /**
16
+ * Renders its children without a menu: browsers have no native menu to
17
+ * attach. Provide a web menu with a `.web.tsx` file in your app.
18
+ */
19
+ export function ContextMenu(props: ContextMenuProps): React.ReactElement {
20
+ const {
21
+ title,
22
+ actions,
23
+ disabled,
24
+ trigger,
25
+ onPressAction,
26
+ onMenuOpen,
27
+ onMenuClose,
28
+ onPreviewPress,
29
+ ios,
30
+ android,
31
+ children,
32
+ ...viewProps
33
+ } = props;
34
+
35
+ warnOnce(
36
+ 'ContextMenu',
37
+ 'ContextMenu has no web implementation; its children render without a menu. ' +
38
+ 'See https://jarx-concepts.github.io/react-native-platform-components/guides/web'
39
+ );
40
+
41
+ return <View {...viewProps}>{children}</View>;
42
+ }
43
+
44
+ /**
45
+ * A pill-shaped surface that lays out its children in a row or column. It
46
+ * doesn't follow a linked ScrollView (`scrollViewNativeID`, `hideOnScroll`).
47
+ */
48
+ export function FloatingToolbar(
49
+ props: FloatingToolbarProps
50
+ ): React.ReactElement {
51
+ const {
52
+ orientation = 'horizontal',
53
+ color,
54
+ scrollViewNativeID,
55
+ hideOnScroll,
56
+ ios,
57
+ android,
58
+ children,
59
+ style,
60
+ ...viewProps
61
+ } = props;
62
+
63
+ return (
64
+ <View
65
+ {...viewProps}
66
+ style={[
67
+ {
68
+ flexDirection: orientation === 'vertical' ? 'column' : 'row',
69
+ alignItems: 'center',
70
+ alignSelf: 'flex-start',
71
+ gap: 4,
72
+ padding: 8,
73
+ borderRadius: 32,
74
+ backgroundColor: color ?? 'rgba(128, 128, 128, 0.16)',
75
+ // @ts-expect-error: react-native-web style
76
+ backdropFilter: 'blur(20px)',
77
+ },
78
+ style,
79
+ ]}
80
+ >
81
+ {children}
82
+ </View>
83
+ );
84
+ }
85
+
86
+ /**
87
+ * A plain view: Liquid Glass is iOS 26 only, so `isLiquidGlassSupported` is
88
+ * `false` on web, as on Android.
89
+ */
90
+ export function LiquidGlass(props: LiquidGlassProps): React.ReactElement {
91
+ const {
92
+ cornerRadius,
93
+ cornerStyle,
94
+ ios,
95
+ android,
96
+ children,
97
+ style,
98
+ ...viewProps
99
+ } = props;
100
+
101
+ // A capsule is fully rounded; concentric corners use cornerRadius
102
+ const radius =
103
+ cornerStyle === 'capsule'
104
+ ? 9999
105
+ : typeof cornerStyle === 'number'
106
+ ? cornerStyle
107
+ : cornerRadius;
108
+
109
+ return (
110
+ <View
111
+ {...viewProps}
112
+ style={[
113
+ radius ? { borderRadius: radius, overflow: 'hidden' } : null,
114
+ style,
115
+ ]}
116
+ >
117
+ {children}
118
+ </View>
119
+ );
120
+ }
121
+
122
+ /** A plain view: glass only merges on iOS 26. */
123
+ export function LiquidGlassContainer(
124
+ props: LiquidGlassContainerProps
125
+ ): React.ReactElement {
126
+ const { spacing, children, ...viewProps } = props;
127
+ return <View {...viewProps}>{children}</View>;
128
+ }
129
+
130
+ export const isLiquidGlassSupported = false;
@@ -0,0 +1,137 @@
1
+ // web/dateInput.ts
2
+ //
3
+ // Conversions between `Date` and the value strings of the browser's date and
4
+ // time inputs, in local time.
5
+ import type { DatePickerMode } from '../DatePickerNativeComponent';
6
+
7
+ /** The `<input type>`s the pickers use. */
8
+ export type DateInputType = 'date' | 'time' | 'datetime-local' | 'month';
9
+
10
+ /** The `<input type>` for a picker mode. */
11
+ export function inputTypeForMode(
12
+ mode: DatePickerMode | undefined
13
+ ): DateInputType {
14
+ switch (mode) {
15
+ case 'time':
16
+ case 'countDownTimer':
17
+ return 'time';
18
+ case 'dateAndTime':
19
+ return 'datetime-local';
20
+ case 'yearAndMonth':
21
+ return 'month';
22
+ default:
23
+ return 'date';
24
+ }
25
+ }
26
+
27
+ const pad = (n: number, width = 2) => String(n).padStart(width, '0');
28
+
29
+ /** Formats `date` as the value of an input of `type`; `''` for no date. */
30
+ export function formatInputValue(
31
+ date: Date | null | undefined,
32
+ type: DateInputType
33
+ ): string {
34
+ if (!date || !Number.isFinite(date.getTime())) return '';
35
+ const month = `${pad(date.getFullYear(), 4)}-${pad(date.getMonth() + 1)}`;
36
+ const day = `${month}-${pad(date.getDate())}`;
37
+ const time = `${pad(date.getHours())}:${pad(date.getMinutes())}`;
38
+ if (type === 'month') return month;
39
+ if (type === 'date') return day;
40
+ if (type === 'time') return time;
41
+ return `${day}T${time}`;
42
+ }
43
+
44
+ /**
45
+ * Parses an input value back into a `Date`. Parts the input doesn't show are
46
+ * kept from `base` (the time of day for a date input, the day for a time
47
+ * input); a month input gives the first of the month. Returns `null` for an
48
+ * empty or invalid value.
49
+ */
50
+ export function parseInputValue(
51
+ value: string,
52
+ type: DateInputType,
53
+ base: Date | null | undefined
54
+ ): Date | null {
55
+ const hasBase = base && Number.isFinite(base.getTime());
56
+ const result = hasBase ? new Date(base.getTime()) : new Date();
57
+ if (!hasBase) result.setHours(0, 0, 0, 0);
58
+
59
+ if (type === 'month') {
60
+ const monthMatch = /^(\d{4,})-(\d{2})$/.exec(value);
61
+ if (!monthMatch) return null;
62
+ const year = Number(monthMatch[1]);
63
+ const month = Number(monthMatch[2]);
64
+ if (year < 1 || month < 1 || month > 12) return null;
65
+ result.setFullYear(year, month - 1, 1);
66
+ return Number.isFinite(result.getTime()) ? result : null;
67
+ }
68
+
69
+ const dayMatch =
70
+ type === 'date'
71
+ ? /^(\d{4,})-(\d{2})-(\d{2})$/.exec(value)
72
+ : /^(\d{4,})-(\d{2})-(\d{2})T\d{2}:\d{2}(?::\d{2})?$/.exec(value);
73
+ const timeMatch = /(?:^|T)(\d{2}):(\d{2})(?::(\d{2}))?$/.exec(value);
74
+
75
+ if (type !== 'time') {
76
+ if (!dayMatch) return null;
77
+ const year = Number(dayMatch[1]);
78
+ const month = Number(dayMatch[2]);
79
+ const day = Number(dayMatch[3]);
80
+ if (year < 1 || month < 1 || month > 12 || day < 1 || day > 31) {
81
+ return null;
82
+ }
83
+ result.setFullYear(year, month - 1, day);
84
+ // Date setters normalize impossible dates (February 30 becomes March 2).
85
+ if (
86
+ result.getFullYear() !== year ||
87
+ result.getMonth() !== month - 1 ||
88
+ result.getDate() !== day
89
+ ) {
90
+ return null;
91
+ }
92
+ }
93
+ if (type !== 'date') {
94
+ if (!timeMatch) return null;
95
+ if (type === 'time' && !/^\d{2}:\d{2}(?::\d{2})?$/.test(value)) {
96
+ return null;
97
+ }
98
+ const hours = Number(timeMatch[1]);
99
+ const minutes = Number(timeMatch[2]);
100
+ const seconds = Number(timeMatch[3] ?? 0);
101
+ if (hours > 23 || minutes > 59 || seconds > 59) return null;
102
+ result.setHours(hours, minutes, seconds, 0);
103
+ }
104
+ return Number.isFinite(result.getTime()) ? result : null;
105
+ }
106
+
107
+ /** Compare only the date/time fields the input displays, like its min/max. */
108
+ function inputValueNumber(date: Date, type: DateInputType): number {
109
+ if (type === 'month') return date.getFullYear() * 12 + date.getMonth();
110
+ if (type === 'time') return date.getHours() * 60 + date.getMinutes();
111
+ const result = new Date(date.getTime());
112
+ if (type === 'date') result.setHours(0, 0, 0, 0);
113
+ else result.setSeconds(0, 0);
114
+ return result.getTime();
115
+ }
116
+
117
+ /**
118
+ * Bounds also apply to typed values and the modal's initial selection. HTML
119
+ * inputs report constraint violations but don't prevent a button callback.
120
+ */
121
+ export function isWithinInputBounds(
122
+ date: Date | null | undefined,
123
+ type: DateInputType,
124
+ minDate?: Date | null,
125
+ maxDate?: Date | null
126
+ ): date is Date {
127
+ if (!date || !Number.isFinite(date.getTime())) return false;
128
+ const value = inputValueNumber(date, type);
129
+ const min = minDate ? inputValueNumber(minDate, type) : NaN;
130
+ const max = maxDate ? inputValueNumber(maxDate, type) : NaN;
131
+ // Time inputs have a periodic domain: 23:00–01:00 spans midnight.
132
+ if (type === 'time' && min > max) return value >= min || value <= max;
133
+ return (
134
+ (!Number.isFinite(min) || value >= min) &&
135
+ (!Number.isFinite(max) || value <= max)
136
+ );
137
+ }