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,42 @@
1
+ // LiquidGlassContainer.tsx
2
+ import React from 'react';
3
+ import type { ViewProps } from 'react-native';
4
+
5
+ import NativeLiquidGlassContainer from './LiquidGlassContainerNativeComponent';
6
+
7
+ export interface LiquidGlassContainerProps extends ViewProps {
8
+ /**
9
+ * How far apart the `LiquidGlass` views inside can be and still merge
10
+ * (`UIGlassContainerEffect.spacing`); larger values blend glass across
11
+ * wider gaps. iOS 26 only.
12
+ *
13
+ * Default: the system's, 0 on iOS 26, where glass doesn't merge across
14
+ * gaps.
15
+ */
16
+ spacing?: number;
17
+
18
+ /**
19
+ * Content, with the `LiquidGlass` views that merge. They don't have to be
20
+ * direct children.
21
+ */
22
+ children?: React.ReactNode;
23
+ }
24
+
25
+ /**
26
+ * Groups `LiquidGlass` views so they render as one glass on iOS 26
27
+ * (`UIVisualEffectView` with a `UIGlassContainerEffect`): neighbours within
28
+ * `spacing` blend together, and glass that appears, disappears or changes
29
+ * frame morphs in and out of its neighbours. A plain container on Android,
30
+ * on older iOS and on web.
31
+ */
32
+ export function LiquidGlassContainer(
33
+ props: LiquidGlassContainerProps
34
+ ): React.ReactElement {
35
+ const { spacing, children, ...viewProps } = props;
36
+
37
+ return (
38
+ <NativeLiquidGlassContainer spacing={spacing ?? -1} {...viewProps}>
39
+ {children}
40
+ </NativeLiquidGlassContainer>
41
+ );
42
+ }
@@ -0,0 +1,17 @@
1
+ // LiquidGlassContainerNativeComponent.ts
2
+ import type { HostComponent, ViewProps } from 'react-native';
3
+ import { codegenNativeComponent } from 'react-native';
4
+ import type { Float, WithDefault } from './codegenTypes';
5
+
6
+ export interface LiquidGlassContainerNativeProps extends ViewProps {
7
+ /**
8
+ * Distance between glass elements at which they begin to merge
9
+ * (UIGlassContainerEffect.spacing). Negative keeps the system default.
10
+ * @default -1
11
+ */
12
+ spacing?: WithDefault<Float, -1>;
13
+ }
14
+
15
+ export default codegenNativeComponent<LiquidGlassContainerNativeProps>(
16
+ 'PCLiquidGlassContainer'
17
+ ) as HostComponent<LiquidGlassContainerNativeProps>;
@@ -78,6 +78,14 @@ export interface LiquidGlassNativeProps extends ViewProps {
78
78
  */
79
79
  cornerRadius?: WithDefault<Float, 0>;
80
80
 
81
+ /**
82
+ * Corner shape: 'capsule' | 'concentric' | '' (the cornerRadius).
83
+ * On iOS 26 it maps to UIView.cornerConfiguration; elsewhere 'capsule'
84
+ * rounds to half the shorter side and 'concentric' uses cornerRadius.
85
+ * @default ''
86
+ */
87
+ cornerStyle?: WithDefault<string, ''>;
88
+
81
89
  /**
82
90
  * iOS-specific props.
83
91
  */
@@ -0,0 +1,203 @@
1
+ // NavigationRail.tsx
2
+ import React, { useCallback, useMemo } from 'react';
3
+ import {
4
+ StyleSheet,
5
+ View,
6
+ type ColorValue,
7
+ type NativeSyntheticEvent,
8
+ type ViewProps,
9
+ } from 'react-native';
10
+
11
+ import NativeNavigationRail, {
12
+ type NavigationRailSelectEvent,
13
+ } from './NavigationRailNativeComponent';
14
+ import type { Haptics } from './haptics';
15
+ import { normalizeLabelStyle, type LabelStyle } from './labelStyle';
16
+ import type { TabBarBadgeStyle, TabBarLabelVisibility } from './TabBar';
17
+ import { toNativeTabItems, type TabBarItemProps } from './tabItems';
18
+
19
+ /** The collapsed Material rail shows at most seven destinations. */
20
+ const MAX_COLLAPSED_ITEMS = 7;
21
+
22
+ /**
23
+ * A destination: the same item as a TabBar tab. `role: 'search'` gives a
24
+ * destination without an icon the search icon; `systemItem` is TabBar only.
25
+ */
26
+ export type NavigationRailItemProps = TabBarItemProps;
27
+
28
+ /**
29
+ * Where the destinations sit in the rail's height, below the header.
30
+ * Android: `NavigationRailView.setMenuGravity`.
31
+ */
32
+ export type NavigationRailMenuGravity = 'top' | 'center' | 'bottom';
33
+
34
+ export interface NavigationRailProps extends ViewProps {
35
+ /**
36
+ * The destinations. The collapsed Android rail shows seven; the expanded
37
+ * rail and the iOS fallback show all of them.
38
+ */
39
+ items: readonly NavigationRailItemProps[];
40
+
41
+ /** Selected destination's `value`; `null` for none. */
42
+ selectedValue: string | null;
43
+
44
+ /** Called when the user selects a destination. */
45
+ onSelect?: (value: string, index: number) => void;
46
+
47
+ /** Called when the user presses the destination that is already selected. */
48
+ onReselect?: (value: string, index: number) => void;
49
+
50
+ /**
51
+ * Haptic played when the user presses a destination, including the
52
+ * selected one (a reselect), as on TabBar. Default: none, like the native
53
+ * rail. See {@link Haptics}.
54
+ */
55
+ haptics?: Haptics;
56
+
57
+ /**
58
+ * How labels show. Default: `'auto'`, which labels every destination;
59
+ * `'selected'` labels only the selected one, `'unlabeled'` none.
60
+ */
61
+ labelVisibility?: TabBarLabelVisibility;
62
+
63
+ /**
64
+ * Where the destinations sit: at the top below the header (default), in
65
+ * the middle, or at the bottom.
66
+ */
67
+ menuGravity?: NavigationRailMenuGravity;
68
+
69
+ /**
70
+ * The expanded rail: wider, with the labels beside the icons. Changing it
71
+ * animates. Android: `NavigationRailView.expand()` / `collapse()`, the
72
+ * Material 3 Expressive expanded rail. iOS: the buttons put the icon
73
+ * before the label.
74
+ */
75
+ expanded?: boolean;
76
+
77
+ /**
78
+ * Shown above the destinations, usually a FloatingActionButton or a
79
+ * Button. Android: the rail's header view (`addHeaderView`).
80
+ */
81
+ header?: React.ReactNode;
82
+
83
+ /** Icon and label color of the selected destination. */
84
+ activeTintColor?: ColorValue;
85
+
86
+ /** Icon and label color of the other destinations. */
87
+ inactiveTintColor?: ColorValue;
88
+
89
+ /**
90
+ * Background of the rail. Default: the Material surface on Android, none
91
+ * on iOS.
92
+ */
93
+ railColor?: ColorValue;
94
+
95
+ /** Colors for the badges. */
96
+ badgeStyle?: TabBarBadgeStyle;
97
+
98
+ /** Label font. */
99
+ labelStyle?: LabelStyle;
100
+
101
+ /**
102
+ * Largest scale the labels may reach with the system font scale, as on
103
+ * `Text`. Unset or `0`: no cap.
104
+ */
105
+ maxFontSizeMultiplier?: number;
106
+
107
+ /** Android-specific configuration. */
108
+ android?: {
109
+ /** Color of the active indicator behind the selected icon. */
110
+ indicatorColor?: ColorValue;
111
+
112
+ /** Ripple shown while pressing a destination. */
113
+ rippleColor?: ColorValue;
114
+ };
115
+
116
+ /** Test identifier of the rail. */
117
+ testID?: string;
118
+ }
119
+
120
+ export function NavigationRail(props: NavigationRailProps): React.ReactElement {
121
+ const {
122
+ items,
123
+ selectedValue,
124
+ onSelect,
125
+ onReselect,
126
+ haptics,
127
+ labelVisibility,
128
+ menuGravity,
129
+ expanded,
130
+ header,
131
+ activeTintColor,
132
+ inactiveTintColor,
133
+ railColor,
134
+ badgeStyle,
135
+ labelStyle,
136
+ maxFontSizeMultiplier,
137
+ android,
138
+ ...viewProps
139
+ } = props;
140
+
141
+ if (__DEV__ && items.length > MAX_COLLAPSED_ITEMS) {
142
+ console.warn(
143
+ `NavigationRail: ${items.length} destinations given; the collapsed Material rail shows at most ${MAX_COLLAPSED_ITEMS}.`
144
+ );
145
+ }
146
+
147
+ // The expanded rail shows every destination
148
+ const nativeItems = useMemo(
149
+ () => toNativeTabItems(items, items.length),
150
+ [items]
151
+ );
152
+
153
+ const handleItemPress = useCallback(
154
+ (event: NativeSyntheticEvent<NavigationRailSelectEvent>) => {
155
+ const { index, value, reselected } = event.nativeEvent;
156
+ if (reselected === 'true') {
157
+ onReselect?.(value, index);
158
+ } else {
159
+ onSelect?.(value, index);
160
+ }
161
+ },
162
+ [onSelect, onReselect]
163
+ );
164
+
165
+ const nativeLabelStyle = useMemo(
166
+ () => normalizeLabelStyle(labelStyle),
167
+ [labelStyle]
168
+ );
169
+
170
+ return (
171
+ <NativeNavigationRail
172
+ items={nativeItems}
173
+ selectedValue={selectedValue ?? ''}
174
+ labelVisibility={labelVisibility ?? 'auto'}
175
+ menuGravity={menuGravity ?? 'top'}
176
+ expanded={expanded ? 'true' : 'false'}
177
+ activeTintColor={activeTintColor}
178
+ inactiveTintColor={inactiveTintColor}
179
+ railColor={railColor}
180
+ badgeBackgroundColor={badgeStyle?.backgroundColor}
181
+ badgeTextColor={badgeStyle?.color}
182
+ labelStyle={nativeLabelStyle}
183
+ maxFontSizeMultiplier={maxFontSizeMultiplier ?? 0}
184
+ androidIndicatorColor={android?.indicatorColor}
185
+ androidRippleColor={android?.rippleColor}
186
+ haptics={haptics ?? ''}
187
+ onItemPress={onSelect || onReselect ? handleItemPress : undefined}
188
+ {...viewProps}
189
+ >
190
+ {header ? (
191
+ // Native places the header; out of the flow, it leaves the rail's
192
+ // width to native
193
+ <View collapsable={false} style={styles.header}>
194
+ {header}
195
+ </View>
196
+ ) : null}
197
+ </NativeNavigationRail>
198
+ );
199
+ }
200
+
201
+ const styles = StyleSheet.create({
202
+ header: { position: 'absolute', left: 0, top: 0 },
203
+ });
@@ -0,0 +1,107 @@
1
+ // NavigationRailNativeComponent.ts
2
+ import type { ColorValue, HostComponent, ViewProps } from 'react-native';
3
+ import { codegenNativeComponent } from 'react-native';
4
+ import type {
5
+ BubblingEventHandler,
6
+ Double,
7
+ Int32,
8
+ WithDefault,
9
+ } from './codegenTypes';
10
+
11
+ /**
12
+ * A destination: the fields of a TabBar tab (see tabItems.ts). Icons are
13
+ * pre-resolved on the JS side (see icons.ts), the selected icon under the
14
+ * `selected…` fields; empty strings mean "none".
15
+ */
16
+ export type NavigationRailItem = Readonly<{
17
+ label: string;
18
+ value: string;
19
+ disabled: string; // 'enabled' | 'disabled'
20
+ iconType: string; // '' | 'sfSymbol' | 'drawable' | 'image'
21
+ iconName: string;
22
+ iconRequest: string;
23
+ iconUri: string;
24
+ iconScale: Double;
25
+ iconTinted: string; // 'true' | 'false'
26
+ selectedIconType: string;
27
+ selectedIconName: string;
28
+ selectedIconRequest: string;
29
+ selectedIconUri: string;
30
+ selectedIconScale: Double;
31
+ selectedIconTinted: string;
32
+ badge: string; // badge text, '' = no badge, ' ' = a dot
33
+ accessibilityLabel: string; // '' = the label
34
+ testID: string; // '' = none
35
+ role: string; // '' | 'search'
36
+ systemItem: string; // TabBar only; ignored
37
+ }>;
38
+
39
+ /** A press on a destination. `reselected` is 'true' when it was already selected. */
40
+ export type NavigationRailSelectEvent = Readonly<{
41
+ index: Int32;
42
+ value: string;
43
+ reselected: string; // 'true' | 'false'
44
+ }>;
45
+
46
+ /** Label font. Empty strings / 0 mean "platform default". */
47
+ export type NavigationRailLabelStyleProps = Readonly<{
48
+ fontFamily?: string;
49
+ fontSize?: Double;
50
+ fontWeight?: string;
51
+ fontStyle?: string;
52
+ }>;
53
+
54
+ export interface NavigationRailNativeProps extends ViewProps {
55
+ /** The destinations. */
56
+ items: ReadonlyArray<NavigationRailItem>;
57
+
58
+ /** Selected destination by value; '' = none. */
59
+ selectedValue?: WithDefault<string, ''>;
60
+
61
+ /** 'auto' | 'labeled' | 'selected' | 'unlabeled' */
62
+ labelVisibility?: string;
63
+
64
+ /** 'top' | 'center' | 'bottom' */
65
+ menuGravity?: string;
66
+
67
+ /** 'true' | 'false': the expanded rail (Android). */
68
+ expanded?: string;
69
+
70
+ /** Icon and label color of the selected destination. */
71
+ activeTintColor?: ColorValue;
72
+
73
+ /** Icon and label color of the other destinations. */
74
+ inactiveTintColor?: ColorValue;
75
+
76
+ /** Rail background. */
77
+ railColor?: ColorValue;
78
+
79
+ /** Badge colors. */
80
+ badgeBackgroundColor?: ColorValue;
81
+ badgeTextColor?: ColorValue;
82
+
83
+ /** Label font. */
84
+ labelStyle?: NavigationRailLabelStyleProps;
85
+
86
+ /** Largest font scale the labels may reach; 0 = no cap. */
87
+ maxFontSizeMultiplier?: Double;
88
+
89
+ /** Android: the active indicator behind the selected icon. */
90
+ androidIndicatorColor?: ColorValue;
91
+
92
+ /** Android: ripple shown while pressing a destination. */
93
+ androidRippleColor?: ColorValue;
94
+
95
+ /**
96
+ * Haptic played when a destination is pressed: '' (none added) | 'none' | 'selection' |
97
+ * 'light' | 'medium' | 'heavy' | 'success' | 'warning' | 'error'
98
+ */
99
+ haptics?: string;
100
+
101
+ /** Fired when a destination is pressed. */
102
+ onItemPress?: BubblingEventHandler<NavigationRailSelectEvent>;
103
+ }
104
+
105
+ export default codegenNativeComponent<NavigationRailNativeProps>(
106
+ 'PCNavigationRail'
107
+ ) as HostComponent<NavigationRailNativeProps>;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import type { PlatformComponentsProviderProps } from './webComponents';
3
+
4
+ export type {
5
+ PlatformComponentsProviderProps,
6
+ WebComponents,
7
+ WebComponentProps,
8
+ } from './webComponents';
9
+
10
+ /** Web registrations do not replace native controls on iOS or Android. */
11
+ export function PlatformComponentsProvider({
12
+ children,
13
+ }: PlatformComponentsProviderProps): React.ReactElement {
14
+ return <>{children}</>;
15
+ }
@@ -19,7 +19,9 @@ import {
19
19
  type PlatformIconSource,
20
20
  } from './icons';
21
21
  import { normalizeLabelStyle, type LabelStyle } from './labelStyle';
22
+ import type { Haptics } from './haptics';
22
23
  import type { AndroidMaterialStyle } from './sharedTypes';
24
+ import { warnSelectionIdentifiers } from './selectionIdentifiers';
23
25
 
24
26
  // Android: Minimum height to ensure visibility.
25
27
  // Fabric's shadow node measurement isn't being called on initial render,
@@ -61,7 +63,7 @@ export interface SegmentedControlSegmentProps {
61
63
  /** Display label for the segment */
62
64
  label: string;
63
65
 
64
- /** Unique value identifier for the segment */
66
+ /** Unique, non-empty value identifier for the segment. */
65
67
  value: string;
66
68
 
67
69
  /** Whether this specific segment is disabled */
@@ -82,6 +84,12 @@ export interface SegmentedControlSegmentProps {
82
84
  * announced by their title.
83
85
  */
84
86
  accessibilityLabel?: string;
87
+
88
+ /**
89
+ * Test identifier of the segment, for E2E taps. iOS: the segment's
90
+ * accessibility element. Android: the segment's button.
91
+ */
92
+ testID?: string;
85
93
  }
86
94
 
87
95
  export interface SegmentedControlProps extends ViewProps {
@@ -111,6 +119,13 @@ export interface SegmentedControlProps extends ViewProps {
111
119
  /** Whether the entire control is disabled */
112
120
  disabled?: boolean;
113
121
 
122
+ /**
123
+ * Haptic played when the user changes the selection (a tap that selects or
124
+ * clears a segment), not when `selectedValue` changes. Default: none, like
125
+ * the native controls. See {@link Haptics}.
126
+ */
127
+ haptics?: Haptics;
128
+
114
129
  /**
115
130
  * How labels and icons combine. Default: `'auto'`.
116
131
  * See {@link SegmentedControlLabelVisibility}.
@@ -132,6 +147,12 @@ export interface SegmentedControlProps extends ViewProps {
132
147
  /** Font for segment labels. See {@link SegmentedControlLabelStyle}. */
133
148
  labelStyle?: SegmentedControlLabelStyle;
134
149
 
150
+ /**
151
+ * Largest scale the labels may reach with the system text size (Dynamic
152
+ * Type / font scale), as on React Native `Text`. Unset or `0`: no cap.
153
+ */
154
+ maxFontSizeMultiplier?: number;
155
+
135
156
  /** Colors for segment badges. See {@link SegmentedControlBadgeStyle}. */
136
157
  badgeStyle?: SegmentedControlBadgeStyle;
137
158
 
@@ -205,7 +226,9 @@ export function SegmentedControl(
205
226
  activeTintColor,
206
227
  inactiveTintColor,
207
228
  labelStyle,
229
+ maxFontSizeMultiplier,
208
230
  badgeStyle,
231
+ haptics,
209
232
  onSelect,
210
233
  onDeselect,
211
234
  ios,
@@ -215,6 +238,10 @@ export function SegmentedControl(
215
238
 
216
239
  // Normalize segments for native
217
240
  const nativeSegments = useMemo((): NativeSegment[] => {
241
+ warnSelectionIdentifiers(
242
+ 'SegmentedControl',
243
+ segments.map((segment) => segment.value)
244
+ );
218
245
  return segments.map((seg) => ({
219
246
  label: seg.label,
220
247
  value: seg.value,
@@ -222,6 +249,7 @@ export function SegmentedControl(
222
249
  badge:
223
250
  seg.badge === undefined || seg.badge === null ? '' : String(seg.badge),
224
251
  accessibilityLabel: seg.accessibilityLabel ?? '',
252
+ testID: seg.testID ?? '',
225
253
  ...resolveSegmentIcon(seg.icon),
226
254
  }));
227
255
  }, [segments]);
@@ -296,8 +324,10 @@ export function SegmentedControl(
296
324
  androidRippleColor={android?.rippleColor}
297
325
  androidStrokeColor={android?.strokeColor}
298
326
  labelStyle={nativeLabelStyle}
327
+ maxFontSizeMultiplier={maxFontSizeMultiplier ?? 0}
299
328
  badgeBackgroundColor={badgeStyle?.backgroundColor}
300
329
  badgeTextColor={badgeStyle?.color}
330
+ haptics={haptics ?? ''}
301
331
  onSelect={onSelect || onDeselect ? handleSelect : undefined}
302
332
  ios={nativeIos}
303
333
  android={nativeAndroid}
@@ -21,11 +21,13 @@ export type SegmentedControlSegment = Readonly<{
21
21
  disabled: string; // 'enabled' | 'disabled'
22
22
  iconType: string; // '' | 'sfSymbol' | 'drawable' | 'image'
23
23
  iconName: string; // SF Symbol (iOS) or drawable resource name (Android)
24
+ iconRequest: string;
24
25
  iconUri: string; // Resolved image URI when iconType === 'image'
25
26
  iconScale: Double; // Resolved image scale when iconType === 'image'
26
27
  iconTinted: string; // 'true' | 'false' — draw the image as a tinted template
27
28
  badge: string; // Badge text, empty = no badge
28
29
  accessibilityLabel: string; // Screen-reader label, empty = use label
30
+ testID: string; // E2E identifier of the segment, empty = none
29
31
  }>;
30
32
 
31
33
  /**
@@ -117,12 +119,21 @@ export interface SegmentedControlProps extends ViewProps {
117
119
  /** Label font. */
118
120
  labelStyle?: LabelStyleProps;
119
121
 
122
+ /** Largest font scale the labels may reach; 0 = no cap. */
123
+ maxFontSizeMultiplier?: Double;
124
+
120
125
  /** Badge background (default: system red). */
121
126
  badgeBackgroundColor?: ColorValue;
122
127
 
123
128
  /** Badge text color (default: white). */
124
129
  badgeTextColor?: ColorValue;
125
130
 
131
+ /**
132
+ * Haptic played when the user changes the selection: '' (none added) | 'none' | 'selection' |
133
+ * 'light' | 'medium' | 'heavy' | 'success' | 'warning' | 'error'
134
+ */
135
+ haptics?: string;
136
+
126
137
  /**
127
138
  * Fired when the user selects a segment.
128
139
  */
@@ -3,14 +3,44 @@ import React, { useCallback, useMemo } from 'react';
3
3
  import { Platform, type ViewProps } from 'react-native';
4
4
 
5
5
  import NativeSelectionMenu, {
6
- type SelectionMenuOption,
6
+ type SelectionMenuNativeOption,
7
7
  type SelectionMenuSelectEvent,
8
8
  } from './SelectionMenuNativeComponent';
9
+ import { resolveIcon, type PlatformIcon } from './icons';
10
+ import { warnSelectionIdentifiers } from './selectionIdentifiers';
9
11
 
10
- export type { SelectionMenuOption };
11
-
12
+ import type { Haptics } from './haptics';
12
13
  import type { AndroidMaterialMode, Presentation } from './sharedTypes';
13
14
 
15
+ /**
16
+ * A single option: a label and its data payload, with an optional icon and
17
+ * second line.
18
+ */
19
+ export interface SelectionMenuOption {
20
+ /** Display text */
21
+ label: string;
22
+ /** Unique, non-empty payload returned by `onSelect` and matched by `selected`. */
23
+ data: string;
24
+ /** Keeps the option visible but prevents the user from choosing it. */
25
+ disabled?: boolean;
26
+ /**
27
+ * Secondary text under the label.
28
+ * - iOS: `UIAction.subtitle` in the system menu.
29
+ * - Android: a second line in the rows of the embedded `m3` dropdown.
30
+ * The modal `PopupMenu` and the `system` Spinner have one line per item,
31
+ * so it's not shown there.
32
+ */
33
+ subtitle?: string;
34
+ /**
35
+ * Icon next to the label. See {@link PlatformIcon}.
36
+ * - iOS: `UIAction.image`.
37
+ * - Android: the modal `PopupMenu` item icon and a leading icon in the
38
+ * rows of the embedded `m3` dropdown. The `system` Spinner shows labels
39
+ * only.
40
+ */
41
+ icon?: PlatformIcon;
42
+ }
43
+
14
44
  export interface SelectionMenuProps extends ViewProps {
15
45
  /** Options are label + data (payload) */
16
46
  options: readonly SelectionMenuOption[];
@@ -37,6 +67,12 @@ export interface SelectionMenuProps extends ViewProps {
37
67
  */
38
68
  visible?: boolean;
39
69
 
70
+ /**
71
+ * Haptic played when the user picks an option. Default: none beyond the
72
+ * system menu's own feedback. See {@link Haptics}.
73
+ */
74
+ haptics?: Haptics;
75
+
40
76
  /**
41
77
  * Called when the user selects an option.
42
78
  * Receives the selected `data` payload, plus label/index for convenience.
@@ -56,12 +92,38 @@ export interface SelectionMenuProps extends ViewProps {
56
92
  android?: {
57
93
  /** Material preference ('system' | 'm3'). */
58
94
  material?: AndroidMaterialMode;
95
+ /**
96
+ * Embedded `m3` dropdown only: the field accepts typing and filters the
97
+ * options by label (case-insensitive prefix of the label or of any word
98
+ * in it). Picking an option still goes through `onSelect`, and `selected`
99
+ * stays the source of truth: when the field loses focus, its text goes
100
+ * back to the selected option's label (or empty, showing the
101
+ * placeholder). Default `false`.
102
+ */
103
+ searchable?: boolean;
59
104
  };
60
105
 
61
106
  /** Test identifier */
62
107
  testID?: string;
63
108
  }
64
109
 
110
+ /** Flattens options for native: icons resolved, every field set. */
111
+ function normalizeSelectionMenuOptions(
112
+ options: readonly SelectionMenuOption[]
113
+ ): SelectionMenuNativeOption[] {
114
+ warnSelectionIdentifiers(
115
+ 'SelectionMenu',
116
+ options.map((option) => option.data)
117
+ );
118
+ return options.map((option) => ({
119
+ label: option.label,
120
+ data: option.data,
121
+ disabled: option.disabled ? 'true' : 'false',
122
+ subtitle: option.subtitle ?? '',
123
+ ...resolveIcon(option.icon),
124
+ }));
125
+ }
126
+
65
127
  function normalizeSelectedData(selected: string | null): string {
66
128
  return selected ?? '';
67
129
  }
@@ -84,6 +146,7 @@ export function SelectionMenu(props: SelectionMenuProps): React.ReactElement {
84
146
  placeholder,
85
147
  presentation = 'modal',
86
148
  visible,
149
+ haptics,
87
150
  onSelect,
88
151
  onRequestClose,
89
152
  ios,
@@ -96,6 +159,11 @@ export function SelectionMenu(props: SelectionMenuProps): React.ReactElement {
96
159
  [selected]
97
160
  );
98
161
 
162
+ const nativeOptions = useMemo(
163
+ () => normalizeSelectionMenuOptions(options),
164
+ [options]
165
+ );
166
+
99
167
  const nativeVisible = useMemo(
100
168
  () => normalizeNativeVisible(presentation, visible),
101
169
  [presentation, visible]
@@ -104,9 +172,12 @@ export function SelectionMenu(props: SelectionMenuProps): React.ReactElement {
104
172
  const handleSelect = useCallback(
105
173
  (e: { nativeEvent: SelectionMenuSelectEvent }) => {
106
174
  const { index, label, data } = e.nativeEvent;
175
+ const option = options[index];
176
+ if (disabled || !option || option.disabled || option.data !== data)
177
+ return;
107
178
  onSelect?.(data, label, index);
108
179
  },
109
- [onSelect]
180
+ [disabled, onSelect, options]
110
181
  );
111
182
 
112
183
  const handleRequestClose = useCallback(() => {
@@ -116,7 +187,10 @@ export function SelectionMenu(props: SelectionMenuProps): React.ReactElement {
116
187
  // Keep android prop stable and codegen-friendly (string unions live in native spec).
117
188
  const nativeAndroid = useMemo(() => {
118
189
  if (!android) return undefined;
119
- return { material: android.material };
190
+ return {
191
+ material: android.material,
192
+ searchable: android.searchable ? 'true' : 'false',
193
+ };
120
194
  }, [android]);
121
195
 
122
196
  // On Android, force a fresh native view when structural props change so the
@@ -130,12 +204,13 @@ export function SelectionMenu(props: SelectionMenuProps): React.ReactElement {
130
204
  <NativeSelectionMenu
131
205
  key={remountKey}
132
206
  style={style}
133
- options={options}
207
+ options={nativeOptions}
134
208
  selectedData={selectedData}
135
209
  interactivity={disabled ? 'disabled' : 'enabled'}
136
210
  placeholder={placeholder}
137
211
  anchorMode={presentation === 'embedded' ? 'inline' : 'headless'}
138
212
  visible={nativeVisible}
213
+ haptics={haptics ?? ''}
139
214
  onSelect={onSelect ? handleSelect : undefined}
140
215
  onRequestClose={onRequestClose ? handleRequestClose : undefined}
141
216
  ios={ios}