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
@@ -21,32 +21,50 @@ import UIKit
21
21
  #endif
22
22
  }
23
23
 
24
- #if compiler(>=6.2)
25
-
26
- /// The actual Liquid Glass view implementation for iOS 26+
27
- /// Extends UIVisualEffectView to properly support UIGlassEffect
28
- @available(iOS 26.0, *)
24
+ /// The Liquid Glass view: a UIVisualEffectView with a UIGlassEffect on iOS 26.
25
+ ///
26
+ /// Built with an Xcode older than the iOS 26 SDK, the glass code is compiled
27
+ /// out and the view falls back to a blur. Built with the iOS 26 SDK and run on
28
+ /// an older iOS, it is a plain view.
29
+ ///
30
+ /// Inside a `PCLiquidGlassContainerView` the glass merges with its neighbours,
31
+ /// and it morphs when it appears, disappears or changes frame: UIKit
32
+ /// materializes glass when `effect` is set inside an animation block, and
33
+ /// reshapes the merged glass when a frame changes inside one.
29
34
  @objcMembers
30
35
  public final class PCLiquidGlassView: UIVisualEffectView {
31
36
 
32
37
  // MARK: - Static
33
38
 
34
39
  @objc public static var isSupported: Bool {
35
- return true
40
+ #if compiler(>=6.2)
41
+ if #available(iOS 26.0, *) {
42
+ return true
43
+ }
44
+ #endif
45
+ return false
36
46
  }
37
47
 
48
+ /// Duration of the morphs inside a container.
49
+ static let morphDuration: TimeInterval = 0.45
50
+
38
51
  // MARK: - Props (set from ObjC++)
39
52
 
40
53
  private var isFirstMount: Bool = true
41
54
 
42
55
  /// Effect style: "clear", "regular", "none"
43
56
  public var effectStyle: String = "regular" {
44
- didSet { applyGlassEffect() }
57
+ didSet { applyEffect() }
45
58
  }
46
59
 
47
60
  /// Corner radius for the glass effect
48
61
  public var glassCornerRadius: CGFloat = 0 {
49
- didSet { applyCornerRadius() }
62
+ didSet { applyCornerStyle() }
63
+ }
64
+
65
+ /// Corner shape: "capsule", "concentric", or "" for glassCornerRadius
66
+ public var cornerStyle: String = "" {
67
+ didSet { applyCornerStyle() }
50
68
  }
51
69
 
52
70
  /// Enable touch interaction feedback
