@expo/ui 58.0.3 → 58.0.5

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 (268) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/ui/HostView.kt +6 -4
  4. package/android/src/main/java/expo/modules/ui/ModifierRegistry.kt +11 -0
  5. package/android/src/main/java/expo/modules/ui/RNHostView.kt +2 -2
  6. package/build/PresentedContentContext.d.ts +1 -1
  7. package/build/community/bottom-sheet/BottomSheet.android.d.ts +1 -1
  8. package/build/community/bottom-sheet/BottomSheet.d.ts +1 -1
  9. package/build/community/bottom-sheet/BottomSheet.ios.d.ts +1 -1
  10. package/build/community/bottom-sheet/index.d.ts +3 -3
  11. package/build/community/bottom-sheet/scrollContextReset.d.ts +1 -1
  12. package/build/community/datetime-picker/DateTimePicker.android.d.ts +1 -1
  13. package/build/community/datetime-picker/DateTimePicker.d.ts +1 -1
  14. package/build/community/masked-view/MaskedView.android.d.ts +1 -1
  15. package/build/community/masked-view/MaskedView.d.ts +1 -1
  16. package/build/community/masked-view/MaskedView.ios.d.ts +1 -1
  17. package/build/community/menu/MenuView.android.d.ts +1 -1
  18. package/build/community/menu/MenuView.d.ts +1 -1
  19. package/build/community/menu/MenuView.ios.d.ts +1 -1
  20. package/build/community/pager-view/PagerView.android.d.ts +1 -1
  21. package/build/community/pager-view/PagerView.ios.d.ts +1 -1
  22. package/build/community/picker/Picker.android.d.ts +1 -1
  23. package/build/community/picker/Picker.d.ts +1 -1
  24. package/build/community/picker/Picker.ios.d.ts +1 -1
  25. package/build/community/segmented-control/SegmentedControl.android.d.ts +1 -1
  26. package/build/community/segmented-control/SegmentedControl.ios.d.ts +1 -1
  27. package/build/community/segmented-control/vendor/SegmentedControl.d.ts +2 -1
  28. package/build/community/segmented-control/vendor/SegmentedControlTab.d.ts +1 -1
  29. package/build/community/segmented-control/vendor/SegmentsSeparators.d.ts +1 -1
  30. package/build/community/slider/Slider.android.d.ts +1 -1
  31. package/build/community/slider/Slider.d.ts +2 -1
  32. package/build/community/slider/Slider.ios.d.ts +1 -1
  33. package/build/jetpack-compose/AlertDialog/index.d.ts +6 -6
  34. package/build/jetpack-compose/AnimatedVisibility/index.d.ts +1 -1
  35. package/build/jetpack-compose/Badge/index.d.ts +1 -1
  36. package/build/jetpack-compose/BadgedBox/index.d.ts +2 -2
  37. package/build/jetpack-compose/BasicAlertDialog/index.d.ts +1 -1
  38. package/build/jetpack-compose/Box/index.d.ts +1 -1
  39. package/build/jetpack-compose/Button/index.d.ts +5 -5
  40. package/build/jetpack-compose/Checkbox/index.d.ts +2 -2
  41. package/build/jetpack-compose/Chip/index.d.ts +15 -15
  42. package/build/jetpack-compose/Column/index.d.ts +1 -1
  43. package/build/jetpack-compose/DatePicker/index.d.ts +5 -5
  44. package/build/jetpack-compose/DockedSearchBar/index.d.ts +3 -3
  45. package/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts +4 -4
  46. package/build/jetpack-compose/DropdownMenu/index.d.ts +4 -4
  47. package/build/jetpack-compose/ExposedDropdownMenuBox/ExposedDropdownMenu.d.ts +1 -1
  48. package/build/jetpack-compose/ExposedDropdownMenuBox/index.d.ts +1 -1
  49. package/build/jetpack-compose/FloatingActionButton/index.d.ts +6 -6
  50. package/build/jetpack-compose/FlowRow/index.d.ts +1 -1
  51. package/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts +2 -2
  52. package/build/jetpack-compose/HorizontalPager/index.d.ts +1 -1
  53. package/build/jetpack-compose/Host/index.d.ts +1 -1
  54. package/build/jetpack-compose/Icon/index.d.ts +1 -1
  55. package/build/jetpack-compose/IconButton/index.d.ts +4 -4
  56. package/build/jetpack-compose/Image/index.d.ts +1 -1
  57. package/build/jetpack-compose/LazyColumn/index.d.ts +1 -1
  58. package/build/jetpack-compose/LazyRow/index.d.ts +1 -1
  59. package/build/jetpack-compose/ListItem/index.d.ts +6 -6
  60. package/build/jetpack-compose/ModalBottomSheet/index.d.ts +2 -2
  61. package/build/jetpack-compose/MultiChoiceSegmentedButtonRow/index.d.ts +1 -1
  62. package/build/jetpack-compose/NavigationBar/index.d.ts +5 -5
  63. package/build/jetpack-compose/PullToRefreshBox/index.d.ts +1 -1
  64. package/build/jetpack-compose/RNHostView/index.d.ts +1 -1
  65. package/build/jetpack-compose/RadioButton/index.d.ts +1 -1
  66. package/build/jetpack-compose/Row/index.d.ts +1 -1
  67. package/build/jetpack-compose/SearchBar/index.d.ts +3 -3
  68. package/build/jetpack-compose/SegmentedButton/index.d.ts +2 -2
  69. package/build/jetpack-compose/SingleChoiceSegmentedButtonRow/index.d.ts +1 -1
  70. package/build/jetpack-compose/Slider/index.d.ts +6 -6
  71. package/build/jetpack-compose/SlotView.d.ts +1 -1
  72. package/build/jetpack-compose/Snackbar/index.d.ts +2 -2
  73. package/build/jetpack-compose/Spacer/index.d.ts +1 -1
  74. package/build/jetpack-compose/Surface/index.d.ts +1 -1
  75. package/build/jetpack-compose/Switch/index.d.ts +2 -2
  76. package/build/jetpack-compose/SyncSwitch/index.d.ts +1 -1
  77. package/build/jetpack-compose/Text/index.d.ts +1 -1
  78. package/build/jetpack-compose/TextField/BasicTextField.d.ts +4 -4
  79. package/build/jetpack-compose/TextField/TextField.d.ts +16 -16
  80. package/build/jetpack-compose/ToggleButton/index.d.ts +4 -4
  81. package/build/jetpack-compose/Tooltip/index.d.ts +6 -6
  82. package/build/jetpack-compose/colors.js +20 -1
  83. package/build/jetpack-compose/colors.js.map +1 -1
  84. package/build/jetpack-compose/modifiers/index.d.ts +10 -0
  85. package/build/jetpack-compose/modifiers/index.js +11 -0
  86. package/build/jetpack-compose/modifiers/index.js.map +1 -1
  87. package/build/keyboard/index.d.ts +1 -1
  88. package/build/swift-ui/AccessoryWidgetBackground/index.d.ts +1 -1
  89. package/build/swift-ui/Alert/index.d.ts +4 -4
  90. package/build/swift-ui/Background/index.d.ts +2 -2
  91. package/build/swift-ui/BottomSheet/index.d.ts +1 -1
  92. package/build/swift-ui/Button/index.d.ts +1 -1
  93. package/build/swift-ui/Chart/index.d.ts +1 -1
  94. package/build/swift-ui/ColorPicker/index.d.ts +1 -1
  95. package/build/swift-ui/ConfirmationDialog/index.d.ts +4 -4
  96. package/build/swift-ui/ContentUnavailableView/index.d.ts +1 -1
  97. package/build/swift-ui/ContextMenu/index.d.ts +4 -4
  98. package/build/swift-ui/ControlGroup/index.d.ts +1 -1
  99. package/build/swift-ui/DatePicker/index.d.ts +1 -1
  100. package/build/swift-ui/DisclosureGroup/index.d.ts +2 -2
  101. package/build/swift-ui/Divider/index.d.ts +1 -1
  102. package/build/swift-ui/Form/index.d.ts +1 -1
  103. package/build/swift-ui/Gauge/index.d.ts +1 -1
  104. package/build/swift-ui/GlassEffectContainer/index.d.ts +1 -1
  105. package/build/swift-ui/Grid/index.d.ts +1 -1
  106. package/build/swift-ui/Group/index.d.ts +1 -1
  107. package/build/swift-ui/HStack/index.d.ts +1 -1
  108. package/build/swift-ui/Host/index.d.ts +1 -1
  109. package/build/swift-ui/Image/index.d.ts +1 -1
  110. package/build/swift-ui/Label/index.d.ts +1 -1
  111. package/build/swift-ui/LabeledContent/index.d.ts +1 -1
  112. package/build/swift-ui/LazyHStack/index.d.ts +1 -1
  113. package/build/swift-ui/LazyVStack/index.d.ts +1 -1
  114. package/build/swift-ui/Link/index.d.ts +1 -1
  115. package/build/swift-ui/List/ListForEach.d.ts +1 -1
  116. package/build/swift-ui/List/index.d.ts +1 -1
  117. package/build/swift-ui/Mask/index.d.ts +2 -2
  118. package/build/swift-ui/Menu/index.d.ts +1 -1
  119. package/build/swift-ui/Namespace.d.ts +1 -1
  120. package/build/swift-ui/NavigationDestination/index.d.ts +1 -1
  121. package/build/swift-ui/NavigationLink/index.d.ts +1 -1
  122. package/build/swift-ui/NavigationSplitView/index.d.ts +4 -4
  123. package/build/swift-ui/NavigationStack/index.d.ts +1 -1
  124. package/build/swift-ui/Overlay/index.d.ts +2 -2
  125. package/build/swift-ui/Picker/index.d.ts +1 -1
  126. package/build/swift-ui/Popover/index.d.ts +3 -3
  127. package/build/swift-ui/ProgressView/index.d.ts +1 -1
  128. package/build/swift-ui/RNHostView.d.ts +1 -1
  129. package/build/swift-ui/ScrollView/index.d.ts +1 -1
  130. package/build/swift-ui/Section/index.d.ts +1 -1
  131. package/build/swift-ui/SecureField/index.d.ts +2 -2
  132. package/build/swift-ui/Shapes/ConcentricRectangle.d.ts +1 -1
  133. package/build/swift-ui/Shapes/index.d.ts +6 -6
  134. package/build/swift-ui/ShareLink/index.d.ts +1 -1
  135. package/build/swift-ui/Slider/index.d.ts +1 -1
  136. package/build/swift-ui/SlotView.d.ts +1 -1
  137. package/build/swift-ui/Spacer/index.d.ts +1 -1
  138. package/build/swift-ui/Stepper/index.d.ts +1 -1
  139. package/build/swift-ui/SwipeActions/index.d.ts +2 -2
  140. package/build/swift-ui/SyncToggle/index.d.ts +1 -1
  141. package/build/swift-ui/TabView/Tab.d.ts +1 -1
  142. package/build/swift-ui/TabView/index.d.ts +1 -1
  143. package/build/swift-ui/Text/index.d.ts +1 -1
  144. package/build/swift-ui/TextField/index.d.ts +2 -2
  145. package/build/swift-ui/Toggle/index.d.ts +1 -1
  146. package/build/swift-ui/Toolbar/index.d.ts +52 -2
  147. package/build/swift-ui/Toolbar/index.js +27 -0
  148. package/build/swift-ui/Toolbar/index.js.map +1 -1
  149. package/build/swift-ui/VStack/index.d.ts +1 -1
  150. package/build/swift-ui/ZStack/index.d.ts +1 -1
  151. package/build/swift-ui/modifiers/index.d.ts +15 -1
  152. package/build/swift-ui/modifiers/index.js +16 -0
  153. package/build/swift-ui/modifiers/index.js.map +1 -1
  154. package/build/universal/BottomSheet/index.android.d.ts +1 -1
  155. package/build/universal/BottomSheet/index.d.ts +1 -1
  156. package/build/universal/BottomSheet/index.ios.d.ts +1 -1
  157. package/build/universal/Button/index.android.d.ts +1 -1
  158. package/build/universal/Button/index.d.ts +1 -1
  159. package/build/universal/Button/index.ios.d.ts +1 -1
  160. package/build/universal/Checkbox/index.android.d.ts +1 -1
  161. package/build/universal/Checkbox/index.d.ts +1 -1
  162. package/build/universal/Checkbox/index.ios.d.ts +1 -1
  163. package/build/universal/Collapsible/index.android.d.ts +1 -1
  164. package/build/universal/Collapsible/index.d.ts +1 -1
  165. package/build/universal/Collapsible/index.ios.d.ts +1 -1
  166. package/build/universal/Column/index.android.d.ts +1 -1
  167. package/build/universal/Column/index.d.ts +1 -1
  168. package/build/universal/Column/index.ios.d.ts +1 -1
  169. package/build/universal/FieldGroup/FieldGroup.android.d.ts +1 -1
  170. package/build/universal/FieldGroup/FieldGroup.d.ts +1 -1
  171. package/build/universal/FieldGroup/FieldGroup.ios.d.ts +1 -1
  172. package/build/universal/FieldGroup/FieldSection.android.d.ts +1 -1
  173. package/build/universal/FieldGroup/FieldSection.d.ts +1 -1
  174. package/build/universal/FieldGroup/FieldSection.ios.d.ts +1 -1
  175. package/build/universal/FieldGroup/FieldSectionSlots.d.ts +2 -2
  176. package/build/universal/Host/index.d.ts +1 -1
  177. package/build/universal/Icon/index.android.d.ts +1 -1
  178. package/build/universal/Icon/index.ios.d.ts +1 -1
  179. package/build/universal/List/index.android.d.ts +1 -1
  180. package/build/universal/List/index.d.ts +1 -1
  181. package/build/universal/List/index.ios.d.ts +1 -1
  182. package/build/universal/ListItem/ListItem.android.d.ts +1 -1
  183. package/build/universal/ListItem/ListItem.d.ts +1 -1
  184. package/build/universal/ListItem/ListItem.ios.d.ts +1 -1
  185. package/build/universal/Picker/Picker.android.d.ts +1 -1
  186. package/build/universal/Picker/Picker.d.ts +1 -1
  187. package/build/universal/Picker/Picker.ios.d.ts +1 -1
  188. package/build/universal/RNHostView/index.android.d.ts +1 -1
  189. package/build/universal/RNHostView/index.d.ts +1 -1
  190. package/build/universal/RNHostView/index.ios.d.ts +1 -1
  191. package/build/universal/Row/index.android.d.ts +1 -1
  192. package/build/universal/Row/index.d.ts +1 -1
  193. package/build/universal/Row/index.ios.d.ts +1 -1
  194. package/build/universal/ScrollView/index.android.d.ts +1 -1
  195. package/build/universal/ScrollView/index.d.ts +1 -1
  196. package/build/universal/ScrollView/index.ios.d.ts +1 -1
  197. package/build/universal/Slider/index.android.d.ts +1 -1
  198. package/build/universal/Slider/index.d.ts +1 -1
  199. package/build/universal/Slider/index.ios.d.ts +1 -1
  200. package/build/universal/Spacer/index.android.d.ts +1 -1
  201. package/build/universal/Spacer/index.d.ts +1 -1
  202. package/build/universal/Spacer/index.ios.d.ts +1 -1
  203. package/build/universal/Switch/index.android.d.ts +1 -1
  204. package/build/universal/Switch/index.d.ts +1 -1
  205. package/build/universal/Switch/index.ios.d.ts +1 -1
  206. package/build/universal/Text/index.android.d.ts +1 -1
  207. package/build/universal/Text/index.d.ts +1 -1
  208. package/build/universal/Text/index.ios.d.ts +1 -1
  209. package/build/universal/TextInput/index.android.d.ts +1 -1
  210. package/build/universal/TextInput/index.d.ts +1 -1
  211. package/build/universal/TextInput/index.ios.d.ts +1 -1
  212. package/build/web/BottomSheetDialog.d.ts +1 -1
  213. package/expo-module.config.json +1 -1
  214. package/ios/Convertibles/ToolbarItemPlacementOptions.swift +110 -0
  215. package/ios/Convertibles/ToolbarItemVisibilityPriorityOptions.swift +35 -0
  216. package/ios/HostView.swift +29 -7
  217. package/ios/Modifiers/ScrollEdgeEffectStyleModifier.swift +34 -0
  218. package/ios/Modifiers/ViewModifierRegistry.swift +4 -0
  219. package/ios/ToolbarView.swift +88 -4
  220. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{58.0.3/expo.modules.ui-58.0.3-sources.jar → 58.0.5/expo.modules.ui-58.0.5-sources.jar} +0 -0
  221. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5-sources.jar.md5 +1 -0
  222. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5-sources.jar.sha1 +1 -0
  223. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5-sources.jar.sha256 +1 -0
  224. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5-sources.jar.sha512 +1 -0
  225. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.aar +0 -0
  226. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.aar.md5 +1 -0
  227. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.aar.sha1 +1 -0
  228. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.aar.sha256 +1 -0
  229. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.aar.sha512 +1 -0
  230. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{58.0.3/expo.modules.ui-58.0.3.module → 58.0.5/expo.modules.ui-58.0.5.module} +22 -22
  231. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.module.md5 +1 -0
  232. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.module.sha1 +1 -0
  233. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.module.sha256 +1 -0
  234. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.module.sha512 +1 -0
  235. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{58.0.3/expo.modules.ui-58.0.3.pom → 58.0.5/expo.modules.ui-58.0.5.pom} +1 -1
  236. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.pom.md5 +1 -0
  237. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.pom.sha1 +1 -0
  238. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.pom.sha256 +1 -0
  239. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.5/expo.modules.ui-58.0.5.pom.sha512 +1 -0
  240. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml +4 -4
  241. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.md5 +1 -1
  242. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha1 +1 -1
  243. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha256 +1 -1
  244. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha512 +1 -1
  245. package/package.json +3 -3
  246. package/prebuilds/output/debug/xcframeworks/ExpoUI.tar.gz +0 -0
  247. package/prebuilds/output/release/xcframeworks/ExpoUI.tar.gz +0 -0
  248. package/src/jetpack-compose/colors.ts +23 -1
  249. package/src/jetpack-compose/modifiers/index.ts +11 -0
  250. package/src/swift-ui/Toolbar/index.tsx +79 -0
  251. package/src/swift-ui/modifiers/index.ts +19 -0
  252. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3-sources.jar.md5 +0 -1
  253. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3-sources.jar.sha1 +0 -1
  254. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3-sources.jar.sha256 +0 -1
  255. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3-sources.jar.sha512 +0 -1
  256. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.aar +0 -0
  257. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.aar.md5 +0 -1
  258. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.aar.sha1 +0 -1
  259. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.aar.sha256 +0 -1
  260. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.aar.sha512 +0 -1
  261. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.module.md5 +0 -1
  262. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.module.sha1 +0 -1
  263. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.module.sha256 +0 -1
  264. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.module.sha512 +0 -1
  265. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.pom.md5 +0 -1
  266. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.pom.sha1 +0 -1
  267. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.pom.sha256 +0 -1
  268. package/local-maven-repo/expo/modules/ui/expo.modules.ui/58.0.3/expo.modules.ui-58.0.3.pom.sha512 +0 -1
