react-native-platform-components 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. package/PlatformComponents.podspec +1 -1
  2. package/README.md +47 -51
  3. package/android/src/main/java/com/platformcomponents/PCButtonGroupView.kt +664 -0
  4. package/android/src/main/java/com/platformcomponents/PCButtonGroupViewManager.kt +241 -0
  5. package/android/src/main/java/com/platformcomponents/PCButtonSupport.kt +159 -0
  6. package/android/src/main/java/com/platformcomponents/PCButtonView.kt +527 -0
  7. package/android/src/main/java/com/platformcomponents/PCButtonViewManager.kt +204 -0
  8. package/android/src/main/java/com/platformcomponents/PCContextMenuView.kt +41 -151
  9. package/android/src/main/java/com/platformcomponents/PCContextMenuViewManager.kt +7 -63
  10. package/android/src/main/java/com/platformcomponents/PCDatePickerView.kt +310 -115
  11. package/android/src/main/java/com/platformcomponents/PCDatePickerViewManager.kt +23 -3
  12. package/android/src/main/java/com/platformcomponents/PCExpressive.kt +112 -0
  13. package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonView.kt +485 -0
  14. package/android/src/main/java/com/platformcomponents/PCFloatingActionButtonViewManager.kt +109 -0
  15. package/android/src/main/java/com/platformcomponents/PCFloatingToolbarView.kt +247 -0
  16. package/android/src/main/java/com/platformcomponents/PCFloatingToolbarViewManager.kt +73 -0
  17. package/android/src/main/java/com/platformcomponents/PCHaptics.kt +46 -0
  18. package/android/src/main/java/com/platformcomponents/PCImageLoader.kt +42 -7
  19. package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerView.kt +32 -0
  20. package/android/src/main/java/com/platformcomponents/PCLiquidGlassContainerViewManager.kt +31 -0
  21. package/android/src/main/java/com/platformcomponents/PCLiquidGlassView.kt +32 -6
  22. package/android/src/main/java/com/platformcomponents/PCLiquidGlassViewManager.kt +4 -0
  23. package/android/src/main/java/com/platformcomponents/PCMenuSupport.kt +280 -0
  24. package/android/src/main/java/com/platformcomponents/PCNavigationBarSupport.kt +332 -0
  25. package/android/src/main/java/com/platformcomponents/PCNavigationRailView.kt +448 -0
  26. package/android/src/main/java/com/platformcomponents/PCNavigationRailViewManager.kt +176 -0
  27. package/android/src/main/java/com/platformcomponents/PCSegmentedControlView.kt +35 -17
  28. package/android/src/main/java/com/platformcomponents/PCSegmentedControlViewManager.kt +20 -3
  29. package/android/src/main/java/com/platformcomponents/PCSelectionMenuView.kt +371 -39
  30. package/android/src/main/java/com/platformcomponents/PCSelectionMenuViewManager.kt +18 -4
  31. package/android/src/main/java/com/platformcomponents/PCTabBarView.kt +397 -0
  32. package/android/src/main/java/com/platformcomponents/PCTabBarViewManager.kt +182 -0
  33. package/android/src/main/java/com/platformcomponents/PCTextFieldView.kt +1393 -0
  34. package/android/src/main/java/com/platformcomponents/PCTextFieldViewManager.kt +354 -0
  35. package/android/src/main/java/com/platformcomponents/PCThemeSupport.kt +37 -0
  36. package/android/src/main/java/com/platformcomponents/PlatformComponentsPackage.kt +8 -0
  37. package/android/src/main/res/drawable/pc_ic_search.xml +12 -0
  38. package/android/src/main/res/values/attrs.xml +13 -0
  39. package/android/src/main/res/values/ids.xml +5 -0
  40. package/android/src/main/res/values/styles.xml +207 -0
  41. package/ios/PCButton.h +10 -0
  42. package/ios/PCButton.mm +311 -0
  43. package/ios/PCButtonGroup.h +10 -0
  44. package/ios/PCButtonGroup.mm +323 -0
  45. package/ios/PCButtonGroupView.swift +473 -0
  46. package/ios/PCButtonSupport.swift +312 -0
  47. package/ios/PCButtonView.swift +438 -0
  48. package/ios/PCConstants.swift +23 -2
  49. package/ios/PCContextMenu.mm +28 -110
  50. package/ios/PCContextMenu.swift +106 -167
  51. package/ios/PCDatePicker.mm +21 -9
  52. package/ios/PCDatePickerView.swift +94 -20
  53. package/ios/PCFloatingActionButton.h +10 -0
  54. package/ios/PCFloatingActionButton.mm +177 -0
  55. package/ios/PCFloatingActionButtonView.swift +426 -0
  56. package/ios/PCFloatingToolbar.h +10 -0
  57. package/ios/PCFloatingToolbar.mm +103 -0
  58. package/ios/PCFloatingToolbarView.swift +336 -0
  59. package/ios/PCHaptics.swift +91 -0
  60. package/ios/PCImageLoader.swift +76 -12
  61. package/ios/PCLiquidGlass.mm +36 -0
  62. package/ios/PCLiquidGlass.swift +221 -114
  63. package/ios/PCLiquidGlassContainer.h +10 -0
  64. package/ios/PCLiquidGlassContainer.mm +84 -0
  65. package/ios/PCLiquidGlassContainer.swift +69 -0
  66. package/ios/PCMenuItems.h +76 -0
  67. package/ios/PCMenuSupport.swift +350 -0
  68. package/ios/PCNavigationRail.h +10 -0
  69. package/ios/PCNavigationRail.mm +270 -0
  70. package/ios/PCNavigationRailView.swift +415 -0
  71. package/ios/PCSegmentedControl.mm +17 -2
  72. package/ios/PCSegmentedControl.swift +57 -7
  73. package/ios/PCSelectionMenu.mm +36 -8
  74. package/ios/PCSelectionMenu.swift +224 -48
  75. package/ios/PCTabBar.h +10 -0
  76. package/ios/PCTabBar.mm +285 -0
  77. package/ios/PCTabBarAccessory.h +10 -0
  78. package/ios/PCTabBarAccessory.mm +93 -0
  79. package/ios/PCTabBarAccessoryView.swift +96 -0
  80. package/ios/PCTabBarView.swift +671 -0
  81. package/ios/PCTextField.h +10 -0
  82. package/ios/PCTextField.mm +546 -0
  83. package/ios/PCTextFieldView.swift +1558 -0
  84. package/lib/commonjs/Button.js +149 -0
  85. package/lib/commonjs/Button.js.map +1 -0
  86. package/lib/commonjs/ButtonGroup.js +109 -0
  87. package/lib/commonjs/ButtonGroup.js.map +1 -0
  88. package/lib/commonjs/ButtonGroupNativeComponent.ts +191 -0
  89. package/lib/commonjs/ButtonNativeComponent.ts +192 -0
  90. package/lib/commonjs/ContextMenu.js +9 -48
  91. package/lib/commonjs/ContextMenu.js.map +1 -1
  92. package/lib/commonjs/ContextMenuNativeComponent.ts +47 -49
  93. package/lib/commonjs/DatePicker.js +98 -2
  94. package/lib/commonjs/DatePicker.js.map +1 -1
  95. package/lib/commonjs/DatePickerNativeComponent.ts +19 -2
  96. package/lib/commonjs/FloatingActionButton.js +60 -0
  97. package/lib/commonjs/FloatingActionButton.js.map +1 -0
  98. package/lib/commonjs/FloatingActionButtonNativeComponent.ts +58 -0
  99. package/lib/commonjs/FloatingToolbar.js +77 -0
  100. package/lib/commonjs/FloatingToolbar.js.map +1 -0
  101. package/lib/commonjs/FloatingToolbarNativeComponent.ts +47 -0
  102. package/lib/commonjs/LiquidGlass.js +7 -1
  103. package/lib/commonjs/LiquidGlass.js.map +1 -1
  104. package/lib/commonjs/LiquidGlassContainer.js +32 -0
  105. package/lib/commonjs/LiquidGlassContainer.js.map +1 -0
  106. package/lib/commonjs/LiquidGlassContainerNativeComponent.ts +17 -0
  107. package/lib/commonjs/LiquidGlassNativeComponent.ts +8 -0
  108. package/lib/commonjs/NavigationRail.js +104 -0
  109. package/lib/commonjs/NavigationRail.js.map +1 -0
  110. package/lib/commonjs/NavigationRailNativeComponent.ts +107 -0
  111. package/lib/commonjs/PlatformComponentsProvider.js +18 -0
  112. package/lib/commonjs/PlatformComponentsProvider.js.map +1 -0
  113. package/lib/commonjs/SegmentedControl.js +18 -85
  114. package/lib/commonjs/SegmentedControl.js.map +1 -1
  115. package/lib/commonjs/SegmentedControlNativeComponent.ts +14 -0
  116. package/lib/commonjs/SelectionMenu.js +27 -3
  117. package/lib/commonjs/SelectionMenu.js.map +1 -1
  118. package/lib/commonjs/SelectionMenuNativeComponent.ts +26 -4
  119. package/lib/commonjs/SplitButton.js +98 -0
  120. package/lib/commonjs/SplitButton.js.map +1 -0
  121. package/lib/commonjs/TabBar.js +203 -0
  122. package/lib/commonjs/TabBar.js.map +1 -0
  123. package/lib/commonjs/TabBarAccessoryNativeComponent.ts +19 -0
  124. package/lib/commonjs/TabBarNativeComponent.ts +145 -0
  125. package/lib/commonjs/TextField.js +358 -0
  126. package/lib/commonjs/TextField.js.map +1 -0
  127. package/lib/commonjs/TextFieldNativeComponent.ts +324 -0
  128. package/lib/commonjs/focusRegistry.js +79 -0
  129. package/lib/commonjs/focusRegistry.js.map +1 -0
  130. package/lib/commonjs/haptics.js +2 -0
  131. package/lib/commonjs/haptics.js.map +1 -0
  132. package/lib/commonjs/icons.js +106 -0
  133. package/lib/commonjs/icons.js.map +1 -0
  134. package/lib/commonjs/index.js +143 -0
  135. package/lib/commonjs/index.js.map +1 -1
  136. package/lib/commonjs/index.web.js +157 -63
  137. package/lib/commonjs/index.web.js.map +1 -1
  138. package/lib/commonjs/jest.js +910 -0
  139. package/lib/commonjs/jest.js.map +1 -0
  140. package/lib/commonjs/labelStyle.js +27 -0
  141. package/lib/commonjs/labelStyle.js.map +1 -0
  142. package/lib/commonjs/menuItems.js +68 -0
  143. package/lib/commonjs/menuItems.js.map +1 -0
  144. package/lib/commonjs/reactNativeInternals.d.js +2 -0
  145. package/lib/commonjs/reactNativeInternals.d.js.map +1 -0
  146. package/lib/commonjs/selectionIdentifiers.js +18 -0
  147. package/lib/commonjs/selectionIdentifiers.js.map +1 -0
  148. package/lib/commonjs/submitBehavior.js +19 -0
  149. package/lib/commonjs/submitBehavior.js.map +1 -0
  150. package/lib/commonjs/tabItems.js +49 -0
  151. package/lib/commonjs/tabItems.js.map +1 -0
  152. package/lib/commonjs/web/Button.js +170 -0
  153. package/lib/commonjs/web/Button.js.map +1 -0
  154. package/lib/commonjs/web/ButtonGroup.js +119 -0
  155. package/lib/commonjs/web/ButtonGroup.js.map +1 -0
  156. package/lib/commonjs/web/DatePicker.js +168 -0
  157. package/lib/commonjs/web/DatePicker.js.map +1 -0
  158. package/lib/commonjs/web/DateRangePicker.js +137 -0
  159. package/lib/commonjs/web/DateRangePicker.js.map +1 -0
  160. package/lib/commonjs/web/Dialog.js +54 -0
  161. package/lib/commonjs/web/Dialog.js.map +1 -0
  162. package/lib/commonjs/web/FloatingActionButton.js +98 -0
  163. package/lib/commonjs/web/FloatingActionButton.js.map +1 -0
  164. package/lib/commonjs/web/Icon.js +34 -0
  165. package/lib/commonjs/web/Icon.js.map +1 -0
  166. package/lib/commonjs/web/NativeTheme.js +28 -0
  167. package/lib/commonjs/web/NativeTheme.js.map +1 -0
  168. package/lib/commonjs/web/NavigationRail.js +139 -0
  169. package/lib/commonjs/web/NavigationRail.js.map +1 -0
  170. package/lib/commonjs/web/PlatformComponentsProvider.js +51 -0
  171. package/lib/commonjs/web/PlatformComponentsProvider.js.map +1 -0
  172. package/lib/commonjs/web/SegmentedControl.js +117 -0
  173. package/lib/commonjs/web/SegmentedControl.js.map +1 -0
  174. package/lib/commonjs/web/SelectionMenu.js +142 -0
  175. package/lib/commonjs/web/SelectionMenu.js.map +1 -0
  176. package/lib/commonjs/web/SplitButton.js +35 -0
  177. package/lib/commonjs/web/SplitButton.js.map +1 -0
  178. package/lib/commonjs/web/TabBar.js +131 -0
  179. package/lib/commonjs/web/TabBar.js.map +1 -0
  180. package/lib/commonjs/web/TextField.js +322 -0
  181. package/lib/commonjs/web/TextField.js.map +1 -0
  182. package/lib/commonjs/web/components.js +36 -0
  183. package/lib/commonjs/web/components.js.map +1 -0
  184. package/lib/commonjs/web/containers.js +121 -0
  185. package/lib/commonjs/web/containers.js.map +1 -0
  186. package/lib/commonjs/web/dateInput.js +116 -0
  187. package/lib/commonjs/web/dateInput.js.map +1 -0
  188. package/lib/commonjs/web/shared.js +192 -0
  189. package/lib/commonjs/web/shared.js.map +1 -0
  190. package/lib/commonjs/webComponents.js +6 -0
  191. package/lib/commonjs/webComponents.js.map +1 -0
  192. package/lib/module/Button.js +142 -0
  193. package/lib/module/Button.js.map +1 -0
  194. package/lib/module/ButtonGroup.js +102 -0
  195. package/lib/module/ButtonGroup.js.map +1 -0
  196. package/lib/module/ButtonGroupNativeComponent.ts +191 -0
  197. package/lib/module/ButtonNativeComponent.ts +192 -0
  198. package/lib/module/ContextMenu.js +9 -48
  199. package/lib/module/ContextMenu.js.map +1 -1
  200. package/lib/module/ContextMenuNativeComponent.ts +47 -49
  201. package/lib/module/DatePicker.js +98 -4
  202. package/lib/module/DatePicker.js.map +1 -1
  203. package/lib/module/DatePickerNativeComponent.ts +19 -2
  204. package/lib/module/FloatingActionButton.js +53 -0
  205. package/lib/module/FloatingActionButton.js.map +1 -0
  206. package/lib/module/FloatingActionButtonNativeComponent.ts +58 -0
  207. package/lib/module/FloatingToolbar.js +70 -0
  208. package/lib/module/FloatingToolbar.js.map +1 -0
  209. package/lib/module/FloatingToolbarNativeComponent.ts +47 -0
  210. package/lib/module/LiquidGlass.js +7 -1
  211. package/lib/module/LiquidGlass.js.map +1 -1
  212. package/lib/module/LiquidGlassContainer.js +26 -0
  213. package/lib/module/LiquidGlassContainer.js.map +1 -0
  214. package/lib/module/LiquidGlassContainerNativeComponent.ts +17 -0
  215. package/lib/module/LiquidGlassNativeComponent.ts +8 -0
  216. package/lib/module/NavigationRail.js +99 -0
  217. package/lib/module/NavigationRail.js.map +1 -0
  218. package/lib/module/NavigationRailNativeComponent.ts +107 -0
  219. package/lib/module/PlatformComponentsProvider.js +13 -0
  220. package/lib/module/PlatformComponentsProvider.js.map +1 -0
  221. package/lib/module/SegmentedControl.js +18 -85
  222. package/lib/module/SegmentedControl.js.map +1 -1
  223. package/lib/module/SegmentedControlNativeComponent.ts +14 -0
  224. package/lib/module/SelectionMenu.js +27 -3
  225. package/lib/module/SelectionMenu.js.map +1 -1
  226. package/lib/module/SelectionMenuNativeComponent.ts +26 -4
  227. package/lib/module/SplitButton.js +91 -0
  228. package/lib/module/SplitButton.js.map +1 -0
  229. package/lib/module/TabBar.js +196 -0
  230. package/lib/module/TabBar.js.map +1 -0
  231. package/lib/module/TabBarAccessoryNativeComponent.ts +19 -0
  232. package/lib/module/TabBarNativeComponent.ts +145 -0
  233. package/lib/module/TextField.js +352 -0
  234. package/lib/module/TextField.js.map +1 -0
  235. package/lib/module/TextFieldNativeComponent.ts +324 -0
  236. package/lib/module/focusRegistry.js +75 -0
  237. package/lib/module/focusRegistry.js.map +1 -0
  238. package/lib/module/haptics.js +2 -0
  239. package/lib/module/haptics.js.map +1 -0
  240. package/lib/module/icons.js +101 -0
  241. package/lib/module/icons.js.map +1 -0
  242. package/lib/module/index.js +13 -0
  243. package/lib/module/index.js.map +1 -1
  244. package/lib/module/index.web.js +12 -59
  245. package/lib/module/index.web.js.map +1 -1
  246. package/lib/module/jest.js +840 -0
  247. package/lib/module/jest.js.map +1 -0
  248. package/lib/module/labelStyle.js +23 -0
  249. package/lib/module/labelStyle.js.map +1 -0
  250. package/lib/module/menuItems.js +65 -0
  251. package/lib/module/menuItems.js.map +1 -0
  252. package/lib/module/reactNativeInternals.d.js +2 -0
  253. package/lib/module/reactNativeInternals.d.js.map +1 -0
  254. package/lib/module/selectionIdentifiers.js +14 -0
  255. package/lib/module/selectionIdentifiers.js.map +1 -0
  256. package/lib/module/submitBehavior.js +15 -0
  257. package/lib/module/submitBehavior.js.map +1 -0
  258. package/lib/module/tabItems.js +45 -0
  259. package/lib/module/tabItems.js.map +1 -0
  260. package/lib/module/web/Button.js +164 -0
  261. package/lib/module/web/Button.js.map +1 -0
  262. package/lib/module/web/ButtonGroup.js +113 -0
  263. package/lib/module/web/ButtonGroup.js.map +1 -0
  264. package/lib/module/web/DatePicker.js +162 -0
  265. package/lib/module/web/DatePicker.js.map +1 -0
  266. package/lib/module/web/DateRangePicker.js +131 -0
  267. package/lib/module/web/DateRangePicker.js.map +1 -0
  268. package/lib/module/web/Dialog.js +48 -0
  269. package/lib/module/web/Dialog.js.map +1 -0
  270. package/lib/module/web/FloatingActionButton.js +94 -0
  271. package/lib/module/web/FloatingActionButton.js.map +1 -0
  272. package/lib/module/web/Icon.js +29 -0
  273. package/lib/module/web/Icon.js.map +1 -0
  274. package/lib/module/web/NativeTheme.js +23 -0
  275. package/lib/module/web/NativeTheme.js.map +1 -0
  276. package/lib/module/web/NavigationRail.js +133 -0
  277. package/lib/module/web/NavigationRail.js.map +1 -0
  278. package/lib/module/web/PlatformComponentsProvider.js +44 -0
  279. package/lib/module/web/PlatformComponentsProvider.js.map +1 -0
  280. package/lib/module/web/SegmentedControl.js +112 -0
  281. package/lib/module/web/SegmentedControl.js.map +1 -0
  282. package/lib/module/web/SelectionMenu.js +137 -0
  283. package/lib/module/web/SelectionMenu.js.map +1 -0
  284. package/lib/module/web/SplitButton.js +30 -0
  285. package/lib/module/web/SplitButton.js.map +1 -0
  286. package/lib/module/web/TabBar.js +126 -0
  287. package/lib/module/web/TabBar.js.map +1 -0
  288. package/lib/module/web/TextField.js +316 -0
  289. package/lib/module/web/TextField.js.map +1 -0
  290. package/lib/module/web/components.js +33 -0
  291. package/lib/module/web/components.js.map +1 -0
  292. package/lib/module/web/containers.js +112 -0
  293. package/lib/module/web/containers.js.map +1 -0
  294. package/lib/module/web/dateInput.js +109 -0
  295. package/lib/module/web/dateInput.js.map +1 -0
  296. package/lib/module/web/shared.js +179 -0
  297. package/lib/module/web/shared.js.map +1 -0
  298. package/lib/module/webComponents.js +4 -0
  299. package/lib/module/webComponents.js.map +1 -0
  300. package/lib/typescript/commonjs/docs/sidebars.d.ts.map +1 -1
  301. package/lib/typescript/commonjs/src/Button.d.ts +184 -0
  302. package/lib/typescript/commonjs/src/Button.d.ts.map +1 -0
  303. package/lib/typescript/commonjs/src/ButtonGroup.d.ts +117 -0
  304. package/lib/typescript/commonjs/src/ButtonGroup.d.ts.map +1 -0
  305. package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts +154 -0
  306. package/lib/typescript/commonjs/src/ButtonGroupNativeComponent.d.ts.map +1 -0
  307. package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts +148 -0
  308. package/lib/typescript/commonjs/src/ButtonNativeComponent.d.ts.map +1 -0
  309. package/lib/typescript/commonjs/src/ContextMenu.d.ts +20 -33
  310. package/lib/typescript/commonjs/src/ContextMenu.d.ts.map +1 -1
  311. package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts +45 -47
  312. package/lib/typescript/commonjs/src/ContextMenuNativeComponent.d.ts.map +1 -1
  313. package/lib/typescript/commonjs/src/DatePicker.d.ts +74 -1
  314. package/lib/typescript/commonjs/src/DatePicker.d.ts.map +1 -1
  315. package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts +16 -1
  316. package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts.map +1 -1
  317. package/lib/typescript/commonjs/src/FloatingActionButton.d.ts +67 -0
  318. package/lib/typescript/commonjs/src/FloatingActionButton.d.ts.map +1 -0
  319. package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts +43 -0
  320. package/lib/typescript/commonjs/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
  321. package/lib/typescript/commonjs/src/FloatingToolbar.d.ts +75 -0
  322. package/lib/typescript/commonjs/src/FloatingToolbar.d.ts.map +1 -0
  323. package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts +36 -0
  324. package/lib/typescript/commonjs/src/FloatingToolbarNativeComponent.d.ts.map +1 -0
  325. package/lib/typescript/commonjs/src/LiquidGlass.d.ts +17 -0
  326. package/lib/typescript/commonjs/src/LiquidGlass.d.ts.map +1 -1
  327. package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts +27 -0
  328. package/lib/typescript/commonjs/src/LiquidGlassContainer.d.ts.map +1 -0
  329. package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
  330. package/lib/typescript/commonjs/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
  331. package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts +7 -0
  332. package/lib/typescript/commonjs/src/LiquidGlassNativeComponent.d.ts.map +1 -1
  333. package/lib/typescript/commonjs/src/NavigationRail.d.ts +86 -0
  334. package/lib/typescript/commonjs/src/NavigationRail.d.ts.map +1 -0
  335. package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts +81 -0
  336. package/lib/typescript/commonjs/src/NavigationRailNativeComponent.d.ts.map +1 -0
  337. package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts +6 -0
  338. package/lib/typescript/commonjs/src/PlatformComponentsProvider.d.ts.map +1 -0
  339. package/lib/typescript/commonjs/src/SegmentedControl.d.ts +35 -47
  340. package/lib/typescript/commonjs/src/SegmentedControl.d.ts.map +1 -1
  341. package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts +11 -0
  342. package/lib/typescript/commonjs/src/SegmentedControlNativeComponent.d.ts.map +1 -1
  343. package/lib/typescript/commonjs/src/SelectionMenu.d.ts +44 -2
  344. package/lib/typescript/commonjs/src/SelectionMenu.d.ts.map +1 -1
  345. package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts +20 -4
  346. package/lib/typescript/commonjs/src/SelectionMenuNativeComponent.d.ts.map +1 -1
  347. package/lib/typescript/commonjs/src/SplitButton.d.ts +83 -0
  348. package/lib/typescript/commonjs/src/SplitButton.d.ts.map +1 -0
  349. package/lib/typescript/commonjs/src/TabBar.d.ts +144 -0
  350. package/lib/typescript/commonjs/src/TabBar.d.ts.map +1 -0
  351. package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts +13 -0
  352. package/lib/typescript/commonjs/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
  353. package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts +110 -0
  354. package/lib/typescript/commonjs/src/TabBarNativeComponent.d.ts.map +1 -0
  355. package/lib/typescript/commonjs/src/TextField.d.ts +332 -0
  356. package/lib/typescript/commonjs/src/TextField.d.ts.map +1 -0
  357. package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts +240 -0
  358. package/lib/typescript/commonjs/src/TextFieldNativeComponent.d.ts.map +1 -0
  359. package/lib/typescript/commonjs/src/focusRegistry.d.ts +13 -0
  360. package/lib/typescript/commonjs/src/focusRegistry.d.ts.map +1 -0
  361. package/lib/typescript/commonjs/src/haptics.d.ts +20 -0
  362. package/lib/typescript/commonjs/src/haptics.d.ts.map +1 -0
  363. package/lib/typescript/commonjs/src/icons.d.ts +58 -0
  364. package/lib/typescript/commonjs/src/icons.d.ts.map +1 -0
  365. package/lib/typescript/commonjs/src/index.d.ts +13 -0
  366. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  367. package/lib/typescript/commonjs/src/index.web.d.ts +25 -133
  368. package/lib/typescript/commonjs/src/index.web.d.ts.map +1 -1
  369. package/lib/typescript/commonjs/src/jest.d.ts +139 -0
  370. package/lib/typescript/commonjs/src/jest.d.ts.map +1 -0
  371. package/lib/typescript/commonjs/src/labelStyle.d.ts +20 -0
  372. package/lib/typescript/commonjs/src/labelStyle.d.ts.map +1 -0
  373. package/lib/typescript/commonjs/src/menuItems.d.ts +100 -0
  374. package/lib/typescript/commonjs/src/menuItems.d.ts.map +1 -0
  375. package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts +3 -0
  376. package/lib/typescript/commonjs/src/selectionIdentifiers.d.ts.map +1 -0
  377. package/lib/typescript/commonjs/src/sharedTypes.d.ts +6 -1
  378. package/lib/typescript/commonjs/src/sharedTypes.d.ts.map +1 -1
  379. package/lib/typescript/commonjs/src/submitBehavior.d.ts +9 -0
  380. package/lib/typescript/commonjs/src/submitBehavior.d.ts.map +1 -0
  381. package/lib/typescript/commonjs/src/tabItems.d.ts +55 -0
  382. package/lib/typescript/commonjs/src/tabItems.d.ts.map +1 -0
  383. package/lib/typescript/commonjs/src/web/Button.d.ts +9 -0
  384. package/lib/typescript/commonjs/src/web/Button.d.ts.map +1 -0
  385. package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts +11 -0
  386. package/lib/typescript/commonjs/src/web/ButtonGroup.d.ts.map +1 -0
  387. package/lib/typescript/commonjs/src/web/DatePicker.d.ts +14 -0
  388. package/lib/typescript/commonjs/src/web/DatePicker.d.ts.map +1 -0
  389. package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts +11 -0
  390. package/lib/typescript/commonjs/src/web/DateRangePicker.d.ts.map +1 -0
  391. package/lib/typescript/commonjs/src/web/Dialog.d.ts +12 -0
  392. package/lib/typescript/commonjs/src/web/Dialog.d.ts.map +1 -0
  393. package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts +8 -0
  394. package/lib/typescript/commonjs/src/web/FloatingActionButton.d.ts.map +1 -0
  395. package/lib/typescript/commonjs/src/web/Icon.d.ts +12 -0
  396. package/lib/typescript/commonjs/src/web/Icon.d.ts.map +1 -0
  397. package/lib/typescript/commonjs/src/web/NativeTheme.d.ts +10 -0
  398. package/lib/typescript/commonjs/src/web/NativeTheme.d.ts.map +1 -0
  399. package/lib/typescript/commonjs/src/web/NavigationRail.d.ts +8 -0
  400. package/lib/typescript/commonjs/src/web/NavigationRail.d.ts.map +1 -0
  401. package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts +10 -0
  402. package/lib/typescript/commonjs/src/web/PlatformComponentsProvider.d.ts.map +1 -0
  403. package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts +8 -0
  404. package/lib/typescript/commonjs/src/web/SegmentedControl.d.ts.map +1 -0
  405. package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts +10 -0
  406. package/lib/typescript/commonjs/src/web/SelectionMenu.d.ts.map +1 -0
  407. package/lib/typescript/commonjs/src/web/SplitButton.d.ts +9 -0
  408. package/lib/typescript/commonjs/src/web/SplitButton.d.ts.map +1 -0
  409. package/lib/typescript/commonjs/src/web/TabBar.d.ts +9 -0
  410. package/lib/typescript/commonjs/src/web/TabBar.d.ts.map +1 -0
  411. package/lib/typescript/commonjs/src/web/TextField.d.ts +9 -0
  412. package/lib/typescript/commonjs/src/web/TextField.d.ts.map +1 -0
  413. package/lib/typescript/commonjs/src/web/components.d.ts +17 -0
  414. package/lib/typescript/commonjs/src/web/components.d.ts.map +1 -0
  415. package/lib/typescript/commonjs/src/web/containers.d.ts +24 -0
  416. package/lib/typescript/commonjs/src/web/containers.d.ts.map +1 -0
  417. package/lib/typescript/commonjs/src/web/dateInput.d.ts +20 -0
  418. package/lib/typescript/commonjs/src/web/dateInput.d.ts.map +1 -0
  419. package/lib/typescript/commonjs/src/web/shared.d.ts +43 -0
  420. package/lib/typescript/commonjs/src/web/shared.d.ts.map +1 -0
  421. package/lib/typescript/commonjs/src/webComponents.d.ts +43 -0
  422. package/lib/typescript/commonjs/src/webComponents.d.ts.map +1 -0
  423. package/lib/typescript/module/docs/sidebars.d.ts.map +1 -1
  424. package/lib/typescript/module/src/Button.d.ts +184 -0
  425. package/lib/typescript/module/src/Button.d.ts.map +1 -0
  426. package/lib/typescript/module/src/ButtonGroup.d.ts +117 -0
  427. package/lib/typescript/module/src/ButtonGroup.d.ts.map +1 -0
  428. package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts +154 -0
  429. package/lib/typescript/module/src/ButtonGroupNativeComponent.d.ts.map +1 -0
  430. package/lib/typescript/module/src/ButtonNativeComponent.d.ts +148 -0
  431. package/lib/typescript/module/src/ButtonNativeComponent.d.ts.map +1 -0
  432. package/lib/typescript/module/src/ContextMenu.d.ts +20 -33
  433. package/lib/typescript/module/src/ContextMenu.d.ts.map +1 -1
  434. package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts +45 -47
  435. package/lib/typescript/module/src/ContextMenuNativeComponent.d.ts.map +1 -1
  436. package/lib/typescript/module/src/DatePicker.d.ts +74 -1
  437. package/lib/typescript/module/src/DatePicker.d.ts.map +1 -1
  438. package/lib/typescript/module/src/DatePickerNativeComponent.d.ts +16 -1
  439. package/lib/typescript/module/src/DatePickerNativeComponent.d.ts.map +1 -1
  440. package/lib/typescript/module/src/FloatingActionButton.d.ts +67 -0
  441. package/lib/typescript/module/src/FloatingActionButton.d.ts.map +1 -0
  442. package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts +43 -0
  443. package/lib/typescript/module/src/FloatingActionButtonNativeComponent.d.ts.map +1 -0
  444. package/lib/typescript/module/src/FloatingToolbar.d.ts +75 -0
  445. package/lib/typescript/module/src/FloatingToolbar.d.ts.map +1 -0
  446. package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts +36 -0
  447. package/lib/typescript/module/src/FloatingToolbarNativeComponent.d.ts.map +1 -0
  448. package/lib/typescript/module/src/LiquidGlass.d.ts +17 -0
  449. package/lib/typescript/module/src/LiquidGlass.d.ts.map +1 -1
  450. package/lib/typescript/module/src/LiquidGlassContainer.d.ts +27 -0
  451. package/lib/typescript/module/src/LiquidGlassContainer.d.ts.map +1 -0
  452. package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts +13 -0
  453. package/lib/typescript/module/src/LiquidGlassContainerNativeComponent.d.ts.map +1 -0
  454. package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts +7 -0
  455. package/lib/typescript/module/src/LiquidGlassNativeComponent.d.ts.map +1 -1
  456. package/lib/typescript/module/src/NavigationRail.d.ts +86 -0
  457. package/lib/typescript/module/src/NavigationRail.d.ts.map +1 -0
  458. package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts +81 -0
  459. package/lib/typescript/module/src/NavigationRailNativeComponent.d.ts.map +1 -0
  460. package/lib/typescript/module/src/PlatformComponentsProvider.d.ts +6 -0
  461. package/lib/typescript/module/src/PlatformComponentsProvider.d.ts.map +1 -0
  462. package/lib/typescript/module/src/SegmentedControl.d.ts +35 -47
  463. package/lib/typescript/module/src/SegmentedControl.d.ts.map +1 -1
  464. package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts +11 -0
  465. package/lib/typescript/module/src/SegmentedControlNativeComponent.d.ts.map +1 -1
  466. package/lib/typescript/module/src/SelectionMenu.d.ts +44 -2
  467. package/lib/typescript/module/src/SelectionMenu.d.ts.map +1 -1
  468. package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts +20 -4
  469. package/lib/typescript/module/src/SelectionMenuNativeComponent.d.ts.map +1 -1
  470. package/lib/typescript/module/src/SplitButton.d.ts +83 -0
  471. package/lib/typescript/module/src/SplitButton.d.ts.map +1 -0
  472. package/lib/typescript/module/src/TabBar.d.ts +144 -0
  473. package/lib/typescript/module/src/TabBar.d.ts.map +1 -0
  474. package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts +13 -0
  475. package/lib/typescript/module/src/TabBarAccessoryNativeComponent.d.ts.map +1 -0
  476. package/lib/typescript/module/src/TabBarNativeComponent.d.ts +110 -0
  477. package/lib/typescript/module/src/TabBarNativeComponent.d.ts.map +1 -0
  478. package/lib/typescript/module/src/TextField.d.ts +332 -0
  479. package/lib/typescript/module/src/TextField.d.ts.map +1 -0
  480. package/lib/typescript/module/src/TextFieldNativeComponent.d.ts +240 -0
  481. package/lib/typescript/module/src/TextFieldNativeComponent.d.ts.map +1 -0
  482. package/lib/typescript/module/src/focusRegistry.d.ts +13 -0
  483. package/lib/typescript/module/src/focusRegistry.d.ts.map +1 -0
  484. package/lib/typescript/module/src/haptics.d.ts +20 -0
  485. package/lib/typescript/module/src/haptics.d.ts.map +1 -0
  486. package/lib/typescript/module/src/icons.d.ts +58 -0
  487. package/lib/typescript/module/src/icons.d.ts.map +1 -0
  488. package/lib/typescript/module/src/index.d.ts +13 -0
  489. package/lib/typescript/module/src/index.d.ts.map +1 -1
  490. package/lib/typescript/module/src/index.web.d.ts +25 -133
  491. package/lib/typescript/module/src/index.web.d.ts.map +1 -1
  492. package/lib/typescript/module/src/jest.d.ts +139 -0
  493. package/lib/typescript/module/src/jest.d.ts.map +1 -0
  494. package/lib/typescript/module/src/labelStyle.d.ts +20 -0
  495. package/lib/typescript/module/src/labelStyle.d.ts.map +1 -0
  496. package/lib/typescript/module/src/menuItems.d.ts +100 -0
  497. package/lib/typescript/module/src/menuItems.d.ts.map +1 -0
  498. package/lib/typescript/module/src/selectionIdentifiers.d.ts +3 -0
  499. package/lib/typescript/module/src/selectionIdentifiers.d.ts.map +1 -0
  500. package/lib/typescript/module/src/sharedTypes.d.ts +6 -1
  501. package/lib/typescript/module/src/sharedTypes.d.ts.map +1 -1
  502. package/lib/typescript/module/src/submitBehavior.d.ts +9 -0
  503. package/lib/typescript/module/src/submitBehavior.d.ts.map +1 -0
  504. package/lib/typescript/module/src/tabItems.d.ts +55 -0
  505. package/lib/typescript/module/src/tabItems.d.ts.map +1 -0
  506. package/lib/typescript/module/src/web/Button.d.ts +9 -0
  507. package/lib/typescript/module/src/web/Button.d.ts.map +1 -0
  508. package/lib/typescript/module/src/web/ButtonGroup.d.ts +11 -0
  509. package/lib/typescript/module/src/web/ButtonGroup.d.ts.map +1 -0
  510. package/lib/typescript/module/src/web/DatePicker.d.ts +14 -0
  511. package/lib/typescript/module/src/web/DatePicker.d.ts.map +1 -0
  512. package/lib/typescript/module/src/web/DateRangePicker.d.ts +11 -0
  513. package/lib/typescript/module/src/web/DateRangePicker.d.ts.map +1 -0
  514. package/lib/typescript/module/src/web/Dialog.d.ts +12 -0
  515. package/lib/typescript/module/src/web/Dialog.d.ts.map +1 -0
  516. package/lib/typescript/module/src/web/FloatingActionButton.d.ts +8 -0
  517. package/lib/typescript/module/src/web/FloatingActionButton.d.ts.map +1 -0
  518. package/lib/typescript/module/src/web/Icon.d.ts +12 -0
  519. package/lib/typescript/module/src/web/Icon.d.ts.map +1 -0
  520. package/lib/typescript/module/src/web/NativeTheme.d.ts +10 -0
  521. package/lib/typescript/module/src/web/NativeTheme.d.ts.map +1 -0
  522. package/lib/typescript/module/src/web/NavigationRail.d.ts +8 -0
  523. package/lib/typescript/module/src/web/NavigationRail.d.ts.map +1 -0
  524. package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts +10 -0
  525. package/lib/typescript/module/src/web/PlatformComponentsProvider.d.ts.map +1 -0
  526. package/lib/typescript/module/src/web/SegmentedControl.d.ts +8 -0
  527. package/lib/typescript/module/src/web/SegmentedControl.d.ts.map +1 -0
  528. package/lib/typescript/module/src/web/SelectionMenu.d.ts +10 -0
  529. package/lib/typescript/module/src/web/SelectionMenu.d.ts.map +1 -0
  530. package/lib/typescript/module/src/web/SplitButton.d.ts +9 -0
  531. package/lib/typescript/module/src/web/SplitButton.d.ts.map +1 -0
  532. package/lib/typescript/module/src/web/TabBar.d.ts +9 -0
  533. package/lib/typescript/module/src/web/TabBar.d.ts.map +1 -0
  534. package/lib/typescript/module/src/web/TextField.d.ts +9 -0
  535. package/lib/typescript/module/src/web/TextField.d.ts.map +1 -0
  536. package/lib/typescript/module/src/web/components.d.ts +17 -0
  537. package/lib/typescript/module/src/web/components.d.ts.map +1 -0
  538. package/lib/typescript/module/src/web/containers.d.ts +24 -0
  539. package/lib/typescript/module/src/web/containers.d.ts.map +1 -0
  540. package/lib/typescript/module/src/web/dateInput.d.ts +20 -0
  541. package/lib/typescript/module/src/web/dateInput.d.ts.map +1 -0
  542. package/lib/typescript/module/src/web/shared.d.ts +43 -0
  543. package/lib/typescript/module/src/web/shared.d.ts.map +1 -0
  544. package/lib/typescript/module/src/webComponents.d.ts +43 -0
  545. package/lib/typescript/module/src/webComponents.d.ts.map +1 -0
  546. package/package.json +55 -4
  547. package/plugin/build/index.d.ts +3 -2
  548. package/plugin/build/index.d.ts.map +1 -1
  549. package/react-native.config.js +6 -0
  550. package/shared/PCButtonComponentDescriptors-custom.h +22 -0
  551. package/shared/PCButtonGroupComponentDescriptors-custom.h +22 -0
  552. package/shared/PCButtonGroupShadowNode-custom.cpp +48 -0
  553. package/shared/PCButtonGroupShadowNode-custom.h +55 -0
  554. package/shared/PCButtonGroupState-custom.h +61 -0
  555. package/shared/PCButtonShadowNode-custom.cpp +48 -0
  556. package/shared/PCButtonShadowNode-custom.h +55 -0
  557. package/shared/PCButtonState-custom.h +61 -0
  558. package/shared/PCFloatingActionButtonComponentDescriptors-custom.h +22 -0
  559. package/shared/PCFloatingActionButtonShadowNode-custom.cpp +48 -0
  560. package/shared/PCFloatingActionButtonShadowNode-custom.h +54 -0
  561. package/shared/PCFloatingActionButtonState-custom.h +61 -0
  562. package/shared/PCNavigationRailComponentDescriptors-custom.h +47 -0
  563. package/shared/PCNavigationRailShadowNode-custom.h +42 -0
  564. package/shared/PCNavigationRailState-custom.h +62 -0
  565. package/shared/PCTabBarComponentDescriptors-custom.h +22 -0
  566. package/shared/PCTabBarShadowNode-custom.cpp +54 -0
  567. package/shared/PCTabBarShadowNode-custom.h +54 -0
  568. package/shared/PCTabBarState-custom.h +62 -0
  569. package/shared/PCTextFieldComponentDescriptors-custom.h +22 -0
  570. package/shared/PCTextFieldShadowNode-custom.cpp +47 -0
  571. package/shared/PCTextFieldShadowNode-custom.h +55 -0
  572. package/shared/PCTextFieldState-custom.h +61 -0
  573. package/shared/react/renderer/components/PlatformComponentsViewSpec/ComponentDescriptors.h +6 -0
  574. package/src/Button.tsx +359 -0
  575. package/src/ButtonGroup.tsx +251 -0
  576. package/src/ButtonGroupNativeComponent.ts +191 -0
  577. package/src/ButtonNativeComponent.ts +192 -0
  578. package/src/ContextMenu.tsx +34 -81
  579. package/src/ContextMenuNativeComponent.ts +47 -49
  580. package/src/DatePicker.tsx +182 -4
  581. package/src/DatePickerNativeComponent.ts +19 -2
  582. package/src/FloatingActionButton.tsx +121 -0
  583. package/src/FloatingActionButtonNativeComponent.ts +58 -0
  584. package/src/FloatingToolbar.tsx +164 -0
  585. package/src/FloatingToolbarNativeComponent.ts +47 -0
  586. package/src/LiquidGlass.tsx +24 -1
  587. package/src/LiquidGlassContainer.tsx +42 -0
  588. package/src/LiquidGlassContainerNativeComponent.ts +17 -0
  589. package/src/LiquidGlassNativeComponent.ts +8 -0
  590. package/src/NavigationRail.tsx +203 -0
  591. package/src/NavigationRailNativeComponent.ts +107 -0
  592. package/src/PlatformComponentsProvider.tsx +15 -0
  593. package/src/SegmentedControl.tsx +57 -119
  594. package/src/SegmentedControlNativeComponent.ts +14 -0
  595. package/src/SelectionMenu.tsx +81 -6
  596. package/src/SelectionMenuNativeComponent.ts +26 -4
  597. package/src/SplitButton.tsx +198 -0
  598. package/src/TabBar.tsx +373 -0
  599. package/src/TabBarAccessoryNativeComponent.ts +19 -0
  600. package/src/TabBarNativeComponent.ts +145 -0
  601. package/src/TextField.tsx +908 -0
  602. package/src/TextFieldNativeComponent.ts +324 -0
  603. package/src/focusRegistry.ts +90 -0
  604. package/src/haptics.ts +31 -0
  605. package/src/icons.ts +143 -0
  606. package/src/index.tsx +13 -0
  607. package/src/index.web.tsx +53 -199
  608. package/src/jest.tsx +958 -0
  609. package/src/labelStyle.ts +36 -0
  610. package/src/menuItems.ts +152 -0
  611. package/src/reactNativeInternals.d.ts +22 -0
  612. package/src/selectionIdentifiers.ts +17 -0
  613. package/src/sharedTypes.ts +7 -1
  614. package/src/submitBehavior.ts +16 -0
  615. package/src/tabItems.ts +113 -0
  616. package/src/web/Button.tsx +201 -0
  617. package/src/web/ButtonGroup.tsx +154 -0
  618. package/src/web/DatePicker.tsx +204 -0
  619. package/src/web/DateRangePicker.tsx +135 -0
  620. package/src/web/Dialog.tsx +54 -0
  621. package/src/web/FloatingActionButton.tsx +76 -0
  622. package/src/web/Icon.tsx +33 -0
  623. package/src/web/NativeTheme.ts +23 -0
  624. package/src/web/NavigationRail.tsx +148 -0
  625. package/src/web/PlatformComponentsProvider.tsx +48 -0
  626. package/src/web/SegmentedControl.tsx +127 -0
  627. package/src/web/SelectionMenu.tsx +149 -0
  628. package/src/web/SplitButton.tsx +32 -0
  629. package/src/web/TabBar.tsx +150 -0
  630. package/src/web/TextField.tsx +361 -0
  631. package/src/web/components.tsx +71 -0
  632. package/src/web/containers.tsx +130 -0
  633. package/src/web/dateInput.ts +137 -0
  634. package/src/web/shared.ts +176 -0
  635. package/src/webComponents.ts +45 -0
  636. package/android/src/main/java/com/platformcomponents/DateConstraints.kt +0 -83
