react-native-platform-components 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (598) hide show
  1. package/PlatformComponents.podspec +1 -1
  2. package/README.md +33 -31
  3. package/android/src/main/java/com/platformcomponents/PCButtonGroupView.kt +175 -9
  4. package/android/src/main/java/com/platformcomponents/PCButtonGroupViewManager.kt +52 -2
  5. package/android/src/main/java/com/platformcomponents/PCButtonSupport.kt +44 -12
  6. package/android/src/main/java/com/platformcomponents/PCButtonView.kt +187 -5
  7. package/android/src/main/java/com/platformcomponents/PCButtonViewManager.kt +85 -7
  8. package/android/src/main/java/com/platformcomponents/PCContextMenuView.kt +41 -151
  9. package/android/src/main/java/com/platformcomponents/PCContextMenuViewManager.kt +7 -63
  10. package/android/src/main/java/com/platformcomponents/PCDatePickerView.kt +310 -115
  11. package/android/src/main/java/com/platformcomponents/PCDatePickerViewManager.kt +23 -3
  12. package/android/src/main/java/com/platformcomponents/PCExpressive.kt +6 -1
  13. package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonView.kt +485 -0
  14. package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonViewManager.kt +109 -0
  15. package/android/src/main/java/com/platformcomponents/PCFloatingToolbarView.kt +132 -0
  16. package/android/src/main/java/com/platformcomponents/PCFloatingToolbarViewManager.kt +8 -0
  17. package/android/src/main/java/com/platformcomponents/PCHaptics.kt +46 -0
  18. package/android/src/main/java/com/platformcomponents/PCImageLoader.kt +42 -7
  19. package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerView.kt +32 -0
  20. package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerViewManager.kt +31 -0
  21. package/android/src/main/java/com/platformcomponents/PCLiquidGlassView.kt +32 -6
  22. package/android/src/main/java/com/platformcomponents/PCLiquidGlassViewManager.kt +4 -0
  23. package/android/src/main/java/com/platformcomponents/PCMenuSupport.kt +280 -0
  24. package/android/src/main/java/com/platformcomponents/PCNavigationBarSupport.kt +332 -0
  25. package/android/src/main/java/com/platformcomponents/PCNavigationRailView.kt +448 -0
  26. package/android/src/main/java/com/platformcomponents/PCNavigationRailViewManager.kt +176 -0
  27. package/android/src/main/java/com/platformcomponents/PCSegmentedControlView.kt +24 -14
  28. package/android/src/main/java/com/platformcomponents/PCSegmentedControlViewManager.kt +14 -2
  29. package/android/src/main/java/com/platformcomponents/PCSelectionMenuView.kt +371 -39
  30. package/android/src/main/java/com/platformcomponents/PCSelectionMenuViewManager.kt +18 -4
  31. package/android/src/main/java/com/platformcomponents/PCTabBarView.kt +397 -0
  32. package/android/src/main/java/com/platformcomponents/PCTabBarViewManager.kt +182 -0
  33. package/android/src/main/java/com/platformcomponents/PCTextFieldView.kt +415 -40
  34. package/android/src/main/java/com/platformcomponents/PCTextFieldViewManager.kt +109 -3
  35. package/android/src/main/java/com/platformcomponents/PCThemeSupport.kt +37 -0
  36. package/android/src/main/java/com/platformcomponents/PlatformComponentsPackage.kt +4 -0
  37. package/android/src/main/res/drawable/pc_ic_search.xml +12 -0
  38. package/android/src/main/res/values/ids.xml +5 -0
  39. package/android/src/main/res/values/styles.xml +24 -0
  40. package/ios/PCButton.mm +122 -7
  41. package/ios/PCButtonGroup.mm +68 -1
  42. package/ios/PCButtonGroupView.swift +225 -6
  43. package/ios/PCButtonSupport.swift +181 -10
  44. package/ios/PCButtonView.swift +297 -14
  45. package/ios/PCConstants.swift +23 -2
  46. package/ios/PCContextMenu.mm +28 -110
  47. package/ios/PCContextMenu.swift +106 -167
  48. package/ios/PCDatePicker.mm +21 -9
  49. package/ios/PCDatePickerView.swift +94 -20
  50. package/ios/PCFloatingActionButton.h +10 -0
  51. package/ios/PCFloatingActionButton.mm +177 -0
  52. package/ios/PCFloatingActionButtonView.swift +426 -0
  53. package/ios/PCFloatingToolbar.mm +27 -0
  54. package/ios/PCFloatingToolbarView.swift +241 -0
  55. package/ios/PCHaptics.swift +91 -0
  56. package/ios/PCImageLoader.swift +76 -12
  57. package/ios/PCLiquidGlass.mm +36 -0
  58. package/ios/PCLiquidGlass.swift +221 -114
  59. package/ios/PCLiquidGlassContainer.h +10 -0
  60. package/ios/PCLiquidGlassContainer.mm +84 -0
  61. package/ios/PCLiquidGlassContainer.swift +69 -0
  62. package/ios/PCMenuItems.h +76 -0
  63. package/ios/PCMenuSupport.swift +350 -0
  64. package/ios/PCNavigationRail.h +10 -0
  65. package/ios/PCNavigationRail.mm +270 -0
  66. package/ios/PCNavigationRailView.swift +415 -0
  67. package/ios/PCSegmentedControl.mm +17 -2
  68. package/ios/PCSegmentedControl.swift +57 -7
  69. package/ios/PCSelectionMenu.mm +36 -8
  70. package/ios/PCSelectionMenu.swift +224 -48
  71. package/ios/PCTabBar.h +10 -0
  72. package/ios/PCTabBar.mm +285 -0
  73. package/ios/PCTabBarAccessory.h +10 -0
  74. package/ios/PCTabBarAccessory.mm +93 -0
  75. package/ios/PCTabBarAccessoryView.swift +96 -0
  76. package/ios/PCTabBarView.swift +671 -0
  77. package/ios/PCTextField.mm +159 -4
  78. package/ios/PCTextFieldView.swift +603 -57
  79. package/lib/commonjs/Button.js +73 -1
  80. package/lib/commonjs/Button.js.map +1 -1
  81. package/lib/commonjs/ButtonGroup.js +13 -3
  82. package/lib/commonjs/ButtonGroup.js.map +1 -1
  83. package/lib/commonjs/ButtonGroupNativeComponent.ts +74 -4
  84. package/lib/commonjs/ButtonNativeComponent.ts +119 -3
  85. package/lib/commonjs/ContextMenu.js +9 -48
  86. package/lib/commonjs/ContextMenu.js.map +1 -1
  87. package/lib/commonjs/ContextMenuNativeComponent.ts +47 -49
  88. package/lib/commonjs/DatePicker.js +98 -2
  89. package/lib/commonjs/DatePicker.js.map +1 -1
  90. package/lib/commonjs/DatePickerNativeComponent.ts +19 -2
  91. package/lib/commonjs/FloatingActionButton.js +60 -0
  92. package/lib/commonjs/FloatingActionButton.js.map +1 -0
  93. package/lib/commonjs/FloatingActionButtonNativeComponent.ts +58 -0
  94. package/lib/commonjs/FloatingToolbar.js +9 -1
  95. package/lib/commonjs/FloatingToolbar.js.map +1 -1
  96. package/lib/commonjs/FloatingToolbarNativeComponent.ts +16 -0
  97. package/lib/commonjs/LiquidGlass.js +7 -1
  98. package/lib/commonjs/LiquidGlass.js.map +1 -1
  99. package/lib/commonjs/LiquidGlassContainer.js +32 -0
  100. package/lib/commonjs/LiquidGlassContainer.js.map +1 -0
  101. package/lib/commonjs/LiquidGlassContainerNativeComponent.ts +17 -0
  102. package/lib/commonjs/LiquidGlassNativeComponent.ts +8 -0
  103. package/lib/commonjs/NavigationRail.js +104 -0
  104. package/lib/commonjs/NavigationRail.js.map +1 -0
  105. package/lib/commonjs/NavigationRailNativeComponent.ts +107 -0
  106. package/lib/commonjs/PlatformComponentsProvider.js +18 -0
  107. package/lib/commonjs/PlatformComponentsProvider.js.map +1 -0
  108. package/lib/commonjs/SegmentedControl.js +7 -0
  109. package/lib/commonjs/SegmentedControl.js.map +1 -1
  110. package/lib/commonjs/SegmentedControlNativeComponent.ts +11 -0
  111. package/lib/commonjs/SelectionMenu.js +27 -3
  112. package/lib/commonjs/SelectionMenu.js.map +1 -1
  113. package/lib/commonjs/SelectionMenuNativeComponent.ts +26 -4
  114. package/lib/commonjs/SplitButton.js +98 -0
  115. package/lib/commonjs/SplitButton.js.map +1 -0
  116. package/lib/commonjs/TabBar.js +203 -0
  117. package/lib/commonjs/TabBar.js.map +1 -0
  118. package/lib/commonjs/TabBarAccessoryNativeComponent.ts +19 -0
  119. package/lib/commonjs/TabBarNativeComponent.ts +145 -0
  120. package/lib/commonjs/TextField.js +171 -8
  121. package/lib/commonjs/TextField.js.map +1 -1
  122. package/lib/commonjs/TextFieldNativeComponent.ts +110 -4
  123. package/lib/commonjs/focusRegistry.js +2 -1
  124. package/lib/commonjs/focusRegistry.js.map +1 -1
  125. package/lib/commonjs/haptics.js +2 -0
  126. package/lib/commonjs/haptics.js.map +1 -0
  127. package/lib/commonjs/icons.js +15 -1
  128. package/lib/commonjs/icons.js.map +1 -1
  129. package/lib/commonjs/index.js +77 -0
  130. package/lib/commonjs/index.js.map +1 -1
  131. package/lib/commonjs/index.web.js +156 -92
  132. package/lib/commonjs/index.web.js.map +1 -1
  133. package/lib/commonjs/jest.js +910 -0
  134. package/lib/commonjs/jest.js.map +1 -0
  135. package/lib/commonjs/menuItems.js +68 -0
  136. package/lib/commonjs/menuItems.js.map +1 -0
  137. package/lib/commonjs/selectionIdentifiers.js +18 -0
  138. package/lib/commonjs/selectionIdentifiers.js.map +1 -0
  139. package/lib/commonjs/submitBehavior.js +19 -0
  140. package/lib/commonjs/submitBehavior.js.map +1 -0
  141. package/lib/commonjs/tabItems.js +49 -0
  142. package/lib/commonjs/tabItems.js.map +1 -0
  143. package/lib/commonjs/web/Button.js +170 -0
  144. package/lib/commonjs/web/Button.js.map +1 -0
  145. package/lib/commonjs/web/ButtonGroup.js +119 -0
  146. package/lib/commonjs/web/ButtonGroup.js.map +1 -0
  147. package/lib/commonjs/web/DatePicker.js +168 -0
  148. package/lib/commonjs/web/DatePicker.js.map +1 -0
  149. package/lib/commonjs/web/DateRangePicker.js +137 -0
  150. package/lib/commonjs/web/DateRangePicker.js.map +1 -0
  151. package/lib/commonjs/web/Dialog.js +54 -0
  152. package/lib/commonjs/web/Dialog.js.map +1 -0
  153. package/lib/commonjs/web/FloatingActionButton.js +98 -0
  154. package/lib/commonjs/web/FloatingActionButton.js.map +1 -0
  155. package/lib/commonjs/web/Icon.js +34 -0
  156. package/lib/commonjs/web/Icon.js.map +1 -0
  157. package/lib/commonjs/web/NativeTheme.js +28 -0
  158. package/lib/commonjs/web/NativeTheme.js.map +1 -0
  159. package/lib/commonjs/web/NavigationRail.js +139 -0
  160. package/lib/commonjs/web/NavigationRail.js.map +1 -0
  161. package/lib/commonjs/web/PlatformComponentsProvider.js +51 -0
  162. package/lib/commonjs/web/PlatformComponentsProvider.js.map +1 -0
  163. package/lib/commonjs/web/SegmentedControl.js +117 -0
  164. package/lib/commonjs/web/SegmentedControl.js.map +1 -0
  165. package/lib/commonjs/web/SelectionMenu.js +142 -0
  166. package/lib/commonjs/web/SelectionMenu.js.map +1 -0
  167. package/lib/commonjs/web/SplitButton.js +35 -0
  168. package/lib/commonjs/web/SplitButton.js.map +1 -0
  169. package/lib/commonjs/web/TabBar.js +131 -0
  170. package/lib/commonjs/web/TabBar.js.map +1 -0
  171. package/lib/commonjs/web/TextField.js +322 -0
  172. package/lib/commonjs/web/TextField.js.map +1 -0
  173. package/lib/commonjs/web/components.js +36 -0
  174. package/lib/commonjs/web/components.js.map +1 -0
  175. package/lib/commonjs/web/containers.js +121 -0
  176. package/lib/commonjs/web/containers.js.map +1 -0
  177. package/lib/commonjs/web/dateInput.js +116 -0
  178. package/lib/commonjs/web/dateInput.js.map +1 -0
  179. package/lib/commonjs/web/shared.js +192 -0
  180. package/lib/commonjs/web/shared.js.map +1 -0
  181. package/lib/commonjs/webComponents.js +6 -0
  182. package/lib/commonjs/webComponents.js.map +1 -0
  183. package/lib/module/Button.js +74 -2
  184. package/lib/module/Button.js.map +1 -1
  185. package/lib/module/ButtonGroup.js +13 -3
  186. package/lib/module/ButtonGroup.js.map +1 -1
  187. package/lib/module/ButtonGroupNativeComponent.ts +74 -4
  188. package/lib/module/ButtonNativeComponent.ts +119 -3
  189. package/lib/module/ContextMenu.js +9 -48
  190. package/lib/module/ContextMenu.js.map +1 -1
  191. package/lib/module/ContextMenuNativeComponent.ts +47 -49
  192. package/lib/module/DatePicker.js +98 -4
  193. package/lib/module/DatePicker.js.map +1 -1
  194. package/lib/module/DatePickerNativeComponent.ts +19 -2
  195. package/lib/module/FloatingActionButton.js +53 -0
  196. package/lib/module/FloatingActionButton.js.map +1 -0
  197. package/lib/module/FloatingActionButtonNativeComponent.ts +58 -0
  198. package/lib/module/FloatingToolbar.js +9 -1
  199. package/lib/module/FloatingToolbar.js.map +1 -1
  200. package/lib/module/FloatingToolbarNativeComponent.ts +16 -0
  201. package/lib/module/LiquidGlass.js +7 -1
  202. package/lib/module/LiquidGlass.js.map +1 -1
  203. package/lib/module/LiquidGlassContainer.js +26 -0
  204. package/lib/module/LiquidGlassContainer.js.map +1 -0
  205. package/lib/module/LiquidGlassContainerNativeComponent.ts +17 -0
  206. package/lib/module/LiquidGlassNativeComponent.ts +8 -0
  207. package/lib/module/NavigationRail.js +99 -0
  208. package/lib/module/NavigationRail.js.map +1 -0
  209. package/lib/module/NavigationRailNativeComponent.ts +107 -0
  210. package/lib/module/PlatformComponentsProvider.js +13 -0
  211. package/lib/module/PlatformComponentsProvider.js.map +1 -0
  212. package/lib/module/SegmentedControl.js +9 -1
  213. package/lib/module/SegmentedControl.js.map +1 -1
  214. package/lib/module/SegmentedControlNativeComponent.ts +11 -0
  215. package/lib/module/SelectionMenu.js +27 -3
  216. package/lib/module/SelectionMenu.js.map +1 -1
  217. package/lib/module/SelectionMenuNativeComponent.ts +26 -4
  218. package/lib/module/SplitButton.js +91 -0
  219. package/lib/module/SplitButton.js.map +1 -0
  220. package/lib/module/TabBar.js +196 -0
  221. package/lib/module/TabBar.js.map +1 -0
  222. package/lib/module/TabBarAccessoryNativeComponent.ts +19 -0
  223. package/lib/module/TabBarNativeComponent.ts +145 -0
  224. package/lib/module/TextField.js +172 -9
  225. package/lib/module/TextField.js.map +1 -1
  226. package/lib/module/TextFieldNativeComponent.ts +110 -4
  227. package/lib/module/focusRegistry.js +1 -0
  228. package/lib/module/focusRegistry.js.map +1 -1
  229. package/lib/module/haptics.js +2 -0
  230. package/lib/module/haptics.js.map +1 -0
  231. package/lib/module/icons.js +15 -1
  232. package/lib/module/icons.js.map +1 -1
  233. package/lib/module/index.js +7 -0
  234. package/lib/module/index.js.map +1 -1
  235. package/lib/module/index.web.js +12 -87
  236. package/lib/module/index.web.js.map +1 -1
  237. package/lib/module/jest.js +840 -0
  238. package/lib/module/jest.js.map +1 -0
  239. package/lib/module/menuItems.js +65 -0
  240. package/lib/module/menuItems.js.map +1 -0
  241. package/lib/module/selectionIdentifiers.js +14 -0
  242. package/lib/module/selectionIdentifiers.js.map +1 -0
  243. package/lib/module/submitBehavior.js +15 -0
  244. package/lib/module/submitBehavior.js.map +1 -0
  245. package/lib/module/tabItems.js +45 -0
  246. package/lib/module/tabItems.js.map +1 -0
  247. package/lib/module/web/Button.js +164 -0
  248. package/lib/module/web/Button.js.map +1 -0
  249. package/lib/module/web/ButtonGroup.js +113 -0
  250. package/lib/module/web/ButtonGroup.js.map +1 -0
  251. package/lib/module/web/DatePicker.js +162 -0
  252. package/lib/module/web/DatePicker.js.map +1 -0
  253. package/lib/module/web/DateRangePicker.js +131 -0
  254. package/lib/module/web/DateRangePicker.js.map +1 -0
  255. package/lib/module/web/Dialog.js +48 -0
  256. package/lib/module/web/Dialog.js.map +1 -0
  257. package/lib/module/web/FloatingActionButton.js +94 -0
  258. package/lib/module/web/FloatingActionButton.js.map +1 -0
  259. package/lib/module/web/Icon.js +29 -0
  260. package/lib/module/web/Icon.js.map +1 -0
  261. package/lib/module/web/NativeTheme.js +23 -0
  262. package/lib/module/web/NativeTheme.js.map +1 -0
  263. package/lib/module/web/NavigationRail.js +133 -0
  264. package/lib/module/web/NavigationRail.js.map +1 -0
  265. package/lib/module/web/PlatformComponentsProvider.js +44 -0
  266. package/lib/module/web/PlatformComponentsProvider.js.map +1 -0
  267. package/lib/module/web/SegmentedControl.js +112 -0
  268. package/lib/module/web/SegmentedControl.js.map +1 -0
  269. package/lib/module/web/SelectionMenu.js +137 -0
  270. package/lib/module/web/SelectionMenu.js.map +1 -0
  271. package/lib/module/web/SplitButton.js +30 -0
  272. package/lib/module/web/SplitButton.js.map +1 -0
  273. package/lib/module/web/TabBar.js +126 -0
  274. package/lib/module/web/TabBar.js.map +1 -0
  275. package/lib/module/web/TextField.js +316 -0
  276. package/lib/module/web/TextField.js.map +1 -0
  277. package/lib/module/web/components.js +33 -0
  278. package/lib/module/web/components.js.map +1 -0
  279. package/lib/module/web/containers.js +112 -0
  280. package/lib/module/web/containers.js.map +1 -0
  281. package/lib/module/web/dateInput.js +109 -0
  282. package/lib/module/web/dateInput.js.map +1 -0
  283. package/lib/module/web/shared.js +179 -0
  284. package/lib/module/web/shared.js.map +1 -0
  285. package/lib/module/webComponents.js +4 -0
  286. package/lib/module/webComponents.js.map +1 -0
  287. package/lib/typescript/commonjs/docs/sidebars.d.ts.map +1 -1
  288. package/lib/typescript/commonjs/src/Button.d.ts +111 -3
  289. package/lib/typescript/commonjs/src/Button.d.ts.map +1 -1
  290. package/lib/typescript/commonjs/src/ButtonGroup.d.ts +21 -6
  291. package/lib/typescript/commonjs/src/ButtonGroup.d.ts.map +1 -1
  292. package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts +64 -3
  293. package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts.map +1 -1
  294. package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts +94 -3
  295. package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts.map +1 -1
  296. package/lib/typescript/commonjs/src/ContextMenu.d.ts +20 -33
  297. package/lib/typescript/commonjs/src/ContextMenu.d.ts.map +1 -1
  298. package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts +45 -47
  299. package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts.map +1 -1
  300. package/lib/typescript/commonjs/src/DatePicker.d.ts +74 -1
  301. package/lib/typescript/commonjs/src/DatePicker.d.ts.map +1 -1
  302. package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts +16 -1
  303. package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts.map +1 -1
  304. package/lib/typescript/commonjs/src/FloatingActionButton.d.ts +67 -0
  305. package/lib/typescript/commonjs/src/FloatingActionButton.d.ts.map +1 -0
  306. package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts +43 -0
  307. package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
  308. package/lib/typescript/commonjs/src/FloatingToolbar.d.ts +30 -0
  309. package/lib/typescript/commonjs/src/FloatingToolbar.d.ts.map +1 -1
  310. package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts +12 -0
  311. package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
  312. package/lib/typescript/commonjs/src/LiquidGlass.d.ts +17 -0
  313. package/lib/typescript/commonjs/src/LiquidGlass.d.ts.map +1 -1
  314. package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts +27 -0
  315. package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts.map +1 -0
  316. package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
  317. package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
  318. package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts +7 -0
  319. package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts.map +1 -1
  320. package/lib/typescript/commonjs/src/NavigationRail.d.ts +86 -0
  321. package/lib/typescript/commonjs/src/NavigationRail.d.ts.map +1 -0
  322. package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts +81 -0
  323. package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts.map +1 -0
  324. package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts +6 -0
  325. package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts.map +1 -0
  326. package/lib/typescript/commonjs/src/SegmentedControl.d.ts +18 -1
  327. package/lib/typescript/commonjs/src/SegmentedControl.d.ts.map +1 -1
  328. package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts +9 -0
  329. package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts.map +1 -1
  330. package/lib/typescript/commonjs/src/SelectionMenu.d.ts +44 -2
  331. package/lib/typescript/commonjs/src/SelectionMenu.d.ts.map +1 -1
  332. package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts +20 -4
  333. package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts.map +1 -1
  334. package/lib/typescript/commonjs/src/SplitButton.d.ts +83 -0
  335. package/lib/typescript/commonjs/src/SplitButton.d.ts.map +1 -0
  336. package/lib/typescript/commonjs/src/TabBar.d.ts +144 -0
  337. package/lib/typescript/commonjs/src/TabBar.d.ts.map +1 -0
  338. package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts +13 -0
  339. package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
  340. package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts +110 -0
  341. package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts.map +1 -0
  342. package/lib/typescript/commonjs/src/TextField.d.ts +166 -8
  343. package/lib/typescript/commonjs/src/TextField.d.ts.map +1 -1
  344. package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts +81 -3
  345. package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts.map +1 -1
  346. package/lib/typescript/commonjs/src/focusRegistry.d.ts.map +1 -1
  347. package/lib/typescript/commonjs/src/haptics.d.ts +20 -0
  348. package/lib/typescript/commonjs/src/haptics.d.ts.map +1 -0
  349. package/lib/typescript/commonjs/src/icons.d.ts +7 -1
  350. package/lib/typescript/commonjs/src/icons.d.ts.map +1 -1
  351. package/lib/typescript/commonjs/src/index.d.ts +7 -0
  352. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  353. package/lib/typescript/commonjs/src/index.web.d.ts +25 -254
  354. package/lib/typescript/commonjs/src/index.web.d.ts.map +1 -1
  355. package/lib/typescript/commonjs/src/jest.d.ts +139 -0
  356. package/lib/typescript/commonjs/src/jest.d.ts.map +1 -0
  357. package/lib/typescript/commonjs/src/menuItems.d.ts +100 -0
  358. package/lib/typescript/commonjs/src/menuItems.d.ts.map +1 -0
  359. package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts +3 -0
  360. package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts.map +1 -0
  361. package/lib/typescript/commonjs/src/submitBehavior.d.ts +9 -0
  362. package/lib/typescript/commonjs/src/submitBehavior.d.ts.map +1 -0
  363. package/lib/typescript/commonjs/src/tabItems.d.ts +55 -0
  364. package/lib/typescript/commonjs/src/tabItems.d.ts.map +1 -0
  365. package/lib/typescript/commonjs/src/web/Button.d.ts +9 -0
  366. package/lib/typescript/commonjs/src/web/Button.d.ts.map +1 -0
  367. package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts +11 -0
  368. package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts.map +1 -0
  369. package/lib/typescript/commonjs/src/web/DatePicker.d.ts +14 -0
  370. package/lib/typescript/commonjs/src/web/DatePicker.d.ts.map +1 -0
  371. package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts +11 -0
  372. package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts.map +1 -0
  373. package/lib/typescript/commonjs/src/web/Dialog.d.ts +12 -0
  374. package/lib/typescript/commonjs/src/web/Dialog.d.ts.map +1 -0
  375. package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts +8 -0
  376. package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts.map +1 -0
  377. package/lib/typescript/commonjs/src/web/Icon.d.ts +12 -0
  378. package/lib/typescript/commonjs/src/web/Icon.d.ts.map +1 -0
  379. package/lib/typescript/commonjs/src/web/NativeTheme.d.ts +10 -0
  380. package/lib/typescript/commonjs/src/web/NativeTheme.d.ts.map +1 -0
  381. package/lib/typescript/commonjs/src/web/NavigationRail.d.ts +8 -0
  382. package/lib/typescript/commonjs/src/web/NavigationRail.d.ts.map +1 -0
  383. package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts +10 -0
  384. package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts.map +1 -0
  385. package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts +8 -0
  386. package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts.map +1 -0
  387. package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts +10 -0
  388. package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts.map +1 -0
  389. package/lib/typescript/commonjs/src/web/SplitButton.d.ts +9 -0
  390. package/lib/typescript/commonjs/src/web/SplitButton.d.ts.map +1 -0
  391. package/lib/typescript/commonjs/src/web/TabBar.d.ts +9 -0
  392. package/lib/typescript/commonjs/src/web/TabBar.d.ts.map +1 -0
  393. package/lib/typescript/commonjs/src/web/TextField.d.ts +9 -0
  394. package/lib/typescript/commonjs/src/web/TextField.d.ts.map +1 -0
  395. package/lib/typescript/commonjs/src/web/components.d.ts +17 -0
  396. package/lib/typescript/commonjs/src/web/components.d.ts.map +1 -0
  397. package/lib/typescript/commonjs/src/web/containers.d.ts +24 -0
  398. package/lib/typescript/commonjs/src/web/containers.d.ts.map +1 -0
  399. package/lib/typescript/commonjs/src/web/dateInput.d.ts +20 -0
  400. package/lib/typescript/commonjs/src/web/dateInput.d.ts.map +1 -0
  401. package/lib/typescript/commonjs/src/web/shared.d.ts +43 -0
  402. package/lib/typescript/commonjs/src/web/shared.d.ts.map +1 -0
  403. package/lib/typescript/commonjs/src/webComponents.d.ts +43 -0
  404. package/lib/typescript/commonjs/src/webComponents.d.ts.map +1 -0
  405. package/lib/typescript/module/docs/sidebars.d.ts.map +1 -1
  406. package/lib/typescript/module/src/Button.d.ts +111 -3
  407. package/lib/typescript/module/src/Button.d.ts.map +1 -1
  408. package/lib/typescript/module/src/ButtonGroup.d.ts +21 -6
  409. package/lib/typescript/module/src/ButtonGroup.d.ts.map +1 -1
  410. package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts +64 -3
  411. package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts.map +1 -1
  412. package/lib/typescript/module/src/ButtonNativeComponent.d.ts +94 -3
  413. package/lib/typescript/module/src/ButtonNativeComponent.d.ts.map +1 -1
  414. package/lib/typescript/module/src/ContextMenu.d.ts +20 -33
  415. package/lib/typescript/module/src/ContextMenu.d.ts.map +1 -1
  416. package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts +45 -47
  417. package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts.map +1 -1
  418. package/lib/typescript/module/src/DatePicker.d.ts +74 -1
  419. package/lib/typescript/module/src/DatePicker.d.ts.map +1 -1
  420. package/lib/typescript/module/src/DatePickerNativeComponent.d.ts +16 -1
  421. package/lib/typescript/module/src/DatePickerNativeComponent.d.ts.map +1 -1
  422. package/lib/typescript/module/src/FloatingActionButton.d.ts +67 -0
  423. package/lib/typescript/module/src/FloatingActionButton.d.ts.map +1 -0
  424. package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts +43 -0
  425. package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
  426. package/lib/typescript/module/src/FloatingToolbar.d.ts +30 -0
  427. package/lib/typescript/module/src/FloatingToolbar.d.ts.map +1 -1
  428. package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts +12 -0
  429. package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts.map +1 -1
  430. package/lib/typescript/module/src/LiquidGlass.d.ts +17 -0
  431. package/lib/typescript/module/src/LiquidGlass.d.ts.map +1 -1
  432. package/lib/typescript/module/src/LiquidGlassContainer.d.ts +27 -0
  433. package/lib/typescript/module/src/LiquidGlassContainer.d.ts.map +1 -0
  434. package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
  435. package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
  436. package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts +7 -0
  437. package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts.map +1 -1
  438. package/lib/typescript/module/src/NavigationRail.d.ts +86 -0
  439. package/lib/typescript/module/src/NavigationRail.d.ts.map +1 -0
  440. package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts +81 -0
  441. package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts.map +1 -0
  442. package/lib/typescript/module/src/PlatformComponentsProvider.d.ts +6 -0
  443. package/lib/typescript/module/src/PlatformComponentsProvider.d.ts.map +1 -0
  444. package/lib/typescript/module/src/SegmentedControl.d.ts +18 -1
  445. package/lib/typescript/module/src/SegmentedControl.d.ts.map +1 -1
  446. package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts +9 -0
  447. package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts.map +1 -1
  448. package/lib/typescript/module/src/SelectionMenu.d.ts +44 -2
  449. package/lib/typescript/module/src/SelectionMenu.d.ts.map +1 -1
  450. package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts +20 -4
  451. package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts.map +1 -1
  452. package/lib/typescript/module/src/SplitButton.d.ts +83 -0
  453. package/lib/typescript/module/src/SplitButton.d.ts.map +1 -0
  454. package/lib/typescript/module/src/TabBar.d.ts +144 -0
  455. package/lib/typescript/module/src/TabBar.d.ts.map +1 -0
  456. package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts +13 -0
  457. package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
  458. package/lib/typescript/module/src/TabBarNativeComponent.d.ts +110 -0
  459. package/lib/typescript/module/src/TabBarNativeComponent.d.ts.map +1 -0
  460. package/lib/typescript/module/src/TextField.d.ts +166 -8
  461. package/lib/typescript/module/src/TextField.d.ts.map +1 -1
  462. package/lib/typescript/module/src/TextFieldNativeComponent.d.ts +81 -3
  463. package/lib/typescript/module/src/TextFieldNativeComponent.d.ts.map +1 -1
  464. package/lib/typescript/module/src/focusRegistry.d.ts.map +1 -1
  465. package/lib/typescript/module/src/haptics.d.ts +20 -0
  466. package/lib/typescript/module/src/haptics.d.ts.map +1 -0
  467. package/lib/typescript/module/src/icons.d.ts +7 -1
  468. package/lib/typescript/module/src/icons.d.ts.map +1 -1
  469. package/lib/typescript/module/src/index.d.ts +7 -0
  470. package/lib/typescript/module/src/index.d.ts.map +1 -1
  471. package/lib/typescript/module/src/index.web.d.ts +25 -254
  472. package/lib/typescript/module/src/index.web.d.ts.map +1 -1
  473. package/lib/typescript/module/src/jest.d.ts +139 -0
  474. package/lib/typescript/module/src/jest.d.ts.map +1 -0
  475. package/lib/typescript/module/src/menuItems.d.ts +100 -0
  476. package/lib/typescript/module/src/menuItems.d.ts.map +1 -0
  477. package/lib/typescript/module/src/selectionIdentifiers.d.ts +3 -0
  478. package/lib/typescript/module/src/selectionIdentifiers.d.ts.map +1 -0
  479. package/lib/typescript/module/src/submitBehavior.d.ts +9 -0
  480. package/lib/typescript/module/src/submitBehavior.d.ts.map +1 -0
  481. package/lib/typescript/module/src/tabItems.d.ts +55 -0
  482. package/lib/typescript/module/src/tabItems.d.ts.map +1 -0
  483. package/lib/typescript/module/src/web/Button.d.ts +9 -0
  484. package/lib/typescript/module/src/web/Button.d.ts.map +1 -0
  485. package/lib/typescript/module/src/web/ButtonGroup.d.ts +11 -0
  486. package/lib/typescript/module/src/web/ButtonGroup.d.ts.map +1 -0
  487. package/lib/typescript/module/src/web/DatePicker.d.ts +14 -0
  488. package/lib/typescript/module/src/web/DatePicker.d.ts.map +1 -0
  489. package/lib/typescript/module/src/web/DateRangePicker.d.ts +11 -0
  490. package/lib/typescript/module/src/web/DateRangePicker.d.ts.map +1 -0
  491. package/lib/typescript/module/src/web/Dialog.d.ts +12 -0
  492. package/lib/typescript/module/src/web/Dialog.d.ts.map +1 -0
  493. package/lib/typescript/module/src/web/FloatingActionButton.d.ts +8 -0
  494. package/lib/typescript/module/src/web/FloatingActionButton.d.ts.map +1 -0
  495. package/lib/typescript/module/src/web/Icon.d.ts +12 -0
  496. package/lib/typescript/module/src/web/Icon.d.ts.map +1 -0
  497. package/lib/typescript/module/src/web/NativeTheme.d.ts +10 -0
  498. package/lib/typescript/module/src/web/NativeTheme.d.ts.map +1 -0
  499. package/lib/typescript/module/src/web/NavigationRail.d.ts +8 -0
  500. package/lib/typescript/module/src/web/NavigationRail.d.ts.map +1 -0
  501. package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts +10 -0
  502. package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts.map +1 -0
  503. package/lib/typescript/module/src/web/SegmentedControl.d.ts +8 -0
  504. package/lib/typescript/module/src/web/SegmentedControl.d.ts.map +1 -0
  505. package/lib/typescript/module/src/web/SelectionMenu.d.ts +10 -0
  506. package/lib/typescript/module/src/web/SelectionMenu.d.ts.map +1 -0
  507. package/lib/typescript/module/src/web/SplitButton.d.ts +9 -0
  508. package/lib/typescript/module/src/web/SplitButton.d.ts.map +1 -0
  509. package/lib/typescript/module/src/web/TabBar.d.ts +9 -0
  510. package/lib/typescript/module/src/web/TabBar.d.ts.map +1 -0
  511. package/lib/typescript/module/src/web/TextField.d.ts +9 -0
  512. package/lib/typescript/module/src/web/TextField.d.ts.map +1 -0
  513. package/lib/typescript/module/src/web/components.d.ts +17 -0
  514. package/lib/typescript/module/src/web/components.d.ts.map +1 -0
  515. package/lib/typescript/module/src/web/containers.d.ts +24 -0
  516. package/lib/typescript/module/src/web/containers.d.ts.map +1 -0
  517. package/lib/typescript/module/src/web/dateInput.d.ts +20 -0
  518. package/lib/typescript/module/src/web/dateInput.d.ts.map +1 -0
  519. package/lib/typescript/module/src/web/shared.d.ts +43 -0
  520. package/lib/typescript/module/src/web/shared.d.ts.map +1 -0
  521. package/lib/typescript/module/src/webComponents.d.ts +43 -0
  522. package/lib/typescript/module/src/webComponents.d.ts.map +1 -0
  523. package/package.json +32 -2
  524. package/plugin/build/index.d.ts +3 -2
  525. package/plugin/build/index.d.ts.map +1 -1
  526. package/react-native.config.js +3 -0
  527. package/shared/PCFloatingActionButtonComponentDescriptors-custom.h +22 -0
  528. package/shared/PCFloatingActionButtonShadowNode-custom.cpp +48 -0
  529. package/shared/PCFloatingActionButtonShadowNode-custom.h +54 -0
  530. package/shared/PCFloatingActionButtonState-custom.h +61 -0
  531. package/shared/PCNavigationRailComponentDescriptors-custom.h +47 -0
  532. package/shared/PCNavigationRailShadowNode-custom.h +42 -0
  533. package/shared/PCNavigationRailState-custom.h +62 -0
  534. package/shared/PCTabBarComponentDescriptors-custom.h +22 -0
  535. package/shared/PCTabBarShadowNode-custom.cpp +54 -0
  536. package/shared/PCTabBarShadowNode-custom.h +54 -0
  537. package/shared/PCTabBarState-custom.h +62 -0
  538. package/shared/react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h +3 -0
  539. package/src/Button.tsx +222 -7
  540. package/src/ButtonGroup.tsx +29 -11
  541. package/src/ButtonGroupNativeComponent.ts +74 -4
  542. package/src/ButtonNativeComponent.ts +119 -3
  543. package/src/ContextMenu.tsx +34 -81
  544. package/src/ContextMenuNativeComponent.ts +47 -49
  545. package/src/DatePicker.tsx +182 -4
  546. package/src/DatePickerNativeComponent.ts +19 -2
  547. package/src/FloatingActionButton.tsx +121 -0
  548. package/src/FloatingActionButtonNativeComponent.ts +58 -0
  549. package/src/FloatingToolbar.tsx +54 -3
  550. package/src/FloatingToolbarNativeComponent.ts +16 -0
  551. package/src/LiquidGlass.tsx +24 -1
  552. package/src/LiquidGlassContainer.tsx +42 -0
  553. package/src/LiquidGlassContainerNativeComponent.ts +17 -0
  554. package/src/LiquidGlassNativeComponent.ts +8 -0
  555. package/src/NavigationRail.tsx +203 -0
  556. package/src/NavigationRailNativeComponent.ts +107 -0
  557. package/src/PlatformComponentsProvider.tsx +15 -0
  558. package/src/SegmentedControl.tsx +31 -1
  559. package/src/SegmentedControlNativeComponent.ts +11 -0
  560. package/src/SelectionMenu.tsx +81 -6
  561. package/src/SelectionMenuNativeComponent.ts +26 -4
  562. package/src/SplitButton.tsx +198 -0
  563. package/src/TabBar.tsx +373 -0
  564. package/src/TabBarAccessoryNativeComponent.ts +19 -0
  565. package/src/TabBarNativeComponent.ts +145 -0
  566. package/src/TextField.tsx +428 -14
  567. package/src/TextFieldNativeComponent.ts +110 -4
  568. package/src/focusRegistry.ts +1 -0
  569. package/src/haptics.ts +31 -0
  570. package/src/icons.ts +28 -1
  571. package/src/index.tsx +7 -0
  572. package/src/index.web.tsx +51 -391
  573. package/src/jest.tsx +958 -0
  574. package/src/menuItems.ts +152 -0
  575. package/src/selectionIdentifiers.ts +17 -0
  576. package/src/submitBehavior.ts +16 -0
  577. package/src/tabItems.ts +113 -0
  578. package/src/web/Button.tsx +201 -0
  579. package/src/web/ButtonGroup.tsx +154 -0
  580. package/src/web/DatePicker.tsx +204 -0
  581. package/src/web/DateRangePicker.tsx +135 -0
  582. package/src/web/Dialog.tsx +54 -0
  583. package/src/web/FloatingActionButton.tsx +76 -0
  584. package/src/web/Icon.tsx +33 -0
  585. package/src/web/NativeTheme.ts +23 -0
  586. package/src/web/NavigationRail.tsx +148 -0
  587. package/src/web/PlatformComponentsProvider.tsx +48 -0
  588. package/src/web/SegmentedControl.tsx +127 -0
  589. package/src/web/SelectionMenu.tsx +149 -0
  590. package/src/web/SplitButton.tsx +32 -0
  591. package/src/web/TabBar.tsx +150 -0
  592. package/src/web/TextField.tsx +361 -0
  593. package/src/web/components.tsx +71 -0
  594. package/src/web/containers.tsx +130 -0
  595. package/src/web/dateInput.ts +137 -0
  596. package/src/web/shared.ts +176 -0
  597. package/src/webComponents.ts +45 -0
  598. package/android/src/main/java/com/platformcomponents/DateConstraints.kt +0 -83