@@ -5,6 +5,42 @@ import ExpoModulesCore
5
5
 
6
6
  internal final class ToolbarViewProps: UIBaseViewProps {}
7
7
 
8
+ private struct ToolbarContentView: View {
9
+ @ObservedObject var props: SlotViewProps
10
+ let content: SlotView
11
+ let base: AnyView
12
+
13
+ @ViewBuilder
14
+ var body: some View {
15
+ let children = props.children ?? []
16
+
17
+ if children.contains(where: isItem) {
18
+ children.reduce(base) { view, child in
19
+ let childView: any View = child.childView
20
+
21
+ guard let slot = child.childView as? SlotView, slot.props.name == "item" else {
22
+ return AnyView(placed(AnyView(childView), on: view, placement: .automatic, visibilityPriority: nil))
23
+ }
24
+ return AnyView(ToolbarItemLayer(props: slot.props, base: view, content: AnyView(childView)))
25
+ }
26
+ } else {
27
+ base.toolbar {
28
+ content
29
+ }
30
+ }
31
+ }
32
+ }
33
+
34
+ private struct ToolbarItemLayer: View {
35
+ @ObservedObject var props: SlotViewProps
36
+ let base: AnyView
37
+ let content: AnyView
38
+
39
+ var body: some View {
40
+ placed(content, on: base, placement: placement(from: props), visibilityPriority: visibilityPriority(from: props))
41
+ }
42
+ }
43
+
8
44
  internal struct ToolbarView: ExpoSwiftUI.View {
9
45
  @ObservedObject var props: ToolbarViewProps
10
46
 
@@ -14,10 +50,7 @@ internal struct ToolbarView: ExpoSwiftUI.View {
14
50
 
15
51
  var body: some View {
16
52
  if let content = props.children?.slot("content") {
17
- baseContent
18
- .toolbar {
19
- content
20
- }
53
+ ToolbarContentView(props: content.props, content: content, base: AnyView(baseContent))
21
54
  } else {
22
55
  baseContent
23
56
  }
@@ -31,3 +64,54 @@ internal struct ToolbarView: ExpoSwiftUI.View {
31
64
  }
32
65
  }
33
66
  }
67
+
68
+ @ViewBuilder
69
+ private func placed(
70
+ _ content: AnyView,
71
+ on base: AnyView,
72
+ placement: ToolbarItemPlacement,
73
+ visibilityPriority: ToolbarItemVisibilityPriorityOptions?
74
+ ) -> some View {
75
+ #if compiler(>=6.4) // Xcode 27
76
+ if #available(iOS 27.0, macOS 26.1, tvOS 27.0, visionOS 27.0, *),
77
+ let visibilityPriority {
78
+ base.toolbar {
79
+ ToolbarItem(placement: placement) {
80
+ content
81
+ }
82
+ .visibilityPriority(visibilityPriority.toPriority())
83
+ }
84
+ } else {
85
+ base.toolbar {
86
+ ToolbarItem(placement: placement) {
87
+ content
88
+ }
89
+ }
90
+ }
91
+ #else
92
+ base.toolbar {
93
+ ToolbarItem(placement: placement) {
94
+ content
95
+ }
96
+ }
97
+ #endif
98
+ }
99
+
100
+ private func isItem(_ child: any ExpoSwiftUI.AnyChild) -> Bool {
101
+ return (child.childView as? SlotView)?.props.name == "item"
102
+ }
103
+
104
+ private func placement(from props: SlotViewProps) -> ToolbarItemPlacement {
105
+ guard let rawPlacement = props.extraProps?["placement"] as? String,
106
+ let placement = ToolbarItemPlacementOptions(rawValue: rawPlacement) else {
107
+ return .automatic
108
+ }
109
+ return placement.toPlacement()
110
+ }
111
+
112
+ private func visibilityPriority(from props: SlotViewProps) -> ToolbarItemVisibilityPriorityOptions? {
113
+ guard let rawPriority = props.extraProps?["visibilityPriority"] as? String else {
114
+ return nil
115
+ }
116
+ return ToolbarItemVisibilityPriorityOptions(rawValue: rawPriority)
117
+ }
@@ -0,0 +1 @@
1
+ ccc4bc2b5f6f1713a4f7c85ae9be4a6247690fc5
@@ -0,0 +1 @@
1
+ d4e08c526d892c05d1ab6e42bd451df874e4da5cc58c18080ad730fc0ae59dfa
@@ -0,0 +1 @@
1
+ 5a6dc466f00aa1d74a9e1df2c4a06f3bf9c00b9eebe03e54e1ae68db446806f3f47f98e4a1d04bd90db6683459dd11785d22499d9cef48dd979293f8a88104d3
@@ -0,0 +1 @@
1
+ 643965a7c8a6f46ba589dcd348cbf5e112834194
@@ -0,0 +1 @@
1
+ 9b228fbd60d559e9dfebe894e1846a8c7ce3c72e5c91936b4382c97295e9b072
@@ -0,0 +1 @@
1
+ ddcedbdcc0e95db83f0657a68090572e6d7c7fb9233e796ea875d86e9782c619560ef0e98316cdf6642abbed4b42eb43b5e8264be55130f47e473adbc0f77c11
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "expo.modules.ui",
5
5
  "module": "expo.modules.ui",
6
- "version": "58.0.3",
6
+ "version": "58.0.5",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,13 +24,13 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.ui-58.0.3.aar",
28
- "url": "expo.modules.ui-58.0.3.aar",
29
- "size": 1789469,
30
- "sha512": "dfe706437f10aa521a458896b97fa14d945cf66c80dab9cc43fddd444cddd016073b783076f38ba90e07c5076b8752bf66e136ce9c40d85195cf27a231ce7f9d",
31
- "sha256": "8faeae3cb56c1d29d1a120a9a8c1964e6015ba993519f244283855a066a1704c",
32
- "sha1": "dac5e40669e0f7832763a444814375947cfc1d1c",
33
- "md5": "df649a67c82e5ea67b2cbf457d10bb0a"
27
+ "name": "expo.modules.ui-58.0.5.aar",
28
+ "url": "expo.modules.ui-58.0.5.aar",
29
+ "size": 1792968,
30
+ "sha512": "ddcedbdcc0e95db83f0657a68090572e6d7c7fb9233e796ea875d86e9782c619560ef0e98316cdf6642abbed4b42eb43b5e8264be55130f47e473adbc0f77c11",
31
+ "sha256": "9b228fbd60d559e9dfebe894e1846a8c7ce3c72e5c91936b4382c97295e9b072",
32
+ "sha1": "643965a7c8a6f46ba589dcd348cbf5e112834194",
33
+ "md5": "61e999a9915231a3196a7fc2864c479e"
34
34
  }
