react-native-platform-components 1.3.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 (636) hide show
  1. package/PlatformComponents.podspec +1 -1
  2. package/README.md +47 -51
  3. package/android/src/main/java/com/platformcomponents/PCButtonGroupView.kt +664 -0
  4. package/android/src/main/java/com/platformcomponents/PCButtonGroupViewManager.kt +241 -0
  5. package/android/src/main/java/com/platformcomponents/PCButtonSupport.kt +159 -0
  6. package/android/src/main/java/com/platformcomponents/PCButtonView.kt +527 -0
  7. package/android/src/main/java/com/platformcomponents/PCButtonViewManager.kt +204 -0
  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 +112 -0
  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 +247 -0
  16. package/android/src/main/java/com/platformcomponents/PCFloatingToolbarViewManager.kt +73 -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 +35 -17
  28. package/android/src/main/java/com/platformcomponents/PCSegmentedControlViewManager.kt +20 -3
  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 +1393 -0
  34. package/android/src/main/java/com/platformcomponents/PCTextFieldViewManager.kt +354 -0
  35. package/android/src/main/java/com/platformcomponents/PCThemeSupport.kt +37 -0
  36. package/android/src/main/java/com/platformcomponents/PlatformComponentsPackage.kt +8 -0
  37. package/android/src/main/res/drawable/pc_ic_search.xml +12 -0
  38. package/android/src/main/res/values/attrs.xml +13 -0
  39. package/android/src/main/res/values/ids.xml +5 -0
  40. package/android/src/main/res/values/styles.xml +207 -0
  41. package/ios/PCButton.h +10 -0
  42. package/ios/PCButton.mm +311 -0
  43. package/ios/PCButtonGroup.h +10 -0
  44. package/ios/PCButtonGroup.mm +323 -0
  45. package/ios/PCButtonGroupView.swift +473 -0
  46. package/ios/PCButtonSupport.swift +312 -0
  47. package/ios/PCButtonView.swift +438 -0
  48. package/ios/PCConstants.swift +23 -2
  49. package/ios/PCContextMenu.mm +28 -110
  50. package/ios/PCContextMenu.swift +106 -167
  51. package/ios/PCDatePicker.mm +21 -9
  52. package/ios/PCDatePickerView.swift +94 -20
  53. package/ios/PCFloatingActionButton.h +10 -0
  54. package/ios/PCFloatingActionButton.mm +177 -0
  55. package/ios/PCFloatingActionButtonView.swift +426 -0
  56. package/ios/PCFloatingToolbar.h +10 -0
  57. package/ios/PCFloatingToolbar.mm +103 -0
  58. package/ios/PCFloatingToolbarView.swift +336 -0
  59. package/ios/PCHaptics.swift +91 -0
  60. package/ios/PCImageLoader.swift +76 -12
  61. package/ios/PCLiquidGlass.mm +36 -0
  62. package/ios/PCLiquidGlass.swift +221 -114
  63. package/ios/PCLiquidGlassContainer.h +10 -0
  64. package/ios/PCLiquidGlassContainer.mm +84 -0
  65. package/ios/PCLiquidGlassContainer.swift +69 -0
  66. package/ios/PCMenuItems.h +76 -0
  67. package/ios/PCMenuSupport.swift +350 -0
  68. package/ios/PCNavigationRail.h +10 -0
  69. package/ios/PCNavigationRail.mm +270 -0
  70. package/ios/PCNavigationRailView.swift +415 -0
  71. package/ios/PCSegmentedControl.mm +17 -2
  72. package/ios/PCSegmentedControl.swift +57 -7
  73. package/ios/PCSelectionMenu.mm +36 -8
  74. package/ios/PCSelectionMenu.swift +224 -48
  75. package/ios/PCTabBar.h +10 -0
  76. package/ios/PCTabBar.mm +285 -0
  77. package/ios/PCTabBarAccessory.h +10 -0
  78. package/ios/PCTabBarAccessory.mm +93 -0
  79. package/ios/PCTabBarAccessoryView.swift +96 -0
  80. package/ios/PCTabBarView.swift +671 -0
  81. package/ios/PCTextField.h +10 -0
  82. package/ios/PCTextField.mm +546 -0
  83. package/ios/PCTextFieldView.swift +1558 -0
  84. package/lib/commonjs/Button.js +149 -0
  85. package/lib/commonjs/Button.js.map +1 -0
  86. package/lib/commonjs/ButtonGroup.js +109 -0
  87. package/lib/commonjs/ButtonGroup.js.map +1 -0
  88. package/lib/commonjs/ButtonGroupNativeComponent.ts +191 -0
  89. package/lib/commonjs/ButtonNativeComponent.ts +192 -0
  90. package/lib/commonjs/ContextMenu.js +9 -48
  91. package/lib/commonjs/ContextMenu.js.map +1 -1
  92. package/lib/commonjs/ContextMenuNativeComponent.ts +47 -49
  93. package/lib/commonjs/DatePicker.js +98 -2
  94. package/lib/commonjs/DatePicker.js.map +1 -1
  95. package/lib/commonjs/DatePickerNativeComponent.ts +19 -2
  96. package/lib/commonjs/FloatingActionButton.js +60 -0
  97. package/lib/commonjs/FloatingActionButton.js.map +1 -0
  98. package/lib/commonjs/FloatingActionButtonNativeComponent.ts +58 -0
  99. package/lib/commonjs/FloatingToolbar.js +77 -0
  100. package/lib/commonjs/FloatingToolbar.js.map +1 -0
  101. package/lib/commonjs/FloatingToolbarNativeComponent.ts +47 -0
  102. package/lib/commonjs/LiquidGlass.js +7 -1
  103. package/lib/commonjs/LiquidGlass.js.map +1 -1
  104. package/lib/commonjs/LiquidGlassContainer.js +32 -0
  105. package/lib/commonjs/LiquidGlassContainer.js.map +1 -0
  106. package/lib/commonjs/LiquidGlassContainerNativeComponent.ts +17 -0
  107. package/lib/commonjs/LiquidGlassNativeComponent.ts +8 -0
  108. package/lib/commonjs/NavigationRail.js +104 -0
  109. package/lib/commonjs/NavigationRail.js.map +1 -0
  110. package/lib/commonjs/NavigationRailNativeComponent.ts +107 -0
  111. package/lib/commonjs/PlatformComponentsProvider.js +18 -0
  112. package/lib/commonjs/PlatformComponentsProvider.js.map +1 -0
  113. package/lib/commonjs/SegmentedControl.js +18 -85
  114. package/lib/commonjs/SegmentedControl.js.map +1 -1
  115. package/lib/commonjs/SegmentedControlNativeComponent.ts +14 -0
  116. package/lib/commonjs/SelectionMenu.js +27 -3
  117. package/lib/commonjs/SelectionMenu.js.map +1 -1
  118. package/lib/commonjs/SelectionMenuNativeComponent.ts +26 -4
  119. package/lib/commonjs/SplitButton.js +98 -0
  120. package/lib/commonjs/SplitButton.js.map +1 -0
  121. package/lib/commonjs/TabBar.js +203 -0
  122. package/lib/commonjs/TabBar.js.map +1 -0
  123. package/lib/commonjs/TabBarAccessoryNativeComponent.ts +19 -0
  124. package/lib/commonjs/TabBarNativeComponent.ts +145 -0
  125. package/lib/commonjs/TextField.js +358 -0
  126. package/lib/commonjs/TextField.js.map +1 -0
  127. package/lib/commonjs/TextFieldNativeComponent.ts +324 -0
  128. package/lib/commonjs/focusRegistry.js +79 -0
  129. package/lib/commonjs/focusRegistry.js.map +1 -0
  130. package/lib/commonjs/haptics.js +2 -0
  131. package/lib/commonjs/haptics.js.map +1 -0
  132. package/lib/commonjs/icons.js +106 -0
  133. package/lib/commonjs/icons.js.map +1 -0
  134. package/lib/commonjs/index.js +143 -0
  135. package/lib/commonjs/index.js.map +1 -1
  136. package/lib/commonjs/index.web.js +157 -63
  137. package/lib/commonjs/index.web.js.map +1 -1
  138. package/lib/commonjs/jest.js +910 -0
  139. package/lib/commonjs/jest.js.map +1 -0
  140. package/lib/commonjs/labelStyle.js +27 -0
  141. package/lib/commonjs/labelStyle.js.map +1 -0
  142. package/lib/commonjs/menuItems.js +68 -0
  143. package/lib/commonjs/menuItems.js.map +1 -0
  144. package/lib/commonjs/reactNativeInternals.d.js +2 -0
  145. package/lib/commonjs/reactNativeInternals.d.js.map +1 -0
  146. package/lib/commonjs/selectionIdentifiers.js +18 -0
  147. package/lib/commonjs/selectionIdentifiers.js.map +1 -0
  148. package/lib/commonjs/submitBehavior.js +19 -0
  149. package/lib/commonjs/submitBehavior.js.map +1 -0
  150. package/lib/commonjs/tabItems.js +49 -0
  151. package/lib/commonjs/tabItems.js.map +1 -0
  152. package/lib/commonjs/web/Button.js +170 -0
  153. package/lib/commonjs/web/Button.js.map +1 -0
  154. package/lib/commonjs/web/ButtonGroup.js +119 -0
  155. package/lib/commonjs/web/ButtonGroup.js.map +1 -0
  156. package/lib/commonjs/web/DatePicker.js +168 -0
  157. package/lib/commonjs/web/DatePicker.js.map +1 -0
  158. package/lib/commonjs/web/DateRangePicker.js +137 -0
  159. package/lib/commonjs/web/DateRangePicker.js.map +1 -0
  160. package/lib/commonjs/web/Dialog.js +54 -0
  161. package/lib/commonjs/web/Dialog.js.map +1 -0
  162. package/lib/commonjs/web/FloatingActionButton.js +98 -0
  163. package/lib/commonjs/web/FloatingActionButton.js.map +1 -0
  164. package/lib/commonjs/web/Icon.js +34 -0
  165. package/lib/commonjs/web/Icon.js.map +1 -0
  166. package/lib/commonjs/web/NativeTheme.js +28 -0
  167. package/lib/commonjs/web/NativeTheme.js.map +1 -0
  168. package/lib/commonjs/web/NavigationRail.js +139 -0
  169. package/lib/commonjs/web/NavigationRail.js.map +1 -0
  170. package/lib/commonjs/web/PlatformComponentsProvider.js +51 -0
  171. package/lib/commonjs/web/PlatformComponentsProvider.js.map +1 -0
  172. package/lib/commonjs/web/SegmentedControl.js +117 -0
  173. package/lib/commonjs/web/SegmentedControl.js.map +1 -0
  174. package/lib/commonjs/web/SelectionMenu.js +142 -0
  175. package/lib/commonjs/web/SelectionMenu.js.map +1 -0
  176. package/lib/commonjs/web/SplitButton.js +35 -0
  177. package/lib/commonjs/web/SplitButton.js.map +1 -0
  178. package/lib/commonjs/web/TabBar.js +131 -0
  179. package/lib/commonjs/web/TabBar.js.map +1 -0
  180. package/lib/commonjs/web/TextField.js +322 -0
  181. package/lib/commonjs/web/TextField.js.map +1 -0
  182. package/lib/commonjs/web/components.js +36 -0
  183. package/lib/commonjs/web/components.js.map +1 -0
  184. package/lib/commonjs/web/containers.js +121 -0
  185. package/lib/commonjs/web/containers.js.map +1 -0
  186. package/lib/commonjs/web/dateInput.js +116 -0
  187. package/lib/commonjs/web/dateInput.js.map +1 -0
  188. package/lib/commonjs/web/shared.js +192 -0
  189. package/lib/commonjs/web/shared.js.map +1 -0
  190. package/lib/commonjs/webComponents.js +6 -0
  191. package/lib/commonjs/webComponents.js.map +1 -0
  192. package/lib/module/Button.js +142 -0
  193. package/lib/module/Button.js.map +1 -0
  194. package/lib/module/ButtonGroup.js +102 -0
  195. package/lib/module/ButtonGroup.js.map +1 -0
  196. package/lib/module/ButtonGroupNativeComponent.ts +191 -0
  197. package/lib/module/ButtonNativeComponent.ts +192 -0
  198. package/lib/module/ContextMenu.js +9 -48
  199. package/lib/module/ContextMenu.js.map +1 -1
  200. package/lib/module/ContextMenuNativeComponent.ts +47 -49
  201. package/lib/module/DatePicker.js +98 -4
  202. package/lib/module/DatePicker.js.map +1 -1
  203. package/lib/module/DatePickerNativeComponent.ts +19 -2
  204. package/lib/module/FloatingActionButton.js +53 -0
  205. package/lib/module/FloatingActionButton.js.map +1 -0
  206. package/lib/module/FloatingActionButtonNativeComponent.ts +58 -0
  207. package/lib/module/FloatingToolbar.js +70 -0
  208. package/lib/module/FloatingToolbar.js.map +1 -0
  209. package/lib/module/FloatingToolbarNativeComponent.ts +47 -0
  210. package/lib/module/LiquidGlass.js +7 -1
  211. package/lib/module/LiquidGlass.js.map +1 -1
  212. package/lib/module/LiquidGlassContainer.js +26 -0
  213. package/lib/module/LiquidGlassContainer.js.map +1 -0
  214. package/lib/module/LiquidGlassContainerNativeComponent.ts +17 -0
  215. package/lib/module/LiquidGlassNativeComponent.ts +8 -0
  216. package/lib/module/NavigationRail.js +99 -0
  217. package/lib/module/NavigationRail.js.map +1 -0
  218. package/lib/module/NavigationRailNativeComponent.ts +107 -0
  219. package/lib/module/PlatformComponentsProvider.js +13 -0
  220. package/lib/module/PlatformComponentsProvider.js.map +1 -0
  221. package/lib/module/SegmentedControl.js +18 -85
  222. package/lib/module/SegmentedControl.js.map +1 -1
  223. package/lib/module/SegmentedControlNativeComponent.ts +14 -0
  224. package/lib/module/SelectionMenu.js +27 -3
  225. package/lib/module/SelectionMenu.js.map +1 -1
  226. package/lib/module/SelectionMenuNativeComponent.ts +26 -4
  227. package/lib/module/SplitButton.js +91 -0
  228. package/lib/module/SplitButton.js.map +1 -0
  229. package/lib/module/TabBar.js +196 -0
  230. package/lib/module/TabBar.js.map +1 -0
  231. package/lib/module/TabBarAccessoryNativeComponent.ts +19 -0
  232. package/lib/module/TabBarNativeComponent.ts +145 -0
  233. package/lib/module/TextField.js +352 -0
  234. package/lib/module/TextField.js.map +1 -0
  235. package/lib/module/TextFieldNativeComponent.ts +324 -0
  236. package/lib/module/focusRegistry.js +75 -0
  237. package/lib/module/focusRegistry.js.map +1 -0
  238. package/lib/module/haptics.js +2 -0
  239. package/lib/module/haptics.js.map +1 -0
  240. package/lib/module/icons.js +101 -0
  241. package/lib/module/icons.js.map +1 -0
  242. package/lib/module/index.js +13 -0
  243. package/lib/module/index.js.map +1 -1
  244. package/lib/module/index.web.js +12 -59
  245. package/lib/module/index.web.js.map +1 -1
  246. package/lib/module/jest.js +840 -0
  247. package/lib/module/jest.js.map +1 -0
  248. package/lib/module/labelStyle.js +23 -0
  249. package/lib/module/labelStyle.js.map +1 -0
  250. package/lib/module/menuItems.js +65 -0
  251. package/lib/module/menuItems.js.map +1 -0
  252. package/lib/module/reactNativeInternals.d.js +2 -0
  253. package/lib/module/reactNativeInternals.d.js.map +1 -0
  254. package/lib/module/selectionIdentifiers.js +14 -0
  255. package/lib/module/selectionIdentifiers.js.map +1 -0
  256. package/lib/module/submitBehavior.js +15 -0
  257. package/lib/module/submitBehavior.js.map +1 -0
  258. package/lib/module/tabItems.js +45 -0
  259. package/lib/module/tabItems.js.map +1 -0
  260. package/lib/module/web/Button.js +164 -0
  261. package/lib/module/web/Button.js.map +1 -0
  262. package/lib/module/web/ButtonGroup.js +113 -0
  263. package/lib/module/web/ButtonGroup.js.map +1 -0
  264. package/lib/module/web/DatePicker.js +162 -0
  265. package/lib/module/web/DatePicker.js.map +1 -0
  266. package/lib/module/web/DateRangePicker.js +131 -0
  267. package/lib/module/web/DateRangePicker.js.map +1 -0
  268. package/lib/module/web/Dialog.js +48 -0
  269. package/lib/module/web/Dialog.js.map +1 -0
  270. package/lib/module/web/FloatingActionButton.js +94 -0
  271. package/lib/module/web/FloatingActionButton.js.map +1 -0
  272. package/lib/module/web/Icon.js +29 -0
  273. package/lib/module/web/Icon.js.map +1 -0
  274. package/lib/module/web/NativeTheme.js +23 -0
  275. package/lib/module/web/NativeTheme.js.map +1 -0
  276. package/lib/module/web/NavigationRail.js +133 -0
  277. package/lib/module/web/NavigationRail.js.map +1 -0
  278. package/lib/module/web/PlatformComponentsProvider.js +44 -0
  279. package/lib/module/web/PlatformComponentsProvider.js.map +1 -0
  280. package/lib/module/web/SegmentedControl.js +112 -0
  281. package/lib/module/web/SegmentedControl.js.map +1 -0
  282. package/lib/module/web/SelectionMenu.js +137 -0
  283. package/lib/module/web/SelectionMenu.js.map +1 -0
  284. package/lib/module/web/SplitButton.js +30 -0
  285. package/lib/module/web/SplitButton.js.map +1 -0
  286. package/lib/module/web/TabBar.js +126 -0
  287. package/lib/module/web/TabBar.js.map +1 -0
  288. package/lib/module/web/TextField.js +316 -0
  289. package/lib/module/web/TextField.js.map +1 -0
  290. package/lib/module/web/components.js +33 -0
  291. package/lib/module/web/components.js.map +1 -0
  292. package/lib/module/web/containers.js +112 -0
  293. package/lib/module/web/containers.js.map +1 -0
  294. package/lib/module/web/dateInput.js +109 -0
  295. package/lib/module/web/dateInput.js.map +1 -0
  296. package/lib/module/web/shared.js +179 -0
  297. package/lib/module/web/shared.js.map +1 -0
  298. package/lib/module/webComponents.js +4 -0
  299. package/lib/module/webComponents.js.map +1 -0
  300. package/lib/typescript/commonjs/docs/sidebars.d.ts.map +1 -1
  301. package/lib/typescript/commonjs/src/Button.d.ts +184 -0
  302. package/lib/typescript/commonjs/src/Button.d.ts.map +1 -0
  303. package/lib/typescript/commonjs/src/ButtonGroup.d.ts +117 -0
  304. package/lib/typescript/commonjs/src/ButtonGroup.d.ts.map +1 -0
  305. package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts +154 -0
  306. package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts.map +1 -0
  307. package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts +148 -0
  308. package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts.map +1 -0
  309. package/lib/typescript/commonjs/src/ContextMenu.d.ts +20 -33
  310. package/lib/typescript/commonjs/src/ContextMenu.d.ts.map +1 -1
  311. package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts +45 -47
  312. package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts.map +1 -1
  313. package/lib/typescript/commonjs/src/DatePicker.d.ts +74 -1
  314. package/lib/typescript/commonjs/src/DatePicker.d.ts.map +1 -1
  315. package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts +16 -1
  316. package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts.map +1 -1
  317. package/lib/typescript/commonjs/src/FloatingActionButton.d.ts +67 -0
  318. package/lib/typescript/commonjs/src/FloatingActionButton.d.ts.map +1 -0
  319. package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts +43 -0
  320. package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
  321. package/lib/typescript/commonjs/src/FloatingToolbar.d.ts +75 -0
  322. package/lib/typescript/commonjs/src/FloatingToolbar.d.ts.map +1 -0
  323. package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts +36 -0
  324. package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts.map +1 -0
  325. package/lib/typescript/commonjs/src/LiquidGlass.d.ts +17 -0
  326. package/lib/typescript/commonjs/src/LiquidGlass.d.ts.map +1 -1
  327. package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts +27 -0
  328. package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts.map +1 -0
  329. package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
  330. package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
  331. package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts +7 -0
  332. package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts.map +1 -1
  333. package/lib/typescript/commonjs/src/NavigationRail.d.ts +86 -0
  334. package/lib/typescript/commonjs/src/NavigationRail.d.ts.map +1 -0
  335. package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts +81 -0
  336. package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts.map +1 -0
  337. package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts +6 -0
  338. package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts.map +1 -0
  339. package/lib/typescript/commonjs/src/SegmentedControl.d.ts +35 -47
  340. package/lib/typescript/commonjs/src/SegmentedControl.d.ts.map +1 -1
  341. package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts +11 -0
  342. package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts.map +1 -1
  343. package/lib/typescript/commonjs/src/SelectionMenu.d.ts +44 -2
  344. package/lib/typescript/commonjs/src/SelectionMenu.d.ts.map +1 -1
  345. package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts +20 -4
  346. package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts.map +1 -1
  347. package/lib/typescript/commonjs/src/SplitButton.d.ts +83 -0
  348. package/lib/typescript/commonjs/src/SplitButton.d.ts.map +1 -0
  349. package/lib/typescript/commonjs/src/TabBar.d.ts +144 -0
  350. package/lib/typescript/commonjs/src/TabBar.d.ts.map +1 -0
  351. package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts +13 -0
  352. package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
  353. package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts +110 -0
  354. package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts.map +1 -0
  355. package/lib/typescript/commonjs/src/TextField.d.ts +332 -0
  356. package/lib/typescript/commonjs/src/TextField.d.ts.map +1 -0
  357. package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts +240 -0
  358. package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts.map +1 -0
  359. package/lib/typescript/commonjs/src/focusRegistry.d.ts +13 -0
  360. package/lib/typescript/commonjs/src/focusRegistry.d.ts.map +1 -0
  361. package/lib/typescript/commonjs/src/haptics.d.ts +20 -0
  362. package/lib/typescript/commonjs/src/haptics.d.ts.map +1 -0
  363. package/lib/typescript/commonjs/src/icons.d.ts +58 -0
  364. package/lib/typescript/commonjs/src/icons.d.ts.map +1 -0
  365. package/lib/typescript/commonjs/src/index.d.ts +13 -0
  366. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  367. package/lib/typescript/commonjs/src/index.web.d.ts +25 -133
  368. package/lib/typescript/commonjs/src/index.web.d.ts.map +1 -1
  369. package/lib/typescript/commonjs/src/jest.d.ts +139 -0
  370. package/lib/typescript/commonjs/src/jest.d.ts.map +1 -0
  371. package/lib/typescript/commonjs/src/labelStyle.d.ts +20 -0
  372. package/lib/typescript/commonjs/src/labelStyle.d.ts.map +1 -0
  373. package/lib/typescript/commonjs/src/menuItems.d.ts +100 -0
  374. package/lib/typescript/commonjs/src/menuItems.d.ts.map +1 -0
  375. package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts +3 -0
  376. package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts.map +1 -0
  377. package/lib/typescript/commonjs/src/sharedTypes.d.ts +6 -1
  378. package/lib/typescript/commonjs/src/sharedTypes.d.ts.map +1 -1
  379. package/lib/typescript/commonjs/src/submitBehavior.d.ts +9 -0
  380. package/lib/typescript/commonjs/src/submitBehavior.d.ts.map +1 -0
  381. package/lib/typescript/commonjs/src/tabItems.d.ts +55 -0
  382. package/lib/typescript/commonjs/src/tabItems.d.ts.map +1 -0
  383. package/lib/typescript/commonjs/src/web/Button.d.ts +9 -0
  384. package/lib/typescript/commonjs/src/web/Button.d.ts.map +1 -0
  385. package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts +11 -0
  386. package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts.map +1 -0
  387. package/lib/typescript/commonjs/src/web/DatePicker.d.ts +14 -0
  388. package/lib/typescript/commonjs/src/web/DatePicker.d.ts.map +1 -0
  389. package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts +11 -0
  390. package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts.map +1 -0
  391. package/lib/typescript/commonjs/src/web/Dialog.d.ts +12 -0
  392. package/lib/typescript/commonjs/src/web/Dialog.d.ts.map +1 -0
  393. package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts +8 -0
  394. package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts.map +1 -0
  395. package/lib/typescript/commonjs/src/web/Icon.d.ts +12 -0
  396. package/lib/typescript/commonjs/src/web/Icon.d.ts.map +1 -0
  397. package/lib/typescript/commonjs/src/web/NativeTheme.d.ts +10 -0
  398. package/lib/typescript/commonjs/src/web/NativeTheme.d.ts.map +1 -0
  399. package/lib/typescript/commonjs/src/web/NavigationRail.d.ts +8 -0
  400. package/lib/typescript/commonjs/src/web/NavigationRail.d.ts.map +1 -0
  401. package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts +10 -0
  402. package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts.map +1 -0
  403. package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts +8 -0
  404. package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts.map +1 -0
  405. package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts +10 -0
  406. package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts.map +1 -0
  407. package/lib/typescript/commonjs/src/web/SplitButton.d.ts +9 -0
  408. package/lib/typescript/commonjs/src/web/SplitButton.d.ts.map +1 -0
  409. package/lib/typescript/commonjs/src/web/TabBar.d.ts +9 -0
  410. package/lib/typescript/commonjs/src/web/TabBar.d.ts.map +1 -0
  411. package/lib/typescript/commonjs/src/web/TextField.d.ts +9 -0
  412. package/lib/typescript/commonjs/src/web/TextField.d.ts.map +1 -0
  413. package/lib/typescript/commonjs/src/web/components.d.ts +17 -0
  414. package/lib/typescript/commonjs/src/web/components.d.ts.map +1 -0
  415. package/lib/typescript/commonjs/src/web/containers.d.ts +24 -0
  416. package/lib/typescript/commonjs/src/web/containers.d.ts.map +1 -0
  417. package/lib/typescript/commonjs/src/web/dateInput.d.ts +20 -0
  418. package/lib/typescript/commonjs/src/web/dateInput.d.ts.map +1 -0
  419. package/lib/typescript/commonjs/src/web/shared.d.ts +43 -0
  420. package/lib/typescript/commonjs/src/web/shared.d.ts.map +1 -0
  421. package/lib/typescript/commonjs/src/webComponents.d.ts +43 -0
  422. package/lib/typescript/commonjs/src/webComponents.d.ts.map +1 -0
  423. package/lib/typescript/module/docs/sidebars.d.ts.map +1 -1
  424. package/lib/typescript/module/src/Button.d.ts +184 -0
  425. package/lib/typescript/module/src/Button.d.ts.map +1 -0
  426. package/lib/typescript/module/src/ButtonGroup.d.ts +117 -0
  427. package/lib/typescript/module/src/ButtonGroup.d.ts.map +1 -0
  428. package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts +154 -0
  429. package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts.map +1 -0
  430. package/lib/typescript/module/src/ButtonNativeComponent.d.ts +148 -0
  431. package/lib/typescript/module/src/ButtonNativeComponent.d.ts.map +1 -0
  432. package/lib/typescript/module/src/ContextMenu.d.ts +20 -33
  433. package/lib/typescript/module/src/ContextMenu.d.ts.map +1 -1
  434. package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts +45 -47
  435. package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts.map +1 -1
  436. package/lib/typescript/module/src/DatePicker.d.ts +74 -1
  437. package/lib/typescript/module/src/DatePicker.d.ts.map +1 -1
  438. package/lib/typescript/module/src/DatePickerNativeComponent.d.ts +16 -1
  439. package/lib/typescript/module/src/DatePickerNativeComponent.d.ts.map +1 -1
  440. package/lib/typescript/module/src/FloatingActionButton.d.ts +67 -0
  441. package/lib/typescript/module/src/FloatingActionButton.d.ts.map +1 -0
  442. package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts +43 -0
  443. package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
  444. package/lib/typescript/module/src/FloatingToolbar.d.ts +75 -0
  445. package/lib/typescript/module/src/FloatingToolbar.d.ts.map +1 -0
  446. package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts +36 -0
  447. package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts.map +1 -0
  448. package/lib/typescript/module/src/LiquidGlass.d.ts +17 -0
  449. package/lib/typescript/module/src/LiquidGlass.d.ts.map +1 -1
  450. package/lib/typescript/module/src/LiquidGlassContainer.d.ts +27 -0
  451. package/lib/typescript/module/src/LiquidGlassContainer.d.ts.map +1 -0
  452. package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
  453. package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
  454. package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts +7 -0
  455. package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts.map +1 -1
  456. package/lib/typescript/module/src/NavigationRail.d.ts +86 -0
  457. package/lib/typescript/module/src/NavigationRail.d.ts.map +1 -0
  458. package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts +81 -0
  459. package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts.map +1 -0
  460. package/lib/typescript/module/src/PlatformComponentsProvider.d.ts +6 -0
  461. package/lib/typescript/module/src/PlatformComponentsProvider.d.ts.map +1 -0
  462. package/lib/typescript/module/src/SegmentedControl.d.ts +35 -47
  463. package/lib/typescript/module/src/SegmentedControl.d.ts.map +1 -1
  464. package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts +11 -0
  465. package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts.map +1 -1
  466. package/lib/typescript/module/src/SelectionMenu.d.ts +44 -2
  467. package/lib/typescript/module/src/SelectionMenu.d.ts.map +1 -1
  468. package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts +20 -4
  469. package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts.map +1 -1
  470. package/lib/typescript/module/src/SplitButton.d.ts +83 -0
  471. package/lib/typescript/module/src/SplitButton.d.ts.map +1 -0
  472. package/lib/typescript/module/src/TabBar.d.ts +144 -0
  473. package/lib/typescript/module/src/TabBar.d.ts.map +1 -0
  474. package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts +13 -0
  475. package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
  476. package/lib/typescript/module/src/TabBarNativeComponent.d.ts +110 -0
  477. package/lib/typescript/module/src/TabBarNativeComponent.d.ts.map +1 -0
  478. package/lib/typescript/module/src/TextField.d.ts +332 -0
  479. package/lib/typescript/module/src/TextField.d.ts.map +1 -0
  480. package/lib/typescript/module/src/TextFieldNativeComponent.d.ts +240 -0
  481. package/lib/typescript/module/src/TextFieldNativeComponent.d.ts.map +1 -0
  482. package/lib/typescript/module/src/focusRegistry.d.ts +13 -0
  483. package/lib/typescript/module/src/focusRegistry.d.ts.map +1 -0
  484. package/lib/typescript/module/src/haptics.d.ts +20 -0
  485. package/lib/typescript/module/src/haptics.d.ts.map +1 -0
  486. package/lib/typescript/module/src/icons.d.ts +58 -0
  487. package/lib/typescript/module/src/icons.d.ts.map +1 -0
  488. package/lib/typescript/module/src/index.d.ts +13 -0
  489. package/lib/typescript/module/src/index.d.ts.map +1 -1
  490. package/lib/typescript/module/src/index.web.d.ts +25 -133
  491. package/lib/typescript/module/src/index.web.d.ts.map +1 -1
  492. package/lib/typescript/module/src/jest.d.ts +139 -0
  493. package/lib/typescript/module/src/jest.d.ts.map +1 -0
  494. package/lib/typescript/module/src/labelStyle.d.ts +20 -0
  495. package/lib/typescript/module/src/labelStyle.d.ts.map +1 -0
  496. package/lib/typescript/module/src/menuItems.d.ts +100 -0
  497. package/lib/typescript/module/src/menuItems.d.ts.map +1 -0
  498. package/lib/typescript/module/src/selectionIdentifiers.d.ts +3 -0
  499. package/lib/typescript/module/src/selectionIdentifiers.d.ts.map +1 -0
  500. package/lib/typescript/module/src/sharedTypes.d.ts +6 -1
  501. package/lib/typescript/module/src/sharedTypes.d.ts.map +1 -1
  502. package/lib/typescript/module/src/submitBehavior.d.ts +9 -0
  503. package/lib/typescript/module/src/submitBehavior.d.ts.map +1 -0
  504. package/lib/typescript/module/src/tabItems.d.ts +55 -0
  505. package/lib/typescript/module/src/tabItems.d.ts.map +1 -0
  506. package/lib/typescript/module/src/web/Button.d.ts +9 -0
  507. package/lib/typescript/module/src/web/Button.d.ts.map +1 -0
  508. package/lib/typescript/module/src/web/ButtonGroup.d.ts +11 -0
  509. package/lib/typescript/module/src/web/ButtonGroup.d.ts.map +1 -0
  510. package/lib/typescript/module/src/web/DatePicker.d.ts +14 -0
  511. package/lib/typescript/module/src/web/DatePicker.d.ts.map +1 -0
  512. package/lib/typescript/module/src/web/DateRangePicker.d.ts +11 -0
  513. package/lib/typescript/module/src/web/DateRangePicker.d.ts.map +1 -0
  514. package/lib/typescript/module/src/web/Dialog.d.ts +12 -0
  515. package/lib/typescript/module/src/web/Dialog.d.ts.map +1 -0
  516. package/lib/typescript/module/src/web/FloatingActionButton.d.ts +8 -0
  517. package/lib/typescript/module/src/web/FloatingActionButton.d.ts.map +1 -0
  518. package/lib/typescript/module/src/web/Icon.d.ts +12 -0
  519. package/lib/typescript/module/src/web/Icon.d.ts.map +1 -0
  520. package/lib/typescript/module/src/web/NativeTheme.d.ts +10 -0
  521. package/lib/typescript/module/src/web/NativeTheme.d.ts.map +1 -0
  522. package/lib/typescript/module/src/web/NavigationRail.d.ts +8 -0
  523. package/lib/typescript/module/src/web/NavigationRail.d.ts.map +1 -0
  524. package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts +10 -0
  525. package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts.map +1 -0
  526. package/lib/typescript/module/src/web/SegmentedControl.d.ts +8 -0
  527. package/lib/typescript/module/src/web/SegmentedControl.d.ts.map +1 -0
  528. package/lib/typescript/module/src/web/SelectionMenu.d.ts +10 -0
  529. package/lib/typescript/module/src/web/SelectionMenu.d.ts.map +1 -0
  530. package/lib/typescript/module/src/web/SplitButton.d.ts +9 -0
  531. package/lib/typescript/module/src/web/SplitButton.d.ts.map +1 -0
  532. package/lib/typescript/module/src/web/TabBar.d.ts +9 -0
  533. package/lib/typescript/module/src/web/TabBar.d.ts.map +1 -0
  534. package/lib/typescript/module/src/web/TextField.d.ts +9 -0
  535. package/lib/typescript/module/src/web/TextField.d.ts.map +1 -0
  536. package/lib/typescript/module/src/web/components.d.ts +17 -0
  537. package/lib/typescript/module/src/web/components.d.ts.map +1 -0
  538. package/lib/typescript/module/src/web/containers.d.ts +24 -0
  539. package/lib/typescript/module/src/web/containers.d.ts.map +1 -0
  540. package/lib/typescript/module/src/web/dateInput.d.ts +20 -0
  541. package/lib/typescript/module/src/web/dateInput.d.ts.map +1 -0
  542. package/lib/typescript/module/src/web/shared.d.ts +43 -0
  543. package/lib/typescript/module/src/web/shared.d.ts.map +1 -0
  544. package/lib/typescript/module/src/webComponents.d.ts +43 -0
  545. package/lib/typescript/module/src/webComponents.d.ts.map +1 -0
  546. package/package.json +55 -4
  547. package/plugin/build/index.d.ts +3 -2
  548. package/plugin/build/index.d.ts.map +1 -1
  549. package/react-native.config.js +6 -0
  550. package/shared/PCButtonComponentDescriptors-custom.h +22 -0
  551. package/shared/PCButtonGroupComponentDescriptors-custom.h +22 -0
  552. package/shared/PCButtonGroupShadowNode-custom.cpp +48 -0
  553. package/shared/PCButtonGroupShadowNode-custom.h +55 -0
  554. package/shared/PCButtonGroupState-custom.h +61 -0
  555. package/shared/PCButtonShadowNode-custom.cpp +48 -0
  556. package/shared/PCButtonShadowNode-custom.h +55 -0
  557. package/shared/PCButtonState-custom.h +61 -0
  558. package/shared/PCFloatingActionButtonComponentDescriptors-custom.h +22 -0
  559. package/shared/PCFloatingActionButtonShadowNode-custom.cpp +48 -0
  560. package/shared/PCFloatingActionButtonShadowNode-custom.h +54 -0
  561. package/shared/PCFloatingActionButtonState-custom.h +61 -0
  562. package/shared/PCNavigationRailComponentDescriptors-custom.h +47 -0
  563. package/shared/PCNavigationRailShadowNode-custom.h +42 -0
  564. package/shared/PCNavigationRailState-custom.h +62 -0
  565. package/shared/PCTabBarComponentDescriptors-custom.h +22 -0
  566. package/shared/PCTabBarShadowNode-custom.cpp +54 -0
  567. package/shared/PCTabBarShadowNode-custom.h +54 -0
  568. package/shared/PCTabBarState-custom.h +62 -0
  569. package/shared/PCTextFieldComponentDescriptors-custom.h +22 -0
  570. package/shared/PCTextFieldShadowNode-custom.cpp +47 -0
  571. package/shared/PCTextFieldShadowNode-custom.h +55 -0
  572. package/shared/PCTextFieldState-custom.h +61 -0
  573. package/shared/react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h +6 -0
  574. package/src/Button.tsx +359 -0
  575. package/src/ButtonGroup.tsx +251 -0
  576. package/src/ButtonGroupNativeComponent.ts +191 -0
  577. package/src/ButtonNativeComponent.ts +192 -0
  578. package/src/ContextMenu.tsx +34 -81
  579. package/src/ContextMenuNativeComponent.ts +47 -49
  580. package/src/DatePicker.tsx +182 -4
  581. package/src/DatePickerNativeComponent.ts +19 -2
  582. package/src/FloatingActionButton.tsx +121 -0
  583. package/src/FloatingActionButtonNativeComponent.ts +58 -0
  584. package/src/FloatingToolbar.tsx +164 -0
  585. package/src/FloatingToolbarNativeComponent.ts +47 -0
  586. package/src/LiquidGlass.tsx +24 -1
  587. package/src/LiquidGlassContainer.tsx +42 -0
  588. package/src/LiquidGlassContainerNativeComponent.ts +17 -0
  589. package/src/LiquidGlassNativeComponent.ts +8 -0
  590. package/src/NavigationRail.tsx +203 -0
  591. package/src/NavigationRailNativeComponent.ts +107 -0
  592. package/src/PlatformComponentsProvider.tsx +15 -0
  593. package/src/SegmentedControl.tsx +57 -119
  594. package/src/SegmentedControlNativeComponent.ts +14 -0
  595. package/src/SelectionMenu.tsx +81 -6
  596. package/src/SelectionMenuNativeComponent.ts +26 -4
  597. package/src/SplitButton.tsx +198 -0
  598. package/src/TabBar.tsx +373 -0
  599. package/src/TabBarAccessoryNativeComponent.ts +19 -0
  600. package/src/TabBarNativeComponent.ts +145 -0
  601. package/src/TextField.tsx +908 -0
  602. package/src/TextFieldNativeComponent.ts +324 -0
  603. package/src/focusRegistry.ts +90 -0
  604. package/src/haptics.ts +31 -0
  605. package/src/icons.ts +143 -0
  606. package/src/index.tsx +13 -0
  607. package/src/index.web.tsx +53 -199
  608. package/src/jest.tsx +958 -0
  609. package/src/labelStyle.ts +36 -0
  610. package/src/menuItems.ts +152 -0
  611. package/src/reactNativeInternals.d.ts +22 -0
  612. package/src/selectionIdentifiers.ts +17 -0
  613. package/src/sharedTypes.ts +7 -1
  614. package/src/submitBehavior.ts +16 -0
  615. package/src/tabItems.ts +113 -0
  616. package/src/web/Button.tsx +201 -0
  617. package/src/web/ButtonGroup.tsx +154 -0
  618. package/src/web/DatePicker.tsx +204 -0
  619. package/src/web/DateRangePicker.tsx +135 -0
  620. package/src/web/Dialog.tsx +54 -0
  621. package/src/web/FloatingActionButton.tsx +76 -0
  622. package/src/web/Icon.tsx +33 -0
  623. package/src/web/NativeTheme.ts +23 -0
  624. package/src/web/NavigationRail.tsx +148 -0
  625. package/src/web/PlatformComponentsProvider.tsx +48 -0
  626. package/src/web/SegmentedControl.tsx +127 -0
  627. package/src/web/SelectionMenu.tsx +149 -0
  628. package/src/web/SplitButton.tsx +32 -0
  629. package/src/web/TabBar.tsx +150 -0
  630. package/src/web/TextField.tsx +361 -0
  631. package/src/web/components.tsx +71 -0
  632. package/src/web/containers.tsx +130 -0
  633. package/src/web/dateInput.ts +137 -0
  634. package/src/web/shared.ts +176 -0
  635. package/src/webComponents.ts +45 -0
  636. package/android/src/main/java/com/platformcomponents/DateConstraints.kt +0 -83