@@ -0,0 +1,152 @@
1
+ // menuItems.ts
2
+ //
3
+ // The menu item shape of the library. ContextMenu takes a tree of these
4
+ // actions; native receives them flattened into one list in which each item
5
+ // points at its parent, so menus nest to any depth without a recursive codegen
6
+ // type. Components that show a native menu share this shape and
7
+ // `flattenMenuActions`.
8
+ import type { Haptics } from './haptics';
9
+ import { resolveIcon, type PlatformIcon } from './icons';
10
+
11
+ /**
12
+ * Attributes for a menu action.
13
+ */
14
+ export interface ContextMenuActionAttributes {
15
+ /** Whether the action is destructive (red styling) */
16
+ destructive?: boolean;
17
+ /** Whether the action is disabled (grayed out) */
18
+ disabled?: boolean;
19
+ /** Whether the action is hidden */
20
+ hidden?: boolean;
21
+ /**
22
+ * Keeps the menu open after the action is pressed, for steppers and toggles
23
+ * that update in place (change the action's `title` or `state` in
24
+ * `onPressAction` and the open menu updates).
25
+ *
26
+ * iOS 16+: `UIMenuElement.Attributes.keepsMenuPresented`. Ignored on older
27
+ * iOS and on Android, where the popup closes on every press.
28
+ */
29
+ keepsMenuPresented?: boolean;
30
+ }
31
+
32
+ /**
33
+ * A single action in a menu. An action with `subactions` is a submenu, or an
34
+ * inline section with `displayInline`.
35
+ */
36
+ export interface ContextMenuAction {
37
+ /** Unique identifier returned in callbacks */
38
+ id: string;
39
+ /** Display title. For an inline section: its header (iOS only; may be empty). */
40
+ title: string;
41
+ /** Secondary text (iOS only) */
42
+ subtitle?: string;
43
+ /**
44
+ * Icon. A string is an SF Symbol or asset catalog name on iOS and a
45
+ * drawable resource name on Android. See {@link PlatformIcon} for image
46
+ * sources (`require(...)`, `{ uri }`) and per-platform icons.
47
+ */
48
+ image?: PlatformIcon;
49
+ /** Tint color for the icon (hex string, e.g. `'#FF3B30'`) */
50
+ imageColor?: string;
51
+ /** Action attributes */
52
+ attributes?: ContextMenuActionAttributes;
53
+ /** Checkmark state */
54
+ state?: 'off' | 'on' | 'mixed';
55
+ /**
56
+ * Haptic played when this action is picked, in place of the component's
57
+ * `haptics` (`'none'` plays nothing). Unset uses the component's. See
58
+ * {@link Haptics}.
59
+ */
60
+ haptics?: Haptics;
61
+ /** Nested actions: a submenu, or an inline section with `displayInline` */
62
+ subactions?: readonly ContextMenuAction[];
63
+ /**
64
+ * Shows `subactions` inline, as a section set off by separators, instead of
65
+ * as a submenu.
66
+ *
67
+ * - iOS: `UIMenu(options: .displayInline)`; a non-empty `title` is the
68
+ * section header.
69
+ * - Android: a menu group with group dividers; the title is not shown.
70
+ */
71
+ displayInline?: boolean;
72
+ }
73
+
74
+ /**
75
+ * One menu item as native receives it. Every field is set; empty strings
76
+ * mean "none" and flags are `'true' | 'false'`. Components declare the same
77
+ * shape in their codegen spec.
78
+ */
79
+ export type NativeMenuItem = {
80
+ id: string;
81
+ title: string;
82
+ subtitle: string;
83
+ /** Index of the parent submenu or section in the list; -1 at the top level */
84
+ parent: number;
85
+ /** 'action' | 'menu' | 'section' */
86
+ kind: string;
87
+ /** '' | 'sfSymbol' | 'drawable' | 'image' */
88
+ iconType: string;
89
+ iconName: string;
90
+ iconRequest: string;
91
+ iconUri: string;
92
+ iconScale: number;
93
+ iconTinted: string;
94
+ imageColor: string;
95
+ destructive: string;
96
+ disabled: string;
97
+ keepsMenuPresented: string;
98
+ /** '' | 'off' | 'on' | 'mixed' */
99
+ state: string;
100
+ /** The action's own haptics; '' = the component's */
101
+ haptics: string;
102
+ };
103
+
104
+ const flag = (value: boolean | undefined) => (value ? 'true' : 'false');
105
+
106
+ /**
107
+ * Flattens an action tree into the list native expects, depth first: a
108
+ * submenu or section comes before its children, which point back at it
109
+ * through `parent`. Hidden actions (and their children) are dropped here, so
110
+ * native never sees them.
111
+ */
112
+ export function flattenMenuActions(
113
+ actions: readonly ContextMenuAction[]
114
+ ): NativeMenuItem[] {
115
+ const items: NativeMenuItem[] = [];
116
+
117
+ const visit = (list: readonly ContextMenuAction[], parent: number) => {
118
+ for (const action of list) {
119
+ const attributes = action.attributes;
120
+ if (attributes?.hidden) continue;
121
+
122
+ const children = action.subactions ?? [];
123
+ const kind =
124
+ children.length === 0
125
+ ? 'action'
126
+ : action.displayInline
127
+ ? 'section'
128
+ : 'menu';
129
+
130
+ const index = items.length;
131
+ items.push({
132
+ id: action.id,
133
+ title: action.title,
134
+ subtitle: action.subtitle ?? '',
135
+ parent,
136
+ kind,
137
+ ...resolveIcon(action.image),
138
+ imageColor: action.imageColor ?? '',
139
+ destructive: flag(attributes?.destructive),
140
+ disabled: flag(attributes?.disabled),
141
+ keepsMenuPresented: flag(attributes?.keepsMenuPresented),
142
+ state: action.state ?? '',
143
+ haptics: action.haptics ?? '',
144
+ });
145
+
146
+ if (kind !== 'action') visit(children, index);
147
+ }
148
+ };
149
+
150
+ visit(actions, -1);
151
+ return items;
152
+ }
@@ -0,0 +1,17 @@
1
+ /** Diagnose identifiers reserved by the native selection protocol. */
2
+ export function warnSelectionIdentifiers(
3
+ component: 'SelectionMenu' | 'SegmentedControl',
4
+ values: readonly string[]
5
+ ): void {
6
+ if (!__DEV__) return;
7
+ const seen = new Set<string>();
8
+ for (const [index, value] of values.entries()) {
9
+ if (value === '' || seen.has(value)) {
10
+ console.warn(
11
+ `react-native-platform-components: ${component} requires unique, non-empty ` +
12
+ `identifiers; item ${index} has ${value === '' ? 'an empty' : 'a duplicate'} identifier.`
13
+ );
14
+ }
15
+ seen.add(value);
16
+ }
17
+ }
@@ -0,0 +1,16 @@
1
+ // submitBehavior.ts
2
+ import type { TextFieldSubmitBehavior } from './TextField';
3
+
4
+ /**
5
+ * The return key behavior of a field: `submitBehavior` if set, else
6
+ * `'newline'` for multi-line fields and `'blurAndSubmit'` otherwise. A
7
+ * single-line field has no newline to insert, so `'newline'` blurs and
8
+ * submits there, as on `TextInput`.
9
+ */
10
+ export function resolveSubmitBehavior(
11
+ submitBehavior: TextFieldSubmitBehavior | undefined,
12
+ multiline: boolean | undefined
13
+ ): TextFieldSubmitBehavior {
14
+ if (multiline) return submitBehavior ?? 'newline';
15
+ return submitBehavior === 'submit' ? 'submit' : 'blurAndSubmit';
16
+ }
@@ -0,0 +1,113 @@
1
+ // tabItems.ts
2
+ //
3
+ // The tab model of TabBar, and its flattening into the fields the native
4
+ // specs take. Kept apart from the bar so other navigation components can
5
+ // share it.
6
+ import type { TabBarItem as NativeItem } from './TabBarNativeComponent';
7
+ import { resolveIcon, type PlatformIcon } from './icons';
8
+
9
+ /**
10
+ * A system tab item on iOS (`UITabBarItem.SystemItem`), with the system's
11
+ * localized title and icon.
12
+ */
13
+ export type TabBarSystemItem =
14
+ | 'bookmarks'
15
+ | 'contacts'
16
+ | 'downloads'
17
+ | 'favorites'
18
+ | 'featured'
19
+ | 'history'
20
+ | 'more'
21
+ | 'mostRecent'
22
+ | 'mostViewed'
23
+ | 'recents'
24
+ | 'search'
25
+ | 'topRated';
26
+
27
+ export interface TabBarItemProps {
28
+ /**
29
+ * Tab label. Also the screen-reader label unless `accessibilityLabel` is
30
+ * set. iOS system items (`role: 'search'`, `systemItem`) show the system's
31
+ * title instead.
32
+ */
33
+ label: string;
34
+
35
+ /** Unique value returned in callbacks. */
36
+ value: string;
37
+
38
+ /** Tab icon. See {@link PlatformIcon}. */
39
+ icon?: PlatformIcon;
40
+
41
+ /**
42
+ * Icon of the selected tab, e.g. the filled variant of an SF Symbol
43
+ * (`house.fill`). Defaults to `icon`.
44
+ */
45
+ selectedIcon?: PlatformIcon;
46
+
47
+ /**
48
+ * Badge on the tab, e.g. an unread count. Numbers are shown as-is; an
49
+ * empty string shows a dot; `undefined` hides the badge.
50
+ */
51
+ badge?: string | number;
52
+
53
+ /** Whether the tab can be selected. */
54
+ disabled?: boolean;
55
+
56
+ /** Screen-reader label. Defaults to `label`. */
57
+ accessibilityLabel?: string;
58
+
59
+ /** Test identifier of the tab, for E2E taps. */
60
+ testID?: string;
61
+
62
+ /**
63
+ * `'search'`: the app's search tab.
64
+ *
65
+ * - iOS: the system search item, with its localized title and magnifying
66
+ * glass. iOS 26 sets it apart from the other tabs, as its own glass
67
+ * circle at the end of the bar.
68
+ * - Android: a regular tab, with a search icon unless `icon` is set.
69
+ */
70
+ role?: 'search';
71
+
72
+ /**
73
+ * iOS: a system item (`UITabBarItem.SystemItem`) with the system's
74
+ * localized title and icon, in place of `label` and `icon`. Android
75
+ * has no system items and shows `label` and `icon`.
76
+ */
77
+ systemItem?: TabBarSystemItem;
78
+ }
79
+
80
+ /** Material and iOS tab bars show at most five tabs on a phone. */
81
+ export const MAX_TAB_ITEMS = 5;
82
+
83
+ /** The tabs as the native specs take them, at most `max`. */
84
+ export function toNativeTabItems(
85
+ items: readonly TabBarItemProps[],
86
+ max: number = MAX_TAB_ITEMS
87
+ ): NativeItem[] {
88
+ return items.slice(0, max).map((item) => {
89
+ const icon = resolveIcon(item.icon);
90
+ const selected = resolveIcon(item.selectedIcon);
91
+ return {
92
+ label: item.label,
93
+ value: item.value,
94
+ disabled: item.disabled ? 'disabled' : 'enabled',
95
+ ...icon,
96
+ selectedIconType: selected.iconType,
97
+ selectedIconName: selected.iconName,
98
+ selectedIconRequest: selected.iconRequest,
99
+ selectedIconUri: selected.iconUri,
100
+ selectedIconScale: selected.iconScale,
101
+ selectedIconTinted: selected.iconTinted,
102
+ badge:
103
+ item.badge === undefined || item.badge === null
104
+ ? ''
105
+ : // An empty badge is a dot; native tells it from none by a space
106
+ String(item.badge) || ' ',
107
+ accessibilityLabel: item.accessibilityLabel ?? '',
108
+ testID: item.testID ?? '',
109
+ role: item.role ?? '',
110
+ systemItem: item.systemItem ?? '',
111
+ };
112
+ });
113
+ }
@@ -0,0 +1,201 @@
1
+ // web/Button.tsx
2
+ import React, { useEffect, useRef } from 'react';
3
+ import { View } from 'react-native';
4
+
5
+ import type { ButtonProps } from '../Button';
6
+ import { Icon } from './Icon';
7
+ import {
8
+ BUTTON_BASE,
9
+ BUTTON_SIZES,
10
+ buttonColors,
11
+ cssColor,
12
+ cssFont,
13
+ usePrimaryColor,
14
+ warnOnce,
15
+ } from './shared';
16
+
17
+ /** The Web Animations API surface the spinner uses (no DOM lib here). */
18
+ type AnimatableElement = {
19
+ animate?: (
20
+ keyframes: object[],
21
+ options: { duration: number; iterations: number }
22
+ ) => { cancel: () => void };
23
+ };
24
+
25
+ /**
26
+ * A `<button>`, styled after the Material 3 button variants. A toggle
27
+ * (`selected`) sets `aria-pressed` and takes the filled look when selected.
28
+ * Browsers have no native menu, so a button with a `menu` calls `onPress`.
29
+ */
30
+ export function Button(props: ButtonProps): React.ReactElement {
31
+ const {
32
+ label,
33
+ icon,
34
+ iconPosition = 'leading',
35
+ variant = 'filled',
36
+ size = 'small',
37
+ shape = 'round',
38
+ cornerRadius,
39
+ disabled,
40
+ loading,
41
+ color,
42
+ tintColor,
43
+ disabledColor,
44
+ disabledTintColor,
45
+ labelStyle,
46
+ // Browsers scale text with page zoom, which has no cap
47
+ maxFontSizeMultiplier: _maxFontSizeMultiplier,
48
+ accessibilityLabel,
49
+ onPress,
50
+ selected,
51
+ onSelectedChange,
52
+ menu,
53
+ onMenuSelect: _onMenuSelect,
54
+ onMenuOpen: _onMenuOpen,
55
+ onMenuClose: _onMenuClose,
56
+ // SF Symbols don't exist on the web
57
+ ios: _ios,
58
+ android,
59
+ style,
60
+ ...viewProps
61
+ } = props;
62
+
63
+ if (menu && menu.length > 0) {
64
+ warnOnce(
65
+ 'Button.menu',
66
+ 'Button menus have no web implementation; the button calls onPress instead. ' +
67
+ 'See https://jarx-concepts.github.io/react-native-platform-components/guides/web'
68
+ );
69
+ }
70
+
71
+ const isToggle = selected !== undefined;
72
+ const primary = usePrimaryColor();
73
+ const metrics = BUTTON_SIZES[size] ?? BUTTON_SIZES.small!;
74
+ // A toggle is filled when selected; a filled toggle is tonal when not, as
75
+ // Material's toggle buttons are
76
+ const look = !isToggle
77
+ ? variant
78
+ : selected
79
+ ? 'filled'
80
+ : variant === 'filled'
81
+ ? 'tonal'
82
+ : variant;
83
+ const colors = buttonColors(
84
+ look,
85
+ primary,
86
+ isToggle && selected ? undefined : cssColor(color),
87
+ isToggle && selected ? undefined : cssColor(tintColor)
88
+ );
89
+ const vertical = iconPosition === 'top' || iconPosition === 'bottom';
90
+ const direction = (
91
+ {
92
+ leading: 'row',
93
+ trailing: 'row-reverse',
94
+ top: 'column',
95
+ bottom: 'column-reverse',
96
+ } as const
97
+ )[iconPosition];
98
+
99
+ const handleClick = () => {
100
+ if (isToggle) onSelectedChange?.(!selected);
101
+ onPress?.();
102
+ };
103
+ // Custom disabled colors replace the default faded look.
104
+ const customDisabled =
105
+ disabled &&
106
+ (disabledColor !== undefined || disabledTintColor !== undefined);
107
+ if (disabled) {
108
+ if (disabledColor !== undefined) {
109
+ colors.backgroundColor = cssColor(disabledColor);
110
+ }
111
+ if (disabledTintColor !== undefined) {
112
+ colors.color = cssColor(disabledTintColor);
113
+ }
114
+ }
115
+
116
+ const iconElement = (
117
+ <Icon icon={icon} color={colors.color as string | undefined} />
118
+ );
119
+
120
+ // The Web Animations API spins the indicator without a stylesheet.
121
+ const spinnerRef = useRef<AnimatableElement | null>(null);
122
+ useEffect(() => {
123
+ const spinner = spinnerRef.current;
124
+ if (!loading || !spinner?.animate) return undefined;
125
+ const animation = spinner.animate(
126
+ [{ transform: 'rotate(0deg)' }, { transform: 'rotate(360deg)' }],
127
+ { duration: 800, iterations: Infinity }
128
+ );
129
+ return () => animation.cancel();
130
+ }, [loading]);
131
+ const spinnerSize = Math.round(metrics.fontSize * 1.3);
132
+
133
+ return (
134
+ <View {...viewProps} style={[{ alignSelf: 'flex-start' }, style]}>
135
+ <button
136
+ type="button"
137
+ disabled={disabled}
138
+ aria-label={accessibilityLabel ?? label}
139
+ aria-busy={loading || undefined}
140
+ aria-pressed={isToggle ? !!selected : undefined}
141
+ onClick={loading ? undefined : handleClick}
142
+ style={{
143
+ ...BUTTON_BASE,
144
+ ...colors,
145
+ // An icon above or below the label makes the button taller
146
+ ...(vertical
147
+ ? { minHeight: metrics.height, gap: 4 }
148
+ : { height: metrics.height }),
149
+ minWidth: metrics.height,
150
+ padding: label ? `${vertical ? 8 : 0}px ${metrics.padding}px` : 0,
151
+ flexDirection: direction,
152
+ borderRadius:
153
+ cornerRadius ?? (shape === 'square' ? 12 : metrics.height / 2),
154
+ fontSize: metrics.fontSize,
155
+ opacity: disabled && !customDisabled ? 0.38 : 1,
156
+ cursor: disabled || loading ? 'default' : 'pointer',
157
+ position: 'relative',
158
+ ...cssFont(labelStyle),
159
+ }}
160
+ >
161
+ {!loading && iconElement}
162
+ {!loading && label}
163
+ {loading && (
164
+ <>
165
+ {/* Hidden, not removed, so the button keeps its width */}
166
+ <span
167
+ style={{
168
+ display: 'inline-flex',
169
+ alignItems: 'center',
170
+ gap: BUTTON_BASE.gap,
171
+ flexDirection: 'inherit',
172
+ visibility: 'hidden',
173
+ }}
174
+ >
175
+ {iconElement}
176
+ {label}
177
+ </span>
178
+ <span
179
+ ref={(element) => {
180
+ spinnerRef.current = element as unknown as AnimatableElement;
181
+ }}
182
+ aria-hidden
183
+ style={{
184
+ position: 'absolute',
185
+ top: '50%',
186
+ left: '50%',
187
+ width: spinnerSize,
188
+ height: spinnerSize,
189
+ margin: -spinnerSize / 2,
190
+ boxSizing: 'border-box',
191
+ borderRadius: '50%',
192
+ border: `2px solid ${colors.color ?? 'currentColor'}`,
193
+ borderTopColor: 'transparent',
194
+ }}
195
+ />
196
+ </>
197
+ )}
198
+ </button>
199
+ </View>
200
+ );
201
+ }
@@ -0,0 +1,154 @@
1
+ // web/ButtonGroup.tsx
2
+ import React from 'react';
3
+ import { View } from 'react-native';
4
+
5
+ import type { ButtonGroupProps } from '../ButtonGroup';
6
+ import { Icon } from './Icon';
7
+ import {
8
+ BUTTON_BASE,
9
+ BUTTON_SIZES,
10
+ buttonColors,
11
+ cssColor,
12
+ cssFont,
13
+ usePrimaryColor,
14
+ } from './shared';
15
+
16
+ /**
17
+ * The selection after pressing `value`, in button order. Mirrors the native
18
+ * rules: `single` swaps the selection, `multiple` toggles, and a required
19
+ * selection never becomes empty.
20
+ */
21
+ export function nextSelection(
22
+ values: readonly string[],
23
+ selected: readonly string[],
24
+ value: string,
25
+ selection: 'single' | 'multiple',
26
+ required: boolean
27
+ ): string[] {
28
+ const isSelected = selected.includes(value);
29
+ let next: string[];
30
+ if (selection === 'single') {
31
+ next = isSelected ? [] : [value];
32
+ } else {
33
+ next = isSelected
34
+ ? selected.filter((v) => v !== value)
35
+ : [...selected, value];
36
+ }
37
+ if (required && next.length === 0) return [...selected];
38
+ return values.filter((v) => next.includes(v));
39
+ }
40
+
41
+ /** A row of `<button>`s, with toggle semantics when `selection` is set. */
42
+ export function ButtonGroup(props: ButtonGroupProps): React.ReactElement {
43
+ const {
44
+ buttons,
45
+ variant = 'outlined',
46
+ size = 'small',
47
+ shape = 'round',
48
+ connected: connectedProp,
49
+ spacing,
50
+ selection = 'none',
51
+ selectedValues = [],
52
+ selectionRequired,
53
+ disabled,
54
+ color,
55
+ tintColor,
56
+ labelStyle,
57
+ overflow,
58
+ onPress,
59
+ onSelectionChange,
60
+ android,
61
+ style,
62
+ ...viewProps
63
+ } = props;
64
+
65
+ const primary = usePrimaryColor();
66
+ const metrics = BUTTON_SIZES[size] ?? BUTTON_SIZES.small!;
67
+ const selectable = selection !== 'none';
68
+ const connected = connectedProp ?? selectable;
69
+ const required = selectionRequired ?? selection === 'single';
70
+ const selected =
71
+ selection === 'single' ? selectedValues.slice(0, 1) : selectedValues;
72
+ const radius = shape === 'square' ? 12 : metrics.height / 2;
73
+ const innerRadius = 8;
74
+ const gap = spacing ?? (connected ? 2 : 8);
75
+ // Browsers have no overflow menu; 'wrap' wraps the row
76
+ const wrap = (overflow ?? android?.overflow) === 'wrap';
77
+
78
+ const handlePress = (value: string, index: number) => {
79
+ onPress?.(value, index);
80
+ if (selection === 'none') return;
81
+ const next = nextSelection(
82
+ buttons.map((b) => b.value),
83
+ selected,
84
+ value,
85
+ selection,
86
+ required
87
+ );
88
+ const changed =
89
+ next.length !== selected.length ||
90
+ next.some((v) => !selected.includes(v));
91
+ if (changed) onSelectionChange?.(next);
92
+ };
93
+
94
+ return (
95
+ <View
96
+ {...viewProps}
97
+ role={selection === 'single' ? 'radiogroup' : 'group'}
98
+ style={[
99
+ {
100
+ flexDirection: 'row',
101
+ flexWrap: wrap ? 'wrap' : 'nowrap',
102
+ gap,
103
+ alignSelf: 'flex-start',
104
+ },
105
+ style,
106
+ ]}
107
+ >
108
+ {buttons.map((button, index) => {
109
+ const isSelected = selectable && selected.includes(button.value);
110
+ const isDisabled = disabled || button.disabled;
111
+ const colors = buttonColors(
112
+ isSelected ? 'filled' : variant,
113
+ primary,
114
+ isSelected ? undefined : cssColor(color),
115
+ isSelected ? undefined : cssColor(tintColor)
116
+ );
117
+ const first = index === 0;
118
+ const last = index === buttons.length - 1;
119
+ const start = !connected || first ? radius : innerRadius;
120
+ const end = !connected || last ? radius : innerRadius;
121
+ return (
122
+ <button
123
+ key={button.value}
124
+ type="button"
125
+ disabled={isDisabled}
126
+ role={selection === 'single' ? 'radio' : undefined}
127
+ aria-checked={selection === 'single' ? isSelected : undefined}
128
+ aria-pressed={selection === 'multiple' ? isSelected : undefined}
129
+ aria-label={button.accessibilityLabel ?? button.label}
130
+ onClick={() => handlePress(button.value, index)}
131
+ style={{
132
+ ...BUTTON_BASE,
133
+ ...colors,
134
+ height: metrics.height,
135
+ minWidth: metrics.height,
136
+ padding: button.label ? `0 ${metrics.padding}px` : 0,
137
+ borderRadius: `${start}px ${end}px ${end}px ${start}px`,
138
+ fontSize: metrics.fontSize,
139
+ opacity: isDisabled ? 0.38 : 1,
140
+ cursor: isDisabled ? 'default' : 'pointer',
141
+ ...cssFont(labelStyle),
142
+ }}
143
+ >
144
+ <Icon
145
+ icon={button.icon}
146
+ color={colors.color as string | undefined}
147
+ />
148
+ {button.label}
149
+ </button>
150
+ );
151
+ })}
152
+ </View>
153
+ );
154
+ }