35
35
  ]
36
36
  },
@@ -141,13 +141,13 @@
141
141
  ],
142
142
  "files": [
143
143
  {
144
- "name": "expo.modules.ui-58.0.3.aar",
145
- "url": "expo.modules.ui-58.0.3.aar",
146
- "size": 1789469,
147
- "sha512": "dfe706437f10aa521a458896b97fa14d945cf66c80dab9cc43fddd444cddd016073b783076f38ba90e07c5076b8752bf66e136ce9c40d85195cf27a231ce7f9d",
148
- "sha256": "8faeae3cb56c1d29d1a120a9a8c1964e6015ba993519f244283855a066a1704c",
149
- "sha1": "dac5e40669e0f7832763a444814375947cfc1d1c",
150
- "md5": "df649a67c82e5ea67b2cbf457d10bb0a"
144
+ "name": "expo.modules.ui-58.0.5.aar",
145
+ "url": "expo.modules.ui-58.0.5.aar",
146
+ "size": 1792968,
147
+ "sha512": "ddcedbdcc0e95db83f0657a68090572e6d7c7fb9233e796ea875d86e9782c619560ef0e98316cdf6642abbed4b42eb43b5e8264be55130f47e473adbc0f77c11",
148
+ "sha256": "9b228fbd60d559e9dfebe894e1846a8c7ce3c72e5c91936b4382c97295e9b072",
149
+ "sha1": "643965a7c8a6f46ba589dcd348cbf5e112834194",
150
+ "md5": "61e999a9915231a3196a7fc2864c479e"
151
151
  }
152
152
  ]