@@ -0,0 +1,336 @@
1
+ import UIKit
2
+
3
+ /// The floating toolbar container: a Liquid Glass capsule on iOS 26, and a
4
+ /// blur-material capsule with a soft shadow on earlier versions, where a blur
5
+ /// over a flat background would otherwise have no edge.
6
+ ///
7
+ /// Linked to a ScrollView (by nativeID), it sits on one of its edges: on iOS
8
+ /// 26 that edge's scroll edge effect takes the toolbar's shape and the style
9
+ /// asked for, and with hideOnScroll the toolbar slides past the edge while
10
+ /// the content scrolls down.
11
+ @objcMembers
12
+ public final class PCFloatingToolbarView: UIView {
13
+ // MARK: - Props (set from ObjC++)
14
+
15
+ /// "regular" | "clear"
16
+ public var effectStyle: String = "regular" {
17
+ didSet { if oldValue != effectStyle { applyEffect() } }
18
+ }
19
+
20
+ /// Tint over the material; nil keeps the plain material
21
+ public var tintUIColor: UIColor? {
22
+ didSet { applyEffect() }
23
+ }
24
+
25
+ /// iOS 26: glass that scales and shimmers under a touch
26
+ public var interactive: Bool = false {
27
+ didSet { if oldValue != interactive { applyEffect() } }
28
+ }
29
+
30
+ /// nativeID of the ScrollView the toolbar floats over
31
+ public var scrollViewNativeID: String = "" {
32
+ didSet { if oldValue != scrollViewNativeID { unlinkScrollView(); linkScrollView() } }
33
+ }
34
+
35
+ /// iOS 26 edge effect under the toolbar: "" (the scroll view's own) |
36
+ /// "automatic" | "soft" | "hard" | "hidden"
37
+ public var scrollEdgeEffect: String = "" {
38
+ didSet { if oldValue != scrollEdgeEffect { applyScrollEdge() } }
39
+ }
40
+
41
+ /// Slide past the scroll view's edge while its content scrolls down
42
+ public var hideOnScroll: Bool = false {
43
+ didSet { if !hideOnScroll { setScrollHidden(false) } }
44
+ }
45
+
46
+ /// Whether the toolbar is slid away (the host passes touches through)
47
+ public private(set) var isScrollHidden = false
48
+
49
+ /// React children mount here
50
+ public var contentView: UIView { effectView.contentView }
51
+
52
+ // MARK: - Internal
53
+
54
+ private let effectView = UIVisualEffectView(effect: nil)
55
+
56
+ /// The linked scroll view, its offset observation and the edge the
57
+ /// toolbar sits on
58
+ private weak var linkedScrollView: UIScrollView?
59
+ private var offsetObservation: NSKeyValueObservation?
60
+ private var linkedEdge: UIRectEdge = .bottom
61
+
62
+ /// iOS 26: the UIScrollEdgeElementContainerInteraction on this view, and
63
+ /// the edge effect values it replaced (edge, style, isHidden)
64
+ private var edgeInteraction: UIInteraction?
65
+ private var savedEdgeEffect: (edge: UIRectEdge, style: AnyObject, hidden: Bool)?
66
+
67
+ /// Liquid Glass needs both the iOS 26 SDK at build time and iOS 26 at runtime.
68
+ private static var glassAvailable: Bool {
69
+ #if compiler(>=6.2)
70
+ if #available(iOS 26.0, *) { return true }
71
+ #endif
72
+ return false
73
+ }
74
+
75
+ // MARK: - Init
76
+
77
+ public override init(frame: CGRect) {
78
+ super.init(frame: frame)
79
+ setup()
80
+ }
81
+
82
+ public required init?(coder: NSCoder) {
83
+ super.init(coder: coder)
84
+ setup()
85
+ }
86
+
87
+ private func setup() {
88
+ clipsToBounds = false
89
+ effectView.layer.cornerCurve = .continuous
90
+ addSubview(effectView)
91
+
92
+ if !Self.glassAvailable {
93
+ // The blur is clipped to the capsule; the shadow lives on this view
94
+ effectView.clipsToBounds = true
95
+ layer.shadowColor = UIColor.black.cgColor
96
+ layer.shadowOpacity = 0.12
97
+ layer.shadowRadius = 10
98
+ layer.shadowOffset = CGSize(width: 0, height: 4)
99
+ }
100
+ applyEffect()
101
+ }
102
+
103
+ // MARK: - Layout
104
+
105
+ public override func layoutSubviews() {
106
+ super.layoutSubviews()
107
+ effectView.frame = bounds
108
+ let radius = min(bounds.width, bounds.height) / 2
109
+ effectView.layer.cornerRadius = radius
110
+ if !Self.glassAvailable {
111
+ layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: radius).cgPath
112
+ }
113
+ // The ScrollView may mount after the toolbar, and the toolbar may
114
+ // move to another edge
115
+ if let scrollView = linkedScrollView, scrollView.window != nil {
116
+ if edge(of: scrollView) != linkedEdge { applyScrollEdge() }
117
+ } else {
118
+ unlinkScrollView()
119
+ linkScrollView()
120
+ }
121
+ }
122
+
123
+ public override func didMoveToWindow() {
124
+ super.didMoveToWindow()
125
+ // Off screen, the scroll view gets its edge effect back
126
+ if window == nil {
127
+ unlinkScrollView()
128
+ } else {
129
+ linkScrollView()
130
+ }
131
+ }
132
+
133
+ // MARK: - Effect
134
+
135
+ private func applyEffect() {
136
+ #if compiler(>=6.2)
137
+ if #available(iOS 26.0, *) {
138
+ let glass = UIGlassEffect(style: effectStyle == "clear" ? .clear : .regular)
139
+ glass.isInteractive = interactive
140
+ if let tintUIColor {
141
+ glass.tintColor = tintUIColor
142
+ }
143
+ effectView.effect = glass
144
+ effectView.contentView.backgroundColor = nil
145
+ return
146
+ }
147
+ #endif
148
+ effectView.effect = UIBlurEffect(
149
+ style: effectStyle == "clear" ? .systemUltraThinMaterial : .systemThinMaterial
150
+ )
151
+ // UIBlurEffect has no tint; wash the content area with the color instead
152
+ effectView.contentView.backgroundColor = tintUIColor?.withAlphaComponent(0.35)
153
+ }
154
+
155
+ // MARK: - Linked scroll view
156
+
157
+ private func linkScrollView() {
158
+ guard linkedScrollView == nil, !scrollViewNativeID.isEmpty, let window,
159
+ let scrollView = Self.scrollView(nativeID: scrollViewNativeID, in: window)
160
+ else { return }
161
+ linkedScrollView = scrollView
162
+ offsetObservation = scrollView.observe(\.contentOffset, options: [.old, .new]) { [weak self] scrollView, change in
163
+ guard let old = change.oldValue, let new = change.newValue else { return }
164
+ self?.contentScrolled(scrollView, from: old, to: new)
165
+ }
166
+ applyScrollEdge()
167
+ }
168
+
169
+ private func unlinkScrollView() {
170
+ guard linkedScrollView != nil || offsetObservation != nil || edgeInteraction != nil else { return }
171
+ offsetObservation?.invalidate()
172
+ offsetObservation = nil
173
+ restoreScrollEdge()
174
+ #if compiler(>=6.2)
175
+ if #available(iOS 26.0, *), let edgeInteraction {
176
+ removeInteraction(edgeInteraction)
177
+ }
178
+ #endif
179
+ edgeInteraction = nil
180
+ linkedScrollView = nil
181
+ setScrollHidden(false)
182
+ }
183
+
184
+ /// The edge of the scroll view the toolbar sits on: top or bottom for a
185
+ /// horizontal toolbar, left or right for a vertical one.
186
+ private func edge(of scrollView: UIScrollView) -> UIRectEdge {
187
+ // The host, not this view, which moves while hidden
188
+ let host = superview ?? self
189
+ let toolbar = host.convert(host.bounds, to: nil)
190
+ let visible = scrollView.convert(scrollView.bounds, to: nil)
191
+ if toolbar.width >= toolbar.height {
192
+ return toolbar.midY < visible.midY ? .top : .bottom
193
+ }
194
+ return toolbar.midX < visible.midX ? .left : .right
195
+ }
196
+
197
+ /// The UIScrollView of the React Native view with this nativeID.
198
+ private static func scrollView(nativeID: String, in root: UIView) -> UIScrollView? {
199
+ var match: UIView?
200
+ func find(_ view: UIView) {
201
+ guard match == nil else { return }
202
+ if view.responds(to: NSSelectorFromString("nativeId")),
203
+ view.value(forKey: "nativeId") as? String == nativeID {
204
+ match = view
205
+ return
206
+ }
207
+ view.subviews.forEach(find)
208
+ }
209
+ find(root)
210
+ guard let match else { return nil }
211
+ if let scroll = match as? UIScrollView { return scroll }
212
+ var scroll: UIScrollView?
213
+ func firstScroll(_ view: UIView) {
214
+ guard scroll == nil else { return }
215
+ if let s = view as? UIScrollView { scroll = s; return }
216
+ view.subviews.forEach(firstScroll)
217
+ }
218
+ firstScroll(match)
219
+ return scroll
220
+ }
221
+
222
+ // MARK: - Scroll edge effect (iOS 26)
223
+
224
+ /// Shapes the linked edge's effect around the toolbar and applies the
225
+ /// style asked for, after giving back what an earlier call replaced.
226
+ private func applyScrollEdge() {
227
+ restoreScrollEdge()
228
+ guard let scrollView = linkedScrollView else { return }
229
+ linkedEdge = edge(of: scrollView)
230
+ #if compiler(>=6.2)
231
+ guard #available(iOS 26.0, *) else { return }
232
+
233
+ let interaction = edgeInteraction as? UIScrollEdgeElementContainerInteraction
234
+ ?? UIScrollEdgeElementContainerInteraction()
235
+ if edgeInteraction == nil {
236
+ addInteraction(interaction)
237
+ edgeInteraction = interaction
238
+ }
239
+ interaction.scrollView = scrollView
240
+ interaction.edge = linkedEdge
241
+
242
+ guard !scrollEdgeEffect.isEmpty else { return }
243
+ let effect = Self.edgeEffect(of: scrollView, at: linkedEdge)
244
+ savedEdgeEffect = (linkedEdge, effect.style, effect.isHidden)
245
+ switch scrollEdgeEffect {
246
+ case "hidden":
247
+ effect.isHidden = true
248
+ case "soft":
249
+ effect.style = .soft
250
+ effect.isHidden = false
251
+ case "hard":
252
+ effect.style = .hard
253
+ effect.isHidden = false
254
+ default:
255
+ effect.style = .automatic
256
+ effect.isHidden = false
257
+ }
258
+ #endif
259
+ }
260
+
261
+ /// Gives the scroll view back the edge effect values applyScrollEdge
262
+ /// replaced.
263
+ private func restoreScrollEdge() {
264
+ #if compiler(>=6.2)
265
+ if #available(iOS 26.0, *), let saved = savedEdgeEffect, let scrollView = linkedScrollView,
266
+ let style = saved.style as? UIScrollEdgeEffect.Style {
267
+ let effect = Self.edgeEffect(of: scrollView, at: saved.edge)
268
+ effect.style = style
269
+ effect.isHidden = saved.hidden
270
+ }
271
+ #endif
272
+ savedEdgeEffect = nil
273
+ }
274
+
275
+ #if compiler(>=6.2)
276
+ @available(iOS 26.0, *)
277
+ private static func edgeEffect(of scrollView: UIScrollView, at edge: UIRectEdge) -> UIScrollEdgeEffect {
278
+ switch edge {
279
+ case .top: return scrollView.topEdgeEffect
280
+ case .left: return scrollView.leftEdgeEffect
281
+ case .right: return scrollView.rightEdgeEffect
282
+ default: return scrollView.bottomEdgeEffect
283
+ }
284
+ }
285
+ #endif
286
+
287
+ // MARK: - Hide on scroll
288
+
289
+ // The motion of Material's HideViewOnScrollBehavior, as TabBar uses on
290
+ // Android: out while the content scrolls down, back as it scrolls up or
291
+ // reaches the top.
292
+ private func contentScrolled(_ scrollView: UIScrollView, from old: CGPoint, to new: CGPoint) {
293
+ guard hideOnScroll else { return }
294
+ let top = -scrollView.adjustedContentInset.top
295
+ if new.y <= top {
296
+ setScrollHidden(false)
297
+ return
298
+ }
299
+ // Rubber-banding past the end doesn't scroll the content
300
+ let bottom = max(top, scrollView.contentSize.height + scrollView.adjustedContentInset.bottom - scrollView.bounds.height)
301
+ guard new.y != old.y, new.y <= bottom, old.y <= bottom else { return }
302
+ setScrollHidden(new.y > old.y)
303
+ }
304
+
305
+ private func setScrollHidden(_ hide: Bool) {
306
+ guard isScrollHidden != hide else { return }
307
+ isScrollHidden = hide
308
+ let offset = hide ? hiddenOffset() : .zero
309
+ UIView.animate(
310
+ withDuration: hide ? 0.175 : 0.225,
311
+ delay: 0,
312
+ options: [hide ? .curveEaseIn : .curveEaseOut, .beginFromCurrentState, .allowUserInteraction]
313
+ ) {
314
+ self.transform = CGAffineTransform(translationX: offset.x, y: offset.y)
315
+ }
316
+ }
317
+
318
+ /// How far to move to get past the linked edge: from the toolbar to the
319
+ /// edge of the visible scroll view, and at least the toolbar's own size.
320
+ private func hiddenOffset() -> CGPoint {
321
+ guard let scrollView = linkedScrollView else { return .zero }
322
+ let host = superview ?? self
323
+ let toolbar = host.convert(host.bounds, to: nil)
324
+ let visible = scrollView.convert(scrollView.bounds, to: nil)
325
+ switch linkedEdge {
326
+ case .top:
327
+ return CGPoint(x: 0, y: min(visible.minY - toolbar.maxY, -toolbar.height))
328
+ case .left:
329
+ return CGPoint(x: min(visible.minX - toolbar.maxX, -toolbar.width), y: 0)
330
+ case .right:
331
+ return CGPoint(x: max(visible.maxX - toolbar.minX, toolbar.width), y: 0)
332
+ default:
333
+ return CGPoint(x: 0, y: max(visible.maxY - toolbar.minY, toolbar.height))
334
+ }
335
+ }
336
+ }
@@ -0,0 +1,91 @@
1
+ import UIKit
2
+
3
+ /// The shared `haptics` prop: a UIKit feedback generator played when a
4
+ /// control reports the user's action. Each view keeps one of these; a
5
+ /// generator is created on first use of its kind (attached to the view on
6
+ /// iOS 17.5+) and kept. UIKit follows the system haptics setting.
7
+ @objcMembers
8
+ @MainActor
9
+ public final class PCHaptics: NSObject {
10
+ /// "" (unset) | "none" | "selection" | "light" | "medium" | "heavy" |
11
+ /// "success" | "warning" | "error". "" and "none" play nothing: UIKit has
12
+ /// no switch for the haptics its own controls play.
13
+ public var kind: String = ""
14
+
15
+ /// Generators by kind, created on first use.
16
+ private var generators: [String: UIFeedbackGenerator] = [:]
17
+
18
+ /// Readies the Taptic Engine for an action that is likely to follow, such
19
+ /// as a touch down, so the haptic plays without delay.
20
+ public func prepare(in view: UIView) {
21
+ generator(for: kind, in: view)?.prepare()
22
+ }
23
+
24
+ /// Plays the haptic for `kind`.
25
+ public func perform(in view: UIView) {
26
+ play(kind, in: view)
27
+ }
28
+
29
+ /// Plays `override` when it is set (a menu item's own `haptics`, "none"
30
+ /// included), else `kind`.
31
+ public func perform(in view: UIView, override: String) {
32
+ play(override.isEmpty ? kind : override, in: view)
33
+ }
34
+
35
+ private func play(_ kind: String, in view: UIView) {
36
+ switch generator(for: kind, in: view) {
37
+ case let selection as UISelectionFeedbackGenerator:
38
+ selection.selectionChanged()
39
+ case let impact as UIImpactFeedbackGenerator:
40
+ impact.impactOccurred()
41
+ case let notification as UINotificationFeedbackGenerator:
42
+ if case let .notification(type) = Feedback(kind) {
43
+ notification.notificationOccurred(type)
44
+ }
45
+ default:
46
+ break
47
+ }
48
+ }
49
+
50
+ private enum Feedback {
51
+ case selection
52
+ case impact(UIImpactFeedbackGenerator.FeedbackStyle)
53
+ case notification(UINotificationFeedbackGenerator.FeedbackType)
54
+
55
+ init?(_ kind: String) {
56
+ switch kind {
57
+ case "selection": self = .selection
58
+ case "light": self = .impact(.light)
59
+ case "medium": self = .impact(.medium)
60
+ case "heavy": self = .impact(.heavy)
61
+ case "success": self = .notification(.success)
62
+ case "warning": self = .notification(.warning)
63
+ case "error": self = .notification(.error)
64
+ default: return nil
65
+ }
66
+ }
67
+ }
68
+
69
+ private func generator(for kind: String, in view: UIView) -> UIFeedbackGenerator? {
70
+ if let generator = generators[kind] { return generator }
71
+ guard let feedback = Feedback(kind) else { return nil }
72
+ let made: UIFeedbackGenerator
73
+ if #available(iOS 17.5, *) {
74
+ // Attached to the view: UIKit's replacement for the plain
75
+ // initializers, which are slated for deprecation
76
+ switch feedback {
77
+ case .selection: made = UISelectionFeedbackGenerator(view: view)
78
+ case let .impact(style): made = UIImpactFeedbackGenerator(style: style, view: view)
79
+ case .notification: made = UINotificationFeedbackGenerator(view: view)
80
+ }
81
+ } else {
82
+ switch feedback {
83
+ case .selection: made = UISelectionFeedbackGenerator()
84
+ case let .impact(style): made = UIImpactFeedbackGenerator(style: style)
85
+ case .notification: made = UINotificationFeedbackGenerator()
86
+ }
87
+ }
88
+ generators[kind] = made
89
+ return made
90
+ }
91
+ }
@@ -8,11 +8,42 @@ import UIKit
8
8
  /// as `http(s)://` (Metro) or `data:` URLs and load asynchronously.
