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
@@ -1,14 +1,28 @@
1
1
  // SelectionMenuNativeComponent.ts
2
2
  import type { HostComponent, ViewProps } from 'react-native';
3
3
  import { codegenNativeComponent } from 'react-native';
4
- import type { BubblingEventHandler, Int32, WithDefault } from './codegenTypes';
4
+ import type {
5
+ BubblingEventHandler,
6
+ Double,
7
+ Int32,
8
+ WithDefault,
9
+ } from './codegenTypes';
5
10
 
6
11
  /**
7
- * A single option in the menu.
12
+ * A single option in the menu. Icons are pre-resolved on the JS side (see
13
+ * icons.ts); empty strings mean "none".
8
14
  */
9
- export type SelectionMenuOption = Readonly<{
15
+ export type SelectionMenuNativeOption = Readonly<{
10
16
  label: string;
11
17
  data: string;
18
+ disabled: string; // 'true' | 'false'
19
+ subtitle: string;
20
+ iconType: string; // '' | 'sfSymbol' | 'drawable' | 'image'
21
+ iconName: string;
22
+ iconRequest: string;
23
+ iconUri: string;
24
+ iconScale: Double;
25
+ iconTinted: string; // 'true' | 'false'
12
26
  }>;
13
27
 
14
28
  /**
@@ -44,13 +58,15 @@ export type IOSProps = Readonly<{}>;
44
58
  */
45
59
  export type AndroidProps = Readonly<{
46
60
  material?: string; // AndroidMaterialMode
61
+ /** Embedded M3 dropdown: accept typing to filter the options */
62
+ searchable?: string; // 'true' | 'false'
47
63
  }>;
48
64
 
49
65
  export interface SelectionMenuProps extends ViewProps {
50
66
  /**
51
67
  * Menu options.
52
68
  */
53
- options: ReadonlyArray<SelectionMenuOption>;
69
+ options: ReadonlyArray<SelectionMenuNativeOption>;
54
70
 
55
71
  /**
56
72
  * Controlled selection by `data`.
@@ -81,6 +97,12 @@ export interface SelectionMenuProps extends ViewProps {
81
97
  */
82
98
  visible?: string; // SelectionMenuVisible
83
99
 
100
+ /**
101
+ * Haptic played when the user picks an option: '' (none added) | 'none' | 'selection' |
102
+ * 'light' | 'medium' | 'heavy' | 'success' | 'warning' | 'error'
103
+ */
104
+ haptics?: string;
105
+
84
106
  /**
85
107
  * Fired when the user selects an option.
86
108
  */
@@ -0,0 +1,198 @@
1
+ // SplitButton.tsx
2
+ import React, { useCallback, useMemo } from 'react';
3
+ import type { ColorValue, NativeSyntheticEvent, ViewProps } from 'react-native';
4
+
5
+ import type { ButtonSize, ButtonVariant } from './Button';
6
+ import NativeButtonGroup, {
7
+ type ButtonGroupMenuSelectEvent,
8
+ } from './ButtonGroupNativeComponent';
9
+ import { resolveIcon, type PlatformIcon } from './icons';
10
+ import { normalizeLabelStyle, type LabelStyle } from './labelStyle';
11
+ import { flattenMenuActions, type ContextMenuAction } from './menuItems';
12
+ import type { Haptics } from './haptics';
13
+ import type { AndroidMaterialStyle } from './sharedTypes';
14
+
15
+ /**
16
+ * Emphasis of a split button: the Button variants without `text`, which has
17
+ * no container to split.
18
+ */
19
+ export type SplitButtonVariant = Exclude<ButtonVariant, 'text'>;
20
+
21
+ export interface SplitButtonProps extends ViewProps {
22
+ /** Text of the main button. Omit for an icon-only main button. */
23
+ label?: string;
24
+
25
+ /** Icon of the main button. See {@link PlatformIcon}. */
26
+ icon?: PlatformIcon;
27
+
28
+ /** Screen-reader label of the main button. Defaults to `label`. */
29
+ accessibilityLabel?: string;
30
+
31
+ /**
32
+ * The menu the trailing button opens. Same items as ContextMenu:
33
+ * submenus, sections, icons, states and attributes.
34
+ */
35
+ menu: readonly ContextMenuAction[];
36
+
37
+ /**
38
+ * Screen-reader label of the trailing menu button. Default:
39
+ * `'More options'`.
40
+ */
41
+ menuAccessibilityLabel?: string;
42
+
43
+ /** Emphasis. Default: `'filled'`. See {@link SplitButtonVariant}. */
44
+ variant?: SplitButtonVariant;
45
+
46
+ /** Size. Default: `'small'`. */
47
+ size?: ButtonSize;
48
+
49
+ /** Whether both buttons are disabled. */
50
+ disabled?: boolean;
51
+
52
+ /** Container (background) color. */
53
+ color?: ColorValue;
54
+
55
+ /** Label and icon color. */
56
+ tintColor?: ColorValue;
57
+
58
+ /** Label font. */
59
+ labelStyle?: LabelStyle;
60
+
61
+ /**
62
+ * Haptic played when the main button is pressed or a menu item is picked
63
+ * (not when the menu opens); a menu item's own `haptics` wins. Default:
64
+ * none, like the native buttons. See {@link Haptics}.
65
+ */
66
+ haptics?: Haptics;
67
+
68
+ /** Called when the main button is pressed. */
69
+ onPress?: () => void;
70
+
71
+ /** Called when a menu item is picked, with its id and title. */
72
+ onMenuSelect?: (id: string, title: string) => void;
73
+
74
+ /** Called when the menu opens. */
75
+ onMenuOpen?: () => void;
76
+
77
+ /** Called when the menu closes. */
78
+ onMenuClose?: () => void;
79
+
80
+ /**
81
+ * Android-specific configuration
82
+ */
83
+ android?: {
84
+ /** Ripple color shown while pressing. */
85
+ rippleColor?: ColorValue;
86
+
87
+ /** Outline color (outlined variant). */
88
+ strokeColor?: ColorValue;
89
+
90
+ /**
91
+ * Material style: Material 3 Expressive (default), or the classic
92
+ * Material 3 buttons, which have one size (`size` is ignored).
93
+ */
94
+ material?: AndroidMaterialStyle;
95
+ };
96
+
97
+ /** Test identifier */
98
+ testID?: string;
99
+ }
100
+
101
+ /**
102
+ * A main action with an attached menu, like "Send ▾".
103
+ *
104
+ * - Android: Material 3 `MaterialSplitButton`, a leading button and a
105
+ * trailing icon button whose chevron turns while the `PopupMenu` is open.
106
+ * - iOS: a button joined to a chevron button that opens a `UIMenu`
107
+ * (`showsMenuAsPrimaryAction`).
108
+ */
109
+ export function SplitButton(props: SplitButtonProps): React.ReactElement {
110
+ const {
111
+ label,
112
+ icon,
113
+ accessibilityLabel,
114
+ menu,
115
+ menuAccessibilityLabel,
116
+ variant,
117
+ size,
118
+ disabled,
119
+ color,
120
+ tintColor,
121
+ labelStyle,
122
+ haptics,
123
+ onPress,
124
+ onMenuSelect,
125
+ onMenuOpen,
126
+ onMenuClose,
127
+ android,
128
+ ...viewProps
129
+ } = props;
130
+
131
+ const nativeButtons = useMemo(
132
+ () => [
133
+ {
134
+ label: label ?? '',
135
+ value: 'primary',
136
+ disabled: 'enabled',
137
+ accessibilityLabel: accessibilityLabel ?? '',
138
+ ...resolveIcon(icon),
139
+ },
140
+ ],
141
+ [label, icon, accessibilityLabel]
142
+ );
143
+
144
+ const nativeMenu = useMemo(() => flattenMenuActions(menu), [menu]);
145
+
146
+ const nativeLabelStyle = useMemo(
147
+ () => normalizeLabelStyle(labelStyle),
148
+ [labelStyle]
149
+ );
150
+
151
+ const nativeAndroid = useMemo(
152
+ () => ({ material: android?.material ?? 'expressive' }),
153
+ [android?.material]
154
+ );
155
+
156
+ const handlePress = useCallback(() => onPress?.(), [onPress]);
157
+
158
+ const handleMenuSelect = useCallback(
159
+ (e: NativeSyntheticEvent<ButtonGroupMenuSelectEvent>) => {
160
+ onMenuSelect?.(e.nativeEvent.id, e.nativeEvent.title);
161
+ },
162
+ [onMenuSelect]
163
+ );
164
+
165
+ const handleMenuOpen = useCallback(() => onMenuOpen?.(), [onMenuOpen]);
166
+ const handleMenuClose = useCallback(() => onMenuClose?.(), [onMenuClose]);
167
+
168
+ return (
169
+ <NativeButtonGroup
170
+ buttons={nativeButtons}
171
+ split="true"
172
+ menu={nativeMenu}
173
+ menuAccessibilityLabel={menuAccessibilityLabel ?? 'More options'}
174
+ variant={variant ?? 'filled'}
175
+ size={size ?? 'small'}
176
+ shape=""
177
+ connected="true"
178
+ spacing={-1}
179
+ selection="none"
180
+ selectedValues={[]}
181
+ selectionRequired="false"
182
+ interactivity={disabled ? 'disabled' : 'enabled'}
183
+ color={color}
184
+ foregroundColor={tintColor}
185
+ androidRippleColor={android?.rippleColor}
186
+ androidStrokeColor={android?.strokeColor}
187
+ labelStyle={nativeLabelStyle}
188
+ overflow="none"
189
+ haptics={haptics ?? ''}
190
+ onButtonPress={onPress ? handlePress : undefined}
191
+ onMenuSelect={onMenuSelect ? handleMenuSelect : undefined}
192
+ onMenuOpen={onMenuOpen ? handleMenuOpen : undefined}
193
+ onMenuClose={onMenuClose ? handleMenuClose : undefined}
194
+ android={nativeAndroid}
195
+ {...viewProps}
196
+ />
197
+ );
198
+ }
package/src/TabBar.tsx ADDED
@@ -0,0 +1,373 @@
1
+ // TabBar.tsx
2
+ import React, { useCallback, useId, useMemo, useRef, useState } from 'react';
3
+ import {
4
+ StyleSheet,
5
+ View,
6
+ type ColorValue,
7
+ type NativeSyntheticEvent,
8
+ type ViewProps,
9
+ } from 'react-native';
10
+
11
+ import NativeTabBar, {
12
+ type TabBarAccessoryLayoutEvent,
13
+ type TabBarSelectEvent,
14
+ } from './TabBarNativeComponent';
15
+ import NativeTabBarAccessory from './TabBarAccessoryNativeComponent';
16
+ import { isLiquidGlassSupported } from './LiquidGlass';
17
+ import type { Haptics } from './haptics';
18
+ import { normalizeLabelStyle, type LabelStyle } from './labelStyle';
19
+ import {
20
+ MAX_TAB_ITEMS,
21
+ toNativeTabItems,
22
+ type TabBarItemProps,
23
+ } from './tabItems';
24
+
25
+ export type { TabBarItemProps, TabBarSystemItem } from './tabItems';
26
+
27
+ /**
28
+ * How labels show under the icons.
29
+ *
30
+ * - `auto` (default): the platform default. iOS labels every tab; Android
31
+ * labels every tab up to three, and only the selected one from four.
32
+ * - `labeled`: every tab shows its label.
33
+ * - `selected`: only the selected tab shows its label. Android only; iOS
34
+ * labels every tab.
35
+ * - `unlabeled`: icons only. Screen readers still announce the labels.
36
+ */
37
+ export type TabBarLabelVisibility =
38
+ 'auto' | 'labeled' | 'selected' | 'unlabeled';
39
+
40
+ /**
41
+ * When the bar gets out of the way of scrolling content, following the
42
+ * ScrollView named by `scrollViewNativeID`.
43
+ *
44
+ * - `onScrollDown`: minimize while scrolling down, come back scrolling up.
45
+ * - `onScrollUp`: the reverse.
46
+ * - `automatic`: the platform default (iOS 26: minimize on scroll down).
47
+ * - `never`: always full size.
48
+ */
49
+ export type TabBarMinimizeBehavior =
50
+ 'automatic' | 'never' | 'onScrollDown' | 'onScrollUp';
51
+
52
+ /**
53
+ * Where the iOS 26 bottom accessory sits: `regular`, its own row above the
54
+ * bar, or `inline`, beside the minimized bar.
55
+ */
56
+ export type TabBarAccessoryEnvironment = 'regular' | 'inline';
57
+
58
+ /**
59
+ * Android: the tab layout. `vertical` puts the icon above the label,
60
+ * `horizontal` beside it (Material 3 Expressive, for wide bars), and `auto`
61
+ * picks horizontal when the bar is at least 600dp wide.
62
+ */
63
+ export type TabBarItemLayout = 'vertical' | 'horizontal' | 'auto';
64
+
65
+ /**
66
+ * Android: the shape of the active indicator. `pill` (default) has fully
67
+ * rounded ends; `circle` is a circle the indicator's height across; a number
68
+ * is the corner radius, in dp, of a rounded rectangle.
69
+ */
70
+ export type TabBarIndicatorShape = 'pill' | 'circle' | number;
71
+
72
+ /** Badge colors. Both default to the platform look. */
73
+ export interface TabBarBadgeStyle {
74
+ backgroundColor?: ColorValue;
75
+ color?: ColorValue;
76
+ }
77
+
78
+ export interface TabBarProps extends ViewProps {
79
+ /** The tabs, at most five. */
80
+ items: readonly TabBarItemProps[];
81
+
82
+ /** Selected tab's `value`; `null` for none. */
83
+ selectedValue: string | null;
84
+
85
+ /** Called when the user selects a tab. */
86
+ onSelect?: (value: string, index: number) => void;
87
+
88
+ /**
89
+ * Called when the user presses the tab that is already selected, the
90
+ * conventional "scroll to top" or "back to root" gesture.
91
+ */
92
+ onReselect?: (value: string, index: number) => void;
93
+
94
+ /**
95
+ * Haptic played when the user presses a tab, including the selected one
96
+ * (a reselect). Default: none, like the native tab bars. See
97
+ * {@link Haptics}.
98
+ */
99
+ haptics?: Haptics;
100
+
101
+ /** How labels show. Default: `'auto'`. See {@link TabBarLabelVisibility}. */
102
+ labelVisibility?: TabBarLabelVisibility;
103
+
104
+ /** Icon and label color of the selected tab. Default: the tint / Material primary color. */
105
+ activeTintColor?: ColorValue;
106
+
107
+ /** Icon and label color of the other tabs. */
108
+ inactiveTintColor?: ColorValue;
109
+
110
+ /**
111
+ * Background of the bar. Default: the platform's bar material (the system
112
+ * chrome on iOS, the Material surface container on Android). Use
113
+ * `'transparent'` to place the bar on your own background, such as a
114
+ * FloatingToolbar.
115
+ */
116
+ barColor?: ColorValue;
117
+
118
+ /** Colors for the badges. */
119
+ badgeStyle?: TabBarBadgeStyle;
120
+
121
+ /** Label font. */
122
+ labelStyle?: LabelStyle;
123
+
124
+ /**
125
+ * Largest scale the labels may reach with the system font scale, as on
126
+ * `Text`. Android only: iOS tab bar labels keep a fixed size and show the
127
+ * large content viewer instead. Unset or `0`: no cap.
128
+ */
129
+ maxFontSizeMultiplier?: number;
130
+
131
+ /**
132
+ * Minimizes the bar as the content scrolls. iOS 26: the system tab bar
133
+ * minimization, the bar shrinking to the selected tab. Needs
134
+ * `scrollViewNativeID`.
135
+ */
136
+ minimizeBehavior?: TabBarMinimizeBehavior;
137
+
138
+ /**
139
+ * The `nativeID` of the ScrollView (or FlatList) whose scrolling drives
140
+ * `minimizeBehavior`.
141
+ */
142
+ scrollViewNativeID?: string;
143
+
144
+ /**
145
+ * A view carried with the bar, such as a mini player.
146
+ *
147
+ * - iOS 26: the tab bar's bottom accessory (`UITabAccessory`), a glass row
148
+ * above the bar that moves inline beside the bar while it's minimized.
149
+ * Your view is laid out at the accessory's size.
150
+ * - Android and iOS before 26: a plain view above the bar, drawn by you.
151
+ * On Android it slides away with the bar under `minimizeBehavior`.
152
+ *
153
+ * The bar's height includes the accessory.
154
+ */
155
+ accessory?: React.ReactNode;
156
+
157
+ /**
158
+ * Called when the iOS 26 accessory moves between `'regular'` (its row
159
+ * above the bar) and `'inline'` (beside the minimized bar), to switch to a
160
+ * compact layout. Elsewhere the accessory is always regular.
161
+ */
162
+ onAccessoryEnvironmentChange?: (
163
+ environment: TabBarAccessoryEnvironment
164
+ ) => void;
165
+
166
+ /** Android-specific configuration. */
167
+ android?: {
168
+ /** Color of the active indicator pill behind the selected icon. */
169
+ indicatorColor?: ColorValue;
170
+
171
+ /** Ripple shown while pressing a tab. */
172
+ rippleColor?: ColorValue;
173
+
174
+ /** Whether the selected tab shows the active indicator. Default: `true`. */
175
+ indicator?: boolean;
176
+
177
+ /** Shape of the active indicator. Default: `'pill'`. See {@link TabBarIndicatorShape}. */
178
+ indicatorShape?: TabBarIndicatorShape;
179
+
180
+ /**
181
+ * Width of the active indicator, in dp. Default: the Material width
182
+ * (64). Horizontal tabs size their indicator to the icon and label.
183
+ */
184
+ indicatorWidth?: number;
185
+
186
+ /** Height of the active indicator, in dp. Default: the Material height (32). */
187
+ indicatorHeight?: number;
188
+
189
+ /** Icon above or beside the label. Default: `'vertical'`. See {@link TabBarItemLayout}. */
190
+ itemLayout?: TabBarItemLayout;
191
+ };
192
+
193
+ /** Test identifier of the bar. */
194
+ testID?: string;
195
+ }
196
+
197
+ type AccessoryFrame = Readonly<{
198
+ x: number;
199
+ y: number;
200
+ width: number;
201
+ height: number;
202
+ }>;
203
+
204
+ export function TabBar(props: TabBarProps): React.ReactElement {
205
+ const {
206
+ items,
207
+ selectedValue,
208
+ onSelect,
209
+ onReselect,
210
+ haptics,
211
+ labelVisibility,
212
+ activeTintColor,
213
+ inactiveTintColor,
214
+ barColor,
215
+ badgeStyle,
216
+ labelStyle,
217
+ maxFontSizeMultiplier,
218
+ minimizeBehavior,
219
+ scrollViewNativeID,
220
+ accessory,
221
+ onAccessoryEnvironmentChange,
222
+ android,
223
+ style,
224
+ ...viewProps
225
+ } = props;
226
+
227
+ if (__DEV__ && items.length > MAX_TAB_ITEMS) {
228
+ console.warn(
229
+ `TabBar: ${items.length} tabs given; the platform tab bars show at most ${MAX_TAB_ITEMS}, so the rest are dropped.`
230
+ );
231
+ }
232
+
233
+ const nativeItems = useMemo(() => toNativeTabItems(items), [items]);
234
+
235
+ const handleTabPress = useCallback(
236
+ (event: NativeSyntheticEvent<TabBarSelectEvent>) => {
237
+ const { index, value, reselected } = event.nativeEvent;
238
+ if (reselected === 'true') {
239
+ onReselect?.(value, index);
240
+ } else {
241
+ onSelect?.(value, index);
242
+ }
243
+ },
244
+ [onSelect, onReselect]
245
+ );
246
+
247
+ const nativeLabelStyle = useMemo(
248
+ () => normalizeLabelStyle(labelStyle),
249
+ [labelStyle]
250
+ );
251
+
252
+ // --- Accessory ---
253
+ // iOS 26 hosts it in UIKit's accessory: the content mounts into the
254
+ // accessory view, laid out at the size and place native reports. Elsewhere
255
+ // it is a plain view above the bar.
256
+ const hasAccessory =
257
+ accessory !== undefined && accessory !== null && accessory !== false;
258
+ const hostsAccessory = hasAccessory && isLiquidGlassSupported;
259
+ const accessoryID = `pc-tab-accessory${useId()}`;
260
+ const [accessoryFrame, setAccessoryFrame] = useState<AccessoryFrame | null>(
261
+ null
262
+ );
263
+ const environment = useRef<TabBarAccessoryEnvironment>('regular');
264
+
265
+ const handleAccessoryLayout = useCallback(
266
+ (event: NativeSyntheticEvent<TabBarAccessoryLayoutEvent>) => {
267
+ const { x, y, width, height } = event.nativeEvent;
268
+ setAccessoryFrame((current) =>
269
+ current &&
270
+ current.x === x &&
271
+ current.y === y &&
272
+ current.width === width &&
273
+ current.height === height
274
+ ? current
275
+ : { x, y, width, height }
276
+ );
277
+ const next: TabBarAccessoryEnvironment =
278
+ event.nativeEvent.environment === 'inline' ? 'inline' : 'regular';
279
+ if (next !== environment.current) {
280
+ environment.current = next;
281
+ onAccessoryEnvironmentChange?.(next);
282
+ }
283
+ },
284
+ [onAccessoryEnvironmentChange]
285
+ );
286
+
287
+ const indicatorShape = android?.indicatorShape;
288
+
289
+ const bar = (
290
+ <NativeTabBar
291
+ items={nativeItems}
292
+ selectedValue={selectedValue ?? ''}
293
+ labelVisibility={labelVisibility ?? 'auto'}
294
+ activeTintColor={activeTintColor}
295
+ inactiveTintColor={inactiveTintColor}
296
+ barColor={barColor}
297
+ badgeBackgroundColor={badgeStyle?.backgroundColor}
298
+ badgeTextColor={badgeStyle?.color}
299
+ labelStyle={nativeLabelStyle}
300
+ maxFontSizeMultiplier={maxFontSizeMultiplier ?? 0}
301
+ minimizeBehavior={minimizeBehavior ?? ''}
302
+ scrollViewNativeID={scrollViewNativeID ?? ''}
303
+ accessoryID={hasAccessory ? accessoryID : ''}
304
+ androidIndicatorColor={android?.indicatorColor}
305
+ androidRippleColor={android?.rippleColor}
306
+ androidIndicator={
307
+ android?.indicator === undefined ? '' : String(android.indicator)
308
+ }
309
+ androidIndicatorShape={
310
+ typeof indicatorShape === 'number' ? 'rounded' : (indicatorShape ?? '')
311
+ }
312
+ androidIndicatorCornerRadius={
313
+ typeof indicatorShape === 'number' ? indicatorShape : 0
314
+ }
315
+ androidIndicatorWidth={android?.indicatorWidth ?? 0}
316
+ androidIndicatorHeight={android?.indicatorHeight ?? 0}
317
+ androidItemLayout={android?.itemLayout ?? ''}
318
+ haptics={haptics ?? ''}
319
+ onTabPress={onSelect || onReselect ? handleTabPress : undefined}
320
+ onAccessoryLayout={hostsAccessory ? handleAccessoryLayout : undefined}
321
+ style={hasAccessory ? undefined : style}
322
+ {...viewProps}
323
+ />
324
+ );
325
+
326
+ if (!hasAccessory) {
327
+ return bar;
328
+ }
329
+
330
+ if (hostsAccessory) {
331
+ // The inner view has no padding, so the accessory's offsets are in the
332
+ // bar's coordinates. The content's place in the layout matches where
333
+ // UIKit shows it, for touch handling that measures views.
334
+ return (
335
+ <View style={style} pointerEvents="box-none">
336
+ <View pointerEvents="box-none">
337
+ {bar}
338
+ <NativeTabBarAccessory
339
+ accessoryID={accessoryID}
340
+ style={[
341
+ styles.hostedAccessory,
342
+ accessoryFrame
343
+ ? {
344
+ left: accessoryFrame.x,
345
+ top: accessoryFrame.y,
346
+ width: accessoryFrame.width,
347
+ height: accessoryFrame.height,
348
+ }
349
+ : styles.accessoryPlaceholder,
350
+ ]}
351
+ >
352
+ {accessory}
353
+ </NativeTabBarAccessory>
354
+ </View>
355
+ </View>
356
+ );
357
+ }
358
+
359
+ return (
360
+ <View style={style} pointerEvents="box-none">
361
+ <View nativeID={accessoryID} collapsable={false}>
362
+ {accessory}
363
+ </View>
364
+ {bar}
365
+ </View>
366
+ );
367
+ }
368
+
369
+ const styles = StyleSheet.create({
370
+ hostedAccessory: { position: 'absolute' },
371
+ // Until the first layout: the accessory's usual row across the bar
372
+ accessoryPlaceholder: { left: 0, right: 0, top: 0, height: 48 },
373
+ });
@@ -0,0 +1,19 @@
1
+ // TabBarAccessoryNativeComponent.ts
2
+ import type { HostComponent, ViewProps } from 'react-native';
3
+ import { codegenNativeComponent } from 'react-native';
4
+
5
+ /**
6
+ * The content of a TabBar's bottom accessory on iOS 26. Its children are
7
+ * mounted into the view UIKit shows as the tab bar's accessory, found by the
8
+ * bar through `accessoryID`; this view itself stays empty in the layout.
9
+ */
10
+ export interface TabBarAccessoryNativeProps extends ViewProps {
11
+ /** The id the TabBar links to; '' = not linked. */
12
+ accessoryID: string;
13
+ }
14
+
15
+ export default codegenNativeComponent<TabBarAccessoryNativeProps>(
16
+ 'PCTabBarAccessory',
17
+ // Only iOS 26 hosts the accessory; Android renders a plain view
18
+ { excludedPlatforms: ['android'] }
19
+ ) as HostComponent<TabBarAccessoryNativeProps>;