153
153
  },
@@ -161,13 +161,13 @@
161
161
  },
162
162
  "files": [
163
163
  {
164
- "name": "expo.modules.ui-58.0.3-sources.jar",
165
- "url": "expo.modules.ui-58.0.3-sources.jar",
166
- "size": 106165,
167
- "sha512": "59ec9e524c62a8b77c41e894e4833d24d2c9bb1912ef1be23d81ab6eb04bcf1f8743cdc11528bf2630b0f1f29db20b017e8015ebde418530196d7dcea06a90bc",
168
- "sha256": "297ecd2b76dbb6908b0b2897c6adba6be5dd10cb16c8ca169525a40e207d52c2",
169
- "sha1": "51a2f1006c7baddabf82bef24f20526a08f172ed",
170
- "md5": "8794b8164746750abcd5634353883d4b"
164
+ "name": "expo.modules.ui-58.0.5-sources.jar",
165
+ "url": "expo.modules.ui-58.0.5-sources.jar",
166
+ "size": 106293,
167
+ "sha512": "5a6dc466f00aa1d74a9e1df2c4a06f3bf9c00b9eebe03e54e1ae68db446806f3f47f98e4a1d04bd90db6683459dd11785d22499d9cef48dd979293f8a88104d3",
168
+ "sha256": "d4e08c526d892c05d1ab6e42bd451df874e4da5cc58c18080ad730fc0ae59dfa",
169
+ "sha1": "ccc4bc2b5f6f1713a4f7c85ae9be4a6247690fc5",
170
+ "md5": "a2c50d54e658f6c03ab37ce21bc712ed"
171
171
  }
172
172
  ]
