@expo/ui 55.0.14 → 55.0.16

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 (67) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/ui/ExpoUIModule.kt +21 -3
  4. package/android/src/main/java/expo/modules/ui/ExposedDropdownMenuBoxComposableScope.kt +8 -0
  5. package/android/src/main/java/expo/modules/ui/ModifierRegistry.kt +27 -1
  6. package/android/src/main/java/expo/modules/ui/menu/DropdownMenuItem.kt +2 -6
  7. package/android/src/main/java/expo/modules/ui/menu/ExposedDropdownMenuBoxView.kt +34 -0
  8. package/android/src/main/java/expo/modules/ui/menu/ExposedDropdownMenuView.kt +40 -0
  9. package/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts +1 -7
  10. package/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  11. package/build/jetpack-compose/ExposedDropdownMenuBox/ExposedDropdownMenu.d.ts +35 -0
  12. package/build/jetpack-compose/ExposedDropdownMenuBox/ExposedDropdownMenu.d.ts.map +1 -0
  13. package/build/jetpack-compose/ExposedDropdownMenuBox/index.d.ts +42 -0
  14. package/build/jetpack-compose/ExposedDropdownMenuBox/index.d.ts.map +1 -0
  15. package/build/jetpack-compose/index.d.ts +1 -0
  16. package/build/jetpack-compose/index.d.ts.map +1 -1
  17. package/build/jetpack-compose/modifiers/index.d.ts +7 -0
  18. package/build/jetpack-compose/modifiers/index.d.ts.map +1 -1
  19. package/expo-module.config.json +1 -1
  20. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{55.0.14/expo.modules.ui-55.0.14-sources.jar → 55.0.16/expo.modules.ui-55.0.16-sources.jar} +0 -0
  21. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16-sources.jar.md5 +1 -0
  22. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16-sources.jar.sha1 +1 -0
  23. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16-sources.jar.sha256 +1 -0
  24. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16-sources.jar.sha512 +1 -0
  25. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.aar +0 -0
  26. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.aar.md5 +1 -0
  27. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.aar.sha1 +1 -0
  28. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.aar.sha256 +1 -0
  29. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.aar.sha512 +1 -0
  30. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{55.0.14/expo.modules.ui-55.0.14.module → 55.0.16/expo.modules.ui-55.0.16.module} +22 -22
  31. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.module.md5 +1 -0
  32. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.module.sha1 +1 -0
  33. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.module.sha256 +1 -0
  34. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.module.sha512 +1 -0
  35. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{55.0.14/expo.modules.ui-55.0.14.pom → 55.0.16/expo.modules.ui-55.0.16.pom} +1 -1
  36. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.pom.md5 +1 -0
  37. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.pom.sha1 +1 -0
  38. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.pom.sha256 +1 -0
  39. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.16/expo.modules.ui-55.0.16.pom.sha512 +1 -0
  40. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml +4 -4
  41. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.md5 +1 -1
  42. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha1 +1 -1
  43. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha256 +1 -1
  44. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha512 +1 -1
  45. package/package.json +2 -2
  46. package/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx +1 -7
  47. package/src/jetpack-compose/ExposedDropdownMenuBox/ExposedDropdownMenu.tsx +54 -0
  48. package/src/jetpack-compose/ExposedDropdownMenuBox/index.tsx +73 -0
  49. package/src/jetpack-compose/index.ts +1 -0
  50. package/src/jetpack-compose/modifiers/index.ts +12 -0
  51. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14-sources.jar.md5 +0 -1
  52. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14-sources.jar.sha1 +0 -1
  53. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14-sources.jar.sha256 +0 -1
  54. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14-sources.jar.sha512 +0 -1
  55. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.aar +0 -0
  56. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.aar.md5 +0 -1
  57. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.aar.sha1 +0 -1
  58. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.aar.sha256 +0 -1
  59. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.aar.sha512 +0 -1
  60. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.module.md5 +0 -1
  61. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.module.sha1 +0 -1
  62. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.module.sha256 +0 -1
  63. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.module.sha512 +0 -1
  64. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.pom.md5 +0 -1
  65. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.pom.sha1 +0 -1
  66. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.pom.sha256 +0 -1
  67. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.14/expo.modules.ui-55.0.14.pom.sha512 +0 -1
