@expo/ui 56.0.24 → 56.0.25

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 (51) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/android/build.gradle +2 -2
  3. package/build/community/bottom-sheet/BottomSheet.ios.d.ts.map +1 -1
  4. package/build/swift-ui/modifiers/contentShape.d.ts +25 -2
  5. package/build/swift-ui/modifiers/contentShape.d.ts.map +1 -1
  6. package/expo-module.config.json +1 -1
  7. package/ios/GlassEffectContainerView.swift +1 -1
  8. package/ios/HStackView.swift +1 -1
  9. package/ios/Modifiers/ContentShapeModifier.swift +53 -7
  10. package/ios/VStackView.swift +1 -1
  11. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.aar +0 -0
  12. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.aar.md5 +1 -0
  13. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.aar.sha1 +1 -0
  14. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.aar.sha256 +1 -0
  15. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.aar.sha512 +1 -0
  16. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{56.0.24/expo.modules.ui-56.0.24.module → 56.0.25/expo.modules.ui-56.0.25.module} +17 -17
  17. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.module.md5 +1 -0
  18. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.module.sha1 +1 -0
  19. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.module.sha256 +1 -0
  20. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.module.sha512 +1 -0
  21. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{56.0.24/expo.modules.ui-56.0.24.pom → 56.0.25/expo.modules.ui-56.0.25.pom} +1 -1
  22. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.pom.md5 +1 -0
  23. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.pom.sha1 +1 -0
  24. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.pom.sha256 +1 -0
  25. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.25/expo.modules.ui-56.0.25.pom.sha512 +1 -0
  26. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml +4 -4
  27. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.md5 +1 -1
  28. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha1 +1 -1
  29. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha256 +1 -1
  30. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha512 +1 -1
  31. package/package.json +4 -4
  32. package/src/community/bottom-sheet/BottomSheet.ios.tsx +11 -19
  33. package/src/swift-ui/modifiers/contentShape.ts +35 -2
  34. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.aar +0 -0
  35. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.aar.md5 +0 -1
  36. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.aar.sha1 +0 -1
  37. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.aar.sha256 +0 -1
  38. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.aar.sha512 +0 -1
  39. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.module.md5 +0 -1
  40. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.module.sha1 +0 -1
  41. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.module.sha256 +0 -1
  42. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.module.sha512 +0 -1
  43. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.pom.md5 +0 -1
  44. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.pom.sha1 +0 -1
  45. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.pom.sha256 +0 -1
  46. package/local-maven-repo/expo/modules/ui/expo.modules.ui/56.0.24/expo.modules.ui-56.0.24.pom.sha512 +0 -1
  47. /package/local-maven-repo/expo/modules/ui/expo.modules.ui/{56.0.24/expo.modules.ui-56.0.24-sources.jar → 56.0.25/expo.modules.ui-56.0.25-sources.jar} +0 -0
  48. /package/local-maven-repo/expo/modules/ui/expo.modules.ui/{56.0.24/expo.modules.ui-56.0.24-sources.jar.md5 → 56.0.25/expo.modules.ui-56.0.25-sources.jar.md5} +0 -0
  49. /package/local-maven-repo/expo/modules/ui/expo.modules.ui/{56.0.24/expo.modules.ui-56.0.24-sources.jar.sha1 → 56.0.25/expo.modules.ui-56.0.25-sources.jar.sha1} +0 -0
  50. /package/local-maven-repo/expo/modules/ui/expo.modules.ui/{56.0.24/expo.modules.ui-56.0.24-sources.jar.sha256 → 56.0.25/expo.modules.ui-56.0.25-sources.jar.sha256} +0 -0
  51. /package/local-maven-repo/expo/modules/ui/expo.modules.ui/{56.0.24/expo.modules.ui-56.0.24-sources.jar.sha512 → 56.0.25/expo.modules.ui-56.0.25-sources.jar.sha512} +0 -0