173
173
  }
@@ -0,0 +1 @@
1
+ 842b6342d3ac040ed8069f06731423ce098d4c06
@@ -0,0 +1 @@
1
+ 713717be0ec2dabfe766d7916d5c69df3434313c9cff38b1067c9efa8c46f9ab
@@ -0,0 +1 @@
1
+ a0cbbe1a7eae1d80cd5d3284ab5fe64f36e357ed1b94685f469f7d71f7794e787fa6919d0d15df9eee791fe7142554344c0424ac4c9eb205dd2ce86b706b756e
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>expo.modules.ui</groupId>
11
11
  <artifactId>expo.modules.ui</artifactId>
12
- <version>58.0.3</version>
12
+ <version>58.0.5</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.ui</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -0,0 +1 @@
1
+ be3b0d33e5b9fb949a42f962c343e0119fdaedc0
@@ -0,0 +1 @@
1
+ b3ded768986b2232ffeff134fec3af26cf68977a970bd9db2c5f6f7994d99391
@@ -0,0 +1 @@
1
+ fd0be2177afd1ca4fb68653adcd767e5f25e5c7fa99d787b79a7b63fc5ec234381d9374fb7c5233cc0fcc3bffce07bd9abbf30b43da1bc63777e3ea3f7b4c644
@@ -3,11 +3,11 @@
3
3
  <groupId>expo.modules.ui</groupId>
