react-native-platform-components 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (598) hide show
  1. package/PlatformComponents.podspec +1 -1
  2. package/README.md +33 -31
  3. package/android/src/main/java/com/platformcomponents/PCButtonGroupView.kt +175 -9
  4. package/android/src/main/java/com/platformcomponents/PCButtonGroupViewManager.kt +52 -2
  5. package/android/src/main/java/com/platformcomponents/PCButtonSupport.kt +44 -12
  6. package/android/src/main/java/com/platformcomponents/PCButtonView.kt +187 -5
  7. package/android/src/main/java/com/platformcomponents/PCButtonViewManager.kt +85 -7
  8. package/android/src/main/java/com/platformcomponents/PCContextMenuView.kt +41 -151
  9. package/android/src/main/java/com/platformcomponents/PCContextMenuViewManager.kt +7 -63
  10. package/android/src/main/java/com/platformcomponents/PCDatePickerView.kt +310 -115
  11. package/android/src/main/java/com/platformcomponents/PCDatePickerViewManager.kt +23 -3
  12. package/android/src/main/java/com/platformcomponents/PCExpressive.kt +6 -1
  13. package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonView.kt +485 -0
  14. package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonViewManager.kt +109 -0
  15. package/android/src/main/java/com/platformcomponents/PCFloatingToolbarView.kt +132 -0
  16. package/android/src/main/java/com/platformcomponents/PCFloatingToolbarViewManager.kt +8 -0
  17. package/android/src/main/java/com/platformcomponents/PCHaptics.kt +46 -0
  18. package/android/src/main/java/com/platformcomponents/PCImageLoader.kt +42 -7
  19. package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerView.kt +32 -0
  20. package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerViewManager.kt +31 -0
  21. package/android/src/main/java/com/platformcomponents/PCLiquidGlassView.kt +32 -6
  22. package/android/src/main/java/com/platformcomponents/PCLiquidGlassViewManager.kt +4 -0
  23. package/android/src/main/java/com/platformcomponents/PCMenuSupport.kt +280 -0
  24. package/android/src/main/java/com/platformcomponents/PCNavigationBarSupport.kt +332 -0
  25. package/android/src/main/java/com/platformcomponents/PCNavigationRailView.kt +448 -0
  26. package/android/src/main/java/com/platformcomponents/PCNavigationRailViewManager.kt +176 -0
  27. package/android/src/main/java/com/platformcomponents/PCSegmentedControlView.kt +24 -14
  28. package/android/src/main/java/com/platformcomponents/PCSegmentedControlViewManager.kt +14 -2
  29. package/android/src/main/java/com/platformcomponents/PCSelectionMenuView.kt +371 -39
  30. package/android/src/main/java/com/platformcomponents/PCSelectionMenuViewManager.kt +18 -4
  31. package/android/src/main/java/com/platformcomponents/PCTabBarView.kt +397 -0
  32. package/android/src/main/java/com/platformcomponents/PCTabBarViewManager.kt +182 -0
  33. package/android/src/main/java/com/platformcomponents/PCTextFieldView.kt +415 -40
  34. package/android/src/main/java/com/platformcomponents/PCTextFieldViewManager.kt +109 -3
  35. package/android/src/main/java/com/platformcomponents/PCThemeSupport.kt +37 -0
  36. package/android/src/main/java/com/platformcomponents/PlatformComponentsPackage.kt +4 -0
  37. package/android/src/main/res/drawable/pc_ic_search.xml +12 -0
  38. package/android/src/main/res/values/ids.xml +5 -0
  39. package/android/src/main/res/values/styles.xml +24 -0
  40. package/ios/PCButton.mm +122 -7
  41. package/ios/PCButtonGroup.mm +68 -1
  42. package/ios/PCButtonGroupView.swift +225 -6
  43. package/ios/PCButtonSupport.swift +181 -10
  44. package/ios/PCButtonView.swift +297 -14
  45. package/ios/PCConstants.swift +23 -2
  46. package/ios/PCContextMenu.mm +28 -110
  47. package/ios/PCContextMenu.swift +106 -167
  48. package/ios/PCDatePicker.mm +21 -9
  49. package/ios/PCDatePickerView.swift +94 -20
  50. package/ios/PCFloatingActionButton.h +10 -0
  51. package/ios/PCFloatingActionButton.mm +177 -0
  52. package/ios/PCFloatingActionButtonView.swift +426 -0
  53. package/ios/PCFloatingToolbar.mm +27 -0
  54. package/ios/PCFloatingToolbarView.swift +241 -0
  55. package/ios/PCHaptics.swift +91 -0
  56. package/ios/PCImageLoader.swift +76 -12
  57. package/ios/PCLiquidGlass.mm +36 -0
  58. package/ios/PCLiquidGlass.swift +221 -114
  59. package/ios/PCLiquidGlassContainer.h +10 -0
  60. package/ios/PCLiquidGlassContainer.mm +84 -0
  61. package/ios/PCLiquidGlassContainer.swift +69 -0
  62. package/ios/PCMenuItems.h +76 -0
  63. package/ios/PCMenuSupport.swift +350 -0
  64. package/ios/PCNavigationRail.h +10 -0
  65. package/ios/PCNavigationRail.mm +270 -0
  66. package/ios/PCNavigationRailView.swift +415 -0
  67. package/ios/PCSegmentedControl.mm +17 -2
  68. package/ios/PCSegmentedControl.swift +57 -7
  69. package/ios/PCSelectionMenu.mm +36 -8
  70. package/ios/PCSelectionMenu.swift +224 -48
  71. package/ios/PCTabBar.h +10 -0
  72. package/ios/PCTabBar.mm +285 -0
  73. package/ios/PCTabBarAccessory.h +10 -0
  74. package/ios/PCTabBarAccessory.mm +93 -0
  75. package/ios/PCTabBarAccessoryView.swift +96 -0
  76. package/ios/PCTabBarView.swift +671 -0
  77. package/ios/PCTextField.mm +159 -4
  78. package/ios/PCTextFieldView.swift +603 -57
  79. package/lib/commonjs/Button.js +73 -1
  80. package/lib/commonjs/Button.js.map +1 -1
  81. package/lib/commonjs/ButtonGroup.js +13 -3
  82. package/lib/commonjs/ButtonGroup.js.map +1 -1
  83. package/lib/commonjs/ButtonGroupNativeComponent.ts +74 -4
  84. package/lib/commonjs/ButtonNativeComponent.ts +119 -3
  85. package/lib/commonjs/ContextMenu.js +9 -48
  86. package/lib/commonjs/ContextMenu.js.map +1 -1
  87. package/lib/commonjs/ContextMenuNativeComponent.ts +47 -49
  88. package/lib/commonjs/DatePicker.js +98 -2
  89. package/lib/commonjs/DatePicker.js.map +1 -1
  90. package/lib/commonjs/DatePickerNativeComponent.ts +19 -2
  91. package/lib/commonjs/FloatingActionButton.js +60 -0
  92. package/lib/commonjs/FloatingActionButton.js.map +1 -0
  93. package/lib/commonjs/FloatingActionButtonNativeComponent.ts +58 -0
  94. package/lib/commonjs/FloatingToolbar.js +9 -1
  95. package/lib/commonjs/FloatingToolbar.js.map +1 -1
  96. package/lib/commonjs/FloatingToolbarNativeComponent.ts +16 -0
  97. package/lib/commonjs/LiquidGlass.js +7 -1
  98. package/lib/commonjs/LiquidGlass.js.map +1 -1
  99. package/lib/commonjs/LiquidGlassContainer.js +32 -0
  100. package/lib/commonjs/LiquidGlassContainer.js.map +1 -0
  101. package/lib/commonjs/LiquidGlassContainerNativeComponent.ts +17 -0
  102. package/lib/commonjs/LiquidGlassNativeComponent.ts +8 -0
  103. package/lib/commonjs/NavigationRail.js +104 -0
  104. package/lib/commonjs/NavigationRail.js.map +1 -0
  105. package/lib/commonjs/NavigationRailNativeComponent.ts +107 -0
  106. package/lib/commonjs/PlatformComponentsProvider.js +18 -0
  107. package/lib/commonjs/PlatformComponentsProvider.js.map +1 -0
  108. package/lib/commonjs/SegmentedControl.js +7 -0
  109. package/lib/commonjs/SegmentedControl.js.map +1 -1
  110. package/lib/commonjs/SegmentedControlNativeComponent.ts +11 -0
  111. package/lib/commonjs/SelectionMenu.js +27 -3
  112. package/lib/commonjs/SelectionMenu.js.map +1 -1
  113. package/lib/commonjs/SelectionMenuNativeComponent.ts +26 -4
  114. package/lib/commonjs/SplitButton.js +98 -0
  115. package/lib/commonjs/SplitButton.js.map +1 -0
  116. package/lib/commonjs/TabBar.js +203 -0
  117. package/lib/commonjs/TabBar.js.map +1 -0
  118. package/lib/commonjs/TabBarAccessoryNativeComponent.ts +19 -0
  119. package/lib/commonjs/TabBarNativeComponent.ts +145 -0
  120. package/lib/commonjs/TextField.js +171 -8
  121. package/lib/commonjs/TextField.js.map +1 -1
  122. package/lib/commonjs/TextFieldNativeComponent.ts +110 -4
  123. package/lib/commonjs/focusRegistry.js +2 -1
  124. package/lib/commonjs/focusRegistry.js.map +1 -1
  125. package/lib/commonjs/haptics.js +2 -0
  126. package/lib/commonjs/haptics.js.map +1 -0
  127. package/lib/commonjs/icons.js +15 -1
  128. package/lib/commonjs/icons.js.map +1 -1
  129. package/lib/commonjs/index.js +77 -0
  130. package/lib/commonjs/index.js.map +1 -1
  131. package/lib/commonjs/index.web.js +156 -92
  132. package/lib/commonjs/index.web.js.map +1 -1
  133. package/lib/commonjs/jest.js +910 -0
  134. package/lib/commonjs/jest.js.map +1 -0
  135. package/lib/commonjs/menuItems.js +68 -0
  136. package/lib/commonjs/menuItems.js.map +1 -0
  137. package/lib/commonjs/selectionIdentifiers.js +18 -0
  138. package/lib/commonjs/selectionIdentifiers.js.map +1 -0
  139. package/lib/commonjs/submitBehavior.js +19 -0
  140. package/lib/commonjs/submitBehavior.js.map +1 -0
  141. package/lib/commonjs/tabItems.js +49 -0
  142. package/lib/commonjs/tabItems.js.map +1 -0
  143. package/lib/commonjs/web/Button.js +170 -0
  144. package/lib/commonjs/web/Button.js.map +1 -0
  145. package/lib/commonjs/web/ButtonGroup.js +119 -0
  146. package/lib/commonjs/web/ButtonGroup.js.map +1 -0
  147. package/lib/commonjs/web/DatePicker.js +168 -0
  148. package/lib/commonjs/web/DatePicker.js.map +1 -0
  149. package/lib/commonjs/web/DateRangePicker.js +137 -0
  150. package/lib/commonjs/web/DateRangePicker.js.map +1 -0
  151. package/lib/commonjs/web/Dialog.js +54 -0
  152. package/lib/commonjs/web/Dialog.js.map +1 -0
  153. package/lib/commonjs/web/FloatingActionButton.js +98 -0
  154. package/lib/commonjs/web/FloatingActionButton.js.map +1 -0
  155. package/lib/commonjs/web/Icon.js +34 -0
  156. package/lib/commonjs/web/Icon.js.map +1 -0
  157. package/lib/commonjs/web/NativeTheme.js +28 -0
  158. package/lib/commonjs/web/NativeTheme.js.map +1 -0
  159. package/lib/commonjs/web/NavigationRail.js +139 -0
  160. package/lib/commonjs/web/NavigationRail.js.map +1 -0
  161. package/lib/commonjs/web/PlatformComponentsProvider.js +51 -0
  162. package/lib/commonjs/web/PlatformComponentsProvider.js.map +1 -0
  163. package/lib/commonjs/web/SegmentedControl.js +117 -0
  164. package/lib/commonjs/web/SegmentedControl.js.map +1 -0
  165. package/lib/commonjs/web/SelectionMenu.js +142 -0
  166. package/lib/commonjs/web/SelectionMenu.js.map +1 -0
  167. package/lib/commonjs/web/SplitButton.js +35 -0
  168. package/lib/commonjs/web/SplitButton.js.map +1 -0
  169. package/lib/commonjs/web/TabBar.js +131 -0
  170. package/lib/commonjs/web/TabBar.js.map +1 -0
  171. package/lib/commonjs/web/TextField.js +322 -0
  172. package/lib/commonjs/web/TextField.js.map +1 -0
  173. package/lib/commonjs/web/components.js +36 -0
  174. package/lib/commonjs/web/components.js.map +1 -0
  175. package/lib/commonjs/web/containers.js +121 -0
  176. package/lib/commonjs/web/containers.js.map +1 -0
  177. package/lib/commonjs/web/dateInput.js +116 -0
  178. package/lib/commonjs/web/dateInput.js.map +1 -0
  179. package/lib/commonjs/web/shared.js +192 -0
  180. package/lib/commonjs/web/shared.js.map +1 -0
  181. package/lib/commonjs/webComponents.js +6 -0
  182. package/lib/commonjs/webComponents.js.map +1 -0
  183. package/lib/module/Button.js +74 -2
  184. package/lib/module/Button.js.map +1 -1
  185. package/lib/module/ButtonGroup.js +13 -3
  186. package/lib/module/ButtonGroup.js.map +1 -1
  187. package/lib/module/ButtonGroupNativeComponent.ts +74 -4
  188. package/lib/module/ButtonNativeComponent.ts +119 -3
  189. package/lib/module/ContextMenu.js +9 -48
  190. package/lib/module/ContextMenu.js.map +1 -1
  191. package/lib/module/ContextMenuNativeComponent.ts +47 -49
  192. package/lib/module/DatePicker.js +98 -4
  193. package/lib/module/DatePicker.js.map +1 -1
  194. package/lib/module/DatePickerNativeComponent.ts +19 -2
  195. package/lib/module/FloatingActionButton.js +53 -0
  196. package/lib/module/FloatingActionButton.js.map +1 -0
  197. package/lib/module/FloatingActionButtonNativeComponent.ts +58 -0
  198. package/lib/module/FloatingToolbar.js +9 -1
  199. package/lib/module/FloatingToolbar.js.map +1 -1
  200. package/lib/module/FloatingToolbarNativeComponent.ts +16 -0
  201. package/lib/module/LiquidGlass.js +7 -1
  202. package/lib/module/LiquidGlass.js.map +1 -1
  203. package/lib/module/LiquidGlassContainer.js +26 -0
  204. package/lib/module/LiquidGlassContainer.js.map +1 -0
  205. package/lib/module/LiquidGlassContainerNativeComponent.ts +17 -0
  206. package/lib/module/LiquidGlassNativeComponent.ts +8 -0
  207. package/lib/module/NavigationRail.js +99 -0
  208. package/lib/module/NavigationRail.js.map +1 -0
  209. package/lib/module/NavigationRailNativeComponent.ts +107 -0
  210. package/lib/module/PlatformComponentsProvider.js +13 -0
  211. package/lib/module/PlatformComponentsProvider.js.map +1 -0
  212. package/lib/module/SegmentedControl.js +9 -1
  213. package/lib/module/SegmentedControl.js.map +1 -1
  214. package/lib/module/SegmentedControlNativeComponent.ts +11 -0
  215. package/lib/module/SelectionMenu.js +27 -3
  216. package/lib/module/SelectionMenu.js.map +1 -1
  217. package/lib/module/SelectionMenuNativeComponent.ts +26 -4
  218. package/lib/module/SplitButton.js +91 -0
  219. package/lib/module/SplitButton.js.map +1 -0
  220. package/lib/module/TabBar.js +196 -0
  221. package/lib/module/TabBar.js.map +1 -0
  222. package/lib/module/TabBarAccessoryNativeComponent.ts +19 -0
  223. package/lib/module/TabBarNativeComponent.ts +145 -0
  224. package/lib/module/TextField.js +172 -9
  225. package/lib/module/TextField.js.map +1 -1
  226. package/lib/module/TextFieldNativeComponent.ts +110 -4
  227. package/lib/module/focusRegistry.js +1 -0
  228. package/lib/module/focusRegistry.js.map +1 -1
  229. package/lib/module/haptics.js +2 -0
  230. package/lib/module/haptics.js.map +1 -0
  231. package/lib/module/icons.js +15 -1
  232. package/lib/module/icons.js.map +1 -1
  233. package/lib/module/index.js +7 -0
  234. package/lib/module/index.js.map +1 -1
  235. package/lib/module/index.web.js +12 -87
  236. package/lib/module/index.web.js.map +1 -1
  237. package/lib/module/jest.js +840 -0
  238. package/lib/module/jest.js.map +1 -0
  239. package/lib/module/menuItems.js +65 -0
  240. package/lib/module/menuItems.js.map +1 -0
  241. package/lib/module/selectionIdentifiers.js +14 -0
  242. package/lib/module/selectionIdentifiers.js.map +1 -0
  243. package/lib/module/submitBehavior.js +15 -0
  244. package/lib/module/submitBehavior.js.map +1 -0
  245. package/lib/module/tabItems.js +45 -0
  246. package/lib/module/tabItems.js.map +1 -0
  247. package/lib/module/web/Button.js +164 -0
  248. package/lib/module/web/Button.js.map +1 -0
  249. package/lib/module/web/ButtonGroup.js +113 -0
  250. package/lib/module/web/ButtonGroup.js.map +1 -0
  251. package/lib/module/web/DatePicker.js +162 -0
  252. package/lib/module/web/DatePicker.js.map +1 -0
  253. package/lib/module/web/DateRangePicker.js +131 -0
  254. package/lib/module/web/DateRangePicker.js.map +1 -0
  255. package/lib/module/web/Dialog.js +48 -0
  256. package/lib/module/web/Dialog.js.map +1 -0
  257. package/lib/module/web/FloatingActionButton.js +94 -0
  258. package/lib/module/web/FloatingActionButton.js.map +1 -0
  259. package/lib/module/web/Icon.js +29 -0
  260. package/lib/module/web/Icon.js.map +1 -0
  261. package/lib/module/web/NativeTheme.js +23 -0
  262. package/lib/module/web/NativeTheme.js.map +1 -0
  263. package/lib/module/web/NavigationRail.js +133 -0
  264. package/lib/module/web/NavigationRail.js.map +1 -0
  265. package/lib/module/web/PlatformComponentsProvider.js +44 -0
  266. package/lib/module/web/PlatformComponentsProvider.js.map +1 -0
  267. package/lib/module/web/SegmentedControl.js +112 -0
  268. package/lib/module/web/SegmentedControl.js.map +1 -0
  269. package/lib/module/web/SelectionMenu.js +137 -0
  270. package/lib/module/web/SelectionMenu.js.map +1 -0
  271. package/lib/module/web/SplitButton.js +30 -0
  272. package/lib/module/web/SplitButton.js.map +1 -0
  273. package/lib/module/web/TabBar.js +126 -0
  274. package/lib/module/web/TabBar.js.map +1 -0
  275. package/lib/module/web/TextField.js +316 -0
  276. package/lib/module/web/TextField.js.map +1 -0
  277. package/lib/module/web/components.js +33 -0
  278. package/lib/module/web/components.js.map +1 -0
  279. package/lib/module/web/containers.js +112 -0
  280. package/lib/module/web/containers.js.map +1 -0
  281. package/lib/module/web/dateInput.js +109 -0
  282. package/lib/module/web/dateInput.js.map +1 -0
  283. package/lib/module/web/shared.js +179 -0
  284. package/lib/module/web/shared.js.map +1 -0
  285. package/lib/module/webComponents.js +4 -0
  286. package/lib/module/webComponents.js.map +1 -0
  287. package/lib/typescript/commonjs/docs/sidebars.d.ts.map +1 -1
  288. package/lib/typescript/commonjs/src/Button.d.ts +111 -3
  289. package/lib/typescript/commonjs/src/Button.d.ts.map +1 -1
  290. package/lib/typescript/commonjs/src/ButtonGroup.d.ts +21 -6
  291. package/lib/typescript/commonjs/src/ButtonGroup.d.ts.map +1 -1
  292. package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts +64 -3
  293. package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts.map +1 -1
  294. package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts +94 -3
  295. package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts.map +1 -1
  296. package/lib/typescript/commonjs/src/ContextMenu.d.ts +20 -33
  297. package/lib/typescript/commonjs/src/ContextMenu.d.ts.map +1 -1
  298. package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts +45 -47
  299. package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts.map +1 -1
  300. package/lib/typescript/commonjs/src/DatePicker.d.ts +74 -1
  301. package/lib/typescript/commonjs/src/DatePicker.d.ts.map +1 -1
  302. package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts +16 -1
  303. package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts.map +1 -1
  304. package/lib/typescript/commonjs/src/FloatingActionButton.d.ts +67 -0
  305. package/lib/typescript/commonjs/src/FloatingActionButton.d.ts.map +1 -0
  306. package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts +43 -0
  307. package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
  308. package/lib/typescript/commonjs/src/FloatingToolbar.d.ts +30 -0
  309. package/lib/typescript/commonjs/src/FloatingToolbar.d.ts.map +1 -1
  310. package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts +12 -0
  311. package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
  312. package/lib/typescript/commonjs/src/LiquidGlass.d.ts +17 -0
  313. package/lib/typescript/commonjs/src/LiquidGlass.d.ts.map +1 -1
  314. package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts +27 -0
  315. package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts.map +1 -0
  316. package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
  317. package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
  318. package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts +7 -0
  319. package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts.map +1 -1
  320. package/lib/typescript/commonjs/src/NavigationRail.d.ts +86 -0
  321. package/lib/typescript/commonjs/src/NavigationRail.d.ts.map +1 -0
  322. package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts +81 -0
  323. package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts.map +1 -0
  324. package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts +6 -0
  325. package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts.map +1 -0
  326. package/lib/typescript/commonjs/src/SegmentedControl.d.ts +18 -1
  327. package/lib/typescript/commonjs/src/SegmentedControl.d.ts.map +1 -1
  328. package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts +9 -0
  329. package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts.map +1 -1
  330. package/lib/typescript/commonjs/src/SelectionMenu.d.ts +44 -2
  331. package/lib/typescript/commonjs/src/SelectionMenu.d.ts.map +1 -1
  332. package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts +20 -4
  333. package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts.map +1 -1
  334. package/lib/typescript/commonjs/src/SplitButton.d.ts +83 -0
  335. package/lib/typescript/commonjs/src/SplitButton.d.ts.map +1 -0
  336. package/lib/typescript/commonjs/src/TabBar.d.ts +144 -0
  337. package/lib/typescript/commonjs/src/TabBar.d.ts.map +1 -0
  338. package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts +13 -0
  339. package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
  340. package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts +110 -0
  341. package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts.map +1 -0
  342. package/lib/typescript/commonjs/src/TextField.d.ts +166 -8
  343. package/lib/typescript/commonjs/src/TextField.d.ts.map +1 -1
  344. package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts +81 -3
  345. package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts.map +1 -1
  346. package/lib/typescript/commonjs/src/focusRegistry.d.ts.map +1 -1
  347. package/lib/typescript/commonjs/src/haptics.d.ts +20 -0
  348. package/lib/typescript/commonjs/src/haptics.d.ts.map +1 -0
  349. package/lib/typescript/commonjs/src/icons.d.ts +7 -1
  350. package/lib/typescript/commonjs/src/icons.d.ts.map +1 -1
  351. package/lib/typescript/commonjs/src/index.d.ts +7 -0
  352. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  353. package/lib/typescript/commonjs/src/index.web.d.ts +25 -254
  354. package/lib/typescript/commonjs/src/index.web.d.ts.map +1 -1
  355. package/lib/typescript/commonjs/src/jest.d.ts +139 -0
  356. package/lib/typescript/commonjs/src/jest.d.ts.map +1 -0
  357. package/lib/typescript/commonjs/src/menuItems.d.ts +100 -0
  358. package/lib/typescript/commonjs/src/menuItems.d.ts.map +1 -0
  359. package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts +3 -0
  360. package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts.map +1 -0
  361. package/lib/typescript/commonjs/src/submitBehavior.d.ts +9 -0
  362. package/lib/typescript/commonjs/src/submitBehavior.d.ts.map +1 -0
  363. package/lib/typescript/commonjs/src/tabItems.d.ts +55 -0
  364. package/lib/typescript/commonjs/src/tabItems.d.ts.map +1 -0
  365. package/lib/typescript/commonjs/src/web/Button.d.ts +9 -0
  366. package/lib/typescript/commonjs/src/web/Button.d.ts.map +1 -0
  367. package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts +11 -0
  368. package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts.map +1 -0
  369. package/lib/typescript/commonjs/src/web/DatePicker.d.ts +14 -0
  370. package/lib/typescript/commonjs/src/web/DatePicker.d.ts.map +1 -0
  371. package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts +11 -0
  372. package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts.map +1 -0
  373. package/lib/typescript/commonjs/src/web/Dialog.d.ts +12 -0
  374. package/lib/typescript/commonjs/src/web/Dialog.d.ts.map +1 -0
  375. package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts +8 -0
  376. package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts.map +1 -0
  377. package/lib/typescript/commonjs/src/web/Icon.d.ts +12 -0
  378. package/lib/typescript/commonjs/src/web/Icon.d.ts.map +1 -0
  379. package/lib/typescript/commonjs/src/web/NativeTheme.d.ts +10 -0
  380. package/lib/typescript/commonjs/src/web/NativeTheme.d.ts.map +1 -0
  381. package/lib/typescript/commonjs/src/web/NavigationRail.d.ts +8 -0
  382. package/lib/typescript/commonjs/src/web/NavigationRail.d.ts.map +1 -0
  383. package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts +10 -0
  384. package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts.map +1 -0
  385. package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts +8 -0
  386. package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts.map +1 -0
  387. package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts +10 -0
  388. package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts.map +1 -0
  389. package/lib/typescript/commonjs/src/web/SplitButton.d.ts +9 -0
  390. package/lib/typescript/commonjs/src/web/SplitButton.d.ts.map +1 -0
  391. package/lib/typescript/commonjs/src/web/TabBar.d.ts +9 -0
  392. package/lib/typescript/commonjs/src/web/TabBar.d.ts.map +1 -0
  393. package/lib/typescript/commonjs/src/web/TextField.d.ts +9 -0
  394. package/lib/typescript/commonjs/src/web/TextField.d.ts.map +1 -0
  395. package/lib/typescript/commonjs/src/web/components.d.ts +17 -0
  396. package/lib/typescript/commonjs/src/web/components.d.ts.map +1 -0
  397. package/lib/typescript/commonjs/src/web/containers.d.ts +24 -0
  398. package/lib/typescript/commonjs/src/web/containers.d.ts.map +1 -0
  399. package/lib/typescript/commonjs/src/web/dateInput.d.ts +20 -0
  400. package/lib/typescript/commonjs/src/web/dateInput.d.ts.map +1 -0
  401. package/lib/typescript/commonjs/src/web/shared.d.ts +43 -0
  402. package/lib/typescript/commonjs/src/web/shared.d.ts.map +1 -0
  403. package/lib/typescript/commonjs/src/webComponents.d.ts +43 -0
  404. package/lib/typescript/commonjs/src/webComponents.d.ts.map +1 -0
  405. package/lib/typescript/module/docs/sidebars.d.ts.map +1 -1
  406. package/lib/typescript/module/src/Button.d.ts +111 -3
  407. package/lib/typescript/module/src/Button.d.ts.map +1 -1
  408. package/lib/typescript/module/src/ButtonGroup.d.ts +21 -6
  409. package/lib/typescript/module/src/ButtonGroup.d.ts.map +1 -1
  410. package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts +64 -3
  411. package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts.map +1 -1
  412. package/lib/typescript/module/src/ButtonNativeComponent.d.ts +94 -3
  413. package/lib/typescript/module/src/ButtonNativeComponent.d.ts.map +1 -1
  414. package/lib/typescript/module/src/ContextMenu.d.ts +20 -33
  415. package/lib/typescript/module/src/ContextMenu.d.ts.map +1 -1
  416. package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts +45 -47
  417. package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts.map +1 -1
  418. package/lib/typescript/module/src/DatePicker.d.ts +74 -1
  419. package/lib/typescript/module/src/DatePicker.d.ts.map +1 -1
  420. package/lib/typescript/module/src/DatePickerNativeComponent.d.ts +16 -1
  421. package/lib/typescript/module/src/DatePickerNativeComponent.d.ts.map +1 -1
  422. package/lib/typescript/module/src/FloatingActionButton.d.ts +67 -0
  423. package/lib/typescript/module/src/FloatingActionButton.d.ts.map +1 -0
  424. package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts +43 -0
  425. package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
  426. package/lib/typescript/module/src/FloatingToolbar.d.ts +30 -0
  427. package/lib/typescript/module/src/FloatingToolbar.d.ts.map +1 -1
  428. package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts +12 -0
  429. package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
  430. package/lib/typescript/module/src/LiquidGlass.d.ts +17 -0
  431. package/lib/typescript/module/src/LiquidGlass.d.ts.map +1 -1
  432. package/lib/typescript/module/src/LiquidGlassContainer.d.ts +27 -0
  433. package/lib/typescript/module/src/LiquidGlassContainer.d.ts.map +1 -0
  434. package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
  435. package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
  436. package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts +7 -0
  437. package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts.map +1 -1
  438. package/lib/typescript/module/src/NavigationRail.d.ts +86 -0
  439. package/lib/typescript/module/src/NavigationRail.d.ts.map +1 -0
  440. package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts +81 -0
  441. package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts.map +1 -0
  442. package/lib/typescript/module/src/PlatformComponentsProvider.d.ts +6 -0
  443. package/lib/typescript/module/src/PlatformComponentsProvider.d.ts.map +1 -0
  444. package/lib/typescript/module/src/SegmentedControl.d.ts +18 -1
  445. package/lib/typescript/module/src/SegmentedControl.d.ts.map +1 -1
  446. package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts +9 -0
  447. package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts.map +1 -1
  448. package/lib/typescript/module/src/SelectionMenu.d.ts +44 -2
  449. package/lib/typescript/module/src/SelectionMenu.d.ts.map +1 -1
  450. package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts +20 -4
  451. package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts.map +1 -1
  452. package/lib/typescript/module/src/SplitButton.d.ts +83 -0
  453. package/lib/typescript/module/src/SplitButton.d.ts.map +1 -0
  454. package/lib/typescript/module/src/TabBar.d.ts +144 -0
  455. package/lib/typescript/module/src/TabBar.d.ts.map +1 -0
  456. package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts +13 -0
  457. package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
  458. package/lib/typescript/module/src/TabBarNativeComponent.d.ts +110 -0
  459. package/lib/typescript/module/src/TabBarNativeComponent.d.ts.map +1 -0
  460. package/lib/typescript/module/src/TextField.d.ts +166 -8
  461. package/lib/typescript/module/src/TextField.d.ts.map +1 -1
  462. package/lib/typescript/module/src/TextFieldNativeComponent.d.ts +81 -3
  463. package/lib/typescript/module/src/TextFieldNativeComponent.d.ts.map +1 -1
  464. package/lib/typescript/module/src/focusRegistry.d.ts.map +1 -1
  465. package/lib/typescript/module/src/haptics.d.ts +20 -0
  466. package/lib/typescript/module/src/haptics.d.ts.map +1 -0
  467. package/lib/typescript/module/src/icons.d.ts +7 -1
  468. package/lib/typescript/module/src/icons.d.ts.map +1 -1
  469. package/lib/typescript/module/src/index.d.ts +7 -0
  470. package/lib/typescript/module/src/index.d.ts.map +1 -1
  471. package/lib/typescript/module/src/index.web.d.ts +25 -254
  472. package/lib/typescript/module/src/index.web.d.ts.map +1 -1
  473. package/lib/typescript/module/src/jest.d.ts +139 -0
  474. package/lib/typescript/module/src/jest.d.ts.map +1 -0
  475. package/lib/typescript/module/src/menuItems.d.ts +100 -0
  476. package/lib/typescript/module/src/menuItems.d.ts.map +1 -0
  477. package/lib/typescript/module/src/selectionIdentifiers.d.ts +3 -0
  478. package/lib/typescript/module/src/selectionIdentifiers.d.ts.map +1 -0
  479. package/lib/typescript/module/src/submitBehavior.d.ts +9 -0
  480. package/lib/typescript/module/src/submitBehavior.d.ts.map +1 -0
  481. package/lib/typescript/module/src/tabItems.d.ts +55 -0
  482. package/lib/typescript/module/src/tabItems.d.ts.map +1 -0
  483. package/lib/typescript/module/src/web/Button.d.ts +9 -0
  484. package/lib/typescript/module/src/web/Button.d.ts.map +1 -0
  485. package/lib/typescript/module/src/web/ButtonGroup.d.ts +11 -0
  486. package/lib/typescript/module/src/web/ButtonGroup.d.ts.map +1 -0
  487. package/lib/typescript/module/src/web/DatePicker.d.ts +14 -0
  488. package/lib/typescript/module/src/web/DatePicker.d.ts.map +1 -0
  489. package/lib/typescript/module/src/web/DateRangePicker.d.ts +11 -0
  490. package/lib/typescript/module/src/web/DateRangePicker.d.ts.map +1 -0
  491. package/lib/typescript/module/src/web/Dialog.d.ts +12 -0
  492. package/lib/typescript/module/src/web/Dialog.d.ts.map +1 -0
  493. package/lib/typescript/module/src/web/FloatingActionButton.d.ts +8 -0
  494. package/lib/typescript/module/src/web/FloatingActionButton.d.ts.map +1 -0
  495. package/lib/typescript/module/src/web/Icon.d.ts +12 -0
  496. package/lib/typescript/module/src/web/Icon.d.ts.map +1 -0
  497. package/lib/typescript/module/src/web/NativeTheme.d.ts +10 -0
  498. package/lib/typescript/module/src/web/NativeTheme.d.ts.map +1 -0
  499. package/lib/typescript/module/src/web/NavigationRail.d.ts +8 -0
  500. package/lib/typescript/module/src/web/NavigationRail.d.ts.map +1 -0
  501. package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts +10 -0
  502. package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts.map +1 -0
  503. package/lib/typescript/module/src/web/SegmentedControl.d.ts +8 -0
  504. package/lib/typescript/module/src/web/SegmentedControl.d.ts.map +1 -0
  505. package/lib/typescript/module/src/web/SelectionMenu.d.ts +10 -0
  506. package/lib/typescript/module/src/web/SelectionMenu.d.ts.map +1 -0
  507. package/lib/typescript/module/src/web/SplitButton.d.ts +9 -0
  508. package/lib/typescript/module/src/web/SplitButton.d.ts.map +1 -0
  509. package/lib/typescript/module/src/web/TabBar.d.ts +9 -0
  510. package/lib/typescript/module/src/web/TabBar.d.ts.map +1 -0
  511. package/lib/typescript/module/src/web/TextField.d.ts +9 -0
  512. package/lib/typescript/module/src/web/TextField.d.ts.map +1 -0
  513. package/lib/typescript/module/src/web/components.d.ts +17 -0
  514. package/lib/typescript/module/src/web/components.d.ts.map +1 -0
  515. package/lib/typescript/module/src/web/containers.d.ts +24 -0
  516. package/lib/typescript/module/src/web/containers.d.ts.map +1 -0
  517. package/lib/typescript/module/src/web/dateInput.d.ts +20 -0
  518. package/lib/typescript/module/src/web/dateInput.d.ts.map +1 -0
  519. package/lib/typescript/module/src/web/shared.d.ts +43 -0
  520. package/lib/typescript/module/src/web/shared.d.ts.map +1 -0
  521. package/lib/typescript/module/src/webComponents.d.ts +43 -0
  522. package/lib/typescript/module/src/webComponents.d.ts.map +1 -0
  523. package/package.json +32 -2
  524. package/plugin/build/index.d.ts +3 -2
  525. package/plugin/build/index.d.ts.map +1 -1
  526. package/react-native.config.js +3 -0
  527. package/shared/PCFloatingActionButtonComponentDescriptors-custom.h +22 -0
  528. package/shared/PCFloatingActionButtonShadowNode-custom.cpp +48 -0
  529. package/shared/PCFloatingActionButtonShadowNode-custom.h +54 -0
  530. package/shared/PCFloatingActionButtonState-custom.h +61 -0
  531. package/shared/PCNavigationRailComponentDescriptors-custom.h +47 -0
  532. package/shared/PCNavigationRailShadowNode-custom.h +42 -0
  533. package/shared/PCNavigationRailState-custom.h +62 -0
  534. package/shared/PCTabBarComponentDescriptors-custom.h +22 -0
  535. package/shared/PCTabBarShadowNode-custom.cpp +54 -0
  536. package/shared/PCTabBarShadowNode-custom.h +54 -0
  537. package/shared/PCTabBarState-custom.h +62 -0
  538. package/shared/react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h +3 -0
  539. package/src/Button.tsx +222 -7
  540. package/src/ButtonGroup.tsx +29 -11
  541. package/src/ButtonGroupNativeComponent.ts +74 -4
  542. package/src/ButtonNativeComponent.ts +119 -3
  543. package/src/ContextMenu.tsx +34 -81
  544. package/src/ContextMenuNativeComponent.ts +47 -49
  545. package/src/DatePicker.tsx +182 -4
  546. package/src/DatePickerNativeComponent.ts +19 -2
  547. package/src/FloatingActionButton.tsx +121 -0
  548. package/src/FloatingActionButtonNativeComponent.ts +58 -0
  549. package/src/FloatingToolbar.tsx +54 -3
  550. package/src/FloatingToolbarNativeComponent.ts +16 -0
  551. package/src/LiquidGlass.tsx +24 -1
  552. package/src/LiquidGlassContainer.tsx +42 -0
  553. package/src/LiquidGlassContainerNativeComponent.ts +17 -0
  554. package/src/LiquidGlassNativeComponent.ts +8 -0
  555. package/src/NavigationRail.tsx +203 -0
  556. package/src/NavigationRailNativeComponent.ts +107 -0
  557. package/src/PlatformComponentsProvider.tsx +15 -0
  558. package/src/SegmentedControl.tsx +31 -1
  559. package/src/SegmentedControlNativeComponent.ts +11 -0
  560. package/src/SelectionMenu.tsx +81 -6
  561. package/src/SelectionMenuNativeComponent.ts +26 -4
  562. package/src/SplitButton.tsx +198 -0
  563. package/src/TabBar.tsx +373 -0
  564. package/src/TabBarAccessoryNativeComponent.ts +19 -0
  565. package/src/TabBarNativeComponent.ts +145 -0
  566. package/src/TextField.tsx +428 -14
  567. package/src/TextFieldNativeComponent.ts +110 -4
  568. package/src/focusRegistry.ts +1 -0
  569. package/src/haptics.ts +31 -0
  570. package/src/icons.ts +28 -1
  571. package/src/index.tsx +7 -0
  572. package/src/index.web.tsx +51 -391
  573. package/src/jest.tsx +958 -0
  574. package/src/menuItems.ts +152 -0
  575. package/src/selectionIdentifiers.ts +17 -0
  576. package/src/submitBehavior.ts +16 -0
  577. package/src/tabItems.ts +113 -0
  578. package/src/web/Button.tsx +201 -0
  579. package/src/web/ButtonGroup.tsx +154 -0
  580. package/src/web/DatePicker.tsx +204 -0
  581. package/src/web/DateRangePicker.tsx +135 -0
  582. package/src/web/Dialog.tsx +54 -0
  583. package/src/web/FloatingActionButton.tsx +76 -0
  584. package/src/web/Icon.tsx +33 -0
  585. package/src/web/NativeTheme.ts +23 -0
  586. package/src/web/NavigationRail.tsx +148 -0
  587. package/src/web/PlatformComponentsProvider.tsx +48 -0
  588. package/src/web/SegmentedControl.tsx +127 -0
  589. package/src/web/SelectionMenu.tsx +149 -0
  590. package/src/web/SplitButton.tsx +32 -0
  591. package/src/web/TabBar.tsx +150 -0
  592. package/src/web/TextField.tsx +361 -0
  593. package/src/web/components.tsx +71 -0
  594. package/src/web/containers.tsx +130 -0
  595. package/src/web/dateInput.ts +137 -0
  596. package/src/web/shared.ts +176 -0
  597. package/src/webComponents.ts +45 -0
  598. package/android/src/main/java/com/platformcomponents/DateConstraints.kt +0 -83