@@ -54,7 +72,7 @@ public final class PCLiquidGlassView: UIVisualEffectView {
54
72
 
55
73
  /// Tint color for the glass effect (hex string)
56
74
  public var glassTintColor: String? {
57
- didSet { applyGlassEffect() }
75
+ didSet { applyEffect() }
58
76
  }
59
77
 
60
78
  /// Color scheme: "light", "dark", "system"
@@ -65,6 +83,11 @@ public final class PCLiquidGlassView: UIVisualEffectView {
65
83
  /// Callback for press events with touch coordinates
66
84
  public var onPressCallback: ((CGFloat, CGFloat) -> Void)?
67
85
 
86
+ /// The dematerializing copy `willUnmount()` left in the container. Kept
87
+ /// until the end of the run loop: a view that is only being moved is
88
+ /// inserted again before then, and removes its copy.
89
+ private weak var pendingGhost: UIView?
90
+
68
91
  // MARK: - Init
69
92
 
70
93
  public override init(effect: UIVisualEffect?) {
@@ -80,6 +103,9 @@ public final class PCLiquidGlassView: UIVisualEffectView {
80
103
  private func setup() {
81
104
  clipsToBounds = false
82
105
  setupTapGesture()
106
+ #if !compiler(>=6.2)
107
+ applyEffect()
108
+ #endif
83
109
  }
84
110
 
85
111
  private func setupTapGesture() {
@@ -99,7 +125,11 @@ public final class PCLiquidGlassView: UIVisualEffectView {
99
125
 
100
126
  // Apply glass effect on first layout when we have bounds
101
127
  if effect == nil && bounds.size != .zero {
102
- applyGlassEffect()
128
+ applyEffect()
129
+ }
130
+ // Without corner configurations, a capsule follows the size
131
+ if cornerStyle == "capsule" && !usesCornerConfiguration {
132
+ applyCornerStyle()
103
133
  }
104
134
  }
105
135
 
@@ -107,12 +137,24 @@ public final class PCLiquidGlassView: UIVisualEffectView {
107
137
 
108
138
  /// Call this after setting props to apply/re-apply the glass effect
109
139
  @objc public func setupView() {
110
- applyGlassEffect()
140
+ applyEffect()
111
141
  }
112
142
 
113
143
  // MARK: - Glass Effect
114
144
 
115
- private func applyGlassEffect() {
145
+ private func applyEffect() {
146
+ #if compiler(>=6.2)
147
+ if #available(iOS 26.0, *) {
148
+ applyGlassEffect(duration: 0.2)
149
+ }
150
+ #else
151
+ applyFallbackEffect()
152
+ #endif
153
+ }
154
+
155
+ #if compiler(>=6.2)
156
+ @available(iOS 26.0, *)
157
+ private func applyGlassEffect(duration: TimeInterval) {
116
158
  guard bounds.size != .zero else { return }
117
159
 
118
160
  // Parse effect style
@@ -128,7 +170,7 @@ public final class PCLiquidGlassView: UIVisualEffectView {
128
170
 
129
171
  // Handle "none" style
130
172
  guard let glassStyle = style.glassStyle else {
131
- UIView.animate(withDuration: 0.2) {
173
+ UIView.animate(withDuration: duration) {
132
174
  self.effect = nil
133
175
  }
134
176
  return
@@ -149,106 +191,14 @@ public final class PCLiquidGlassView: UIVisualEffectView {
149
191
  self.effect = glassEffect
150
192
  isFirstMount = false
151
193
  } else {
152
- UIView.animate(withDuration: 0.2) {
194
+ UIView.animate(withDuration: duration) {
153
195
  self.effect = glassEffect
154
196
  }
155
197
  }
156
198
 
157
- applyCornerRadius()
158
- }
159
-
160
- private func applyCornerRadius() {
161
- layer.cornerRadius = glassCornerRadius
162
- layer.cornerCurve = .continuous
163
- }
164
-
165
- private func applyColorScheme() {
166
- switch colorScheme {
167
- case "light":
168
- overrideUserInterfaceStyle = .light
169
- case "dark":
170
- overrideUserInterfaceStyle = .dark
171
- default:
172
- overrideUserInterfaceStyle = .unspecified
173
- }
174
- applyGlassEffect()
175
- }
176
-
177
- // MARK: - Sizing
178
-
179
- public override func sizeThatFits(_ size: CGSize) -> CGSize {
180
- return size
199
+ applyCornerStyle()
181
200
  }
182
-
183
- public override var intrinsicContentSize: CGSize {
184
- return CGSize(width: UIView.noIntrinsicMetric, height: UIView.noIntrinsicMetric)
185
- }
186
- }
187
-
188
- #else
189
-
190
- /// Fallback for older Swift compilers (pre-iOS 26 SDK)
191
- /// Uses UIBlurEffect as a fallback
192
- @objcMembers
193
- public final class PCLiquidGlassView: UIVisualEffectView {
194
-
195
- @objc public static var isSupported: Bool {
196
- return false
197
- }
198
-
199
- public var effectStyle: String = "regular" {
200
- didSet { applyFallbackEffect() }
201
- }
202
-
203
- public var glassCornerRadius: CGFloat = 0 {
204
- didSet { applyCornerRadius() }
205
- }
206
-
207
- public var interactive: Bool = false
208
- public var glassTintColor: String?
209
- public var colorScheme: String = "system" {
210
- didSet { applyColorScheme() }
211
- }
212
- public var onPressCallback: ((CGFloat, CGFloat) -> Void)?
213
-
214
- public override init(effect: UIVisualEffect?) {
215
- super.init(effect: effect)
216
- setup()
217
- }
218
-
219
- public required init?(coder: NSCoder) {
220
- super.init(coder: coder)
221
- setup()
222
- }
223
-
224
- private func setup() {
225
- clipsToBounds = false
226
- setupTapGesture()
227
- applyFallbackEffect()
228
- }
229
-
230
- private func setupTapGesture() {
231
- let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
232
- addGestureRecognizer(tap)
233
- }
234
-
235
- @objc private func handleTap(_ gesture: UITapGestureRecognizer) {
236
- let location = gesture.location(in: self)
237
- onPressCallback?(location.x, location.y)
238
- }
239
-
240
- public override func layoutSubviews() {
241
- super.layoutSubviews()
242
- if effect == nil && bounds.size != .zero {
243
- applyFallbackEffect()
244
- }
245
- }
246
-
247
- /// Call this after setting props to apply/re-apply the effect
248
- @objc public func setupView() {
249
- applyFallbackEffect()
250
- }
251
-
201
+ #else
252
202
  private func applyFallbackEffect() {
253
203
  guard effectStyle != "none" else {
254
204
  self.effect = nil
@@ -273,11 +223,46 @@ public final class PCLiquidGlassView: UIVisualEffectView {
273
223
  }
274
224
 
275
225
  self.effect = UIBlurEffect(style: blurStyle)
276
- applyCornerRadius()
226
+ applyCornerStyle()
277
227
  }
228
+ #endif
229
+
230
+ // MARK: - Corners
278
231
 
279
- private func applyCornerRadius() {
280
- layer.cornerRadius = glassCornerRadius
232
+ /// Whether corners go through UIView.cornerConfiguration (iOS 26).
233
+ private var usesCornerConfiguration: Bool {
234
+ #if compiler(>=6.2)
235
+ if #available(iOS 26.0, *) {
236
+ return true
237
+ }
238
+ #endif
239
+ return false
240
+ }
241
+
242
+ private func applyCornerStyle() {
243
+ #if compiler(>=6.2)
244
+ if #available(iOS 26.0, *) {
245
+ switch cornerStyle {
246
+ case "capsule":
247
+ cornerConfiguration = .capsule()
248
+ case "concentric":
249
+ // Each corner follows the matching corner of the enclosing
250
+ // shape (a parent glass, the screen), inset by the distance
251
+ // to it; cornerRadius is the smallest it gets.
252
+ cornerConfiguration = .corners(
253
+ radius: .containerConcentric(minimum: glassCornerRadius > 0 ? glassCornerRadius : nil)
254
+ )
255
+ default:
256
+ cornerConfiguration = .uniformCorners(radius: .fixed(Double(glassCornerRadius)))
257
+ }
258
+ return
259
+ }
260
+ #endif
261
+ // Without corner configurations: a capsule is half the short side,
262
+ // and concentric corners use cornerRadius
263
+ layer.cornerRadius = cornerStyle == "capsule"
264
+ ? min(bounds.width, bounds.height) / 2
265
+ : glassCornerRadius
281
266
  layer.cornerCurve = .continuous
282
267
  }
283
268
 
@@ -290,11 +275,133 @@ public final class PCLiquidGlassView: UIVisualEffectView {
290
275
  default:
291
276
  overrideUserInterfaceStyle = .unspecified
292
277
  }
293
- applyFallbackEffect()
278
+ applyEffect()
294
279
  }
295
- }
296
280
 
297
- #endif
281
+ // MARK: - Container morphing
282
+
283
+ /// The container this glass merges in: the nearest one above it, unless
284
+ /// another glass view comes first.
285
+ private var glassContainer: PCLiquidGlassContainerView? {
286
+ var view = superview
287
+ while let current = view {
288
+ if let container = current as? PCLiquidGlassContainerView {
289
+ return container
290
+ }
291
+ if current is PCLiquidGlassView {
292
+ return nil
293
+ }
294
+ view = current.superview
295
+ }
296
+ return nil
297
+ }
298
+
299
+ /// Whether frame changes should animate: glass shown in a container that
300
+ /// is already on screen.
301
+ @objc public var morphsLayoutChanges: Bool {
302
+ #if compiler(>=6.2)
303
+ if #available(iOS 26.0, *) {
304
+ return effect is UIGlassEffect && glassContainer?.isSettled == true
305
+ }
306
+ #endif
307
+ return false
308
+ }
309
+
310
+ /// Runs layout changes in the animation that reshapes merged glass.
311
+ @objc public static func morph(_ changes: @escaping () -> Void) {
312
+ UIView.animate(
313
+ withDuration: morphDuration,
314
+ delay: 0,
315
+ usingSpringWithDamping: 0.82,
316
+ initialSpringVelocity: 0,
317
+ options: [.beginFromCurrentState, .allowUserInteraction],
318
+ animations: changes
319
+ )
320
+ }
321
+
322
+ public override func didMoveToWindow() {
323
+ super.didMoveToWindow()
324
+ guard window != nil else { return }
325
+
326
+ if let ghost = pendingGhost {
327
+ // Moved within one transaction rather than removed: the glass
328
+ // is still here, so drop the copy that was fading out
329
+ ghost.removeFromSuperview()
330
+ pendingGhost = nil
331
+ return
332
+ }
333
+
334
+ #if compiler(>=6.2)
335
+ if #available(iOS 26.0, *), glassContainer?.isSettled == true, bounds.size != .zero {
336
+ // Added to a container already on screen: materialize, which
337
+ // grows the glass out of the neighbours it merges with
338
+ effect = nil
339
+ isFirstMount = false
340
+ applyGlassEffect(duration: PCLiquidGlassView.morphDuration)
341
+ }
342
+ #endif
343
+ }
344
+
345
+ /// Called by the React view as it is removed from its parent. In a
346
+ /// container that is on screen, a copy of the glass takes its place and
347
+ /// dematerializes, so the shape melts back into its neighbours instead of
348
+ /// vanishing.
349
+ @objc public func willUnmount() {
350
+ #if compiler(>=6.2)
351
+ guard #available(iOS 26.0, *),
352
+ let glass = effect as? UIGlassEffect,
353
+ let container = glassContainer, container.isSettled,
354
+ bounds.size != .zero else { return }
355
+
356
+ let ghost = UIVisualEffectView(effect: glass)
357
+ ghost.frame = convert(bounds, to: container.contentView)
358
+ ghost.cornerConfiguration = cornerConfiguration
359
+ ghost.overrideUserInterfaceStyle = overrideUserInterfaceStyle
360
+ ghost.isUserInteractionEnabled = false
361
+ // Last, so the indexes React inserts its children at stay right
362
+ container.contentView.addSubview(ghost)
363
+
364
+ pendingGhost = ghost
365
+ UIView.animate(withDuration: PCLiquidGlassView.morphDuration, animations: {
366
+ ghost.effect = nil
367
+ }, completion: { _ in
368
+ ghost.removeFromSuperview()
369
+ })
370
+
371
+ // Once the transaction has applied the container's new size: a copy
372
+ // left outside it (glass removed at an edge) shrinks into the edge,
373
+ // where its neighbour is, rather than being cut off by the bounds.
374
+ // A transform keeps its corners; a new frame would square them.
375
+ DispatchQueue.main.async { [weak self] in
376
+ self?.pendingGhost = nil
377
+ guard ghost.superview != nil else { return }
378
+ let bounds = container.contentView.bounds
379
+ let frame = ghost.frame
380
+ let target = CGPoint(
381
+ x: min(max(frame.midX, bounds.minX), bounds.maxX),
382
+ y: min(max(frame.midY, bounds.minY), bounds.maxY)
383
+ )
384
+ guard target.x != frame.midX || target.y != frame.midY else { return }
385
+ PCLiquidGlassView.morph {
386
+ ghost.transform = CGAffineTransform(
387
+ translationX: target.x - frame.midX,
388
+ y: target.y - frame.midY
389
+ ).scaledBy(x: 0.5, y: 0.5)
390
+ }
391
+ }
392
+ #endif
393
+ }
394
+
395
+ // MARK: - Sizing
396
+
397
+ public override func sizeThatFits(_ size: CGSize) -> CGSize {
398
+ return size
399
+ }
400
+
401
+ public override var intrinsicContentSize: CGSize {
402
+ return CGSize(width: UIView.noIntrinsicMetric, height: UIView.noIntrinsicMetric)
403
+ }
404
+ }
298
405
 
299
406
  // MARK: - UIColor parsing extension
300
407
 
@@ -0,0 +1,10 @@
1
+ // PCLiquidGlassContainer.h
2
+
3
+ #import <React/RCTViewComponentView.h>
4
+
5
+ NS_ASSUME_NONNULL_BEGIN
6
+
7
+ @interface PCLiquidGlassContainer : RCTViewComponentView
8
+ @end
9
+
10
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,84 @@
1
+ // PCLiquidGlassContainer.mm
2
+
3
+ #import "PCLiquidGlassContainer.h"
4
+
5
+ #import <React/RCTComponentViewFactory.h>
6
+ #import <React/RCTFabricComponentsPlugins.h>
7
+
8
+ #import <react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h>
9
+ #import <react/renderer/components/PlatformComponentsViewSpec/Props.h>
10
+
11
+ #if __has_include(<PlatformComponents/PlatformComponents-Swift.h>)
12
+ #import <PlatformComponents/PlatformComponents-Swift.h>
13
+ #else
14
+ #import "PlatformComponents-Swift.h"
15
+ #endif
16
+
17
+ using namespace facebook::react;
18
+
19
+ @implementation PCLiquidGlassContainer {
20
+ PCLiquidGlassContainerView *_view;
21
+ }
22
+
23
+ + (ComponentDescriptorProvider)componentDescriptorProvider {
24
+ return concreteComponentDescriptorProvider<PCLiquidGlassContainerComponentDescriptor>();
25
+ }
26
+
27
+ - (instancetype)initWithFrame:(CGRect)frame {
28
+ if (self = [super initWithFrame:frame]) {
29
+ static const auto defaultProps = std::make_shared<const PCLiquidGlassContainerProps>();
30
+ _props = defaultProps;
31
+
32
+ _view = [[PCLiquidGlassContainerView alloc] initWithEffect:nil];
33
+ _view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
34
+ [self addSubview:_view];
35
+ }
36
+ return self;
37
+ }
38
+
39
+ // Children go in the effect view's contentView, where the container effect
40
+ // renders their glass together
41
+ - (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index {
42
+ [_view.contentView insertSubview:childComponentView atIndex:index];
43
+ }
44
+
45
+ - (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index {
46
+ [childComponentView removeFromSuperview];
47
+ }
48
+
49
+ // On screen, a new size animates with the glass inside it: the container
50
+ // clips the merged glass to about its bounds, and glass morphing into a
51
+ // smaller container would otherwise be cut off
52
+ - (void)updateLayoutMetrics:(const LayoutMetrics &)layoutMetrics
53
+ oldLayoutMetrics:(const LayoutMetrics &)oldLayoutMetrics {
54
+ BOOL morphs = oldLayoutMetrics != EmptyLayoutMetrics &&
55
+ layoutMetrics.frame.size != oldLayoutMetrics.frame.size && _view.isSettled;
56
+ if (!morphs) {
57
+ [super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:oldLayoutMetrics];
58
+ return;
59
+ }
60
+ [PCLiquidGlassView morph:^{
61
+ [super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:oldLayoutMetrics];
62
+ [self layoutIfNeeded];
63
+ }];
64
+ }
65
+
66
+ - (void)updateProps:(Props::Shared const &)props
67
+ oldProps:(Props::Shared const &)oldProps {
68
+ const auto &newProps =
69
+ *std::static_pointer_cast<const PCLiquidGlassContainerProps>(props);
70
+ const auto prevProps =
71
+ std::static_pointer_cast<const PCLiquidGlassContainerProps>(oldProps);
72
+
73
+ if (!prevProps || newProps.spacing != prevProps->spacing) {
74
+ _view.spacing = newProps.spacing;
75
+ }
76
+
77
+ [super updateProps:props oldProps:oldProps];
78
+ }
79
+
80
+ @end
81
+
82
+ Class<RCTComponentViewProtocol> PCLiquidGlassContainerCls(void) {
83
+ return PCLiquidGlassContainer.class;
84
+ }
@@ -0,0 +1,69 @@
1
+ import UIKit
2
+
3
+ /// The container Liquid Glass views merge in: a UIVisualEffectView with a
4
+ /// UIGlassContainerEffect on iOS 26. Glass views in its contentView render
5
+ /// as one shape, and blend into each other when they come within `spacing`.
6
+ ///
7
+ /// Elsewhere (older iOS, or a build without the iOS 26 SDK) it has no effect
8
+ /// and is a plain container.
9
+ @objcMembers
10
+ public final class PCLiquidGlassContainerView: UIVisualEffectView {
11
+
12
+ /// Distance at which glass views begin to merge; negative keeps the
13
+ /// system default.
14
+ public var spacing: CGFloat = -1 {
15
+ didSet {
16
+ if spacing != oldValue { applyEffect() }
17
+ }
18
+ }
19
+
20
+ /// True once the container has been on screen for a run loop. Glass
21
+ /// added, removed or moved after that morphs; glass that arrives with the
22
+ /// container just appears.
23
+ public private(set) var isSettled = false
24
+
25
+ public override init(effect: UIVisualEffect?) {
26
+ super.init(effect: nil)
27
+ clipsToBounds = false
28
+ applyEffect()
29
+ }
30
+
31
+ public required init?(coder: NSCoder) {
32
+ super.init(coder: coder)
33
+ clipsToBounds = false
34
+ applyEffect()
35
+ }
36
+
37
+ public override func willMove(toWindow newWindow: UIWindow?) {
38
+ super.willMove(toWindow: newWindow)
39
+ if newWindow == nil {
40
+ isSettled = false
41
+ }
42
+ }
43
+
44
+ public override func didMoveToWindow() {
45
+ super.didMoveToWindow()
46
+ isSettled = false
47
+ guard window != nil else { return }
48
+ DispatchQueue.main.async { [weak self] in
49
+ guard let self else { return }
50
+ self.isSettled = self.window != nil
51
+ }
52
+ }
53
+
54
+ private func applyEffect() {
55
+ #if compiler(>=6.2)
56
+ if #available(iOS 26.0, *) {
57
+ let containerEffect = UIGlassContainerEffect()
58
+ if spacing >= 0 {
59
+ containerEffect.spacing = spacing
60
+ }
61
+ // Replacing one container effect with another leaves the
62
+ // spacing the glass was merged with; clearing it first applies
63
+ // the new one
64
+ effect = nil
65
+ effect = containerEffect
66
+ }
67
+ #endif
68
+ }
69
+ }
@@ -0,0 +1,76 @@
1
+ // PCMenuItems.h
2
+ //
3
+ // Bridges flattened menu items (src/menuItems.ts) from their codegen structs
4
+ // to the dictionaries PCMenuItem (PCMenuSupport.swift) reads. Codegen makes a
5
+ // struct per component and prop, so these are templates over any struct with
6
+ // the menu item fields.
7
+
8
+ #pragma once
9
+
10
+ #import <Foundation/Foundation.h>
11
+
12
+ #include <string>
13
+ #include <vector>
14
+
15
+ namespace platformcomponents {
16
+
17
+ inline NSString *PCMenuString(const std::string &value) {
18
+ return value.empty() ? @"" : [NSString stringWithUTF8String:value.c_str()];
19
+ }
20
+
21
+ template <typename Item>
22
+ NSDictionary *PCMenuItemToDictionary(const Item &item) {
23
+ return @{
24
+ @"id" : PCMenuString(item.id),
25
+ @"title" : PCMenuString(item.title),
26
+ @"subtitle" : PCMenuString(item.subtitle),
27
+ @"parent" : @(item.parent),
28
+ @"kind" : PCMenuString(item.kind),
29
+ @"iconType" : PCMenuString(item.iconType),
30
+ @"iconName" : PCMenuString(item.iconName),
31
+ @"iconRequest" : PCMenuString(item.iconRequest),
32
+ @"iconUri" : PCMenuString(item.iconUri),
33
+ @"iconScale" : @(item.iconScale),
34
+ @"iconTinted" : PCMenuString(item.iconTinted),
35
+ @"imageColor" : PCMenuString(item.imageColor),
36
+ @"destructive" : PCMenuString(item.destructive),
37
+ @"disabled" : PCMenuString(item.disabled),
38
+ @"keepsMenuPresented" : PCMenuString(item.keepsMenuPresented),
39
+ @"state" : PCMenuString(item.state),
40
+ @"haptics" : PCMenuString(item.haptics),
41
+ };
42
+ }
43
+
44
+ template <typename Item>
45
+ NSArray<NSDictionary *> *PCMenuItemsToArray(const std::vector<Item> &items) {
46
+ NSMutableArray<NSDictionary *> *array = [NSMutableArray arrayWithCapacity:items.size()];
47
+ for (const auto &item : items) {
48
+ [array addObject:PCMenuItemToDictionary(item)];
49
+ }
50
+ return array;
51
+ }
52
+
53
+ template <typename Item>
54
+ bool PCMenuItemEqual(const Item &a, const Item &b) {
55
+ return a.id == b.id && a.title == b.title && a.subtitle == b.subtitle &&
56
+ a.parent == b.parent && a.kind == b.kind && a.iconType == b.iconType &&
57
+ a.iconName == b.iconName && a.iconRequest == b.iconRequest && a.iconUri == b.iconUri &&
58
+ a.iconScale == b.iconScale && a.iconTinted == b.iconTinted &&
59
+ a.imageColor == b.imageColor && a.destructive == b.destructive &&
60
+ a.disabled == b.disabled &&
61
+ a.keepsMenuPresented == b.keepsMenuPresented && a.state == b.state &&
62
+ a.haptics == b.haptics;
63
+ }
64
+
65
+ /// Compares every field, so a changed title or state (a stepper or toggle
66
+ /// in an open menu) reaches native.
67
+ template <typename Item>
68
+ bool PCMenuItemsEqual(const std::vector<Item> &a, const std::vector<Item> &b) {
69
+ if (a.size() != b.size()) return false;
70
+ for (size_t i = 0; i < a.size(); i++) {
71
+ if (!PCMenuItemEqual(a[i], b[i])) return false;
72
+ }
73
+ return true;
74
+ }
75
+
76
+ } // namespace platformcomponents