4
4
  <artifactId>expo.modules.ui</artifactId>
5
5
  <versioning>
6
- <latest>58.0.3</latest>
7
- <release>58.0.3</release>
6
+ <latest>58.0.5</latest>
7
+ <release>58.0.5</release>
8
8
  <versions>
9
- <version>58.0.3</version>
9
+ <version>58.0.5</version>
10
10
  </versions>
11
- <lastUpdated>20260916230018</lastUpdated>
11
+ <lastUpdated>20260922160135</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 0928007d27e87421f62a87d1bf27d355
1
+ c4131ab7d3611c2ad7222519c1ac6dbc
@@ -1 +1 @@
1
- af6115503d93548c23a6a0e7b004ede8469a7dc6
1
+ 40d27ef259a3a4594d9eb687a6acf1489c4d23a9
@@ -1 +1 @@
1
- 3c826fb526f711a7f0dfc2e564c453c605fe8325e198bcf4ff8f235f164a26c7
1
+ be1b14600c8809450004a609ef15392fa45790d99c199668b2fdbeeb38072cdf
@@ -1 +1 @@
1
- 582d5887267892cd86d2206a0c59ec62b4070ff75826afa6e1eca29158c6b2f9fab30108d9c348ab2a6334c7ec472b4c3ddba307fc1fecbfb78dc14131ad8561
1
+ aa2b01073faddd2b62d7984ff6ff1637f53cdc23fb83803f432a6fc824ad2a88349638c7ab718dd0961d11ff3e7e0a7ee92ceea63c880257947348b3501c39fa
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/ui",
3
- "version": "58.0.3",
3
+ "version": "58.0.5",
4
4
  "description": "A collection of UI components",
5
5
  "keywords": [
6
6
  "Jetpack Compose",
@@ -147,7 +147,7 @@
147
147
  "@types/babel__core": "^7.20.5",
148
148
  "@types/jest": "^29.2.1",
149
149
  "@types/node": "^22.14.0",
150
- "@types/react": "~19.2.0",
150
+ "@types/react": "~19.3.0",
151
151
  "expo-module-scripts": "56.0.3",
152
152
  "react-native-reanimated": "4.6.0",
153
153
  "react-native-worklets": "0.12.2"
@@ -171,7 +171,7 @@
171
171
  "optional": true
172
172
  }
