@expo/ui 57.0.23 → 57.0.24

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 (57) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/ui/menu/DropdownMenu.kt +8 -1
  4. package/android/src/main/java/expo/modules/ui/menu/DropdownMenuRecords.kt +13 -1
  5. package/build/community/menu/MenuView.android.d.ts.map +1 -1
  6. package/build/jetpack-compose/DropdownMenu/index.d.ts +8 -1
  7. package/build/jetpack-compose/DropdownMenu/index.d.ts.map +1 -1
  8. package/build/types.d.ts +27 -0
  9. package/build/types.d.ts.map +1 -1
  10. package/build/universal/ListItem/ListItem.android.d.ts.map +1 -1
  11. package/expo-module.config.json +1 -1
  12. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{57.0.23/expo.modules.ui-57.0.23-sources.jar → 57.0.24/expo.modules.ui-57.0.24-sources.jar} +0 -0
  13. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24-sources.jar.md5 +1 -0
  14. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24-sources.jar.sha1 +1 -0
  15. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24-sources.jar.sha256 +1 -0
  16. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24-sources.jar.sha512 +1 -0
  17. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{57.0.23/expo.modules.ui-57.0.23.aar → 57.0.24/expo.modules.ui-57.0.24.aar} +0 -0
  18. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.aar.md5 +1 -0
  19. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.aar.sha1 +1 -0
  20. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.aar.sha256 +1 -0
  21. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.aar.sha512 +1 -0
  22. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{57.0.23/expo.modules.ui-57.0.23.module → 57.0.24/expo.modules.ui-57.0.24.module} +22 -22
  23. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.module.md5 +1 -0
  24. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.module.sha1 +1 -0
  25. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.module.sha256 +1 -0
  26. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.module.sha512 +1 -0
  27. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{57.0.23/expo.modules.ui-57.0.23.pom → 57.0.24/expo.modules.ui-57.0.24.pom} +1 -1
  28. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.pom.md5 +1 -0
  29. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.pom.sha1 +1 -0
  30. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.pom.sha256 +1 -0
  31. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.24/expo.modules.ui-57.0.24.pom.sha512 +1 -0
  32. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml +4 -4
  33. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.md5 +1 -1
  34. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha1 +1 -1
  35. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha256 +1 -1
  36. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha512 +1 -1
  37. package/package.json +4 -4
  38. package/src/community/menu/MenuView.android.tsx +12 -2
  39. package/src/jetpack-compose/DropdownMenu/index.tsx +12 -1
  40. package/src/types.ts +28 -0
  41. package/src/universal/ListItem/ListItem.android.tsx +7 -2
  42. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23-sources.jar.md5 +0 -1
  43. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23-sources.jar.sha1 +0 -1
  44. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23-sources.jar.sha256 +0 -1
  45. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23-sources.jar.sha512 +0 -1
  46. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.aar.md5 +0 -1
  47. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.aar.sha1 +0 -1
  48. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.aar.sha256 +0 -1
  49. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.aar.sha512 +0 -1
  50. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.module.md5 +0 -1
  51. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.module.sha1 +0 -1
  52. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.module.sha256 +0 -1
  53. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.module.sha512 +0 -1
  54. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.pom.md5 +0 -1
  55. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.pom.sha1 +0 -1
  56. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.pom.sha256 +0 -1
  57. package/local-maven-repo/expo/modules/ui/expo.modules.ui/57.0.23/expo.modules.ui-57.0.23.pom.sha512 +0 -1