package/src/Button.tsx CHANGED
@@ -1,10 +1,15 @@
1
1
  // Button.tsx
2
- import React, { useCallback, useMemo } from 'react';
3
- import type { ColorValue, ViewProps } from 'react-native';
2
+ import React, { useCallback, useMemo, useState } from 'react';
3
+ import type { ColorValue, NativeSyntheticEvent, ViewProps } from 'react-native';
4
4
 
5
- import NativeButton from './ButtonNativeComponent';
5
+ import NativeButton, {
6
+ type ButtonMenuSelectEvent,
7
+ type ButtonSelectedChangeEvent,
8
+ } from './ButtonNativeComponent';
6
9
  import { resolveIcon, type PlatformIcon } from './icons';
7
10
  import { normalizeLabelStyle, type LabelStyle } from './labelStyle';
11
+ import { flattenMenuActions, type ContextMenuAction } from './menuItems';
12
+ import type { Haptics } from './haptics';
8
13
  import type { AndroidMaterialStyle } from './sharedTypes';
9
14
 
10
15
  /**
@@ -17,9 +22,25 @@ import type { AndroidMaterialStyle } from './sharedTypes';
17
22
  * | `outlined` | Outlined button | `.bordered()` |
18
23
  * | `text` | Text button | `.plain()` |
19
24
  * | `elevated` | Elevated button | `.gray()` |
25
+ * | `glass` | Filled tonal button | `.glass()` (iOS 26+), else `.gray()` |
26
+ * | `prominentGlass` | Filled button | `.prominentGlass()` (iOS 26+), else `.filled()` |
27
+ * | `clearGlass` | Filled tonal button | `.clearGlass()` (iOS 26+), else `.gray()` |
28
+ * | `prominentClearGlass` | Filled button | `.prominentClearGlass()` (iOS 26+), else `.filled()` |
29
+ *
30
+ * The glass variants are the iOS 26 Liquid Glass buttons; `color` tints
31
+ * the prominent glass and `tintColor` colors the label and icon. Clear glass
32
+ * is more transparent, for buttons over photos and other rich content.
20
33
  */