package/CHANGELOG.md CHANGED
@@ -10,6 +10,20 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 56.0.25 — 2026-08-06
14
+
15
+ ### 🛠 Breaking changes
16
+
17
+ - [iOS] Fix `HStack`, `VStack` and `GlassEffectContainer` collapsing an unset `spacing` to `0` instead of forwarding `nil` to SwiftUI, so they now use the system default spacing like `Grid`, `LazyHStack` and `LazyVStack` already do. Pass `spacing={0}` explicitly to keep the previous layout. (by [@Den1Marshall](https://github.com/Den1Marshall))
18
+
19
+ ### 🎉 New features
20
+
21
+ - [iOS] Added an optional `kind` argument to the `contentShape` modifier, so a shape can be applied to drag previews, context menu previews, hover effects, or accessibility instead of only hit-testing. ([#48540](https://github.com/expo/expo/issues/48540) by [@sinhong2011](https://github.com/sinhong2011)) ([#48564](https://github.com/expo/expo/pull/48564) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
22
+
23
+ ### 🐛 Bug fixes
24
+
25
+ - [iOS] Fix `community/bottom-sheet` close callbacks firing before the sheet finished dismissing. ([#48389](https://github.com/expo/expo/issues/48389) by [@nicklamont](https://github.com/nicklamont)) ([#48436](https://github.com/expo/expo/pull/48436) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
26
+
13
27
  ## 56.0.24 — 2026-07-29
14
28
 
15
29
  ### 🎉 New features
@@ -12,13 +12,13 @@ apply plugin: 'expo-module-gradle-plugin'
12
12
  apply plugin: 'org.jetbrains.kotlin.plugin.compose'
13
13
 
14
14
  group = 'expo.modules.ui'
15
- version = '56.0.24'
15
+ version = '56.0.25'
16
16
 
17
17
  android {
18
18
  namespace "expo.modules.ui"
19
19
  defaultConfig {
20
20
  versionCode 1
21
- versionName "56.0.24"
21
+ versionName "56.0.25"
22
22
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
23
23
  }
24
24
  buildFeatures {
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheet.ios.d.ts","sourceRoot":"","sources":["../../../src/community/bottom-sheet/BottomSheet.ios.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAepE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAwD3C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CAmLlD"}
1
+ {"version":3,"file":"BottomSheet.ios.d.ts","sourceRoot":"","sources":["../../../src/community/bottom-sheet/BottomSheet.ios.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAepE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAwD3C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CA2KlD"}
@@ -1,11 +1,25 @@
1
1
  import type { Shape } from './shapes/index';
2
+ /**
3
+ * The kinds of interaction a content shape applies to.
4
+ *
5
+ * - `interaction` - The kind for hit-testing and accessibility.
6
+ * - `dragPreview` - The kind for drag and drop previews.
7
+ * - `contextMenuPreview` - The kind for context menu previews.
8
+ * - `hoverEffect` - The kind for hover effects.
9
+ * - `accessibility` - The kind for accessibility.
10
+ */
11
+ export type ContentShapeKind = 'interaction' | 'dragPreview' | 'contextMenuPreview' | 'hoverEffect' | 'accessibility';
2
12
  /**
3
13
  * Defines the content shape for hit-testing purposes.
4
14
  *
5
15
  * This modifier is essential for making entire view areas (including `Spacer` or empty space)
6
16
  * interactive. Without it, only visible elements like `Text` or `Image` respond to tap gestures.
7
17
  *
18
+ * Pass `kind` to shape something other than the default `interaction` (hit-testing), such as
19
+ * the preview used while a `List.ForEach` row is dragged to reorder it.
20
+ *
8
21
  * @param shape - A shape configuration from the shapes API (rectangle, circle, capsule, ellipse, roundedRectangle).
22
+ * @param kind - The kinds to apply the shape to. Defaults to `interaction` when not provided.
9
23
  *
10
24
  * @example
11
25
  * ```tsx
@@ -33,7 +47,16 @@ import type { Shape } from './shapes/index';
33
47
  * }
34
48
  * ```
35
49
  *
36
- * @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contentshape(_:eofill:)).
50
+ * @example
51
+ * ```tsx
52
+ * // Round the preview shown while a row is dragged, so its corners are not filled in.
53
+ * <Label
54
+ * title={item.title}
55
+ * modifiers={[contentShape(shapes.roundedRectangle({ cornerRadius: 10 }), 'dragPreview')]}
56
+ * />
57
+ * ```
58
+ *
59
+ * @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contentshape(_:_:eofill:)).
37
60
  */
38
- export declare const contentShape: (shape: Shape) => import("./createModifier").ModifierConfig;
61
+ export declare const contentShape: (shape: Shape, kind?: ContentShapeKind | ContentShapeKind[]) => import("./createModifier").ModifierConfig;
39
62
  //# sourceMappingURL=contentShape.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contentShape.d.ts","sourceRoot":"","sources":["../../../src/swift-ui/modifiers/contentShape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,8CAA0C,CAAC"}
1
+ {"version":3,"file":"contentShape.d.ts","sourceRoot":"","sources":["../../../src/swift-ui/modifiers/contentShape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,aAAa,GACb,oBAAoB,GACpB,aAAa,GACb,eAAe,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,OAAO,gBAAgB,GAAG,gBAAgB,EAAE,8CAInF,CAAC"}
@@ -10,7 +10,7 @@
10
10
  "publication": {
11
11
  "groupId": "expo.modules.ui",
12
12
  "artifactId": "expo.modules.ui",
13
- "version": "56.0.24",
13
+ "version": "56.0.25",
14
14
  "repository": "local-maven-repo"
15
15
  }
16
16
  }
@@ -17,7 +17,7 @@ public struct GlassEffectContainerView: ExpoSwiftUI.View {
17
17
  public var body: some View {
18
18
  if #available(iOS 26.0, macOS 26.0, tvOS 26.0, *) {
19
19
  #if compiler(>=6.2) // Xcode 26
20
- GlassEffectContainer(spacing: CGFloat(props.spacing ?? 0.0)) {
20
+ GlassEffectContainer(spacing: props.spacing.map { CGFloat($0) }) {
21
21
  Children()
22
22
  }
23
23
  #else
@@ -41,7 +41,7 @@ public struct HStackView: ExpoSwiftUI.View {
41
41
  public var body: some View {
42
42
  HStack(
43
43
  alignment: props.alignment?.toVerticalAlignment() ?? .center,
44
- spacing: CGFloat(props.spacing ?? 0)) {
44
+ spacing: props.spacing.map { CGFloat($0) }) {
45
45
  Children()
46
46
  }
47
47
  }
@@ -3,27 +3,73 @@
3
3
  import ExpoModulesCore
4
4
  import SwiftUI
5
5
 
6
+ internal enum ContentShapeKind: String, Enumerable {
7
+ case interaction
8
+ case dragPreview
9
+ case contextMenuPreview
10
+ case hoverEffect
11
+ case accessibility
12
+
13
+ func toContentShapeKinds() -> ContentShapeKinds {
14
+ switch self {
15
+ case .interaction:
16
+ return .interaction
17
+ case .dragPreview:
18
+ #if os(tvOS)
19
+ return .interaction
20
+ #else
21
+ return .dragPreview
22
+ #endif
23
+ case .contextMenuPreview:
24
+ if #available(iOS 15.0, tvOS 17.0, *) {
25
+ return .contextMenuPreview
26
+ }
27
+ return .interaction
28
+ case .hoverEffect:
29
+ if #available(iOS 15.0, tvOS 18.0, *) {
30
+ return .hoverEffect
31
+ }
32
+ return .interaction
33
+ case .accessibility:
34
+ if #available(iOS 17.0, tvOS 17.0, macOS 14.0, *) {
35
+ return .accessibility
36
+ }
37
+ return .interaction
38
+ }
39
+ }
40
+ }
41
+
6
42
  internal struct ContentShapeModifier: ViewModifier, Record {
7
43
  @Field var shape: ShapeType = .rectangle
8
44
  @Field var cornerRadius: CGFloat = 0
9
45
  @Field var roundedCornerStyle: RoundedCornerStyle?
10
46
  @Field var cornerSize: CornerSize?
47
+ @Field var kind: [ContentShapeKind]?
11
48
 
12
49
  @ViewBuilder
13
50
  func body(content: Content) -> some View {
14
51
  switch shape {
15
52
  case .capsule:
16
- content.contentShape(makeCapsule(style: roundedCornerStyle))
53
+ applyContentShape(content, makeCapsule(style: roundedCornerStyle))
17
54
  case .circle:
18
- content.contentShape(Circle())
55
+ applyContentShape(content, Circle())
19
56
  case .containerRelativeShape:
20
- content.contentShape(ContainerRelativeShape())
57
+ applyContentShape(content, ContainerRelativeShape())
21
58
  case .ellipse:
22
- content.contentShape(Ellipse())
59
+ applyContentShape(content, Ellipse())
23
60
  case .rectangle:
24
- content.contentShape(Rectangle())
61
+ applyContentShape(content, Rectangle())
25
62
  case .roundedRectangle:
26
- content.contentShape(makeRoundedRectangle(cornerRadius: cornerRadius, cornerSize: cornerSize, style: roundedCornerStyle))
63
+ applyContentShape(content, makeRoundedRectangle(cornerRadius: cornerRadius, cornerSize: cornerSize, style: roundedCornerStyle))
64
+ }
65
+ }
66
+
67
+ @ViewBuilder
68
+ private func applyContentShape(_ content: Content, _ shape: some Shape) -> some View {
69
+ if let kind, !kind.isEmpty {
70
+ content.contentShape(ContentShapeKinds(kind.map { $0.toContentShapeKinds() }), shape)
71
+ } else {
72
+ content.contentShape(shape)
27
73
  }
28
74
  }
29
- }
75
+ }
@@ -35,7 +35,7 @@ public struct VStackView: ExpoSwiftUI.View {
35
35
  public var body: some View {
36
36
  VStack(
37
37
  alignment: props.alignment?.toHorizontalAlignment() ?? .center,
38
- spacing: CGFloat(props.spacing ?? 0)) {
38
+ spacing: props.spacing.map { CGFloat($0) }) {
39
39
  Children()
40
40
  }
41
41
  }
@@ -0,0 +1 @@
1
+ e03e2f31c624301c84fc40a2e9cec212037b2bf0
@@ -0,0 +1 @@
1
+ cb6ad358b8a9621bc1af657b5ee5dae249aab307096259dc366c79cde06d3508
@@ -0,0 +1 @@
1
+ 5f93ae090d6aa16199dce7f757d5b6862e51fda7997ebaddc37c32f53a37528d9f4aadb054e8565b9c8c44899a25ac91f3149df8f080e0d4d8cf67200dae1527
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "expo.modules.ui",
5
5
  "module": "expo.modules.ui",
6
- "version": "56.0.24",
6
+ "version": "56.0.25",
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-56.0.24.aar",
28
- "url": "expo.modules.ui-56.0.24.aar",
29
- "size": 1948447,
30
- "sha512": "a024aabee970c24f1addcda5096ff1f8bfcab14f012a86cfec181f04aa62cfaf7e840972f9bfc7683010f3dad73f23eef603bde8b88d2991bc3d3e94ab5d749f",
31
- "sha256": "3e555ee4e798c1d864201aa44a96c9e3ced81919cf022e67a9dfc49a10e12ab5",
32
- "sha1": "4efe515d7897ca02bf760223de9195f841eb9ec6",
33
- "md5": "48cd53c232055953dd055094d8822e74"
27
+ "name": "expo.modules.ui-56.0.25.aar",
28
+ "url": "expo.modules.ui-56.0.25.aar",
29
+ "size": 1950647,
30
+ "sha512": "5f93ae090d6aa16199dce7f757d5b6862e51fda7997ebaddc37c32f53a37528d9f4aadb054e8565b9c8c44899a25ac91f3149df8f080e0d4d8cf67200dae1527",
31
+ "sha256": "cb6ad358b8a9621bc1af657b5ee5dae249aab307096259dc366c79cde06d3508",
32
+ "sha1": "e03e2f31c624301c84fc40a2e9cec212037b2bf0",
33
+ "md5": "9796a0df6d89a9678a6787ce853725a4"
34
34
  }
35
35
  ]
36
36
  },
@@ -141,13 +141,13 @@
141
141
  ],
142
142
  "files": [
143
143
  {
144
- "name": "expo.modules.ui-56.0.24.aar",
145
- "url": "expo.modules.ui-56.0.24.aar",
146
- "size": 1948447,
147
- "sha512": "a024aabee970c24f1addcda5096ff1f8bfcab14f012a86cfec181f04aa62cfaf7e840972f9bfc7683010f3dad73f23eef603bde8b88d2991bc3d3e94ab5d749f",
148
- "sha256": "3e555ee4e798c1d864201aa44a96c9e3ced81919cf022e67a9dfc49a10e12ab5",
149
- "sha1": "4efe515d7897ca02bf760223de9195f841eb9ec6",
150
- "md5": "48cd53c232055953dd055094d8822e74"
144
+ "name": "expo.modules.ui-56.0.25.aar",
145
+ "url": "expo.modules.ui-56.0.25.aar",
146
+ "size": 1950647,
147
+ "sha512": "5f93ae090d6aa16199dce7f757d5b6862e51fda7997ebaddc37c32f53a37528d9f4aadb054e8565b9c8c44899a25ac91f3149df8f080e0d4d8cf67200dae1527",
148
+ "sha256": "cb6ad358b8a9621bc1af657b5ee5dae249aab307096259dc366c79cde06d3508",
149
+ "sha1": "e03e2f31c624301c84fc40a2e9cec212037b2bf0",
150
+ "md5": "9796a0df6d89a9678a6787ce853725a4"
151
151
  }
152
152
  ]
153
153
  },
@@ -161,8 +161,8 @@
161
161
  },
162
162
  "files": [
163
163
  {
164
- "name": "expo.modules.ui-56.0.24-sources.jar",
165
- "url": "expo.modules.ui-56.0.24-sources.jar",
164
+ "name": "expo.modules.ui-56.0.25-sources.jar",
165
+ "url": "expo.modules.ui-56.0.25-sources.jar",
166
166
  "size": 94747,
167
167
  "sha512": "23505426b78f10e16cc91d5157f0c5e4387705e4524b7a3bf0e579ffe19c77ae45a7442a97b6dd7b568171395ede319edc5909a390385ae96c6801935a5ecfc4",
168
168
  "sha256": "e53eaaf162c99ea11003c510033d74f581ecbb9dace9dbe566b15f85cbd1c27e",
@@ -0,0 +1 @@
1
+ d24eb9c58833906ad4a9fe0836fabfae9c45ef08
@@ -0,0 +1 @@
1
+ f91648580c486c82a50fe5d1427078834d223172908db5f93e42a7931f5e4e35
@@ -0,0 +1 @@
1
+ bfbaea478f0039baee5025a2abb427f11e7812e8051bfcab64695c9e096bc87dad4c963f62041422fb5620c6406029a8cfdca79521763cf98ead67fe56f3230b
@@ -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>56.0.24</version>
12
+ <version>56.0.25</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
+ ecb53e1cd406d1fcd8cc45b648ea7fa38fdeb0c5
@@ -0,0 +1 @@
1
+ d573fcbfc5e8c6afa2d49420491b8ef814fde5fa6e0ed0e3214a0b850c251db9
@@ -0,0 +1 @@
1
+ f319292e6a84d658e0a762a140627a4cde5114f00068f46c6b89d469aa4bd8bfa12427ffe166e0de5e2b2258be73f0d4700c084d14bb6635c6e1c4aaf97956ad
@@ -3,11 +3,11 @@
3
3
  <groupId>expo.modules.ui</groupId>
4
4
  <artifactId>expo.modules.ui</artifactId>
5
5
  <versioning>
6
- <latest>56.0.24</latest>
7
- <release>56.0.24</release>
6
+ <latest>56.0.25</latest>
7
+ <release>56.0.25</release>
8
8
  <versions>
9
- <version>56.0.24</version>
9
+ <version>56.0.25</version>
10
10
  </versions>
11
- <lastUpdated>20260729194931</lastUpdated>
11
+ <lastUpdated>20260806114100</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 1961bcff2f5ec6ce79f5fcd4a8bf05fc
1
+ 626e69c30fd8fa090bc74a352071e9c8
@@ -1 +1 @@
1
- 494beca449f06b23cf82782e1a3583f03c29fae0
1
+ 797e98dfbe3ba62fe03b9645762212b3b76a4a16
@@ -1 +1 @@
1
- 567321ddeca629665d8645b2f7363bdc6183c3e9d0933b3e01c733cfb6d2cc8b
1
+ 45362961b4607ece0177a8852bbbfc0364564fbe68bae6f610eef18143fd6d4e
@@ -1 +1 @@
1
- 8969ac8ad567a079ff80b88cdab9c80a443b8ca7490a9fa5cd0e5e5074b45b1fdeaac72a2bcded5443d29d465ddf1e85fe93ed2d5c88be5fbd5362bcbbfb0e2b
1
+ 118ab8dede46cc631be12e99688fcfea3dced50df79dd91f2e33c75febe556f2ae29e1075ba00cff9996bc854ccaf6e577d1def0056f9c0d839d0703c8034e3c
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/ui",
3
- "version": "56.0.24",
3
+ "version": "56.0.25",
4
4
  "description": "A collection of UI components",
5
5
  "sideEffects": [
6
6
  "*.fx.js",
@@ -95,8 +95,8 @@
95
95
  "@types/node": "^22.14.0",
96
96
  "@types/react": "~19.2.0",
97
97
  "react-native-worklets": "0.8.3",
98
- "expo": "56.0.18",
99
- "expo-module-scripts": "56.0.3"
98
+ "expo-module-scripts": "56.0.3",
99
+ "expo": "56.0.19"
100
100
  },
101
101
  "jest": {
102
102
  "preset": "expo-module-scripts"
@@ -120,7 +120,7 @@
120
120
  "optional": true
121
121
  }
122
122
  },
123
- "gitHead": "006eb2b47c82febc52fc87d61a1e235bf804dd79",
123
+ "gitHead": "eebecc21d8d868d97e72bd61bb8e668fb2feb704",
124
124
  "scripts": {
125
125
  "build": "expo-module build",
126
126
  "clean": "expo-module clean",
@@ -132,7 +132,6 @@ export function BottomSheet(props: BottomSheetProps) {
132
132
  useEffect(() => {
133
133
  if (indexProp === -1) {
134
134
  setIsPresented(false);
135
- fireCloseCallbacks();
136
135
  } else if (indexProp >= 0) {
137
136
  closedRef.current = false;
138
137
  setIsPresented(true);
@@ -140,17 +139,13 @@ export function BottomSheet(props: BottomSheetProps) {
140
139
  setCurrentIndex(clampedIndex);
141
140
  currentIndexRef.current = clampedIndex;
142
141
  }
143
- }, [indexProp, detents.length, fireCloseCallbacks]);
142
+ }, [indexProp, detents.length]);
144
143
 
145
- const handlePresentedChange = useCallback(
146
- (presented: boolean) => {
147
- if (!presented) {
148
- setIsPresented(false);
149
- fireCloseCallbacks();
150
- }
151
- },
152
- [fireCloseCallbacks]
153
- );
144
+ const handlePresentedChange = useCallback((presented: boolean) => {
145
+ if (!presented) {
146
+ setIsPresented(false);
147
+ }
148
+ }, []);
154
149
 
155
150
  const handleDetentChange = useCallback(
156
151
  (detent: PresentationDetent) => {
@@ -168,7 +163,6 @@ export function BottomSheet(props: BottomSheetProps) {
168
163
  const snapToIndex = (index: number) => {
169
164
  if (index === -1) {
170
165
  setIsPresented(false);
171
- fireCloseCallbacks();
172
166
  return;
173
167
  }
174
168
  const clampedIndex = Math.min(Math.max(index, 0), detents.length - 1);
@@ -179,14 +173,11 @@ export function BottomSheet(props: BottomSheetProps) {
179
173
  onChangeRef.current?.(clampedIndex);
180
174
  };
181
175
 
182
- // Fire close callbacks immediately: the native `onIsPresentedChange` event is
183
- // suppressed when JS drives the state change (the Swift layer guards against
184
- // the feedback loop), so we can't rely on handlePresentedChange here. The
185
- // closedRef guard inside fireCloseCallbacks prevents double-firing if a
186
- // native user-dismiss event also arrives during the animation.
176
+ // Close callbacks fire from the native `onDismiss` event, which SwiftUI sends after
177
+ // the dismissal transition finishes, so they can present another modal without UIKit
178
+ // rejecting it. Android awaits `hide()` for the same reason.
187
179
  const close = () => {
188
180
  setIsPresented(false);
189
- fireCloseCallbacks();
190
181
  };
191
182
 
192
183
  return {
@@ -200,7 +191,7 @@ export function BottomSheet(props: BottomSheetProps) {
200
191
  present: () => snapToIndex(0),
201
192
  dismiss: close,
202
193
  };
203
- }, [detents, fireCloseCallbacks]);
194
+ }, [detents]);
204
195
 
205
196
  useImperativeHandle(ref, () => methods, [methods]);
206
197
 
@@ -237,6 +228,7 @@ export function BottomSheet(props: BottomSheetProps) {
237
228
  <NativeBottomSheet
238
229
  isPresented={isPresented}
239
230
  onIsPresentedChange={handlePresentedChange}
231
+ onDismiss={fireCloseCallbacks}
240
232
  fitToContents={fitToContents}>
241
233
  <Group modifiers={modifiers}>
242
234
  <RNHostView matchContents={fitToContents}>
@@ -1,13 +1,33 @@
1
1
  import { createModifier } from './createModifier';
2
2
  import type { Shape } from './shapes/index';
3
3
 
4
+ /**
5
+ * The kinds of interaction a content shape applies to.
6
+ *
7
+ * - `interaction` - The kind for hit-testing and accessibility.
8
+ * - `dragPreview` - The kind for drag and drop previews.
9
+ * - `contextMenuPreview` - The kind for context menu previews.
10
+ * - `hoverEffect` - The kind for hover effects.
11
+ * - `accessibility` - The kind for accessibility.
12
+ */
13
+ export type ContentShapeKind =
14
+ | 'interaction'
15
+ | 'dragPreview'
16
+ | 'contextMenuPreview'
17
+ | 'hoverEffect'
18
+ | 'accessibility';
19
+
4
20
  /**
5
21
  * Defines the content shape for hit-testing purposes.
6
22
  *
7
23
  * This modifier is essential for making entire view areas (including `Spacer` or empty space)
8
24
  * interactive. Without it, only visible elements like `Text` or `Image` respond to tap gestures.
9
25
  *
26
+ * Pass `kind` to shape something other than the default `interaction` (hit-testing), such as
27
+ * the preview used while a `List.ForEach` row is dragged to reorder it.
28
+ *
10
29
  * @param shape - A shape configuration from the shapes API (rectangle, circle, capsule, ellipse, roundedRectangle).
30
+ * @param kind - The kinds to apply the shape to. Defaults to `interaction` when not provided.
11
31
  *
12
32
  * @example
13
33
  * ```tsx
@@ -35,6 +55,19 @@ import type { Shape } from './shapes/index';
35
55
  * }
36
56
  * ```
37
57
  *
38
- * @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contentshape(_:eofill:)).
58
+ * @example
59
+ * ```tsx
60
+ * // Round the preview shown while a row is dragged, so its corners are not filled in.
61
+ * <Label
62
+ * title={item.title}
63
+ * modifiers={[contentShape(shapes.roundedRectangle({ cornerRadius: 10 }), 'dragPreview')]}
64
+ * />
65
+ * ```
66
+ *
67
+ * @see Official [SwiftUI documentation](https://developer.apple.com/documentation/swiftui/view/contentshape(_:_:eofill:)).
39
68
  */
40
- export const contentShape = (shape: Shape) => createModifier('contentShape', shape);
69
+ export const contentShape = (shape: Shape, kind?: ContentShapeKind | ContentShapeKind[]) =>
70
+ createModifier('contentShape', {
71
+ ...shape,
72
+ kind: kind === undefined ? undefined : [kind].flat(),
73
+ });
@@ -1 +0,0 @@
1
- 4efe515d7897ca02bf760223de9195f841eb9ec6
@@ -1 +0,0 @@
1
- 3e555ee4e798c1d864201aa44a96c9e3ced81919cf022e67a9dfc49a10e12ab5
@@ -1 +0,0 @@
1
- a024aabee970c24f1addcda5096ff1f8bfcab14f012a86cfec181f04aa62cfaf7e840972f9bfc7683010f3dad73f23eef603bde8b88d2991bc3d3e94ab5d749f
@@ -1 +0,0 @@
1
- 544a73b2253dd27f063443e9a1e9e1a192e8155b
@@ -1 +0,0 @@
1
- 1029bdcba139a3a23f4bafc44674df9576f6ce78bae487d2952466911fdf6834
@@ -1 +0,0 @@
1
- cf7316192301afc3657572c73d8fff717c5cf2b5aad6ae5b126b236dc81f1ffee798a174ad3825ad170233dcb6fc648cc8fd168aec21f4a7d1428e62f4095b95
@@ -1 +0,0 @@
1
- c8bf1939b2a5d98b50323034509044ea34ba0e7c
@@ -1 +0,0 @@
1
- 35c33be790d8389e1f74784ed388adbdacab10fb029aa122a6be65bb8d33962c
@@ -1 +0,0 @@
1
- 895a27507d341004e860b8e854a5a04f1496faaa550270df0b65097673072bc0d0c8e0f0f4320a29e678b42d02c91bf44a7505a27315c8a5551c5be879348c7c