package/src/Button.tsx ADDED
@@ -0,0 +1,359 @@
1
+ // Button.tsx
2
+ import React, { useCallback, useMemo, useState } from 'react';
3
+ import type { ColorValue, NativeSyntheticEvent, ViewProps } from 'react-native';
4
+
5
+ import NativeButton, {
6
+ type ButtonMenuSelectEvent,
7
+ type ButtonSelectedChangeEvent,
8
+ } from './ButtonNativeComponent';
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 the button, from highest to lowest.
17
+ *
18
+ * | Variant | Android (Material 3 Expressive) | iOS (`UIButton.Configuration`) |
19
+ * | ---------- | ------------------------------- | ------------------------------ |
20
+ * | `filled` | Filled button | `.filled()` |
21
+ * | `tonal` | Filled tonal button | `.tinted()` |
22
+ * | `outlined` | Outlined button | `.bordered()` |
23
+ * | `text` | Text button | `.plain()` |
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.
33
+ */
34
+ export type ButtonVariant =
35
+ | 'filled'
36
+ | 'tonal'
37
+ | 'outlined'
38
+ | 'text'
39
+ | 'elevated'
40
+ | 'glass'
41
+ | 'prominentGlass'
42
+ | 'clearGlass'
43
+ | 'prominentClearGlass';
44
+
45
+ /**
46
+ * Button size. Material 3 Expressive defines five sizes; iOS maps them onto
47
+ * `UIButton.Configuration.Size` (`xsmall` → mini, `xlarge` → large).
48
+ */
49
+ export type ButtonSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';
50
+
51
+ /**
52
+ * Corner shape. `round` is a pill; `square` keeps rounded corners. Unset
53
+ * means the platform default (round on Android, dynamic on iOS).
54
+ */
55
+ export type ButtonShape = 'round' | 'square';
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
+
67
+ export interface ButtonProps extends ViewProps {
68
+ /** Button text. Omit for an icon-only button. */
69
+ label?: string;
70
+
71
+ /** Icon shown next to the label, or alone when there is no label. */
72
+ icon?: PlatformIcon;
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
+
82
+ /** Emphasis. Default: `'filled'`. See {@link ButtonVariant}. */
83
+ variant?: ButtonVariant;
84
+
85
+ /** Size. Default: `'small'`, the Material 3 default. */
86
+ size?: ButtonSize;
87
+
88
+ /** Corner shape. Default: platform default. */
89
+ shape?: ButtonShape;
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
+
98
+ /** Whether the button is disabled. */
99
+ disabled?: boolean;
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
+
109
+ /**
110
+ * Container (background) color.
111
+ * Android: `backgroundTint`. iOS: `baseBackgroundColor`.
112
+ */
113
+ color?: ColorValue;
114
+
115
+ /**
116
+ * Label and icon color.
117
+ * Android: text color and `iconTint`. iOS: `baseForegroundColor`.
118
+ */
119
+ tintColor?: ColorValue;
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
+
135
+ /** Label font. */
136
+ labelStyle?: LabelStyle;
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
+
145
+ /** Screen-reader label. Defaults to `label`. */
146
+ accessibilityLabel?: string;
147
+
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
+ */
160
+ onPress?: () => void;
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
+
213
+ /**
214
+ * Android-specific configuration
215
+ */
216
+ android?: {
217
+ /** Ripple color shown while pressing. */
218
+ rippleColor?: ColorValue;
219
+
220
+ /** Outline color (outlined variant). */
221
+ strokeColor?: ColorValue;
222
+
223
+ /**
224
+ * Material style: Material 3 Expressive (default), or the classic
225
+ * Material 3 button, which has one size and shape (`size` and `shape`
226
+ * are ignored).
227
+ */
228
+ material?: AndroidMaterialStyle;
229
+ };
230
+
231
+ /** Test identifier */
232
+ testID?: string;
233
+ }
234
+
235
+ export function Button(props: ButtonProps): React.ReactElement {
236
+ const {
237
+ label,
238
+ icon,
239
+ iconPosition,
240
+ variant,
241
+ size,
242
+ shape,
243
+ cornerRadius,
244
+ disabled,
245
+ loading,
246
+ color,
247
+ tintColor,
248
+ disabledColor,
249
+ disabledTintColor,
250
+ labelStyle,
251
+ maxFontSizeMultiplier,
252
+ accessibilityLabel,
253
+ haptics,
254
+ onPress,
255
+ selected,
256
+ onSelectedChange,
257
+ menu,
258
+ onMenuSelect,
259
+ onMenuOpen,
260
+ onMenuClose,
261
+ ios,
262
+ android,
263
+ accessibilityState,
264
+ ...viewProps
265
+ } = props;
266
+
267
+ const nativeIcon = useMemo(() => resolveIcon(icon), [icon]);
268
+ const nativeLabelStyle = useMemo(
269
+ () => normalizeLabelStyle(labelStyle),
270
+ [labelStyle]
271
+ );
272
+
273
+ const nativeMenu = useMemo(
274
+ () => (menu ? flattenMenuActions(menu) : []),
275
+ [menu]
276
+ );
277
+
278
+ const handlePress = useCallback(() => {
279
+ if (loading) return;
280
+ 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
+ );
323
+
324
+ return (
325
+ <NativeButton
326
+ label={label ?? ''}
327
+ icon={nativeIcon}
328
+ iconPosition={iconPosition ?? 'leading'}
329
+ variant={variant ?? 'filled'}
330
+ size={size ?? 'small'}
331
+ shape={shape ?? ''}
332
+ cornerRadius={cornerRadius ?? -1}
333
+ interactivity={disabled ? 'disabled' : 'enabled'}
334
+ loading={loading ? 'true' : 'false'}
335
+ color={color}
336
+ foregroundColor={tintColor}
337
+ disabledColor={disabledColor}
338
+ disabledForegroundColor={disabledTintColor}
339
+ androidRippleColor={android?.rippleColor}
340
+ androidStrokeColor={android?.strokeColor}
341
+ androidMaterial={android?.material ?? 'expressive'}
342
+ labelStyle={nativeLabelStyle}
343
+ maxFontSizeMultiplier={maxFontSizeMultiplier ?? 0}
344
+ spokenLabel={accessibilityLabel ?? ''}
345
+ selected={isToggle ? (selected ? 'true' : 'false') : ''}
346
+ selectedEventCount={selectedEventCount}
347
+ menu={nativeMenu}
348
+ ios={nativeIOS}
349
+ haptics={haptics ?? ''}
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}
356
+ {...viewProps}
357
+ />
358
+ );
359
+ }
@@ -0,0 +1,251 @@
1
+ // ButtonGroup.tsx
2
+ import React, { useCallback, useMemo } from 'react';
3
+ import type { ColorValue, ViewProps } from 'react-native';
4
+
5
+ import type { ButtonShape, ButtonSize, ButtonVariant } from './Button';
6
+ import NativeButtonGroup, {
7
+ type ButtonGroupButton as NativeButton,
8
+ type ButtonGroupPressEvent,
9
+ type ButtonGroupSelectionEvent,
10
+ } from './ButtonGroupNativeComponent';
11
+ import { resolveIcon, type PlatformIcon } from './icons';
12
+ import { normalizeLabelStyle, type LabelStyle } from './labelStyle';
13
+ import type { Haptics } from './haptics';
14
+ import type { AndroidMaterialStyle } from './sharedTypes';
15
+
16
+ /**
17
+ * Selection behavior of the group.
18
+ *
19
+ * - `none` (default): the buttons are plain actions.
20
+ * - `single`: at most one button is selected at a time.
21
+ * - `multiple`: any number of buttons can be selected.
22
+ */
23
+ export type ButtonGroupSelection = 'none' | 'single' | 'multiple';
24
+
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
+ */
33
+ export type ButtonGroupOverflow = 'none' | 'menu' | 'wrap';
34
+
35
+ export interface ButtonGroupButtonProps {
36
+ /** Button text. Omit for an icon-only button. */
37
+ label?: string;
38
+
39
+ /** Unique value identifier for the button */
40
+ value: string;
41
+
42
+ /** Whether this specific button is disabled */
43
+ disabled?: boolean;
44
+
45
+ /** Optional icon. See {@link PlatformIcon}. */
46
+ icon?: PlatformIcon;
47
+
48
+ /** Screen-reader label. Defaults to `label`. */
49
+ accessibilityLabel?: string;
50
+ }
51
+
52
+ export interface ButtonGroupProps extends ViewProps {
53
+ /** Buttons to display */
54
+ buttons: readonly ButtonGroupButtonProps[];
55
+
56
+ /** Emphasis of every button. Default: `'outlined'`. */
57
+ variant?: ButtonVariant;
58
+
59
+ /** Size of every button. Default: `'small'`. */
60
+ size?: ButtonSize;
61
+
62
+ /** Corner shape of every button. Default: platform default. */
63
+ shape?: ButtonShape;
64
+
65
+ /**
66
+ * Connected group: the buttons share one outline with small inner corners
67
+ * (Material 3 "connected button group"). Default: `true` when `selection`
68
+ * is `'single'` or `'multiple'`, `false` otherwise.
69
+ */
70
+ connected?: boolean;
71
+
72
+ /** Gap between buttons in points. Default: the platform's group spacing. */
73
+ spacing?: number;
74
+
75
+ /** Selection behavior. Default: `'none'`. See {@link ButtonGroupSelection}. */
76
+ selection?: ButtonGroupSelection;
77
+
78
+ /**
79
+ * Values of the selected buttons (controlled). Only the first value is
80
+ * used with `selection: 'single'`.
81
+ */
82
+ selectedValues?: readonly string[];
83
+
84
+ /**
85
+ * Whether at least one button must stay selected. Default: `true` for
86
+ * `single`, `false` for `multiple`.
87
+ */
88
+ selectionRequired?: boolean;
89
+
90
+ /** Whether the entire group is disabled */
91
+ disabled?: boolean;
92
+
93
+ /** Container (background) color of the buttons. */
94
+ color?: ColorValue;
95
+
96
+ /** Label and icon color of the buttons. */
97
+ tintColor?: ColorValue;
98
+
99
+ /** Label font. */
100
+ labelStyle?: LabelStyle;
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
+
115
+ /**
116
+ * Called when a button is pressed, in every selection mode.
117
+ * @param value - The button's value
118
+ * @param index - The button's index
119
+ */
120
+ onPress?: (value: string, index: number) => void;
121
+
122
+ /**
123
+ * Called when the selection changes (`single` / `multiple` selection).
124
+ * @param values - Values of the selected buttons, in button order
125
+ */
126
+ onSelectionChange?: (values: string[]) => void;
127
+
128
+ /**
129
+ * Android-specific configuration
130
+ */
131
+ android?: {
132
+ /** @deprecated Use the cross-platform `overflow` prop. */
133
+ overflow?: ButtonGroupOverflow;
134
+
135
+ /** Ripple color shown while pressing a button. */
136
+ rippleColor?: ColorValue;
137
+
138
+ /** Outline color (outlined variant). */
139
+ strokeColor?: ColorValue;
140
+
141
+ /**
142
+ * Material style: Material 3 Expressive (default), or the classic
143
+ * Material 3 group, which has one size and shape (`size` and `shape`
144
+ * are ignored).
145
+ */
146
+ material?: AndroidMaterialStyle;
147
+ };
148
+
149
+ /** Test identifier */
150
+ testID?: string;
151
+ }
152
+
153
+ export function ButtonGroup(props: ButtonGroupProps): React.ReactElement {
154
+ const {
155
+ buttons,
156
+ variant,
157
+ size,
158
+ shape,
159
+ connected,
160
+ spacing,
161
+ selection,
162
+ selectedValues,
163
+ selectionRequired,
164
+ disabled,
165
+ color,
166
+ tintColor,
167
+ labelStyle,
168
+ overflow,
169
+ haptics,
170
+ onPress,
171
+ onSelectionChange,
172
+ android,
173
+ ...viewProps
174
+ } = props;
175
+
176
+ const selectionMode = selection ?? 'none';
177
+
178
+ const nativeButtons = useMemo((): NativeButton[] => {
179
+ return buttons.map((button) => ({
180
+ label: button.label ?? '',
181
+ value: button.value,
182
+ disabled: button.disabled ? 'disabled' : 'enabled',
183
+ accessibilityLabel: button.accessibilityLabel ?? '',
184
+ ...resolveIcon(button.icon),
185
+ }));
186
+ }, [buttons]);
187
+
188
+ const nativeSelectedValues = useMemo((): string[] => {
189
+ if (selectionMode === 'none' || !selectedValues) return [];
190
+ return selectionMode === 'single'
191
+ ? selectedValues.slice(0, 1)
192
+ : [...selectedValues];
193
+ }, [selectionMode, selectedValues]);
194
+
195
+ const nativeLabelStyle = useMemo(
196
+ () => normalizeLabelStyle(labelStyle),
197
+ [labelStyle]
198
+ );
199
+
200
+ const handlePress = useCallback(
201
+ (e: { nativeEvent: ButtonGroupPressEvent }) => {
202
+ const { index, value } = e.nativeEvent;
203
+ onPress?.(value, index);
204
+ },
205
+ [onPress]
206
+ );
207
+
208
+ const handleSelectionChange = useCallback(
209
+ (e: { nativeEvent: ButtonGroupSelectionEvent }) => {
210
+ onSelectionChange?.([...e.nativeEvent.values]);
211
+ },
212
+ [onSelectionChange]
213
+ );
214
+
215
+ const nativeAndroid = useMemo(
216
+ () => ({ material: android?.material ?? 'expressive' }),
217
+ [android?.material]
218
+ );
219
+
220
+ const isConnected = connected ?? selectionMode !== 'none';
221
+ const isSelectionRequired =
222
+ selectionRequired ?? (selectionMode === 'single' ? true : false);
223
+
224
+ return (
225
+ <NativeButtonGroup
226
+ buttons={nativeButtons}
227
+ variant={variant ?? 'outlined'}
228
+ size={size ?? 'small'}
229
+ shape={shape ?? ''}
230
+ connected={isConnected ? 'true' : 'false'}
231
+ spacing={spacing ?? -1}
232
+ selection={selectionMode}
233
+ selectedValues={nativeSelectedValues}
234
+ selectionRequired={isSelectionRequired ? 'true' : 'false'}
235
+ interactivity={disabled ? 'disabled' : 'enabled'}
236
+ color={color}
237
+ foregroundColor={tintColor}
238
+ androidRippleColor={android?.rippleColor}
239
+ androidStrokeColor={android?.strokeColor}
240
+ labelStyle={nativeLabelStyle}
241
+ overflow={overflow ?? android?.overflow ?? 'none'}
242
+ haptics={haptics ?? ''}
243
+ onButtonPress={onPress ? handlePress : undefined}
244
+ onGroupSelectionChange={
245
+ onSelectionChange ? handleSelectionChange : undefined
246
+ }
247
+ android={nativeAndroid}
248
+ {...viewProps}
249
+ />
250
+ );
251
+ }