package/CHANGELOG.md CHANGED
@@ -10,6 +10,13 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 57.0.24 — 2026-10-14
14
+
15
+ ### 🐛 Bug fixes
16
+
17
+ - [Android] Fix the community `MenuView` opening detached above its anchor near the bottom of the screen, and add a `properties` prop to the Jetpack Compose `DropdownMenu`. ([#51412](https://github.com/expo/expo/pull/51412) by [@nishan](https://github.com/intergalacticspacehighway))
18
+ - [Android] Fix the universal `ListItem` ignoring `testID`. The prop was never passed to Compose, so end-to-end tools such as Maestro could not find list rows on Android. It is now applied as the `testID` modifier, like the universal `Button` and `Checkbox` do. ([#51480](https://github.com/expo/expo/pull/51480) by [@devonik](https://github.com/devonik))
19
+
13
20
  ## 57.0.23 — 2026-10-12
14
21
 
15
22
  ### 🎉 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 = '57.0.23'
15
+ version = '57.0.24'
16
16
 
17
17
  android {
18
18
  namespace "expo.modules.ui"
19
19
  defaultConfig {
20
20
  versionCode 1
21
- versionName "57.0.23"
21
+ versionName "57.0.24"
22
22
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
23
23
  }
24
24
  buildFeatures {
@@ -5,6 +5,7 @@ import androidx.compose.material3.DropdownMenu
5
5
  import androidx.compose.material3.MenuDefaults
6
6
  import androidx.compose.runtime.Composable
7
7
  import androidx.compose.ui.unit.dp
8
+ import androidx.compose.ui.window.PopupProperties
8
9
  import expo.modules.kotlin.views.FunctionalComposableScope
9
10
  import expo.modules.ui.UIComposableScope
10
11
  import expo.modules.ui.ModifierRegistry
@@ -27,7 +28,13 @@ fun FunctionalComposableScope.DropdownMenuContent(
27
28
  containerColor = props.color?.composeOrNull ?: MenuDefaults.containerColor,
28
29
  shadowElevation = props.shadowElevation?.dp ?: MenuDefaults.ShadowElevation,
29
30
  expanded = props.expanded,
30
- onDismissRequest = onDismissRequest
31
+ onDismissRequest = onDismissRequest,
32
+ properties = PopupProperties(
33
+ focusable = props.properties.focusable,
34
+ dismissOnBackPress = props.properties.dismissOnBackPress,
35
+ dismissOnClickOutside = props.properties.dismissOnClickOutside,
36
+ clippingEnabled = props.properties.clippingEnabled
37
+ )
31
38
  ) {
32
39
  itemsSlotView?.let {
33
40
  with(UIComposableScope()) {
@@ -1,7 +1,10 @@
1
1
  package expo.modules.ui.menu
2
2
 
3
3
  import android.graphics.Color
4
+ import expo.modules.kotlin.records.Field
5
+ import expo.modules.kotlin.records.Record
4
6
  import expo.modules.kotlin.types.Enumerable
7
+ import expo.modules.kotlin.types.OptimizedRecord
5
8
  import expo.modules.kotlin.views.ComposeProps
6
9
  import expo.modules.ui.ModifierList
7
10
  import expo.modules.kotlin.views.OptimizedComposeProps
@@ -11,11 +14,20 @@ enum class ActivationMethod(val value: String) : Enumerable {
11
14
  LONG_PRESS("longPress")
12
15
  }
13
16
 
17
+ @OptimizedRecord
18
+ data class ExpoPopupProperties(
19
+ @Field val focusable: Boolean = true,
20
+ @Field val dismissOnBackPress: Boolean = true,
21
+ @Field val dismissOnClickOutside: Boolean = true,
22
+ @Field val clippingEnabled: Boolean = true
23
+ ) : Record
24
+
14
25
  @OptimizedComposeProps
15
26
  data class DropdownMenuProps(
16
27
  val activationMethod: ActivationMethod = ActivationMethod.SINGLE_PRESS,
17
28
  val expanded: Boolean = false,
18
29
  val color: Color? = null,
19
30
  val modifiers: ModifierList = emptyList(),
20
- val shadowElevation: Float? = null
31
+ val shadowElevation: Float? = null,
32
+ val properties: ExpoPopupProperties = ExpoPopupProperties()
21
33
  ) : ComposeProps
@@ -1 +1 @@
1
- {"version":3,"file":"MenuView.android.d.ts","sourceRoot":"","sources":["../../../src/community/menu/MenuView.android.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAc,kBAAkB,EAAE,gBAAgB,EAAqB,MAAM,SAAS,CAAC;AA4InG;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;CAAE,2CAuEzF"}
1
+ {"version":3,"file":"MenuView.android.d.ts","sourceRoot":"","sources":["../../../src/community/menu/MenuView.android.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAc,kBAAkB,EAAE,gBAAgB,EAAqB,MAAM,SAAS,CAAC;AAmJnG;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;CAAE,2CA0EzF"}
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { StyleProp, ViewStyle, ColorValue } from 'react-native';
3
- import type { ModifierConfig } from '../../types';
3
+ import type { ModifierConfig, PopupProperties } from '../../types';
4
4
  /**
5
5
  * Props of the `DropdownMenu` component.
6
6
  */
@@ -30,6 +30,12 @@ export interface DropdownMenuProps {
30
30
  * @platform android
31
31
  */
32
32
  shadowElevation?: number;
33
+ /**
34
+ * Properties for the popup window of the dropdown menu.
35
+ *
36
+ * @platform android
37
+ */
38
+ properties?: PopupProperties;
33
39
  /**
34
40
  * Optional styles to apply to the `DropdownMenu`.
35
41
  */
@@ -72,4 +78,5 @@ declare namespace DropdownMenu {
72
78
  }
73
79
  export { DropdownMenu };
74
80
  export { DropdownMenuItem } from './DropdownMenuItem';
81
+ export type { PopupProperties };
75
82
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/DropdownMenu/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAclD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAE9B;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAE7B;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B;AAYD;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAOnD;yBAPe,KAAK;;;AAUrB;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAErD;yBAFe,OAAO;;;AAKvB;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAErD;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CAW7C;kBAXQ,YAAY;;;;;AAiBrB,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/DropdownMenu/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGrE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAcnE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAE9B;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAE7B;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAE7B;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B;AAaD;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAOnD;yBAPe,KAAK;;;AAUrB;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAErD;yBAFe,OAAO;;;AAKvB;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAErD;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CAW7C;kBAXQ,YAAY;;;;;AAiBrB,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,YAAY,EAAE,eAAe,EAAE,CAAC"}
package/build/types.d.ts CHANGED
@@ -44,4 +44,31 @@ export type DialogProperties = {
44
44
  */
45
45
  decorFitsSystemWindows?: boolean;
46
46
  };
47
+ /**
48
+ * Properties for the popup window, matching `PopupProperties` in Compose.
49
+ */
50
+ export type PopupProperties = {
51
+ /**
52
+ * Whether the popup is focusable. When `true`, the popup receives IME events and key presses,
53
+ * such as the back button.
54
+ * @default true
55
+ */
56
+ focusable?: boolean;
57
+ /**
58
+ * Whether the popup can be dismissed by pressing the back button. Has no effect when `focusable` is `false`.
59
+ * @default true
60
+ */
61
+ dismissOnBackPress?: boolean;
62
+ /**
63
+ * Whether the popup can be dismissed by clicking outside of its bounds.
64
+ * @default true
65
+ */
66
+ dismissOnClickOutside?: boolean;
67
+ /**
68
+ * Whether the popup window is clipped to the screen boundaries. Set to `false` to let it extend
69
+ * beyond them, which positions the popup accurately.
70
+ * @default true
71
+ */
72
+ clippingEnabled?: boolean;
73
+ };
47
74
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,IAAI,MAAM,CACvD,IAAI,EACJ,IAAI,SAAS,MAAM,GACf,CAAC,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,IAAI,CAAA;CAAE,KAAK,IAAI,CAAC,GAAG,SAAS,GACpD,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC;AAE1C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,IAAI,MAAM,CACvD,IAAI,EACJ,IAAI,SAAS,MAAM,GACf,CAAC,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,IAAI,CAAA;CAAE,KAAK,IAAI,CAAC,GAAG,SAAS,GACpD,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC;AAE1C;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ListItem.android.d.ts","sourceRoot":"","sources":["../../../src/universal/ListItem/ListItem.android.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAW7C;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAsC5C;AAED,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"ListItem.android.d.ts","sourceRoot":"","sources":["../../../src/universal/ListItem/ListItem.android.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAW7C;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CA2C5C;AAED,cAAc,SAAS,CAAC"}
@@ -10,7 +10,7 @@
10
10
  "publication": {
11
11
  "groupId": "expo.modules.ui",
12
12
  "artifactId": "expo.modules.ui",
13
- "version": "57.0.23",
13
+ "version": "57.0.24",
14
14
  "repository": "local-maven-repo"
15
15
  }
16
16
  }
@@ -0,0 +1 @@
1
+ db12810acc1f81f264310c6360569c2438bf64bfa7beb247645f72386693c03d
@@ -0,0 +1 @@
1
+ e747d4348f8c62981b1aa9c7d431862cec15608b7ca3435f0231f8c77048ab285cb174263cb72a0b3f76afcccfcc2a36c010cf9b38ba8ccbd448b497d545f0a7
@@ -0,0 +1 @@
1
+ 9597589716216065063aff62f26aaec746cda67f
@@ -0,0 +1 @@
1
+ 34ed3aa87360c91f4ba32a84d89e18c1def2585018c5baf7f9f462f5dbfe76c7
@@ -0,0 +1 @@
1
+ 0e7a330208213a1c86e6e50e441d378e8e31f68b739b43ece0f190839e4223906da6886250b925e0a3a4a9da66f9361fb25c10c7925bb4b2d911b7bc9d371385
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "expo.modules.ui",
5
5
  "module": "expo.modules.ui",
6
- "version": "57.0.23",
6
+ "version": "57.0.24",
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-57.0.23.aar",
28
- "url": "expo.modules.ui-57.0.23.aar",
29
- "size": 2087870,
30
- "sha512": "7ba6b0ca0e41c0aeaea90cfc7d49664bb88531a251ba79b1124009eba0b724b48ba1c306744111a40871213cdf5767638b931803dc2229c4ba1850b6cc87ca15",
31
- "sha256": "45594b39ac8f0c6eb37b663d40160b8e93b6d5f56b985a739c8a03c6780d910f",
32
- "sha1": "bc99884c9e5f484800ffb10156cc8b50fa4d31c8",
33
- "md5": "53230bb5c7cc2bcc0d717bc544974f6c"
27
+ "name": "expo.modules.ui-57.0.24.aar",
28
+ "url": "expo.modules.ui-57.0.24.aar",
29
+ "size": 2092728,
30
+ "sha512": "0e7a330208213a1c86e6e50e441d378e8e31f68b739b43ece0f190839e4223906da6886250b925e0a3a4a9da66f9361fb25c10c7925bb4b2d911b7bc9d371385",
31
+ "sha256": "34ed3aa87360c91f4ba32a84d89e18c1def2585018c5baf7f9f462f5dbfe76c7",
32
+ "sha1": "9597589716216065063aff62f26aaec746cda67f",
33
+ "md5": "f1d1772350ffa1b84af3b4dd39097087"
34
34
  }
35
35
  ]
36
36
  },
@@ -141,13 +141,13 @@
141
141
  ],
142
142
  "files": [
143
143
  {
144
- "name": "expo.modules.ui-57.0.23.aar",
145
- "url": "expo.modules.ui-57.0.23.aar",
146
- "size": 2087870,
147
- "sha512": "7ba6b0ca0e41c0aeaea90cfc7d49664bb88531a251ba79b1124009eba0b724b48ba1c306744111a40871213cdf5767638b931803dc2229c4ba1850b6cc87ca15",
148
- "sha256": "45594b39ac8f0c6eb37b663d40160b8e93b6d5f56b985a739c8a03c6780d910f",
149
- "sha1": "bc99884c9e5f484800ffb10156cc8b50fa4d31c8",
150
- "md5": "53230bb5c7cc2bcc0d717bc544974f6c"
144
+ "name": "expo.modules.ui-57.0.24.aar",
145
+ "url": "expo.modules.ui-57.0.24.aar",
146
+ "size": 2092728,
147
+ "sha512": "0e7a330208213a1c86e6e50e441d378e8e31f68b739b43ece0f190839e4223906da6886250b925e0a3a4a9da66f9361fb25c10c7925bb4b2d911b7bc9d371385",
148
+ "sha256": "34ed3aa87360c91f4ba32a84d89e18c1def2585018c5baf7f9f462f5dbfe76c7",
149
+ "sha1": "9597589716216065063aff62f26aaec746cda67f",
150
+ "md5": "f1d1772350ffa1b84af3b4dd39097087"
151
151
  }
152
152
  ]
153
153
  },
@@ -161,13 +161,13 @@
161
161
  },
162
162
  "files": [
163
163
  {
164
- "name": "expo.modules.ui-57.0.23-sources.jar",
165
- "url": "expo.modules.ui-57.0.23-sources.jar",
166
- "size": 107457,
167
- "sha512": "0a89146da34d837d01eb682540df3405b70f6b1d18c50bedc2ecc1d0dee3188df777de03a5b629100950a0f6d3c2d9f89f52416641cb22d8f3a715c8e841ff18",
168
- "sha256": "5f4063182b296fa0028d945a2621f9d8a86eb5219b0ad88492a18dfe4d737978",
169
- "sha1": "04332c3498b6b2a56dfb4cbefe592c11f4a8f36a",
170
- "md5": "9e119ee5a1c2c38e6d69d4f866341e7a"
164
+ "name": "expo.modules.ui-57.0.24-sources.jar",
165
+ "url": "expo.modules.ui-57.0.24-sources.jar",
166
+ "size": 107661,
167
+ "sha512": "e747d4348f8c62981b1aa9c7d431862cec15608b7ca3435f0231f8c77048ab285cb174263cb72a0b3f76afcccfcc2a36c010cf9b38ba8ccbd448b497d545f0a7",
168
+ "sha256": "db12810acc1f81f264310c6360569c2438bf64bfa7beb247645f72386693c03d",
169
+ "sha1": "7fea4274b4bfb186f2f09029712af9cf4e63851f",
170
+ "md5": "1a02710d453ddf4e16b757d49d762e15"
171
171
  }
172
172
  ]
173
173
  }
@@ -0,0 +1 @@
1
+ 2259f0139a5bc618b70a196407a0b69dda2739fa
@@ -0,0 +1 @@
1
+ 84c1267cc40bfde0f6aaa90c16439d3b89f56ed0942e842d9ecbd4612fe14c1f
@@ -0,0 +1 @@
1
+ d327d00fb8921a83e9258632e926b30c25ca0c4126ecd8b828d71f5b0aec14c5bf0e74fba977ed2f7f60b5b08b3b673ac10fbf424982d783274b4a03906c6f53
@@ -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>57.0.23</version>
12
+ <version>57.0.24</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
+ 0cc3af5794746db75db029beff0f3f54c45bc91d
@@ -0,0 +1 @@
1
+ 701253bb9938969cba7be92fdc216b8e5a5c75e8775746df1a97aa6d8b188cb4
@@ -0,0 +1 @@
1
+ b755143f8a4cf08d6a2a8c47fc35438158401425f2a6f64c1e95cb0f3951bc200e344da72c552fe625e7d7eb13979caf82079d07aeaf647b7e782bb3943f365c
@@ -3,11 +3,11 @@
3
3
  <groupId>expo.modules.ui</groupId>
4
4
  <artifactId>expo.modules.ui</artifactId>
5
5
  <versioning>
6
- <latest>57.0.23</latest>
7
- <release>57.0.23</release>
6
+ <latest>57.0.24</latest>
7
+ <release>57.0.24</release>
8
8
  <versions>
9
- <version>57.0.23</version>
9
+ <version>57.0.24</version>
10
10
  </versions>
11
- <lastUpdated>20261012142026</lastUpdated>
11
+ <lastUpdated>20261014162610</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 24ee94a25190ebaeb53918c5209d4321
1
+ 15de773378cb007559dd0f8b83c7a885
@@ -1 +1 @@
1
- 19abdc5ee5d92e4d98095aba33600fd7d66cdd9a
1
+ 0114d80ccc3501c8ec62578135450c645fd9522a
@@ -1 +1 @@
1
- d5851aa26d95ed5105d695c05844f6188c86f45a8320f41d9e135463fa0294b0
1
+ f73add6b6b9262b17b7a12cf0110610d53e58f4a8a351d6e6b6f186faf206a8a
@@ -1 +1 @@
1
- 5ed30451f94f10e9f83d081992d999c14cca93e46c5d37296d2634c82ae630e4c5cc264158a9de4df3db398c3afa42f99f9b4fb64d19f6c432d0919950274cbc
1
+ 7f8af4f5064b0b04334dd70817b122c3efdbe2f647f4f47b99d4a3c7931e5288fcf125f5972c51f7617fe9f429fba3328b37cfeab86ac45cf3ba697858ab1287
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/ui",
3
- "version": "57.0.23",
3
+ "version": "57.0.24",
4
4
  "description": "A collection of UI components",
5
5
  "sideEffects": [
6
6
  "*.fx.js",
@@ -96,8 +96,8 @@
96
96
  "@types/react": "~19.2.0",
97
97
  "react-native-reanimated": "4.5.1",
98
98
  "react-native-worklets": "0.10.1",
99
- "expo": "57.0.28",
100
- "expo-module-scripts": "56.0.3"
99
+ "expo-module-scripts": "56.0.3",
100
+ "expo": "57.0.29"
101
101
  },
102
102
  "jest": {
103
103
  "preset": "expo-module-scripts"
@@ -121,7 +121,7 @@
121
121
  "optional": true
122
122
  }
123
123
  },
124
- "gitHead": "58da4edafcb043872c3ed9bf8f5957e6544d0a9c",
124
+ "gitHead": "0607af7a70d0ea3e58a6d55824aac5cfd3e78613",
125
125
  "scripts": {
126
126
  "build": "expo-module build",
127
127
  "clean": "expo-module clean",
@@ -13,6 +13,10 @@ import { Icon } from '../../jetpack-compose/Icon';
13
13
  import { RNHostView } from '../../jetpack-compose/RNHostView';
14
14
  import { Text as ComposeText } from '../../jetpack-compose/Text';
15
15
  import { useMaterialColors } from '../../jetpack-compose/colors';
16
+ import type { PopupProperties } from '../../types';
17
+
18
+ // Clipped popups drop the status bar offset, so edge-to-edge menus near the bottom detach from the anchor.
19
+ const POPUP_PROPERTIES: PopupProperties = { clippingEnabled: false };
16
20
 
17
21
  function actionId(action: MenuAction): string {
18
22
  return action.id ?? action.title;
@@ -82,7 +86,10 @@ function MenuActionItem({ action, onPressAction, dismissAll, destructiveColor }:
82
86
  );
83
87
  }
84
88
  return (
85
- <DropdownMenu expanded={submenuExpanded} onDismissRequest={() => setSubmenuExpanded(false)}>
89
+ <DropdownMenu
90
+ expanded={submenuExpanded}
91
+ onDismissRequest={() => setSubmenuExpanded(false)}
92
+ properties={POPUP_PROPERTIES}>
86
93
  <DropdownMenu.Trigger>
87
94
  <DropdownMenuItem
88
95
  enabled={!attributes?.disabled}
@@ -191,7 +198,10 @@ export function MenuView(props: MenuComponentProps & { ref?: React.Ref<MenuCompo
191
198
  return (
192
199
  <View style={style} testID={testID}>
193
200
  <Host colorScheme={colorScheme} matchContents>
194
- <DropdownMenu expanded={expanded} onDismissRequest={dismissAll}>
201
+ <DropdownMenu
202
+ expanded={expanded}
203
+ onDismissRequest={dismissAll}
204
+ properties={POPUP_PROPERTIES}>
195
205
  <DropdownMenu.Trigger>
196
206
  <RNHostView matchContents>
197
207
  <Pressable
@@ -3,7 +3,7 @@ import type { ReactNode } from 'react';
3
3
  import type { StyleProp, ViewStyle, ColorValue } from 'react-native';
4
4
 
5
5
  import { PresentedContent } from '../../PresentedContentContext';
6
- import type { ModifierConfig } from '../../types';
6
+ import type { ModifierConfig, PopupProperties } from '../../types';
7
7
  import { createViewModifierEventListener } from '../modifiers/utils';
8
8
 
9
9
  const MenuNativeView: React.ComponentType<NativeMenuProps> = requireNativeView(
@@ -51,6 +51,13 @@ export interface DropdownMenuProps {
51
51
  */
52
52
  shadowElevation?: number;
53
53
 
54
+ /**
55
+ * Properties for the popup window of the dropdown menu.
56
+ *
57
+ * @platform android
58
+ */
59
+ properties?: PopupProperties;
60
+
54
61
  /**
55
62
  * Optional styles to apply to the `DropdownMenu`.
56
63
  */
@@ -67,6 +74,7 @@ type NativeMenuProps = {
67
74
  onDismissRequest?: () => void;
68
75
  color?: ColorValue;
69
76
  shadowElevation?: number;
77
+ properties?: PopupProperties;
70
78
  style?: StyleProp<ViewStyle>;
71
79
  modifiers?: ModifierConfig[];
72
80
  children?: ReactNode;
@@ -120,3 +128,6 @@ DropdownMenu.Items = Items;
120
128
 
121
129
  export { DropdownMenu };
122
130
  export { DropdownMenuItem } from './DropdownMenuItem';
131
+
132
+ // Re-exported so the docs generator includes PopupProperties on the DropdownMenu API page.
133
+ export type { PopupProperties };
package/src/types.ts CHANGED
@@ -50,3 +50,31 @@ export type DialogProperties = {
50
50
  */
51
51
  decorFitsSystemWindows?: boolean;
52
52
  };
53
+
54
+ /**
55
+ * Properties for the popup window, matching `PopupProperties` in Compose.
56
+ */
57
+ export type PopupProperties = {
58
+ /**
59
+ * Whether the popup is focusable. When `true`, the popup receives IME events and key presses,
60
+ * such as the back button.
61
+ * @default true
62
+ */
63
+ focusable?: boolean;
64
+ /**
65
+ * Whether the popup can be dismissed by pressing the back button. Has no effect when `focusable` is `false`.
66
+ * @default true
67
+ */
68
+ dismissOnBackPress?: boolean;
69
+ /**
70
+ * Whether the popup can be dismissed by clicking outside of its bounds.
71
+ * @default true
72
+ */
73
+ dismissOnClickOutside?: boolean;
74
+ /**
75
+ * Whether the popup window is clipped to the screen boundaries. Set to `false` to let it extend
76
+ * beyond them, which positions the popup accurately.
77
+ * @default true
78
+ */
79
+ clippingEnabled?: boolean;
80
+ };
@@ -1,5 +1,5 @@
1
1
  import { ListItem as ComposeListItem, Text } from '@expo/ui/jetpack-compose';
2
- import { clickable } from '@expo/ui/jetpack-compose/modifiers';
2
+ import { clickable, testID as testIDModifier } from '@expo/ui/jetpack-compose/modifiers';
3
3
  import { Children, type ReactNode } from 'react';
4
4
 
5
5
  import { extractListItemSlots } from './ListItemSlots';
@@ -25,6 +25,7 @@ export function ListItem(props: ListItemProps) {
25
25
  leading: leadingProp,
26
26
  trailing: trailingProp,
27
27
  supportingText,
28
+ testID,
28
29
  modifiers,
29
30
  colors,
30
31
  } = props;
@@ -32,7 +33,11 @@ export function ListItem(props: ListItemProps) {
32
33
  const leading = slots.leading ?? leadingProp;
33
34
  const trailing = slots.trailing ?? trailingProp;
34
35
  const supporting = slots.supporting ?? supportingText;
35
- const itemModifiers = [...(onPress ? [clickable(onPress)] : []), ...(modifiers ?? [])];
36
+ const itemModifiers = [
37
+ ...(onPress ? [clickable(onPress)] : []),
38
+ ...(testID ? [testIDModifier(testID)] : []),
39
+ ...(modifiers ?? []),
40
+ ];
36
41
 
37
42
  return (
38
43
  <ComposeListItem colors={colors} modifiers={itemModifiers.length ? itemModifiers : undefined}>
@@ -1 +0,0 @@
1
- 04332c3498b6b2a56dfb4cbefe592c11f4a8f36a
@@ -1 +0,0 @@
1
- 5f4063182b296fa0028d945a2621f9d8a86eb5219b0ad88492a18dfe4d737978
@@ -1 +0,0 @@
1
- 0a89146da34d837d01eb682540df3405b70f6b1d18c50bedc2ecc1d0dee3188df777de03a5b629100950a0f6d3c2d9f89f52416641cb22d8f3a715c8e841ff18
@@ -1 +0,0 @@
1
- bc99884c9e5f484800ffb10156cc8b50fa4d31c8
@@ -1 +0,0 @@
1
- 45594b39ac8f0c6eb37b663d40160b8e93b6d5f56b985a739c8a03c6780d910f
@@ -1 +0,0 @@
1
- 7ba6b0ca0e41c0aeaea90cfc7d49664bb88531a251ba79b1124009eba0b724b48ba1c306744111a40871213cdf5767638b931803dc2229c4ba1850b6cc87ca15
@@ -1 +0,0 @@
1
- 0f57bae59c7621092ebe1c14bfb8c87cc5b7273c
@@ -1 +0,0 @@
1
- 0b119d47d60446499106b77dc5f2c57ceec7eba851a407248935ad6e2ecc3539
@@ -1 +0,0 @@
1
- 7f583d3b3219882068aec8344ed3dc1018dd834668efb13abb894a7f40383e29d5927b3831e05e6fdeb563cc88c4dfbc7755f2cd1c196f7f94944a7952e43b70
@@ -1 +0,0 @@
1
- 62243ce65c64f455e89ce81503d756d2e527d796
@@ -1 +0,0 @@
1
- 44a4eede4dc8a4bded07f608acb42e408ce8f348f356b2da8c9d59e213cd7211
@@ -1 +0,0 @@
1
- cf1da141b64a97372daa7bd1c5df1e9b385ad5fcc99a1bc61405fe63cbdee68ac487cfd7a034fb6a2b103e9be2559c3f8366cdbec67826b71ccb6718ff31ee4c