package/CHANGELOG.md CHANGED
@@ -10,6 +10,16 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 55.0.16 — 2026-05-13
14
+
15
+ ### 🎉 New features
16
+
17
+ - [android] Add `ExposedDropdownMenuBox` component. ([#44201](https://github.com/expo/expo/pull/44201) by [@vonovak](https://github.com/vonovak))
18
+
19
+ ## 55.0.15 — 2026-05-05
20
+
21
+ _This version does not introduce any user-facing changes._
22
+
13
23
  ## 55.0.14 — 2026-05-04
14
24
 
15
25
  ### 🎉 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 = '55.0.14'
15
+ version = '55.0.16'
16
16
 
17
17
  android {
18
18
  namespace "expo.modules.ui"
19
19
  defaultConfig {
20
20
  versionCode 1
21
- versionName "55.0.14"
21
+ versionName "55.0.16"
22
22
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
23
23
  }
24
24
  buildFeatures {
@@ -28,7 +28,10 @@ import expo.modules.ui.menu.DropdownMenuContent
28
28
  import expo.modules.ui.menu.DropdownMenuProps
29
29
  import expo.modules.ui.menu.DropdownMenuItemContent
30
30
  import expo.modules.ui.menu.DropdownMenuItemProps
31
- import expo.modules.ui.menu.ItemPressedEvent
31
+ import expo.modules.ui.menu.ExposedDropdownMenuBoxContent
32
+ import expo.modules.ui.menu.ExposedDropdownMenuBoxProps
33
+ import expo.modules.ui.menu.ExposedDropdownMenuContent
34
+ import expo.modules.ui.menu.ExposedDropdownMenuProps
32
35
  import okhttp3.OkHttpClient
33
36
 
34
37
  class ExpoUIModule : Module() {
@@ -255,8 +258,8 @@ class ExpoUIModule : Module() {
255
258
  ExpoUIView("DropdownMenuItemView", events = {
256
259
  Events("onItemPressed")
257
260
  }) { props: DropdownMenuItemProps ->
258
- val onItemPressed by remember { EventDispatcher<ItemPressedEvent>() }
259
- DropdownMenuItemContent(props) { onItemPressed(it) }
261
+ val onItemPressed by remember { EventDispatcher<Unit>() }
262
+ DropdownMenuItemContent(props) { onItemPressed(Unit) }
260
263
  }
261
264
 
262
265
  ExpoUIView("LinearProgressIndicatorView") { props: LinearProgressIndicatorProps ->
@@ -470,6 +473,21 @@ class ExpoUIModule : Module() {
470
473
  FloatingActionButtonContent(props) { onButtonPressed(Unit) }
471
474
  }
472
475
 
476
+ ExpoUIView("ExposedDropdownMenuBoxView", events = {
477
+ Events("onExpandedChange")
478
+ }) { props: ExposedDropdownMenuBoxProps ->
479
+ val onExpandedChange by remember { EventDispatcher<GenericEventPayload1<Boolean>>() }
480
+ ExposedDropdownMenuBoxContent(props) { onExpandedChange(GenericEventPayload1(it)) }
481
+ }
482
+
483
+ ExpoUIView("ExposedDropdownMenuView", events = {
484
+ Events("onDismissRequest")
485
+ }) { props: ExposedDropdownMenuProps ->
486
+ val onDismissRequest by remember { EventDispatcher<Unit>() }
487
+ ExposedDropdownMenuContent(props) { onDismissRequest(Unit) }
488
+ }
489
+
490
+
473
491
  //endregion Expo UI views
474
492
  }
475
493
  }
@@ -0,0 +1,8 @@
1
+ package expo.modules.ui
2
+
3
+ import androidx.compose.material3.ExperimentalMaterial3Api
4
+ import androidx.compose.material3.ExposedDropdownMenuBoxScope
5
+ import androidx.compose.runtime.compositionLocalOf
6
+
7
+ @OptIn(ExperimentalMaterial3Api::class)
8
+ val LocalExposedDropdownMenuBoxScope = compositionLocalOf<ExposedDropdownMenuBoxScope?> { null }
@@ -1,4 +1,4 @@
1
- @file:OptIn(ExperimentalMaterial3ExpressiveApi::class)
1
+ @file:OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalMaterial3Api::class)
2
2
 
3
3
  package expo.modules.ui
4
4
 
@@ -28,7 +28,9 @@ import androidx.compose.ui.semantics.Role
28
28
  import androidx.compose.foundation.shape.CircleShape
29
29
  import androidx.compose.foundation.shape.CutCornerShape
30
30
  import androidx.compose.foundation.shape.RoundedCornerShape
31
+ import androidx.compose.material3.ExperimentalMaterial3Api
31
32
  import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
33
+ import androidx.compose.material3.ExposedDropdownMenuAnchorType
32
34
  import androidx.compose.material3.toShape
33
35
  import androidx.compose.runtime.Composable
34
36
  import expo.modules.ui.convertibles.resolveAnimatable
@@ -201,6 +203,15 @@ internal data class ToggleableParams(
201
203
  @Field val role: SemanticRoleType? = null
202
204
  ) : Record
203
205
 
206
+ internal enum class MenuAnchorType(val value: String) : Enumerable {
207
+ PRIMARY_NOT_EDITABLE("primaryNotEditable")
208
+ }
209
+
210
+ internal data class MenuAnchorParams(
211
+ @Field val type: MenuAnchorType = MenuAnchorType.PRIMARY_NOT_EDITABLE,
212
+ @Field val enabled: Boolean = true
213
+ ) : Record
214
+
204
215
  // endregion
205
216
 
206
217
  /**
@@ -560,5 +571,20 @@ object ModifierRegistry {
560
571
  onValueChange = { eventDispatcher("toggleable", emptyMap()) }
561
572
  )
562
573
  }
574
+
575
+ // ExposedDropdownMenuBox scope-dependent modifier
576
+ register("menuAnchor") { map, _, _, _ ->
577
+ val dropdownScope = LocalExposedDropdownMenuBoxScope.current
578
+ ?: error("menuAnchor modifier can only be used inside ExposedDropdownMenuBox")
579
+ val params = recordFromMap<MenuAnchorParams>(map)
580
+ with(dropdownScope) {
581
+ Modifier.menuAnchor(
582
+ type = when (params.type) {
583
+ MenuAnchorType.PRIMARY_NOT_EDITABLE -> ExposedDropdownMenuAnchorType.PrimaryNotEditable
584
+ },
585
+ enabled = params.enabled
586
+ )
587
+ }
588
+ }
563
589
  }
564
590
  }
@@ -3,7 +3,6 @@ package expo.modules.ui.menu
3
3
  import android.graphics.Color
4
4
  import androidx.compose.material3.DropdownMenuItem
5
5
  import androidx.compose.material3.MenuDefaults
6
- import androidx.compose.material3.Text
7
6
  import androidx.compose.runtime.Composable
8
7
  import expo.modules.kotlin.records.Field
9
8
  import expo.modules.kotlin.records.Record
@@ -14,9 +13,6 @@ import expo.modules.ui.ModifierList
14
13
  import expo.modules.ui.ModifierRegistry
15
14
  import expo.modules.ui.composeOrNull
16
15
  import expo.modules.ui.findChildSlotView
17
- import java.io.Serializable
18
-
19
- class ItemPressedEvent : Record, Serializable
20
16
 
21
17
  class DropdownMenuItemColors : Record {
22
18
  @Field val textColor: Color? = null
@@ -36,7 +32,7 @@ data class DropdownMenuItemProps(
36
32
  @Composable
37
33
  fun FunctionalComposableScope.DropdownMenuItemContent(
38
34
  props: DropdownMenuItemProps,
39
- onItemPressed: (ItemPressedEvent) -> Unit
35
+ onItemPressed: () -> Unit
40
36
  ) {
41
37
  val textSlotView = findChildSlotView(view, "text")
42
38
  val leadingSlotView = findChildSlotView(view, "leadingIcon")
@@ -64,7 +60,7 @@ fun FunctionalComposableScope.DropdownMenuItemContent(
64
60
  { with(ComposableScope()) { with(it) { Content() } } }
65
61
  },
66
62
  onClick = {
67
- onItemPressed(ItemPressedEvent())
63
+ onItemPressed()
68
64
  }
69
65
  )
70
66
  }
@@ -0,0 +1,34 @@
1
+ package expo.modules.ui.menu
2
+
3
+ import androidx.compose.material3.ExperimentalMaterial3Api
4
+ import androidx.compose.material3.ExposedDropdownMenuBox
5
+ import androidx.compose.runtime.Composable
6
+ import androidx.compose.runtime.CompositionLocalProvider
7
+ import expo.modules.kotlin.views.ComposableScope
8
+ import expo.modules.kotlin.views.ComposeProps
9
+ import expo.modules.kotlin.views.FunctionalComposableScope
10
+ import expo.modules.ui.LocalExposedDropdownMenuBoxScope
11
+ import expo.modules.ui.ModifierList
12
+ import expo.modules.ui.ModifierRegistry
13
+
14
+ data class ExposedDropdownMenuBoxProps(
15
+ val expanded: Boolean = false,
16
+ val modifiers: ModifierList = emptyList()
17
+ ) : ComposeProps
18
+
19
+ @OptIn(ExperimentalMaterial3Api::class)
20
+ @Composable
21
+ fun FunctionalComposableScope.ExposedDropdownMenuBoxContent(
22
+ props: ExposedDropdownMenuBoxProps,
23
+ onExpandedChange: (Boolean) -> Unit
24
+ ) {
25
+ ExposedDropdownMenuBox(
26
+ expanded = props.expanded,
27
+ onExpandedChange = onExpandedChange,
28
+ modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher)
29
+ ) {
30
+ CompositionLocalProvider(LocalExposedDropdownMenuBoxScope provides this) {
31
+ Children(ComposableScope())
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,40 @@
1
+ package expo.modules.ui.menu
2
+
3
+ import android.graphics.Color
4
+ import androidx.compose.material3.ExperimentalMaterial3Api
5
+ import androidx.compose.material3.MenuDefaults
6
+ import androidx.compose.runtime.Composable
7
+ import expo.modules.kotlin.views.ComposableScope
8
+ import expo.modules.kotlin.views.ComposeProps
9
+ import expo.modules.kotlin.views.FunctionalComposableScope
10
+ import expo.modules.ui.LocalExposedDropdownMenuBoxScope
11
+ import expo.modules.ui.ModifierList
12
+ import expo.modules.ui.ModifierRegistry
13
+ import expo.modules.ui.composeOrNull
14
+
15
+ data class ExposedDropdownMenuProps(
16
+ val expanded: Boolean = false,
17
+ val containerColor: Color? = null,
18
+ val modifiers: ModifierList = emptyList()
19
+ ) : ComposeProps
20
+
21
+ @OptIn(ExperimentalMaterial3Api::class)
22
+ @Composable
23
+ fun FunctionalComposableScope.ExposedDropdownMenuContent(
24
+ props: ExposedDropdownMenuProps,
25
+ onDismissRequest: () -> Unit
26
+ ) {
27
+ val scope = LocalExposedDropdownMenuBoxScope.current
28
+ ?: error("ExposedDropdownMenu can only be used inside ExposedDropdownMenuBox")
29
+
30
+ with(scope) {
31
+ ExposedDropdownMenu(
32
+ expanded = props.expanded,
33
+ onDismissRequest = onDismissRequest,
34
+ containerColor = props.containerColor?.composeOrNull ?: MenuDefaults.containerColor,
35
+ modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher)
36
+ ) {
37
+ Children(ComposableScope())
38
+ }
39
+ }
40
+ }
@@ -35,12 +35,6 @@ export type DropdownMenuItemProps = {
35
35
  */
36
36
  children?: React.ReactNode;
37
37
  };
38
- /**
39
- * A dropdown menu item component that wraps Compose's `DropdownMenuItem`.
40
- * Should be used inside `DropdownMenu.Items`.
41
- *
42
- * @platform android
43
- */
44
38
  /**
45
39
  * A text slot for `DropdownMenuItem`.
46
40
  * Wrap text content to display as the menu item label.
@@ -52,7 +46,7 @@ declare function TextSlot(props: {
52
46
  }): import("react").JSX.Element;
53
47
  /**
54
48
  * A dropdown menu item component that wraps Compose's `DropdownMenuItem`.
55
- * Should be used inside `ContextMenu.Items`.
49
+ * Should be used inside `DropdownMenu.Items` or `ExposedDropdownMenu`.
56
50
  *
57
51
  * @platform android
58
52
  */
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenuItem.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAaxD;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,mCAAmC;IACnC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAOhC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,6BAA6B,CAAC;IAC9C;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AA4BF;;;;;GAKG;AACH;;;;;GAKG;AACH,iBAAS,QAAQ,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,+BAErD;AAED;;;;;GAKG;AACH,iBAAS,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,+BAY9D;kBAZQ,yBAAyB;;6BApCN;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;8BAU5B;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;AA4C1D,OAAO,EAAE,yBAAyB,IAAI,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"DropdownMenuItem.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAaxD;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,mCAAmC;IACnC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,wDAAwD;IACxD,iBAAiB,CAAC,EAAE,UAAU,CAAC;CAOhC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,6BAA6B,CAAC;IAC9C;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AA4BF;;;;;GAKG;AACH,iBAAS,QAAQ,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,+BAErD;AAED;;;;;GAKG;AACH,iBAAS,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,+BAY9D;kBAZQ,yBAAyB;;6BA9BN;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;8BAU5B;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;AAsC1D,OAAO,EAAE,yBAAyB,IAAI,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { ReactNode } from 'react';
2
+ import { type ColorValue } from 'react-native';
3
+ import { type ModifierConfig } from '../../types';
4
+ /**
5
+ * Props for the `ExposedDropdownMenu` component.
6
+ */
7
+ export type ExposedDropdownMenuProps = {
8
+ /**
9
+ * Whether the dropdown menu is expanded (visible).
10
+ */
11
+ expanded: boolean;
12
+ /**
13
+ * Callback fired when the menu requests to be dismissed (e.g. tapping outside, back button).
14
+ */
15
+ onDismissRequest?: () => void;
16
+ /**
17
+ * Background color of the dropdown menu container.
18
+ */
19
+ containerColor?: ColorValue;
20
+ /**
21
+ * Modifiers for the component.
22
+ */
23
+ modifiers?: ModifierConfig[];
24
+ /**
25
+ * Children should be `DropdownMenuItem` components.
26
+ */
27
+ children?: ReactNode;
28
+ };
29
+ /**
30
+ * A Material 3 `ExposedDropdownMenu` that displays menu items in a dropdown.
31
+ *
32
+ * Must be used inside an `ExposedDropdownMenuBox`.
33
+ */
34
+ export declare function ExposedDropdownMenu(props: ExposedDropdownMenuProps): import("react").JSX.Element;
35
+ //# sourceMappingURL=ExposedDropdownMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExposedDropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/ExposedDropdownMenuBox/ExposedDropdownMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAQlD;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;OAEG;IACH,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,+BAUlE"}
@@ -0,0 +1,42 @@
1
+ import { ReactNode } from 'react';
2
+ import { type ModifierConfig } from '../../types';
3
+ export type ExposedDropdownMenuBoxProps = {
4
+ /**
5
+ * Whether the dropdown menu is expanded (visible).
6
+ */
7
+ expanded: boolean;
8
+ /**
9
+ * Callback when the expanded state changes (for example, tapping the field or dismissing the menu).
10
+ */
11
+ onExpandedChange?: (expanded: boolean) => void;
12
+ /**
13
+ * Modifiers for the component.
14
+ */
15
+ modifiers?: ModifierConfig[];
16
+ /**
17
+ * Children — should contain an anchor element with the `menuAnchor()` modifier
18
+ * and an `ExposedDropdownMenu` with `DropdownMenuItem` children.
19
+ */
20
+ children?: ReactNode;
21
+ };
22
+ /**
23
+ * A Material 3 `ExposedDropdownMenuBox`.
24
+ *
25
+ * Use the `menuAnchor()` modifier on the anchor content (e.g. a `TextField` or `Text`).
26
+ * Use `ExposedDropdownMenu` to wrap `DropdownMenuItem` children.
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * <ExposedDropdownMenuBox expanded={expanded} onExpandedChange={setExpanded}>
31
+ * <TextField modifiers={[menuAnchor()]} defaultValue={value} readOnly />
32
+ * <ExposedDropdownMenu expanded={expanded} onDismissRequest={() => setExpanded(false)}>
33
+ * <DropdownMenuItem onClick={() => { setSelected('a'); setExpanded(false); }}>
34
+ * <DropdownMenuItem.Text><Text>Option A</Text></DropdownMenuItem.Text>
35
+ * </DropdownMenuItem>
36
+ * </ExposedDropdownMenu>
37
+ * </ExposedDropdownMenuBox>
38
+ * ```
39
+ */
40
+ export declare function ExposedDropdownMenuBox(props: ExposedDropdownMenuBoxProps): import("react").JSX.Element;
41
+ export { ExposedDropdownMenu, type ExposedDropdownMenuProps } from './ExposedDropdownMenu';
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/ExposedDropdownMenuBox/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAQlD,MAAM,MAAM,2BAA2B,GAAG;IACxC;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAUF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,+BAaxE;AACD,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -10,6 +10,7 @@ export * from './Button';
10
10
  export * from './Icon';
11
11
  export * from './IconButton';
12
12
  export * from './DropdownMenu';
13
+ export * from './ExposedDropdownMenuBox';
13
14
  export * from './Divider';
14
15
  export * from './Host';
15
16
  export * from './LazyColumn';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jetpack-compose/index.ts"],"names":[],"mappings":"AAAA,OAAO,uCAAuC,CAAC;AAE/C,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9C,cAAc,WAAW,CAAC;AAE1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jetpack-compose/index.ts"],"names":[],"mappings":"AAAA,OAAO,uCAAuC,CAAC;AAE/C,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9C,cAAc,WAAW,CAAC;AAE1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC"}
@@ -166,6 +166,13 @@ export declare const align: (alignment: Alignment) => import("./createModifier")
166
166
  * Only works when used inside Box.
167
167
  */
168
168
  export declare const matchParentSize: () => import("./createModifier").ModifierConfig;
169
+ /**
170
+ * Marks a composable as the anchor for an `ExposedDropdownMenuBox`.
171
+ * Only works when used inside `ExposedDropdownMenuBox`.
172
+ * @param type - Anchor type. Currently only `'primaryNotEditable'` is supported.
173
+ * @param enabled - Whether the anchor is enabled. Defaults to `true`.
174
+ */
175
+ export declare const menuAnchor: (type?: "primaryNotEditable", enabled?: boolean) => import("./createModifier").ModifierConfig;
169
176
  /**
170
177
  * Makes the view clickable.
171
178
  * @param handler - Function to call when clicked.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/modifiers/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/modifiers/index.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  "publication": {
11
11
  "groupId": "expo.modules.ui",
12
12
  "artifactId": "expo.modules.ui",
13
- "version": "55.0.14",
13
+ "version": "55.0.16",
14
14
  "repository": "local-maven-repo"
15
15
  }
16
16
  }
@@ -0,0 +1 @@
1
+ 8fbc93f9e7f6f4a8f7b39d8cff343b2d320e67af23369d01d8267157c4d3b7b2
@@ -0,0 +1 @@
1
+ f0a64c44ebdff5a4e7b6377662e7c33f0770b660e39f557aa9061383ad727af97a701d5611cff3fa10f177e23eba8010dc2208ae499d4a6474471e2aa75b7a47
@@ -0,0 +1 @@
1
+ 46e80bc2e3fc0a53b81d4580baf908af2728c92a
@@ -0,0 +1 @@
1
+ 3a7cf26d2254f847a2cfd015f6ad478f76f7636411569d1c1b878ef4670e96f9
@@ -0,0 +1 @@
1
+ 87ee19af6a6acfa40f5bbbf9d4d10c6411acb990f83b43ef8dcec67c5c9c2044e0b3fef6031fe9d0d8f582dc17704f5f8086542be4ccbe0924af3a1c09b5c15a
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "expo.modules.ui",
5
5
  "module": "expo.modules.ui",
6
- "version": "55.0.14",
6
+ "version": "55.0.16",
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-55.0.14.aar",
28
- "url": "expo.modules.ui-55.0.14.aar",
29
- "size": 1078328,
30
- "sha512": "808b352ca5908016e70ca2686f59300b6bb10e1ccaf90bc89c7b13cf7f635ada21a2200a5bb32bb7739be25571f48242224e422d099c21e1d784265013ce1294",
31
- "sha256": "3f5ed3a5af84ec2ad3f936f28e0be63971ebd17006aac943818fcdbed5e6f659",
32
- "sha1": "ff635efe00b621675925f4799e500bfd51d3716e",
33
- "md5": "7b371c66845dbf67635d20082532b752"
27
+ "name": "expo.modules.ui-55.0.16.aar",
28
+ "url": "expo.modules.ui-55.0.16.aar",
29
+ "size": 1106831,
30
+ "sha512": "87ee19af6a6acfa40f5bbbf9d4d10c6411acb990f83b43ef8dcec67c5c9c2044e0b3fef6031fe9d0d8f582dc17704f5f8086542be4ccbe0924af3a1c09b5c15a",
31
+ "sha256": "3a7cf26d2254f847a2cfd015f6ad478f76f7636411569d1c1b878ef4670e96f9",
32
+ "sha1": "46e80bc2e3fc0a53b81d4580baf908af2728c92a",
33
+ "md5": "61bbaa032d4301ece13cdb5ae864e51d"
34
34
  }
35
35
  ]
36
36
  },
@@ -120,13 +120,13 @@
120
120
  ],
121
121
  "files": [
122
122
  {
123
- "name": "expo.modules.ui-55.0.14.aar",
124
- "url": "expo.modules.ui-55.0.14.aar",
125
- "size": 1078328,
126
- "sha512": "808b352ca5908016e70ca2686f59300b6bb10e1ccaf90bc89c7b13cf7f635ada21a2200a5bb32bb7739be25571f48242224e422d099c21e1d784265013ce1294",
127
- "sha256": "3f5ed3a5af84ec2ad3f936f28e0be63971ebd17006aac943818fcdbed5e6f659",
128
- "sha1": "ff635efe00b621675925f4799e500bfd51d3716e",
129
- "md5": "7b371c66845dbf67635d20082532b752"
123
+ "name": "expo.modules.ui-55.0.16.aar",
124
+ "url": "expo.modules.ui-55.0.16.aar",
125
+ "size": 1106831,
126
+ "sha512": "87ee19af6a6acfa40f5bbbf9d4d10c6411acb990f83b43ef8dcec67c5c9c2044e0b3fef6031fe9d0d8f582dc17704f5f8086542be4ccbe0924af3a1c09b5c15a",
127
+ "sha256": "3a7cf26d2254f847a2cfd015f6ad478f76f7636411569d1c1b878ef4670e96f9",
128
+ "sha1": "46e80bc2e3fc0a53b81d4580baf908af2728c92a",
129
+ "md5": "61bbaa032d4301ece13cdb5ae864e51d"
130
130
  }
131
131
  ]
132
132
  },
@@ -140,13 +140,13 @@
140
140
  },
141
141
  "files": [
142
142
  {
143
- "name": "expo.modules.ui-55.0.14-sources.jar",
144
- "url": "expo.modules.ui-55.0.14-sources.jar",
145
- "size": 68147,
146
- "sha512": "08d65b836394cc88f152cfb2a1ee79ae229155b54ab069dac6a7bfe4cabd8a30b09428b5261025453b3289aa6b1d4aeffca52365e74aefb4af9ade252a1c80a9",
147
- "sha256": "70de253a9147c6ff1cf1874e6cdb587183aaabcbe10631ab4051f0ad254c54d5",
148
- "sha1": "f8c9ace39c912ab1cdf6a71d39e968c305e31153",
149
- "md5": "867d5885bc0a30e6c34e5559c030609c"
143
+ "name": "expo.modules.ui-55.0.16-sources.jar",
144
+ "url": "expo.modules.ui-55.0.16-sources.jar",
145
+ "size": 70037,
146
+ "sha512": "f0a64c44ebdff5a4e7b6377662e7c33f0770b660e39f557aa9061383ad727af97a701d5611cff3fa10f177e23eba8010dc2208ae499d4a6474471e2aa75b7a47",
147
+ "sha256": "8fbc93f9e7f6f4a8f7b39d8cff343b2d320e67af23369d01d8267157c4d3b7b2",
148
+ "sha1": "342a9f66831fa6194e2d082575ff3a2bdef86ee0",
149
+ "md5": "7104abd1a8459b65640ef6aa3aeaaee0"
150
150
  }
151
151
  ]
152
152
  }
@@ -0,0 +1 @@
1
+ b1d54c0f5239854e1e122195a60b1c24bb2649d3
@@ -0,0 +1 @@
1
+ 6c7923e131b91e09912a1be8b81b3f153262c66f3d5f2f54a05e9ed33b3a9184
@@ -0,0 +1 @@
1
+ 40fa1ccdf2d56a2d2225a19bd478b72c075fa78dc8f2b2d365c8fdeada1e40ea3f1aab9729ec6f65f0c74a00ac3d322088dd49679cd4f6bac53a89f22718196d
@@ -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>55.0.14</version>
12
+ <version>55.0.16</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
+ 50dbc6172e00e94542d7a81556ca06b37f96e6a9
@@ -0,0 +1 @@
1
+ 62d63b1db521610b63c7913e1d5eacc570129f17ec328c08fb216e039ed27da7
@@ -0,0 +1 @@
1
+ 8098497ad52f60801efff15ca7a9066375d3f292f3feafcb7a1080217727e9a00a1704ff2fa5872830c6c9eaf65c0584ce932fac13cebfb0cdf25d058e324ef5
@@ -3,11 +3,11 @@
3
3
  <groupId>expo.modules.ui</groupId>
4
4
  <artifactId>expo.modules.ui</artifactId>
5
5
  <versioning>
6
- <latest>55.0.14</latest>
7
- <release>55.0.14</release>
6
+ <latest>55.0.16</latest>
7
+ <release>55.0.16</release>
8
8
  <versions>
9
- <version>55.0.14</version>
9
+ <version>55.0.16</version>
10
10
  </versions>
11
- <lastUpdated>20260504210936</lastUpdated>
11
+ <lastUpdated>20260513100111</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- ca202ff55171d0653bb28de6851f304f
1
+ ef167329b9c26bbff871f4bd492009ff
@@ -1 +1 @@
1
- 97e833d65ecb811be5cfaaa84aa6a01541ff69c6
1
+ 43169098ae2d2f58e61bac688cb814140e2cf87b
@@ -1 +1 @@
1
- 2fdc60818ca90df60970bf0586ffe57d07ebafc072815a89cb529fb2b4540d73
1
+ bcc616dd886f717dca4062c4390dd25e84b7696fc88bf31763d66fde796d0bd9
@@ -1 +1 @@
1
- 212098916e3292f7d922cc1d83a8ae8ca86c27f0d75518a601423ac8f0e0a10a528e30057e71c05cfed6259b7a1b5a625a5bcaf91d4a695bfddfe3ddf872dc8b
1
+ b629399acd3a42ca1cfa4ba5715185f4a6ba8d32d5d5ce16c8c2820d0dbe08041eb8d425558231f608f15556af83b747a8276c7787e14372399661efd05263a7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/ui",
3
- "version": "55.0.14",
3
+ "version": "55.0.16",
4
4
  "description": "A collection of UI components",
5
5
  "sideEffects": [
6
6
  "*.fx.js"
@@ -71,5 +71,5 @@
71
71
  "react": "*",
72
72
  "react-native": "*"
73
73
  },
74
- "gitHead": "6ab08fe32823d60ad90b3ca2821b4d99a3ae06e9"
74
+ "gitHead": "0675db12d13a5309e3109e8ecf7f6011522194c6"
75
75
  }
@@ -83,12 +83,6 @@ function TrailingIcon(props: { children: React.ReactNode }) {
83
83
  return <SlotNativeView slotName="trailingIcon">{props.children}</SlotNativeView>;
84
84
  }
85
85
 
86
- /**
87
- * A dropdown menu item component that wraps Compose's `DropdownMenuItem`.
88
- * Should be used inside `DropdownMenu.Items`.
89
- *
90
- * @platform android
91
- */
92
86
  /**
93
87
  * A text slot for `DropdownMenuItem`.
94
88
  * Wrap text content to display as the menu item label.
@@ -101,7 +95,7 @@ function TextSlot(props: { children: React.ReactNode }) {
101
95
 
102
96
  /**
103
97
  * A dropdown menu item component that wraps Compose's `DropdownMenuItem`.
104
- * Should be used inside `ContextMenu.Items`.
98
+ * Should be used inside `DropdownMenu.Items` or `ExposedDropdownMenu`.
105
99
  *
106
100
  * @platform android
107
101
  */
@@ -0,0 +1,54 @@
1
+ import { requireNativeView } from 'expo';
2
+ import { ReactNode } from 'react';
3
+ import { type ColorValue } from 'react-native';
4
+
5
+ import { type ModifierConfig } from '../../types';
6
+ import { createViewModifierEventListener } from '../modifiers/utils';
7
+
8
+ const NativeView: React.ComponentType<ExposedDropdownMenuProps> = requireNativeView(
9
+ 'ExpoUI',
10
+ 'ExposedDropdownMenuView'
11
+ );
12
+
13
+ /**
14
+ * Props for the `ExposedDropdownMenu` component.
15
+ */
16
+ export type ExposedDropdownMenuProps = {
17
+ /**
18
+ * Whether the dropdown menu is expanded (visible).
19
+ */
20
+ expanded: boolean;
21
+ /**
22
+ * Callback fired when the menu requests to be dismissed (e.g. tapping outside, back button).
23
+ */
24
+ onDismissRequest?: () => void;
25
+ /**
26
+ * Background color of the dropdown menu container.
27
+ */
28
+ containerColor?: ColorValue;
29
+ /**
30
+ * Modifiers for the component.
31
+ */
32
+ modifiers?: ModifierConfig[];
33
+ /**
34
+ * Children should be `DropdownMenuItem` components.
35
+ */
36
+ children?: ReactNode;
37
+ };
38
+
39
+ /**
40
+ * A Material 3 `ExposedDropdownMenu` that displays menu items in a dropdown.
41
+ *
42
+ * Must be used inside an `ExposedDropdownMenuBox`.
43
+ */
44
+ export function ExposedDropdownMenu(props: ExposedDropdownMenuProps) {
45
+ const { modifiers, children, ...restProps } = props;
46
+ return (
47
+ <NativeView
48
+ modifiers={modifiers}
49
+ {...(modifiers ? createViewModifierEventListener(modifiers) : undefined)}
50
+ {...restProps}>
51
+ {children}
52
+ </NativeView>
53
+ );
54
+ }
@@ -0,0 +1,73 @@
1
+ import { requireNativeView } from 'expo';
2
+ import { ReactNode } from 'react';
3
+ import { NativeSyntheticEvent } from 'react-native';
4
+
5
+ import { type ModifierConfig } from '../../types';
6
+ import { createViewModifierEventListener } from '../modifiers/utils';
7
+
8
+ const NativeView: React.ComponentType<NativeExposedDropdownMenuBoxProps> = requireNativeView(
9
+ 'ExpoUI',
10
+ 'ExposedDropdownMenuBoxView'
11
+ );
12
+
13
+ export type ExposedDropdownMenuBoxProps = {
14
+ /**
15
+ * Whether the dropdown menu is expanded (visible).
16
+ */
17
+ expanded: boolean;
18
+ /**
19
+ * Callback when the expanded state changes (for example, tapping the field or dismissing the menu).
20
+ */
21
+ onExpandedChange?: (expanded: boolean) => void;
22
+ /**
23
+ * Modifiers for the component.
24
+ */
25
+ modifiers?: ModifierConfig[];
26
+ /**
27
+ * Children — should contain an anchor element with the `menuAnchor()` modifier
28
+ * and an `ExposedDropdownMenu` with `DropdownMenuItem` children.
29
+ */
30
+ children?: ReactNode;
31
+ };
32
+
33
+ type NativeExposedDropdownMenuBoxProps = Omit<
34
+ ExposedDropdownMenuBoxProps,
35
+ 'onExpandedChange' | 'children'
36
+ > & {
37
+ onExpandedChange?: (event: NativeSyntheticEvent<{ value: boolean }>) => void;
38
+ children?: ReactNode;
39
+ };
40
+
41
+ /**
42
+ * A Material 3 `ExposedDropdownMenuBox`.
43
+ *
44
+ * Use the `menuAnchor()` modifier on the anchor content (e.g. a `TextField` or `Text`).
45
+ * Use `ExposedDropdownMenu` to wrap `DropdownMenuItem` children.
46
+ *
47
+ * @example
48
+ * ```tsx
49
+ * <ExposedDropdownMenuBox expanded={expanded} onExpandedChange={setExpanded}>
50
+ * <TextField modifiers={[menuAnchor()]} defaultValue={value} readOnly />
51
+ * <ExposedDropdownMenu expanded={expanded} onDismissRequest={() => setExpanded(false)}>
52
+ * <DropdownMenuItem onClick={() => { setSelected('a'); setExpanded(false); }}>
53
+ * <DropdownMenuItem.Text><Text>Option A</Text></DropdownMenuItem.Text>
54
+ * </DropdownMenuItem>
55
+ * </ExposedDropdownMenu>
56
+ * </ExposedDropdownMenuBox>
57
+ * ```
58
+ */
59
+ export function ExposedDropdownMenuBox(props: ExposedDropdownMenuBoxProps) {
60
+ const { modifiers, onExpandedChange, children, ...restProps } = props;
61
+ return (
62
+ <NativeView
63
+ modifiers={modifiers}
64
+ {...(modifiers ? createViewModifierEventListener(modifiers) : undefined)}
65
+ {...restProps}
66
+ onExpandedChange={
67
+ onExpandedChange ? ({ nativeEvent: { value } }) => onExpandedChange(value) : undefined
68
+ }>
69
+ {children}
70
+ </NativeView>
71
+ );
72
+ }
73
+ export { ExposedDropdownMenu, type ExposedDropdownMenuProps } from './ExposedDropdownMenu';
@@ -11,6 +11,7 @@ export * from './Button';
11
11
  export * from './Icon';
12
12
  export * from './IconButton';
13
13
  export * from './DropdownMenu';
14
+ export * from './ExposedDropdownMenuBox';
14
15
  export * from './Divider';
15
16
  export * from './Host';
16
17
  export * from './LazyColumn';
@@ -253,6 +253,18 @@ export const align = (alignment: Alignment) => createModifier('align', { alignme
253
253
  */
254
254
  export const matchParentSize = () => createModifier('matchParentSize');
255
255
 
256
+ /**
257
+ * Marks a composable as the anchor for an `ExposedDropdownMenuBox`.
258
+ * Only works when used inside `ExposedDropdownMenuBox`.
259
+ * @param type - Anchor type. Currently only `'primaryNotEditable'` is supported.
260
+ * @param enabled - Whether the anchor is enabled. Defaults to `true`.
261
+ */
262
+ export const menuAnchor = (type?: 'primaryNotEditable', enabled?: boolean) =>
263
+ createModifier('menuAnchor', {
264
+ ...(type && { type }),
265
+ ...(typeof enabled === 'boolean' && { enabled }),
266
+ });
267
+
256
268
  // =============================================================================
257
269
  // Interaction Modifiers
258
270
  // =============================================================================
@@ -1 +0,0 @@
1
- f8c9ace39c912ab1cdf6a71d39e968c305e31153
@@ -1 +0,0 @@
1
- 70de253a9147c6ff1cf1874e6cdb587183aaabcbe10631ab4051f0ad254c54d5
@@ -1 +0,0 @@
1
- 08d65b836394cc88f152cfb2a1ee79ae229155b54ab069dac6a7bfe4cabd8a30b09428b5261025453b3289aa6b1d4aeffca52365e74aefb4af9ade252a1c80a9
@@ -1 +0,0 @@
1
- ff635efe00b621675925f4799e500bfd51d3716e
@@ -1 +0,0 @@
1
- 3f5ed3a5af84ec2ad3f936f28e0be63971ebd17006aac943818fcdbed5e6f659
@@ -1 +0,0 @@
1
- 808b352ca5908016e70ca2686f59300b6bb10e1ccaf90bc89c7b13cf7f635ada21a2200a5bb32bb7739be25571f48242224e422d099c21e1d784265013ce1294
@@ -1 +0,0 @@
1
- f56b1b6e7a3fc812cb2110682782c1fd112eae7d
@@ -1 +0,0 @@
1
- 52c77d70c8c0cadf96a54e3c7f2d7734df0474c77ff111a3163d5cc4d311c8b1
@@ -1 +0,0 @@
1
- 51a70c6b51e84aded65f0ea0a29fdfe61a2d1297a09a45290a6d74616b78546ab379c79dff2f42aeac1a14f672cca83a78fff595e1f5925c0ebe18ab38ff3091
@@ -1 +0,0 @@
1
- b92ab1cae566692d6e6d212f9fb0c22f201c405f
@@ -1 +0,0 @@
1
- 461c57cfe77a622e0247f76a65f4cfa2b8ead6433d0acd0bdeb740efc05cf67b
@@ -1 +0,0 @@
1
- bf895b9ad22829b5af69306ec400d49373d1f42c5c7526bb10c3e2825a9845d69bdaeb5241ab351f0ff152107dd052c99ac5851bc8359bb1b974bf6f774855fe