21
34
  export type ButtonVariant =
22
- 'filled' | 'tonal' | 'outlined' | 'text' | 'elevated';
35
+ | 'filled'
36
+ | 'tonal'
37
+ | 'outlined'
38
+ | 'text'
39
+ | 'elevated'
40
+ | 'glass'
41
+ | 'prominentGlass'
42
+ | 'clearGlass'
43
+ | 'prominentClearGlass';
23
44
 
24
45
  /**
25
46
  * Button size. Material 3 Expressive defines five sizes; iOS maps them onto
@@ -33,13 +54,31 @@ export type ButtonSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';
33
54
  */
34
55
  export type ButtonShape = 'round' | 'square';
35
56
 
57
+ /** Where the icon sits relative to the label. */
58
+ export type ButtonIconPosition = 'leading' | 'trailing' | 'top' | 'bottom';
59
+
60
+ /**
61
+ * An animated SF Symbol effect (iOS 17+). `wiggle`, `rotate` and `breathe`
62
+ * need iOS 18; on earlier versions they do nothing.
63
+ */
64
+ export type ButtonSymbolEffect =
65
+ 'bounce' | 'pulse' | 'variableColor' | 'wiggle' | 'rotate' | 'breathe';
66
+
36
67
  export interface ButtonProps extends ViewProps {
37
68
  /** Button text. Omit for an icon-only button. */
38
69
  label?: string;
39
70
 
40
- /** Icon shown before the label, or alone when there is no label. */
71
+ /** Icon shown next to the label, or alone when there is no label. */
41
72
  icon?: PlatformIcon;
42
73
 
74
+ /**
75
+ * Where the icon sits relative to the label. Default: `'leading'`.
76
+ * iOS: `imagePlacement`. Android: `iconGravity` (`textEnd` for trailing,
77
+ * `textTop` for top). Material has no bottom gravity, so `'bottom'` puts the
78
+ * icon on top on Android.
79
+ */
80
+ iconPosition?: ButtonIconPosition;
81
+
43
82
  /** Emphasis. Default: `'filled'`. See {@link ButtonVariant}. */
44
83
  variant?: ButtonVariant;
45
84
 
@@ -49,9 +88,24 @@ export interface ButtonProps extends ViewProps {
49
88
  /** Corner shape. Default: platform default. */
50
89
  shape?: ButtonShape;
51
90
 
91
+ /**
92
+ * Corner radius in points (dp). Overrides `shape` when set.
93
+ * iOS: `background.cornerRadius` with the fixed corner style. Android: the
94
+ * `shapeAppearanceModel` corner size (the press morph is turned off).
95
+ */
96
+ cornerRadius?: number;
97
+
52
98
  /** Whether the button is disabled. */
53
99
  disabled?: boolean;
54
100
 
101
+ /**
102
+ * Shows a native spinner in place of the label and icon, keeping the
103
+ * button's size, and ignores presses. Sets `accessibilityState.busy`.
104
+ * iOS: `UIButton.Configuration.showsActivityIndicator`. Android: a Material
105
+ * circular progress indicator drawn as the button icon.
106
+ */
107
+ loading?: boolean;
108
+
55
109
  /**
56
110
  * Container (background) color.
57
111
  * Android: `backgroundTint`. iOS: `baseBackgroundColor`.
@@ -64,15 +118,98 @@ export interface ButtonProps extends ViewProps {
64
118
  */
65
119
  tintColor?: ColorValue;
66
120
 
121
+ /**
122
+ * Container color while disabled. Unset keeps the platform's disabled look.
123
+ * iOS: a `configurationUpdateHandler` on `isEnabled`. Android: the disabled
124
+ * state of the `backgroundTint` color state list.
125
+ */
126
+ disabledColor?: ColorValue;
127
+
128
+ /**
129
+ * Label and icon color while disabled. Unset keeps the platform's disabled
130
+ * look. iOS: a `configurationUpdateHandler` on `isEnabled`. Android: the
131
+ * disabled state of the text color and `iconTint` color state lists.
132
+ */
133
+ disabledTintColor?: ColorValue;
134
+
67
135
  /** Label font. */
68
136
  labelStyle?: LabelStyle;
69
137
 
138
+ /**
139
+ * Largest scale the label's font can reach with the system text size
140
+ * (Dynamic Type / font scale), as on `Text`: `undefined` or `0` means no
141
+ * cap; values of 1 or more cap it.
142
+ */
143
+ maxFontSizeMultiplier?: number;
144
+
70
145
  /** Screen-reader label. Defaults to `label`. */
71
146
  accessibilityLabel?: string;
72
147
 
73
- /** Called when the button is pressed. */
148
+ /**
149
+ * Haptic played when the user presses the button, flips a toggle or
150
+ * picks a menu item (not when a menu button opens its menu); not while
151
+ * `loading` or disabled. Default: none, like the native buttons. See
152
+ * {@link Haptics}.
153
+ */
154
+ haptics?: Haptics;
155
+
156
+ /**
157
+ * Called when the button is pressed. A button with a `menu` opens the menu
158
+ * instead.
159
+ */
74
160
  onPress?: () => void;
75
161
 
162
+ /**
163
+ * Makes the button a toggle, with this as its controlled state. A press
164
+ * calls `onSelectedChange` with the opposite value; the button shows the
165
+ * new state once `selected` changes, and goes back if it doesn't.
166
+ *
167
+ * iOS: `changesSelectionAsPrimaryAction` and `isSelected`, with the
168
+ * configuration's selected look. Android: a checkable `MaterialButton`
169
+ * (`isChecked`), with the Material toggle button colors and shape.
170
+ */
171
+ selected?: boolean;
172
+
173
+ /** Called when a toggle button is pressed, with the state it asks for. */
174
+ onSelectedChange?: (selected: boolean) => void;
175
+
176
+ /**
177
+ * A menu the button opens when pressed, in place of `onPress`. Same items
178
+ * as ContextMenu: submenus, sections, icons, states and attributes.
179
+ *
180
+ * iOS: `UIButton.menu` with `showsMenuAsPrimaryAction`. Android: a
181
+ * `PopupMenu` anchored to the button.
182
+ */
183
+ menu?: readonly ContextMenuAction[];
184
+
185
+ /** Called when a menu item is picked, with its id and title. */
186
+ onMenuSelect?: (id: string, title: string) => void;
187
+
188
+ /** Called when the menu opens. */
189
+ onMenuOpen?: () => void;
190
+
191
+ /** Called when the menu closes. */
192
+ onMenuClose?: () => void;
193
+
194
+ /**
195
+ * iOS-specific configuration
196
+ */
197
+ ios?: {
198
+ /**
199
+ * Animates the SF Symbol icon (`UIImageView.addSymbolEffect`, iOS 17+;
200
+ * `wiggle`, `rotate` and `breathe` need iOS 18). Without
201
+ * `symbolEffectTrigger` the effect repeats until it is unset. Ignored
202
+ * for image icons and on Android.
203
+ */
204
+ symbolEffect?: ButtonSymbolEffect;
205
+
206
+ /**
207
+ * Plays `symbolEffect` once each time this value changes, instead of
208
+ * repeating it. The first value doesn't play.
209
+ */
210
+ symbolEffectTrigger?: number | string;
211
+ };
212
+
76
213
  /**
77
214
  * Android-specific configuration
78
215
  */
@@ -99,16 +236,31 @@ export function Button(props: ButtonProps): React.ReactElement {
99
236
  const {
100
237
  label,
101
238
  icon,
239
+ iconPosition,
102
240
  variant,
103
241
  size,
104
242
  shape,
243
+ cornerRadius,
105
244
  disabled,
245
+ loading,
106
246
  color,
107
247
  tintColor,
248
+ disabledColor,
249
+ disabledTintColor,
108
250
  labelStyle,
251
+ maxFontSizeMultiplier,
109
252
  accessibilityLabel,
253
+ haptics,
110
254
  onPress,
255
+ selected,
256
+ onSelectedChange,
257
+ menu,
258
+ onMenuSelect,
259
+ onMenuOpen,
260
+ onMenuClose,
261
+ ios,
111
262
  android,
263
+ accessibilityState,
112
264
  ...viewProps
113
265
  } = props;
114
266
 
@@ -118,26 +270,89 @@ export function Button(props: ButtonProps): React.ReactElement {
118
270
  [labelStyle]
119
271
  );
120
272
 
273
+ const nativeMenu = useMemo(
274
+ () => (menu ? flattenMenuActions(menu) : []),
275
+ [menu]
276
+ );
277
+
121
278
  const handlePress = useCallback(() => {
279
+ if (loading) return;
122
280
  onPress?.();
123
- }, [onPress]);
281
+ }, [onPress, loading]);
282
+
283
+ // Controlled toggle, like React Native's Switch: every press re-renders
284
+ // with a new event count, so native applies `selected` again and a state
285
+ // the parent didn't take goes back.
286
+ const [selectedEventCount, setSelectedEventCount] = useState(0);
287
+ const handleSelectedChange = useCallback(
288
+ (e: NativeSyntheticEvent<ButtonSelectedChangeEvent>) => {
289
+ setSelectedEventCount((count) => count + 1);
290
+ onSelectedChange?.(e.nativeEvent.selected);
291
+ },
292
+ [onSelectedChange]
293
+ );
294
+
295
+ const handleMenuSelect = useCallback(
296
+ (e: NativeSyntheticEvent<ButtonMenuSelectEvent>) => {
297
+ onMenuSelect?.(e.nativeEvent.id, e.nativeEvent.title);
298
+ },
299
+ [onMenuSelect]
300
+ );
301
+
302
+ const handleMenuOpen = useCallback(() => onMenuOpen?.(), [onMenuOpen]);
303
+ const handleMenuClose = useCallback(() => onMenuClose?.(), [onMenuClose]);
304
+
305
+ const nativeIOS = useMemo(
306
+ () => ({
307
+ symbolEffect: ios?.symbolEffect ?? '',
308
+ symbolEffectTrigger:
309
+ ios?.symbolEffectTrigger === undefined
310
+ ? ''
311
+ : String(ios.symbolEffectTrigger),
312
+ }),
313
+ [ios?.symbolEffect, ios?.symbolEffectTrigger]
314
+ );
315
+
316
+ const isToggle = selected !== undefined;
317
+
318
+ const mergedAccessibilityState = useMemo(
319
+ () =>
320
+ loading ? { ...accessibilityState, busy: true } : accessibilityState,
321
+ [loading, accessibilityState]
322
+ );
124
323
 
125
324
  return (
126
325
  <NativeButton
127
326
  label={label ?? ''}
128
327
  icon={nativeIcon}
328
+ iconPosition={iconPosition ?? 'leading'}
129
329
  variant={variant ?? 'filled'}
130
330
  size={size ?? 'small'}
131
331
  shape={shape ?? ''}
332
+ cornerRadius={cornerRadius ?? -1}
132
333
  interactivity={disabled ? 'disabled' : 'enabled'}
334
+ loading={loading ? 'true' : 'false'}
133
335
  color={color}
134
336
  foregroundColor={tintColor}
337
+ disabledColor={disabledColor}
338
+ disabledForegroundColor={disabledTintColor}
135
339
  androidRippleColor={android?.rippleColor}
136
340
  androidStrokeColor={android?.strokeColor}
137
341
  androidMaterial={android?.material ?? 'expressive'}
138
342
  labelStyle={nativeLabelStyle}
343
+ maxFontSizeMultiplier={maxFontSizeMultiplier ?? 0}
139
344
  spokenLabel={accessibilityLabel ?? ''}
345
+ selected={isToggle ? (selected ? 'true' : 'false') : ''}
346
+ selectedEventCount={selectedEventCount}
347
+ menu={nativeMenu}
348
+ ios={nativeIOS}
349
+ haptics={haptics ?? ''}
140
350
  onButtonPress={onPress ? handlePress : undefined}
351
+ onSelectedChange={isToggle ? handleSelectedChange : undefined}
352
+ onMenuSelect={onMenuSelect ? handleMenuSelect : undefined}
353
+ onMenuOpen={onMenuOpen ? handleMenuOpen : undefined}
354
+ onMenuClose={onMenuClose ? handleMenuClose : undefined}
355
+ accessibilityState={mergedAccessibilityState}
141
356
  {...viewProps}
142
357
  />
143
358
  );
@@ -10,6 +10,7 @@ import NativeButtonGroup, {
10
10
  } from './ButtonGroupNativeComponent';
11
11
  import { resolveIcon, type PlatformIcon } from './icons';
12
12
  import { normalizeLabelStyle, type LabelStyle } from './labelStyle';
13
+ import type { Haptics } from './haptics';
13
14
  import type { AndroidMaterialStyle } from './sharedTypes';
14
15
 
15
16
  /**
@@ -21,7 +22,14 @@ import type { AndroidMaterialStyle } from './sharedTypes';
21
22
  */
22
23
  export type ButtonGroupSelection = 'none' | 'single' | 'multiple';
23
24
 
24
- /** What happens to buttons that don't fit the group's width (Android). */
25
+ /**
26
+ * What happens to buttons that don't fit the group's width.
27
+ *
28
+ * - `none` (default): they are clipped.
29
+ * - `menu`: the trailing ones move into an overflow menu. Android: the
30
+ * `MaterialButtonGroup` overflow menu. iOS: a "…" button with a `UIMenu`.
31
+ * - `wrap`: they wrap onto more rows (Android only; iOS clips them).
32
+ */
25
33
  export type ButtonGroupOverflow = 'none' | 'menu' | 'wrap';
26
34
 
27
35
  export interface ButtonGroupButtonProps {
@@ -91,6 +99,19 @@ export interface ButtonGroupProps extends ViewProps {
91
99
  /** Label font. */
92
100
  labelStyle?: LabelStyle;
93
101
 
102
+ /**
103
+ * What happens to buttons that don't fit the group's width. Default:
104
+ * `'none'`. See {@link ButtonGroupOverflow}. A pick from the overflow menu
105
+ * counts as a press of its button (`onPress`, and the selection).
106
+ */
107
+ overflow?: ButtonGroupOverflow;
108
+
109
+ /**
110
+ * Haptic played when a button is pressed, in every selection mode.
111
+ * Default: none, like the native buttons. See {@link Haptics}.
112
+ */
113
+ haptics?: Haptics;
114
+
94
115
  /**
95
116
  * Called when a button is pressed, in every selection mode.
96
117
  * @param value - The button's value
@@ -108,11 +129,7 @@ export interface ButtonGroupProps extends ViewProps {
108
129
  * Android-specific configuration
109
130
  */
110
131
  android?: {
111
- /**
112
- * What happens to buttons that don't fit: `'none'` (clipped), `'menu'`
113
- * (moved into an overflow menu) or `'wrap'` (wrapped onto more rows).
114
- * Default: `'none'`.
115
- */
132
+ /** @deprecated Use the cross-platform `overflow` prop. */
116
133
  overflow?: ButtonGroupOverflow;
117
134
 
118
135
  /** Ripple color shown while pressing a button. */
@@ -148,6 +165,8 @@ export function ButtonGroup(props: ButtonGroupProps): React.ReactElement {
148
165
  color,
149
166
  tintColor,
150
167
  labelStyle,
168
+ overflow,
169
+ haptics,
151
170
  onPress,
152
171
  onSelectionChange,
153
172
  android,
@@ -194,11 +213,8 @@ export function ButtonGroup(props: ButtonGroupProps): React.ReactElement {
194
213
  );
195
214
 
196
215
  const nativeAndroid = useMemo(
197
- () => ({
198
- overflow: android?.overflow ?? 'none',
199
- material: android?.material ?? 'expressive',
200
- }),
201
- [android]
216
+ () => ({ material: android?.material ?? 'expressive' }),
217
+ [android?.material]
202
218
  );
203
219
 
204
220
  const isConnected = connected ?? selectionMode !== 'none';
@@ -222,6 +238,8 @@ export function ButtonGroup(props: ButtonGroupProps): React.ReactElement {
222
238
  androidRippleColor={android?.rippleColor}
223
239
  androidStrokeColor={android?.strokeColor}
224
240
  labelStyle={nativeLabelStyle}
241
+ overflow={overflow ?? android?.overflow ?? 'none'}
242
+ haptics={haptics ?? ''}
225
243
  onButtonPress={onPress ? handlePress : undefined}
226
244
  onGroupSelectionChange={
227
245
  onSelectionChange ? handleSelectionChange : undefined
@@ -13,6 +13,7 @@ export type ButtonGroupButton = Readonly<{
13
13
  disabled: string; // 'enabled' | 'disabled'
14
14
  iconType: string; // '' | 'sfSymbol' | 'drawable' | 'image'
15
15
  iconName: string; // SF Symbol (iOS) or drawable resource name (Android)
16
+ iconRequest: string;
16
17
  iconUri: string; // Resolved image URI when iconType === 'image'
17
18
  iconScale: Double; // Resolved image scale when iconType === 'image'
18
19
  iconTinted: string; // 'true' | 'false' — draw the image as a tinted template
@@ -46,13 +47,46 @@ export type ButtonGroupLabelStyleProps = Readonly<{
46
47
  fontStyle?: string; // 'normal' | 'italic'
47
48
  }>;
48
49
 
50
+ /**
51
+ * One item of the split button's menu, the shape of `ContextMenuItem` (see
52
+ * menuItems.ts). Every field is set; empty strings mean "none" and flags are
53
+ * 'true' | 'false'.
54
+ */
55
+ export type ButtonGroupMenuItem = Readonly<{
56
+ id: string;
57
+ title: string;
58
+ subtitle: string;
59
+ /** Index of the parent submenu or section; -1 at the top level */
60
+ parent: Int32;
61
+ /** 'action' | 'menu' | 'section' */
62
+ kind: string;
63
+ /** '' | 'sfSymbol' | 'drawable' | 'image' */
64
+ iconType: string;
65
+ iconName: string;
66
+ iconRequest: string;
67
+ iconUri: string;
68
+ iconScale: Double;
69
+ iconTinted: string;
70
+ imageColor: string;
71
+ destructive: string;
72
+ disabled: string;
73
+ keepsMenuPresented: string;
74
+ /** '' | 'off' | 'on' | 'mixed' */
75
+ state: string;
76
+ /** The action's own haptics; '' = the component's */
77
+ haptics: string;
78
+ }>;
79
+
80
+ /** Event emitted when a split button menu item is picked. */
81
+ export type ButtonGroupMenuSelectEvent = Readonly<{
82
+ id: string;
83
+ title: string;
84
+ }>;
85
+
49
86
  /**
50
87
  * Android-specific configuration.
51
88
  */
52
89
  export type ButtonGroupAndroidProps = Readonly<{
53
- /** What happens to buttons that don't fit: 'none' | 'menu' | 'wrap' */
54
- overflow?: string;
55
-
56
90
  /** Material style: 'm3' | 'expressive' */
57
91
  material?: string;
58
92
  }>;
@@ -61,7 +95,10 @@ export interface ButtonGroupNativeProps extends ViewProps {
61
95
  /** Buttons to display. */
62
96
  buttons: ReadonlyArray<ButtonGroupButton>;
63
97
 
64
- /** 'filled' | 'tonal' | 'outlined' | 'text' | 'elevated' */
98
+ /**
99
+ * 'filled' | 'tonal' | 'outlined' | 'text' | 'elevated' | 'glass' |
100
+ * 'prominentGlass' | 'clearGlass' | 'prominentClearGlass'
101
+ */
65
102
  variant?: string;
66
103
 
67
104
  /** 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' */
@@ -103,6 +140,30 @@ export interface ButtonGroupNativeProps extends ViewProps {
103
140
  /** Label font. */
104
141
  labelStyle?: ButtonGroupLabelStyleProps;
105
142
 
143
+ /**
144
+ * What happens to buttons that don't fit: 'none' | 'menu' | 'wrap'
145
+ * ('wrap' is Android only)
146
+ */
147
+ overflow?: string;
148
+
149
+ /**
150
+ * 'true' | 'false': a split button, the first button joined to a trailing
151
+ * button that opens `menu` (SplitButton).
152
+ */
153
+ split?: string;
154
+
155
+ /** The split button's menu, flattened (see ButtonGroupMenuItem). */
156
+ menu?: ReadonlyArray<ButtonGroupMenuItem>;
157
+
158
+ /** Screen-reader label of the split button's menu button. */
159
+ menuAccessibilityLabel?: string;
160
+
161
+ /**
162
+ * Haptic played when a button is pressed: '' (none added) | 'none' | 'selection' |
163
+ * 'light' | 'medium' | 'heavy' | 'success' | 'warning' | 'error'
164
+ */
165
+ haptics?: string;
166
+
106
167
  /** Fired when a button is pressed. */
107
168
  onButtonPress?: BubblingEventHandler<ButtonGroupPressEvent>;
108
169
 
@@ -113,6 +174,15 @@ export interface ButtonGroupNativeProps extends ViewProps {
113
174
  */
114
175
  onGroupSelectionChange?: BubblingEventHandler<ButtonGroupSelectionEvent>;
115
176
 
177
+ /** Fired when a split button menu item is picked. */
178
+ onMenuSelect?: BubblingEventHandler<ButtonGroupMenuSelectEvent>;
179
+
180
+ /** Fired when the split button's menu opens. */
181
+ onMenuOpen?: BubblingEventHandler<Readonly<{}>>;
182
+
183
+ /** Fired when the split button's menu closes. */
184
+ onMenuClose?: BubblingEventHandler<Readonly<{}>>;
185
+
116
186
  android?: ButtonGroupAndroidProps;
117
187
  }
118
188