173
173
  },
174
- "gitHead": "917a61b581baeb852aa4fe331da2c1395d824351",
174
+ "gitHead": "add8cbf49f477cfd2283ae05af35b4713a773c55",
175
175
  "scripts": {
176
176
  "precompile-ios": "et prebuild-package-for-publish",
177
177
  "build": "pnpm run build:lib && pnpm run build:plugin",
@@ -183,11 +183,33 @@ export const isDynamicColorAvailable: boolean = ExpoUIModule.isDynamicColorAvail
183
183
  */
184
184
  export const HostPaletteContext = createContext<MaterialColors | null>(null);
185
185
 
186
+ // Cache the `scheme` + `seedColor` keyed palette to prevent sync calls to `getMaterialColors`.
187
+ // https://github.com/expo/expo/issues/50477
188
+ const seededPalettes = new Map<string, MaterialColors>();
189
+ const MAX_SEEDED_PALETTES = 32;
190
+
186
191
  /**
187
192
  * Get the Material 3 color palette.
188
193
  */
189
194
  export function getMaterialColors(options?: MaterialColorsOptions): MaterialColors {
190
- return ExpoUIModule.getMaterialColors(options ?? null);
195
+ const scheme = options?.scheme;
196
+ const seedColor = options?.seedColor;
197
+ const isCacheable =
198
+ (scheme === 'light' || scheme === 'dark') &&
199
+ (typeof seedColor === 'string' || typeof seedColor === 'number');
200
+ if (!isCacheable) {
201
+ return ExpoUIModule.getMaterialColors(options ?? null);
202
+ }
203
+ const key = `${scheme}:${seedColor}`;
204
+ let palette = seededPalettes.get(key);
205
+ if (!palette) {
206
+ palette = ExpoUIModule.getMaterialColors(options) as MaterialColors;
207
+ if (seededPalettes.size >= MAX_SEEDED_PALETTES) {
208
+ seededPalettes.delete(seededPalettes.keys().next().value!);
209
+ }
210
+ seededPalettes.set(key, palette);
211
+ }
212
+ return palette;
191
213
  }
192
214
 
193
215
  /**
@@ -211,6 +211,17 @@ export const alpha = (alpha: number) => createModifier('alpha', { alpha });
211
211
  */
212
212
  export const blur = (radius: number) => createModifier('blur', { radius });
213
213
 
214
+ /**
215
+ * Adds rounded corners to the component.
216
+ *
217
+ * > **Note:** Works only inside Android widgets built with `expo-widgets`, on Android 12 (API level 31) and later.
218
+ *
219
+ * Jetpack Compose has no exact equivalent of Glance's `cornerRadius`, so Expo UI ignores this
220
+ * modifier. Use `clip(Shapes.RoundedCorner(radius))` to round corners in an app.
221
+ * @param radius - Corner radius in dp.
222
+ */
223
+ export const cornerRadius = (radius: number) => createModifier('cornerRadius', { radius });
224
+
214
225
  // =============================================================================
215
226
  // Transform Modifiers
216
227
  // =============================================================================
@@ -18,6 +18,55 @@ export interface ToolbarContentProps {
18
18
  children: React.ReactNode;
19
19
  }
20
20
 
21
+ /**
22
+ * Where an item sits in the toolbar. A placement the current platform or OS version does not
23
+ * offer falls back to `automatic`.
24
+ *
25
+ * @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/toolbaritemplacement).
26
+ */
27
+ export type ToolbarItemPlacement =
28
+ | 'automatic'
29
+ | 'principal'
30
+ | 'navigation'
31
+ | 'primaryAction'
32
+ | 'secondaryAction'
33
+ | 'status'
34
+ | 'confirmationAction'
35
+ | 'cancellationAction'
36
+ | 'destructiveAction'
37
+ | 'keyboard'
38
+ | 'topBarLeading'
39
+ | 'topBarTrailing'
40
+ | 'topBarPinnedTrailing'
41
+ | 'largeTitle'
42
+ | 'bottomBar';
43
+
44
+ /**
45
+ * How readily a toolbar item gives up its place when the toolbar runs out of room.
46
+ *
47
+ * @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/toolbaritemvisibilitypriority).
48
+ */
49
+ export type ToolbarItemVisibilityPriority = 'automatic' | 'low' | 'high';
50
+
51
+ export interface ToolbarItemProps {
52
+ /**
53
+ * The semantic placement of the item within the toolbar.
54
+ * @default 'automatic'
55
+ */
56
+ placement?: ToolbarItemPlacement;
57
+ /**
58
+ * How readily the item gives up its place. Items overflow lowest priority first. `low` and
59
+ * `high` apply on iOS and macOS.
60
+ * @default 'automatic'
61
+ * @platform ios 27.0+
62
+ */
63
+ visibilityPriority?: ToolbarItemVisibilityPriority;
64
+ /**
65
+ * The content of the item.
66
+ */
67
+ children: React.ReactNode;
68
+ }
69
+
21
70
  const ToolbarNativeView: React.ComponentType<ToolbarProps> = requireNativeView(
22
71
  'ExpoUI',
23
72
  'ToolbarView'
@@ -30,6 +79,36 @@ function ToolbarContent(props: ToolbarContentProps) {
30
79
  return <Slot name="content">{props.children}</Slot>;
31
80
  }
32
81
 
82
+ /**
83
+ * A single item in a toolbar, matching SwiftUI's `ToolbarItem`. Place it inside `Toolbar.Content`
84
+ * to control where the item appears.
85
+ *
86
+ * @example
87
+ * ```tsx
88
+ * <Toolbar>
89
+ * <Text>Bird description</Text>
90
+ * <Toolbar.Content>
91
+ * <ToolbarItem placement="topBarTrailing">
92
+ * <Button systemImage="square.and.arrow.up" onPress={share} />
93
+ * </ToolbarItem>
94
+ * </Toolbar.Content>
95
+ * </Toolbar>
96
+ * ```
97
+ *
98
+ * @platform ios
99
+ */
100
+ export function ToolbarItem({
101
+ placement = 'automatic',
102
+ visibilityPriority = 'automatic',
103
+ children,
104
+ }: ToolbarItemProps) {
105
+ return (
106
+ <Slot name="item" extraProps={{ placement, visibilityPriority }}>
107
+ {children}
108
+ </Slot>
109
+ );
110
+ }
111
+
33
112
  /**
34
113
  * Adds a toolbar to the view it wraps, matching SwiftUI's `toolbar(content:)`.
35
114
  *
@@ -816,6 +816,24 @@ export const scrollIndicators = (
816
816
  axes: 'vertical' | 'horizontal' | 'both' = 'both'
817
817
  ) => createModifier('scrollIndicators', { visibility, axes });
818
818
 
819
+ /**
820
+ * Sets the style of the scroll edge effect that a scrollable view shows where its content meets
821
+ * a bar, such as a navigation bar or a toolbar.
822
+ * Mirrors SwiftUI's `scrollEdgeEffectStyle(_:for:)` modifier. On versions before iOS 26 it does
823
+ * nothing.
824
+ * @param style - The style of the effect:
825
+ * - `'automatic'`: the system picks the style.
826
+ * - `'hard'`: a bar with a defined edge separates the content.
827
+ * - `'soft'`: the content fades out gradually, without a defined edge.
828
+ * @param edges - The edges where the style applies. Defaults to `'all'`.
829
+ * @platform ios 26.0+
830
+ * @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/scrolledgeeffectstyle(_:for:)).
831
+ */
832
+ export const scrollEdgeEffectStyle = (
833
+ style: 'automatic' | 'hard' | 'soft',
834
+ edges: 'all' | 'top' | 'bottom' | 'leading' | 'trailing' | 'horizontal' | 'vertical' = 'all'
835
+ ) => createModifier('scrollEdgeEffectStyle', { style, edges });
836
+
819
837
  export type UnitPointValue =
820
838
  | 'zero'
821
839
  | 'topLeading'
@@ -1783,6 +1801,7 @@ export type BuiltInModifier =
1783
1801
  | ReturnType<typeof scrollDisabled>
1784
1802
  | ReturnType<typeof scrollClipDisabled>
1785
1803
  | ReturnType<typeof scrollIndicators>
1804
+ | ReturnType<typeof scrollEdgeEffectStyle>
1786
1805
  | ReturnType<typeof defaultScrollAnchor>
1787
1806
  | ReturnType<typeof defaultScrollAnchorForRole>
1788
1807
  | ReturnType<typeof scrollTargetBehavior>
@@ -1 +0,0 @@
1
- 51a2f1006c7baddabf82bef24f20526a08f172ed
@@ -1 +0,0 @@
1
- 297ecd2b76dbb6908b0b2897c6adba6be5dd10cb16c8ca169525a40e207d52c2
@@ -1 +0,0 @@
1
- 59ec9e524c62a8b77c41e894e4833d24d2c9bb1912ef1be23d81ab6eb04bcf1f8743cdc11528bf2630b0f1f29db20b017e8015ebde418530196d7dcea06a90bc
@@ -1 +0,0 @@
1
- df649a67c82e5ea67b2cbf457d10bb0a
@@ -1 +0,0 @@
1
- dac5e40669e0f7832763a444814375947cfc1d1c
@@ -1 +0,0 @@
1
- 8faeae3cb56c1d29d1a120a9a8c1964e6015ba993519f244283855a066a1704c
@@ -1 +0,0 @@
1
- dfe706437f10aa521a458896b97fa14d945cf66c80dab9cc43fddd444cddd016073b783076f38ba90e07c5076b8752bf66e136ce9c40d85195cf27a231ce7f9d
@@ -1 +0,0 @@
1
- c85a1c254c967aa5f0e22488dd74bbb965c3ff4e
@@ -1 +0,0 @@
1
- 3132fad975d41a34859dc35c8f9c1767acd1787b1f62c74bbc28fca4538e76ee
@@ -1 +0,0 @@
1
- fc7327578f989b701393131ad9a5f339a3e9b7baf4d5c853e7acc8349aa30fe4cc55eb23cb8f65148c6bc945f68a1c759a2ca9c670194a07aa44089604f89c9c
@@ -1 +0,0 @@
1
- 29548555e9399da3cc52631fac9a3f47
@@ -1 +0,0 @@
1
- b0017c1c540efed9749b524acb50710662bc0db8
@@ -1 +0,0 @@
1
- d7deb9d31dfb1f7ac620f7ef3c6a58bca9c782fce46ea8aa55ebd82e25e1c021
@@ -1 +0,0 @@
1
- e97b7f216bbaadd44038a2952826d8c60f626f5effc09bf49299ff3e8196c04921f29c48a57e76c6c079bb5f9ab3e2a642f41bbf8c5339b2c31093456d6e0435