9
9
  ///
10
10
  /// Must be used from the main thread.
11
- final class PCImageLoader {
11
+ final class PCImageLoader: NSObject, URLSessionTaskDelegate {
12
12
  static let shared = PCImageLoader()
13
13
 
14
- private var cache: [String: UIImage] = [:]
14
+ /// A symbol by name: an SF Symbol, else a custom symbol or image from the
15
+ /// app's asset catalog, so an app's own icons (custom symbols exported
16
+ /// from SVG with the SF Symbols app) work wherever SF Symbol names do.
17
+ static func symbol(named name: String) -> UIImage? {
18
+ guard !name.isEmpty else { return nil }
19
+ return UIImage(systemName: name) ?? UIImage(named: name)
20
+ }
21
+
22
+ private let cache = NSCache<NSString, UIImage>()
15
23
  private var pending: [String: [(UIImage?) -> Void]] = [:]
24
+ private var generations: [String: Int] = [:]
25
+ private var nextGeneration = 0
26
+ // Custom credentials/body must not enter the shared URL cache or be
27
+ // forwarded to a redirect target. Decoded images use the full request key.
28
+ private lazy var requestSession: URLSession = {
29
+ let configuration = URLSessionConfiguration.ephemeral
30
+ configuration.urlCache = nil
31
+ configuration.httpShouldSetCookies = false
32
+ configuration.urlCredentialStorage = nil
33
+ return URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
34
+ }()
35
+
36
+ private override init() {
37
+ super.init()
38
+ cache.countLimit = 32
39
+ }
40
+
41
+ func urlSession(_ session: URLSession, task: URLSessionTask,
42
+ willPerformHTTPRedirection response: HTTPURLResponse,
43
+ newRequest request: URLRequest,
44
+ completionHandler: @escaping (URLRequest?) -> Void) {
45
+ completionHandler(nil)
46
+ }
16
47
 
17
48
  /// Returns the image immediately when it is cached or readable from disk.
18
49
  /// Otherwise starts a load and calls `completion` on the main thread with
@@ -21,34 +52,67 @@ final class PCImageLoader {
21
52
  func image(
22
53
  uri: String,
23
54
  scale: CGFloat,
55
+ request: String = "",
24
56
  completion: @escaping (UIImage?) -> Void
25
57
  ) -> UIImage? {
26
- let key = "\(uri)@\(scale)x"
27
- if let cached = cache[key] {
58
+ var options: [String: Any] = [:]
59
+ if !request.isEmpty {
60
+ guard let data = request.data(using: .utf8),
61
+ let decoded = try? JSONSerialization.jsonObject(with: data) as? [String: Any]
62
+ else { return nil }
63
+ options = decoded
64
+ }
65
+ let policy = options.removeValue(forKey: "cache") as? String ?? "default"
66
+ guard let keyData = try? JSONSerialization.data(
67
+ withJSONObject: [uri, scale, options], options: [.sortedKeys]),
68
+ let key = String(data: keyData, encoding: .utf8) else { return nil }
69
+ if policy != "reload", let cached = cache.object(forKey: key as NSString) {
28
70
  return cached
29
71
  }
72
+ if policy == "only-if-cached" { return nil }
30
73
 
31
74
  guard let url = URL(string: uri) else { return nil }
32
75
 
33
76
  if url.isFileURL {
34
77
  guard let data = try? Data(contentsOf: url),
35
78
  let image = UIImage(data: data, scale: scale) else { return nil }
36
- cache[key] = image
79
+ cache.setObject(image, forKey: key as NSString)
37
80
  return image
38
81
  }
39
82
 
40
- if pending[key] != nil {
41
- pending[key]?.append(completion)
83
+ let pendingKey = key + (policy == "reload" ? ":reload" : ":cached")
84
+ if pending[pendingKey] != nil {
85
+ pending[pendingKey]?.append(completion)
42
86
  return nil
43
87
  }
44
- pending[key] = [completion]
88
+ pending[pendingKey] = [completion]
89
+ nextGeneration += 1
90
+ let generation = nextGeneration
91
+ generations[key] = generation
92
+
93
+ var urlRequest = URLRequest(url: url)
94
+ urlRequest.httpMethod = options["method"] as? String ?? "GET"
95
+ urlRequest.httpBody = (options["body"] as? String)?.data(using: .utf8)
96
+ urlRequest.allHTTPHeaderFields = options["headers"] as? [String: String]
97
+ let custom = !options.isEmpty
98
+ if custom || policy == "reload" {
99
+ urlRequest.cachePolicy = .reloadIgnoringLocalCacheData
100
+ }
45
101
 
46
- URLSession.shared.dataTask(with: url) { [weak self] data, _, _ in
47
- let image = data.flatMap { UIImage(data: $0, scale: scale) }
102
+ (custom ? requestSession : URLSession.shared).dataTask(with: urlRequest) { [weak self] data, response, error in
103
+ let http = response as? HTTPURLResponse
104
+ let success = error == nil && (http == nil || (200..<300).contains(http!.statusCode))
105
+ let image = success ? data.flatMap { UIImage(data: $0, scale: scale) } : nil
106
+ let canCache = !(http?.value(forHTTPHeaderField: "Cache-Control")?
107
+ .lowercased().contains("no-store") ?? false)
48
108
  DispatchQueue.main.async {
49
109
  guard let self else { return }
50
- if let image { self.cache[key] = image }
51
- let callbacks = self.pending.removeValue(forKey: key) ?? []
110
+ if self.generations[key] == generation {
111
+ if let image, canCache { self.cache.setObject(image, forKey: key as NSString) }
112
+ else { self.cache.removeObject(forKey: key as NSString) }
113
+ self.generations.removeValue(forKey: key)
114
+ }
115
+ let callbacks = self.pending.removeValue(forKey: pendingKey) ?? []
52
116
  callbacks.forEach { $0(image) }
53
117
  }
54
118
  }.resume()
@@ -28,6 +28,12 @@ using namespace facebook::react;
28
28
 
29
29
  - (instancetype)initWithFrame:(CGRect)frame {
30
30
  if (self = [super initWithFrame:frame]) {
31
+ // Fabric views seed _props with their own defaults: RCTViewComponentView
32
+ // asserts on it in debug builds of React Native core, and the first
33
+ // updateProps would otherwise read the base ViewProps as PCLiquidGlassProps.
34
+ static const auto defaultProps = std::make_shared<const PCLiquidGlassProps>();
35
+ _props = defaultProps;
36
+
31
37
  _view = [[PCLiquidGlassView alloc] initWithEffect:nil];
32
38
  _view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
33
39
  [self addSubview:_view];
@@ -62,6 +68,31 @@ using namespace facebook::react;
62
68
  [childComponentView removeFromSuperview];
63
69
  }
64
70
 
71
+ // Removed from its parent: inside a glass container the glass dematerializes
72
+ // in place rather than vanishing
73
+ - (void)willMoveToSuperview:(UIView *)newSuperview {
74
+ if (newSuperview == nil && self.superview != nil) {
75
+ [_view willUnmount];
76
+ }
77
+ [super willMoveToSuperview:newSuperview];
78
+ }
79
+
80
+ // Inside a glass container on screen, a new frame animates, which morphs the
81
+ // merged glass instead of jumping
82
+ - (void)updateLayoutMetrics:(const LayoutMetrics &)layoutMetrics
83
+ oldLayoutMetrics:(const LayoutMetrics &)oldLayoutMetrics {
84
+ BOOL morphs = oldLayoutMetrics != EmptyLayoutMetrics &&
85
+ layoutMetrics.frame != oldLayoutMetrics.frame && _view.morphsLayoutChanges;
86
+ if (!morphs) {
87
+ [super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:oldLayoutMetrics];
88
+ return;
89
+ }
90
+ [PCLiquidGlassView morph:^{
91
+ [super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:oldLayoutMetrics];
92
+ [self layoutIfNeeded];
93
+ }];
94
+ }
95
+
65
96
 
66
97
  - (void)updateProps:(Props::Shared const &)props
67
98
  oldProps:(Props::Shared const &)oldProps {
@@ -77,6 +108,11 @@ using namespace facebook::react;
77
108
  _view.glassCornerRadius = newProps.cornerRadius;
78
109
  }
79
110
 
111
+ // cornerStyle -> cornerConfiguration on iOS 26
112
+ if (!prevProps || newProps.cornerStyle != prevProps->cornerStyle) {
113
+ _view.cornerStyle = [NSString stringWithUTF8String:newProps.cornerStyle.c_str()];
114
+ }
115
+
80
116
  // iOS-specific props
81
117
  const auto &newIos = newProps.ios;
82
118
  const auto &oldIos = prevProps ? prevProps->ios : PCLiquidGlassIosStruct{};