@expo/ui 55.0.4 → 55.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/ui/CarouselView.kt +93 -67
  4. package/android/src/main/java/expo/modules/ui/ExpoUIModule.kt +10 -2
  5. package/build/jetpack-compose/Carousel/index.d.ts +86 -23
  6. package/build/jetpack-compose/Carousel/index.d.ts.map +1 -1
  7. package/build/jetpack-compose/Progress/index.d.ts +6 -7
  8. package/build/jetpack-compose/Progress/index.d.ts.map +1 -1
  9. package/expo-module.config.json +1 -1
  10. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{55.0.4/expo.modules.ui-55.0.4-sources.jar → 55.0.5/expo.modules.ui-55.0.5-sources.jar} +0 -0
  11. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5-sources.jar.md5 +1 -0
  12. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5-sources.jar.sha1 +1 -0
  13. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5-sources.jar.sha256 +1 -0
  14. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5-sources.jar.sha512 +1 -0
  15. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.aar +0 -0
  16. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.aar.md5 +1 -0
  17. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.aar.sha1 +1 -0
  18. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.aar.sha256 +1 -0
  19. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.aar.sha512 +1 -0
  20. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{55.0.4/expo.modules.ui-55.0.4.module → 55.0.5/expo.modules.ui-55.0.5.module} +22 -22
  21. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.module.md5 +1 -0
  22. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.module.sha1 +1 -0
  23. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.module.sha256 +1 -0
  24. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.module.sha512 +1 -0
  25. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{55.0.4/expo.modules.ui-55.0.4.pom → 55.0.5/expo.modules.ui-55.0.5.pom} +1 -1
  26. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.pom.md5 +1 -0
  27. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.pom.sha1 +1 -0
  28. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.pom.sha256 +1 -0
  29. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.5/expo.modules.ui-55.0.5.pom.sha512 +1 -0
  30. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml +4 -4
  31. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.md5 +1 -1
  32. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha1 +1 -1
  33. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha256 +1 -1
  34. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha512 +1 -1
  35. package/package.json +2 -2
  36. package/src/jetpack-compose/Carousel/index.tsx +118 -30
  37. package/src/jetpack-compose/Progress/index.tsx +7 -7
  38. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.md5 +0 -1
  39. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.sha1 +0 -1
  40. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.sha256 +0 -1
  41. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.sha512 +0 -1
  42. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar +0 -0
  43. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.md5 +0 -1
  44. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha1 +0 -1
  45. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha256 +0 -1
  46. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha512 +0 -1
  47. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.md5 +0 -1
  48. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha1 +0 -1
  49. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha256 +0 -1
  50. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha512 +0 -1
  51. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.md5 +0 -1
  52. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha1 +0 -1
  53. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha256 +0 -1
  54. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha512 +0 -1
package/CHANGELOG.md CHANGED
@@ -10,6 +10,12 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 55.0.5 — 2026-03-19
14
+
15
+ ### 🛠 Breaking changes
16
+
17
+ - [android] Split `Carousel` into `HorizontalCenteredHeroCarousel`, `HorizontalMultiBrowseCarousel`, and `HorizontalUncontainedCarousel` matching native Compose components. Added `HorizontalCenteredHeroCarousel`. ([#44034](https://github.com/expo/expo/pull/44034) by [@nishan](https://github.com/intergalacticspacehighway))
18
+
13
19
  ## 55.0.4 — 2026-03-18
14
20
 
15
21
  ### 🎉 New features
@@ -38,7 +44,7 @@
38
44
  ### 🎉 New features
39
45
 
40
46
  - [android] Added `outlined` variant to `TextInput` component. ([#43719](https://github.com/expo/expo/pull/43719) by [@benjaminkomen](https://github.com/benjaminkomen))
41
- - Added `@expo/ui/datetimepicker` — a cross-platform `DateTimePicker` drop-in replacement for `@react-native-community/datetimepicker`. ([#44014](https://github.com/expo/expo/pull/44014) by [@vonovak](https://github.com/vonovak))
47
+ - Added `@expo/ui/datetimepicker` — a cross-platform `DateTimePicker` drop-in replacement for `@react-native-community/datetimepicker`. ([#44014](https://github.com/expo/expo/pull/44014) by [@vonovak](https://github.com/vonovak))
42
48
  - [iOS] Added `locale` and `timeZone` support to `modifiers`. ([#44013](https://github.com/expo/expo/pull/44013) by [@vonovak](https://github.com/vonovak))
43
49
  - [android] Added `ref.hide()` for animated dismiss and more configurable props (`containerColor`, `contentColor`, `scrimColor`, `showDragHandle`, `sheetGesturesEnabled`, `properties`, `DragHandle` slot) to `BottomSheet`. ([#43972](https://github.com/expo/expo/pull/43972) by [@nishan](https://github.com/intergalacticspacehighway))
44
50
  - [iOS] Added `date`, `dateStyle`, `timerInterval`, `countsDown`, and `pauseTime` props to `Text` component for displaying auto-updating dates, timers, and countdowns using SwiftUI's `Text.DateStyle`. ([#43552](https://github.com/expo/expo/pull/43552) by [@LouisRaverdy](https://github.com/LouisRaverdy))
@@ -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.4'
15
+ version = '55.0.5'
16
16
 
17
17
  android {
18
18
  namespace "expo.modules.ui"
19
19
  defaultConfig {
20
20
  versionCode 1
21
- versionName "55.0.4"
21
+ versionName "55.0.5"
22
22
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
23
23
  }
24
24
  buildFeatures {
@@ -4,10 +4,12 @@ import androidx.compose.foundation.gestures.TargetedFlingBehavior
4
4
  import androidx.compose.foundation.layout.PaddingValues
5
5
  import androidx.compose.material3.ExperimentalMaterial3Api
6
6
  import androidx.compose.material3.carousel.CarouselDefaults
7
+ import androidx.compose.material3.carousel.HorizontalCenteredHeroCarousel
7
8
  import androidx.compose.material3.carousel.HorizontalMultiBrowseCarousel
8
9
  import androidx.compose.material3.carousel.HorizontalUncontainedCarousel
9
10
  import androidx.compose.material3.carousel.rememberCarouselState
10
11
  import androidx.compose.runtime.Composable
12
+ import androidx.compose.ui.unit.Dp
11
13
  import androidx.compose.ui.unit.dp
12
14
  import androidx.core.view.size
13
15
  import expo.modules.kotlin.records.Field
@@ -18,28 +20,16 @@ import expo.modules.kotlin.views.ComposableScope
18
20
  import expo.modules.kotlin.views.ComposeProps
19
21
  import expo.modules.kotlin.views.FunctionalComposableScope
20
22
 
21
- enum class CarouselVariant(val value: String) : Enumerable {
22
- MULTI_BROWSE("multiBrowse"),
23
- UNCONSTRAINED("unconstrained")
24
- }
25
-
26
23
  enum class FlingBehaviorType(val value: String) : Enumerable {
27
24
  SINGLE_ADVANCE("singleAdvance"),
28
25
  NO_SNAP("noSnap")
29
26
  }
30
27
 
31
28
  class PaddingValuesRecord : Record {
32
- @Field
33
- val start: Float? = null
34
-
35
- @Field
36
- val top: Float? = null
37
-
38
- @Field
39
- val end: Float? = null
40
-
41
- @Field
42
- val bottom: Float? = null
29
+ @Field val start: Float? = null
30
+ @Field val top: Float? = null
31
+ @Field val end: Float? = null
32
+ @Field val bottom: Float? = null
43
33
 
44
34
  fun toPaddingValues(): PaddingValues {
45
35
  return PaddingValues(
@@ -63,77 +53,113 @@ fun paddingValuesFromEither(either: Either<Float, PaddingValuesRecord>?): Paddin
63
53
  }
64
54
  }
65
55
 
66
- data class CarouselProps(
67
- val variant: CarouselVariant? = null,
56
+ data class HorizontalCenteredHeroCarouselProps(
57
+ val maxItemWidth: Float? = null,
68
58
  val itemSpacing: Float? = null,
69
59
  val contentPadding: Either<Float, PaddingValuesRecord>? = null,
70
60
  val minSmallItemWidth: Float? = null,
71
61
  val maxSmallItemWidth: Float? = null,
72
62
  val flingBehavior: FlingBehaviorType? = null,
73
- val preferredItemWidth: Float? = null,
74
- val itemWidth: Float? = null,
63
+ val userScrollEnabled: Boolean? = null,
75
64
  val modifiers: ModifierList = emptyList()
76
65
  ) : ComposeProps
77
66
 
78
- const val DEFAULT_MIN_SMALL_ITEM_WIDTH = 40f
79
- const val DEFAULT_MAX_SMALL_ITEM_WIDTH = 56f
80
- const val DEFAULT_PREFERRED_ITEM_WIDTH = 200f
81
- const val DEFAULT_ITEM_WIDTH = 200f
82
-
83
67
  @OptIn(ExperimentalMaterial3Api::class)
84
68
  @Composable
85
- fun FunctionalComposableScope.CarouselContent(props: CarouselProps) {
86
- val variant = props.variant ?: CarouselVariant.MULTI_BROWSE
87
- val modifiers = props.modifiers ?: emptyList()
88
- val itemSpacing = (props.itemSpacing ?: 0f).dp
89
- val minSmallItemWidth = (props.minSmallItemWidth ?: DEFAULT_MIN_SMALL_ITEM_WIDTH).dp
90
-
91
- // we need to constrain maxSmallItemWidth to be at least minSmallItemWidth or the app will crash
92
- val maxSmallItemWidth = minSmallItemWidth.coerceAtLeast((props.maxSmallItemWidth ?: DEFAULT_MAX_SMALL_ITEM_WIDTH).dp)
93
- val preferredItemWidth = (props.preferredItemWidth ?: DEFAULT_PREFERRED_ITEM_WIDTH).dp
94
- val itemWidth = (props.itemWidth ?: DEFAULT_ITEM_WIDTH).dp
95
- val flingBehaviorType = props.flingBehavior ?: FlingBehaviorType.SINGLE_ADVANCE
69
+ fun FunctionalComposableScope.HorizontalCenteredHeroCarouselContent(props: HorizontalCenteredHeroCarouselProps) {
96
70
  val contentPadding = paddingValuesFromEither(props.contentPadding)
97
-
98
71
  val carouselState = rememberCarouselState(0) { view.size }
72
+ val flingBehavior: TargetedFlingBehavior = when (props.flingBehavior ?: FlingBehaviorType.SINGLE_ADVANCE) {
73
+ FlingBehaviorType.SINGLE_ADVANCE -> CarouselDefaults.singleAdvanceFlingBehavior(state = carouselState)
74
+ FlingBehaviorType.NO_SNAP -> CarouselDefaults.noSnapFlingBehavior()
75
+ }
76
+
77
+ val minSmallItemWidth = props.minSmallItemWidth?.dp ?: CarouselDefaults.MinSmallItemSize
78
+ val maxSmallItemWidth = (props.maxSmallItemWidth?.dp ?: CarouselDefaults.MaxSmallItemSize).coerceAtLeast(minSmallItemWidth)
79
+
80
+ HorizontalCenteredHeroCarousel(
81
+ state = carouselState,
82
+ modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher),
83
+ maxItemWidth = props.maxItemWidth?.dp ?: Dp.Unspecified,
84
+ itemSpacing = (props.itemSpacing ?: 0f).dp,
85
+ flingBehavior = flingBehavior,
86
+ userScrollEnabled = props.userScrollEnabled ?: true,
87
+ minSmallItemWidth = minSmallItemWidth,
88
+ maxSmallItemWidth = maxSmallItemWidth,
89
+ contentPadding = contentPadding
90
+ ) { itemIndex ->
91
+ Child(ComposableScope(), itemIndex)
92
+ }
93
+ }
94
+
95
+ data class HorizontalMultiBrowseCarouselProps(
96
+ val preferredItemWidth: Float = 200f,
97
+ val itemSpacing: Float? = null,
98
+ val contentPadding: Either<Float, PaddingValuesRecord>? = null,
99
+ val minSmallItemWidth: Float? = null,
100
+ val maxSmallItemWidth: Float? = null,
101
+ val flingBehavior: FlingBehaviorType? = null,
102
+ val userScrollEnabled: Boolean? = null,
103
+ val modifiers: ModifierList = emptyList()
104
+ ) : ComposeProps
99
105
 
100
- val flingBehavior: TargetedFlingBehavior = when (flingBehaviorType) {
106
+ @OptIn(ExperimentalMaterial3Api::class)
107
+ @Composable
108
+ fun FunctionalComposableScope.HorizontalMultiBrowseCarouselContent(props: HorizontalMultiBrowseCarouselProps) {
109
+ val contentPadding = paddingValuesFromEither(props.contentPadding)
110
+ val carouselState = rememberCarouselState(0) { view.size }
111
+ val flingBehavior: TargetedFlingBehavior = when (props.flingBehavior ?: FlingBehaviorType.SINGLE_ADVANCE) {
101
112
  FlingBehaviorType.SINGLE_ADVANCE -> CarouselDefaults.singleAdvanceFlingBehavior(state = carouselState)
102
113
  FlingBehaviorType.NO_SNAP -> CarouselDefaults.noSnapFlingBehavior()
103
114
  }
104
115
 
105
- @Composable
106
- fun MultiBrowseCarouselComposable() {
107
- HorizontalMultiBrowseCarousel(
108
- state = carouselState,
109
- preferredItemWidth = preferredItemWidth,
110
- modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher),
111
- itemSpacing = itemSpacing,
112
- flingBehavior = flingBehavior,
113
- minSmallItemWidth = minSmallItemWidth,
114
- maxSmallItemWidth = maxSmallItemWidth,
115
- contentPadding = contentPadding
116
- ) { itemIndex ->
117
- Child(ComposableScope(), itemIndex)
118
- }
116
+ val minSmallItemWidth = props.minSmallItemWidth?.dp ?: CarouselDefaults.MinSmallItemSize
117
+ val maxSmallItemWidth = (props.maxSmallItemWidth?.dp ?: CarouselDefaults.MaxSmallItemSize).coerceAtLeast(minSmallItemWidth)
118
+
119
+ HorizontalMultiBrowseCarousel(
120
+ state = carouselState,
121
+ preferredItemWidth = props.preferredItemWidth.dp,
122
+ modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher),
123
+ itemSpacing = (props.itemSpacing ?: 0f).dp,
124
+ flingBehavior = flingBehavior,
125
+ userScrollEnabled = props.userScrollEnabled ?: true,
126
+ minSmallItemWidth = minSmallItemWidth,
127
+ maxSmallItemWidth = maxSmallItemWidth,
128
+ contentPadding = contentPadding
129
+ ) { itemIndex ->
130
+ Child(ComposableScope(), itemIndex)
119
131
  }
132
+ }
120
133
 
121
- @Composable
122
- fun UnconstrainedCarouselComposable() {
123
- HorizontalUncontainedCarousel(
124
- state = carouselState,
125
- itemWidth = itemWidth,
126
- modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher),
127
- itemSpacing = itemSpacing,
128
- flingBehavior = flingBehavior,
129
- contentPadding = contentPadding
130
- ) { itemIndex ->
131
- Child(ComposableScope(), itemIndex)
132
- }
134
+ data class HorizontalUncontainedCarouselProps(
135
+ val itemWidth: Float = 200f,
136
+ val itemSpacing: Float? = null,
137
+ val contentPadding: Either<Float, PaddingValuesRecord>? = null,
138
+ val flingBehavior: FlingBehaviorType? = null,
139
+ val userScrollEnabled: Boolean? = null,
140
+ val modifiers: ModifierList = emptyList()
141
+ ) : ComposeProps
142
+
143
+ @OptIn(ExperimentalMaterial3Api::class)
144
+ @Composable
145
+ fun FunctionalComposableScope.HorizontalUncontainedCarouselContent(props: HorizontalUncontainedCarouselProps) {
146
+ val contentPadding = paddingValuesFromEither(props.contentPadding)
147
+ val carouselState = rememberCarouselState(0) { view.size }
148
+ // Uncontained defaults to noSnap, unlike the other two which default to singleAdvance
149
+ val flingBehavior: TargetedFlingBehavior = when (props.flingBehavior ?: FlingBehaviorType.NO_SNAP) {
150
+ FlingBehaviorType.SINGLE_ADVANCE -> CarouselDefaults.singleAdvanceFlingBehavior(state = carouselState)
151
+ FlingBehaviorType.NO_SNAP -> CarouselDefaults.noSnapFlingBehavior()
133
152
  }
134
153
 
135
- when (variant) {
136
- CarouselVariant.MULTI_BROWSE -> MultiBrowseCarouselComposable()
137
- CarouselVariant.UNCONSTRAINED -> UnconstrainedCarouselComposable()
154
+ HorizontalUncontainedCarousel(
155
+ state = carouselState,
156
+ itemWidth = props.itemWidth.dp,
157
+ modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher),
158
+ itemSpacing = (props.itemSpacing ?: 0f).dp,
159
+ flingBehavior = flingBehavior,
160
+ userScrollEnabled = props.userScrollEnabled ?: true,
161
+ contentPadding = contentPadding
162
+ ) { itemIndex ->
163
+ Child(ComposableScope(), itemIndex)
138
164
  }
139
165
  }
@@ -312,8 +312,16 @@ class ExpoUIModule : Module() {
312
312
  PullToRefreshBoxContent(props) { onRefresh(Unit) }
313
313
  }
314
314
 
315
- ExpoUIView("CarouselView") { props: CarouselProps ->
316
- CarouselContent(props)
315
+ ExpoUIView("HorizontalCenteredHeroCarouselView") { props: HorizontalCenteredHeroCarouselProps ->
316
+ HorizontalCenteredHeroCarouselContent(props)
317
+ }
318
+
319
+ ExpoUIView("HorizontalMultiBrowseCarouselView") { props: HorizontalMultiBrowseCarouselProps ->
320
+ HorizontalMultiBrowseCarouselContent(props)
321
+ }
322
+
323
+ ExpoUIView("HorizontalUncontainedCarouselView") { props: HorizontalUncontainedCarouselProps ->
324
+ HorizontalUncontainedCarouselContent(props)
317
325
  }
318
326
 
319
327
  ExpoUIView("AlertDialogView", events = {
@@ -1,38 +1,101 @@
1
- import { ExpoModifier } from '../../types';
1
+ import { type ModifierConfig } from '../../types';
2
+ /**
3
+ * Per-side padding values in dp for carousel content.
4
+ */
2
5
  export type PaddingValuesRecord = {
3
6
  start?: number;
4
7
  top?: number;
5
8
  end?: number;
6
9
  bottom?: number;
7
10
  };
8
- export type CarouselVariant = 'multiBrowse' | 'unconstrained';
11
+ /**
12
+ * Fling behavior type for controlling carousel snapping.
13
+ */
9
14
  export type FlingBehaviorType = 'singleAdvance' | 'noSnap';
10
- export type CarouselProps = {
15
+ /**
16
+ * Shared props across all carousel components.
17
+ */
18
+ export type CarouselCommonConfig = {
11
19
  /**
12
- * Modifiers for the component.
20
+ * Spacing between items in dp.
21
+ * @default 0
13
22
  */
14
- modifiers?: ExpoModifier[];
15
- /** Carousel variant */
16
- variant?: CarouselVariant;
17
- /** Spacing between items (dp) */
18
23
  itemSpacing?: number;
19
- /** Padding for carousel content (dp or object) */
24
+ /**
25
+ * Padding for carousel content (dp or object).
26
+ */
20
27
  contentPadding?: number | PaddingValuesRecord;
21
- /** Minimum small item width (dp) */
22
- minSmallItemWidth?: number;
23
- /** Maximum small item width (dp) */
24
- maxSmallItemWidth?: number;
25
- /** Fling behavior type */
28
+ /**
29
+ * Controls snapping behavior when the user flings the carousel.
30
+ * `'singleAdvance'` snaps to the next item, `'noSnap'` allows free scrolling.
31
+ */
26
32
  flingBehavior?: FlingBehaviorType;
27
- /** Preferred item width (dp) for multiBrowse variant */
28
- preferredItemWidth?: number;
29
- /** Item width (dp) for unconstrained variant */
30
- itemWidth?: number;
31
- /** Children to render */
33
+ /**
34
+ * Whether the user can scroll the carousel.
35
+ * @default true
36
+ */
37
+ userScrollEnabled?: boolean;
38
+ /**
39
+ * Modifiers for the component.
40
+ */
41
+ modifiers?: ModifierConfig[];
42
+ /**
43
+ * Children to render as carousel items.
44
+ */
32
45
  children: React.ReactNode;
33
46
  };
34
- type NativeCarouselProps = CarouselProps;
35
- export declare function transformCarouselProps(props: CarouselProps): NativeCarouselProps;
36
- export declare function Carousel(props: CarouselProps): import("react").JSX.Element;
37
- export {};
47
+ export type HorizontalCenteredHeroCarouselProps = CarouselCommonConfig & {
48
+ /**
49
+ * Maximum width of the hero item in dp.
50
+ * When unspecified, the hero item will be as wide as possible.
51
+ */
52
+ maxItemWidth?: number;
53
+ /**
54
+ * Minimum width of small peek items in dp.
55
+ * @default CarouselDefaults.MinSmallItemSize
56
+ */
57
+ minSmallItemWidth?: number;
58
+ /**
59
+ * Maximum width of small peek items in dp.
60
+ * @default CarouselDefaults.MaxSmallItemSize
61
+ */
62
+ maxSmallItemWidth?: number;
63
+ };
64
+ /**
65
+ * A hero carousel that centers one large item between two small peek items,
66
+ * matching Compose's `HorizontalCenteredHeroCarousel`.
67
+ */
68
+ export declare const HorizontalCenteredHeroCarousel: import("react").ComponentType<HorizontalCenteredHeroCarouselProps>;
69
+ export type HorizontalMultiBrowseCarouselProps = CarouselCommonConfig & {
70
+ /**
71
+ * The preferred width of the large item in dp.
72
+ */
73
+ preferredItemWidth: number;
74
+ /**
75
+ * Minimum width of small peek items in dp.
76
+ * @default CarouselDefaults.MinSmallItemSize
77
+ */
78
+ minSmallItemWidth?: number;
79
+ /**
80
+ * Maximum width of small peek items in dp.
81
+ * @default CarouselDefaults.MaxSmallItemSize
82
+ */
83
+ maxSmallItemWidth?: number;
84
+ };
85
+ /**
86
+ * A carousel that shows a large item alongside smaller peek items,
87
+ * matching Compose's `HorizontalMultiBrowseCarousel`.
88
+ */
89
+ export declare const HorizontalMultiBrowseCarousel: import("react").ComponentType<HorizontalMultiBrowseCarouselProps>;
90
+ export type HorizontalUncontainedCarouselProps = CarouselCommonConfig & {
91
+ /**
92
+ * The width of each item in dp.
93
+ */
94
+ itemWidth: number;
95
+ };
96
+ /**
97
+ * A carousel where each item has a fixed width with free-form scrolling,
98
+ * matching Compose's `HorizontalUncontainedCarousel`.
99
+ */
100
+ export declare const HorizontalUncontainedCarousel: import("react").ComponentType<HorizontalUncontainedCarouselProps>;
38
101
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/Carousel/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,eAAe,CAAC;AAC9D,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG,QAAQ,CAAC;AAE3D,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,uBAAuB;IACvB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC9C,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0BAA0B;IAC1B,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,KAAK,mBAAmB,GAAG,aAAa,CAAC;AAOzC,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,mBAAmB,CAOhF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAE5C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/Carousel/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG,QAAQ,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC9C;;;OAGG;IACH,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAsBF,MAAM,MAAM,mCAAmC,GAAG,oBAAoB,GAAG;IACvE;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,oEAGxC,CAAC;AAMJ,MAAM,MAAM,kCAAkC,GAAG,oBAAoB,GAAG;IACtE;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B,mEACwD,CAAC;AAMnG,MAAM,MAAM,kCAAkC,GAAG,oBAAoB,GAAG;IACtE;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B,mEACwD,CAAC"}
@@ -7,7 +7,7 @@ export type StrokeCap = 'round' | 'butt' | 'square';
7
7
  /**
8
8
  * Common props shared by all progress indicator variants.
9
9
  */
10
- type BaseProgressProps = {
10
+ export type ProgressCommonConfig = {
11
11
  /**
12
12
  * The current progress value between `0` and `1`. Omit for indeterminate.
13
13
  */
@@ -43,7 +43,7 @@ export type DrawStopIndicatorConfig = {
43
43
  */
44
44
  stopSize?: number;
45
45
  };
46
- export type LinearProgressIndicatorProps = BaseProgressProps & {
46
+ export type LinearProgressIndicatorProps = ProgressCommonConfig & {
47
47
  /**
48
48
  * Stroke cap style for the indicator ends.
49
49
  * @default 'round'
@@ -64,7 +64,7 @@ export type LinearProgressIndicatorProps = BaseProgressProps & {
64
64
  * Matches the Jetpack Compose `LinearProgressIndicator`.
65
65
  */
66
66
  export declare const LinearProgressIndicator: import("react").ComponentType<LinearProgressIndicatorProps>;
67
- export type CircularProgressIndicatorProps = BaseProgressProps & {
67
+ export type CircularProgressIndicatorProps = ProgressCommonConfig & {
68
68
  /**
69
69
  * Width of the circular stroke in dp.
70
70
  */
@@ -85,7 +85,7 @@ export type CircularProgressIndicatorProps = BaseProgressProps & {
85
85
  * Matches the Jetpack Compose `CircularProgressIndicator`.
86
86
  */
87
87
  export declare const CircularProgressIndicator: import("react").ComponentType<CircularProgressIndicatorProps>;
88
- export type LinearWavyProgressIndicatorProps = BaseProgressProps & {
88
+ export type LinearWavyProgressIndicatorProps = ProgressCommonConfig & {
89
89
  /**
90
90
  * Size of the stop indicator in dp at the end of the determinate progress track.
91
91
  */
@@ -97,12 +97,11 @@ export type LinearWavyProgressIndicatorProps = BaseProgressProps & {
97
97
  * Matches the Jetpack Compose `LinearWavyProgressIndicator`.
98
98
  */
99
99
  export declare const LinearWavyProgressIndicator: import("react").ComponentType<LinearWavyProgressIndicatorProps>;
100
- export type CircularWavyProgressIndicatorProps = BaseProgressProps;
100
+ export type CircularWavyProgressIndicatorProps = ProgressCommonConfig;
101
101
  /**
102
102
  * A circular progress indicator with wavy animation style.
103
103
  *
104
104
  * Matches the Jetpack Compose `CircularWavyProgressIndicator`.
105
105
  */
106
- export declare const CircularWavyProgressIndicator: import("react").ComponentType<BaseProgressProps>;
107
- export {};
106
+ export declare const CircularWavyProgressIndicator: import("react").ComponentType<ProgressCommonConfig>;
108
107
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/Progress/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpD;;GAEG;AACH,KAAK,iBAAiB,GAAG;IACvB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAsBF;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,iBAAiB,GAAG;IAC7D;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CAC7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,6DAEnC,CAAC;AAMF,MAAM,MAAM,8BAA8B,GAAG,iBAAiB,GAAG;IAC/D;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,+DAErC,CAAC;AAMF,MAAM,MAAM,gCAAgC,GAAG,iBAAiB,GAAG;IACjE;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,iEACsD,CAAC;AAM/F,MAAM,MAAM,kCAAkC,GAAG,iBAAiB,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,kDACwD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jetpack-compose/Progress/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAsBF;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,oBAAoB,GAAG;IAChE;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CAC7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,6DAEnC,CAAC;AAMF,MAAM,MAAM,8BAA8B,GAAG,oBAAoB,GAAG;IAClE;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,+DAErC,CAAC;AAMF,MAAM,MAAM,gCAAgC,GAAG,oBAAoB,GAAG;IACpE;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,iEACsD,CAAC;AAM/F,MAAM,MAAM,kCAAkC,GAAG,oBAAoB,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,qDACwD,CAAC"}
@@ -10,7 +10,7 @@
10
10
  "publication": {
11
11
  "groupId": "expo.modules.ui",
12
12
  "artifactId": "expo.modules.ui",
13
- "version": "55.0.4",
13
+ "version": "55.0.5",
14
14
  "repository": "local-maven-repo"
15
15
  }
16
16
  }
@@ -0,0 +1 @@
1
+ a1a203196fb21b6162e5f11497c730d850afd116
@@ -0,0 +1 @@
1
+ 7acb8c8af049e49e3f9af27000c01412a43bb971421bf27a59de32a14e59053f
@@ -0,0 +1 @@
1
+ c71fbadf5d96e9f5039ea8bb7694af708eee076fcfd37efd54ee4beef8eeedda1114cd15ca256ca10e8fd865ffb08733eabd9608e4ac5b82d29b77a5c1fc733b
@@ -0,0 +1 @@
1
+ f04895e7bb6cc7d89b005053ff14287e741bb6fb
@@ -0,0 +1 @@
1
+ 0d918c50436945df1df399fbe35f7c065f5c3f2d96d6a423a7f0d8f70f8becd2
@@ -0,0 +1 @@
1
+ 9960b6d2dcda9ca028402dd50376be92f3352ac81b6d2a28715aaa2896d48b82cc29605e0c2ed358b52232c22e87ab82bdc5252744746d717c419f95471a0d79
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "expo.modules.ui",
5
5
  "module": "expo.modules.ui",
6
- "version": "55.0.4",
6
+ "version": "55.0.5",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,13 +24,13 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.ui-55.0.4.aar",
28
- "url": "expo.modules.ui-55.0.4.aar",
29
- "size": 941708,
30
- "sha512": "5ef7ef206deaa6dfef5a2e05e537a30f0403374ac99fdaa68f1c9e93971f6b61fde7ca393032684eb926a3f9ab5f54f706eb6dd8c3908c26f4cb40408401a2f0",
31
- "sha256": "7ebaf9bde2723bcb47dd8a3cf5ffbdcf0f81b2d00b9db2926469cb968da468bf",
32
- "sha1": "734807c9b8517ef0239b2f71af20b03bef6fa322",
33
- "md5": "10502ee86098bcfdce95a529c46261bb"
27
+ "name": "expo.modules.ui-55.0.5.aar",
28
+ "url": "expo.modules.ui-55.0.5.aar",
29
+ "size": 951416,
30
+ "sha512": "9960b6d2dcda9ca028402dd50376be92f3352ac81b6d2a28715aaa2896d48b82cc29605e0c2ed358b52232c22e87ab82bdc5252744746d717c419f95471a0d79",
31
+ "sha256": "0d918c50436945df1df399fbe35f7c065f5c3f2d96d6a423a7f0d8f70f8becd2",
32
+ "sha1": "f04895e7bb6cc7d89b005053ff14287e741bb6fb",
33
+ "md5": "7899807b4b76bba12ab5649d1ecca695"
34
34
  }
35
35
  ]
36
36
  },
@@ -120,13 +120,13 @@
120
120
  ],
121
121
  "files": [
122
122
  {
123
- "name": "expo.modules.ui-55.0.4.aar",
124
- "url": "expo.modules.ui-55.0.4.aar",
125
- "size": 941708,
126
- "sha512": "5ef7ef206deaa6dfef5a2e05e537a30f0403374ac99fdaa68f1c9e93971f6b61fde7ca393032684eb926a3f9ab5f54f706eb6dd8c3908c26f4cb40408401a2f0",
127
- "sha256": "7ebaf9bde2723bcb47dd8a3cf5ffbdcf0f81b2d00b9db2926469cb968da468bf",
128
- "sha1": "734807c9b8517ef0239b2f71af20b03bef6fa322",
129
- "md5": "10502ee86098bcfdce95a529c46261bb"
123
+ "name": "expo.modules.ui-55.0.5.aar",
124
+ "url": "expo.modules.ui-55.0.5.aar",
125
+ "size": 951416,
126
+ "sha512": "9960b6d2dcda9ca028402dd50376be92f3352ac81b6d2a28715aaa2896d48b82cc29605e0c2ed358b52232c22e87ab82bdc5252744746d717c419f95471a0d79",
127
+ "sha256": "0d918c50436945df1df399fbe35f7c065f5c3f2d96d6a423a7f0d8f70f8becd2",
128
+ "sha1": "f04895e7bb6cc7d89b005053ff14287e741bb6fb",
129
+ "md5": "7899807b4b76bba12ab5649d1ecca695"
130
130
  }
131
131
  ]
132
132
  },
@@ -140,13 +140,13 @@
140
140
  },
141
141
  "files": [
142
142
  {
143
- "name": "expo.modules.ui-55.0.4-sources.jar",
144
- "url": "expo.modules.ui-55.0.4-sources.jar",
145
- "size": 60549,
146
- "sha512": "3d3bc9ee569cd399519716c66d92850b7bdde1ec0b0c328b938044699727988e55dbafec203f8f1b4613dd361bcfec03a21c084e031d73d95c45b982bd8ccd76",
147
- "sha256": "2798646e8f071faefc4a8c8678182ac8aa59fb458469aa6cc088658f4337ada2",
148
- "sha1": "d37f422ef8d7251d743ce6bbee5e16230ee6d654",
149
- "md5": "137fa3f768ea1d63be1de27d7d663a43"
143
+ "name": "expo.modules.ui-55.0.5-sources.jar",
144
+ "url": "expo.modules.ui-55.0.5-sources.jar",
145
+ "size": 60527,
146
+ "sha512": "c71fbadf5d96e9f5039ea8bb7694af708eee076fcfd37efd54ee4beef8eeedda1114cd15ca256ca10e8fd865ffb08733eabd9608e4ac5b82d29b77a5c1fc733b",
147
+ "sha256": "7acb8c8af049e49e3f9af27000c01412a43bb971421bf27a59de32a14e59053f",
148
+ "sha1": "a1a203196fb21b6162e5f11497c730d850afd116",
149
+ "md5": "cdbf4199213ee5e41437e171e4b244aa"
150
150
  }
151
151
  ]
152
152
  }
@@ -0,0 +1 @@
1
+ d30ff1c605c25bd8d8e0fb80ff49b811971ecbe2
@@ -0,0 +1 @@
1
+ 4a1a49797698e0a10a5214ddbb85223f1685408e0f70b9b4dd0fdf9af8938ef0
@@ -0,0 +1 @@
1
+ 165be7a4ea9bff60b606481e700c45968635b002f4260c92cd22553bd23a634ebb7681d4ca2a787f8ef4e33c952a3fa1ba55a2083a2520136d33a74d4ec79fbc
@@ -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.4</version>
12
+ <version>55.0.5</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.ui</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -0,0 +1 @@
1
+ 3f822c8513e1486f233092aa7005cc745004f34e
@@ -0,0 +1 @@
1
+ b19b4026895db6fc291f3c7e82297b8cc05faec53e2b552a97c098bcc5615018
@@ -0,0 +1 @@
1
+ 43d30e9917a138c7b219086306814b7c4511a74854b90d939e44efb368b9321059eb951af7578e27e390fa4ae69e7166de360826745d393acaef02890d767f0b
@@ -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.4</latest>
7
- <release>55.0.4</release>
6
+ <latest>55.0.5</latest>
7
+ <release>55.0.5</release>
8
8
  <versions>
9
- <version>55.0.4</version>
9
+ <version>55.0.5</version>
10
10
  </versions>
11
- <lastUpdated>20260318235530</lastUpdated>
11
+ <lastUpdated>20260319090811</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 1ef303d6294658c141b148e218bfa5f2
1
+ b02a9a0587a2e396d169ad04b2be48f8
@@ -1 +1 @@
1
- 9f2d4595450ecfd97a61c05ecfdaef96283fcf68
1
+ c978fdd6f265e4ad1cc728f40a94211c3762310c
@@ -1 +1 @@
1
- 9214fc11ed71f55ebf46e8f7af5932b8d7ae30b2913e59a2f164e6ec886aa1fe
1
+ cf4039afe71c1c1349feda54fd54c4fd4d5920eb5b38de23b6b4b36473007b67
@@ -1 +1 @@
1
- b99c173582718ffd673f85f8888fc07c83406aec2344101e8def140a275ea3b1e4a54d91c9b5a43a909b89ebff90ef60bd7e0ae9bec3f3666749c1cc8dd90635
1
+ f72c168b2e6d4b0ffc4f01b1d416202630455c986c1124e1750e5f9f04abe143e655941829bbaaf73b7fb99441ae3df3493a5f34a4dd60f7f5a1bf3b6d607448
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/ui",
3
- "version": "55.0.4",
3
+ "version": "55.0.5",
4
4
  "description": "A collection of UI components",
5
5
  "sideEffects": [
6
6
  "*.fx.js"
@@ -67,5 +67,5 @@
67
67
  "react": "*",
68
68
  "react-native": "*"
69
69
  },
70
- "gitHead": "31afdbe5613d666148711cb3ec58c4b617a00c14"
70
+ "gitHead": "b3f5ca76f340baa8a33f89853f14fce2a86dd29a"
71
71
  }
@@ -1,8 +1,11 @@
1
1
  import { requireNativeView } from 'expo';
2
2
 
3
- import { ExpoModifier } from '../../types';
3
+ import { type ModifierConfig } from '../../types';
4
4
  import { createViewModifierEventListener } from '../modifiers/utils';
5
5
 
6
+ /**
7
+ * Per-side padding values in dp for carousel content.
8
+ */
6
9
  export type PaddingValuesRecord = {
7
10
  start?: number;
8
11
  top?: number;
@@ -10,50 +13,135 @@ export type PaddingValuesRecord = {
10
13
  bottom?: number;
11
14
  };
12
15
 
13
- export type CarouselVariant = 'multiBrowse' | 'unconstrained';
16
+ /**
17
+ * Fling behavior type for controlling carousel snapping.
18
+ */
14
19
  export type FlingBehaviorType = 'singleAdvance' | 'noSnap';
15
20
 
16
- export type CarouselProps = {
21
+ /**
22
+ * Shared props across all carousel components.
23
+ */
24
+ export type CarouselCommonConfig = {
17
25
  /**
18
- * Modifiers for the component.
26
+ * Spacing between items in dp.
27
+ * @default 0
19
28
  */
20
- modifiers?: ExpoModifier[];
21
- /** Carousel variant */
22
- variant?: CarouselVariant;
23
- /** Spacing between items (dp) */
24
29
  itemSpacing?: number;
25
- /** Padding for carousel content (dp or object) */
30
+ /**
31
+ * Padding for carousel content (dp or object).
32
+ */
26
33
  contentPadding?: number | PaddingValuesRecord;
27
- /** Minimum small item width (dp) */
28
- minSmallItemWidth?: number;
29
- /** Maximum small item width (dp) */
30
- maxSmallItemWidth?: number;
31
- /** Fling behavior type */
34
+ /**
35
+ * Controls snapping behavior when the user flings the carousel.
36
+ * `'singleAdvance'` snaps to the next item, `'noSnap'` allows free scrolling.
37
+ */
32
38
  flingBehavior?: FlingBehaviorType;
33
- /** Preferred item width (dp) for multiBrowse variant */
34
- preferredItemWidth?: number;
35
- /** Item width (dp) for unconstrained variant */
36
- itemWidth?: number;
37
- /** Children to render */
39
+ /**
40
+ * Whether the user can scroll the carousel.
41
+ * @default true
42
+ */
43
+ userScrollEnabled?: boolean;
44
+ /**
45
+ * Modifiers for the component.
46
+ */
47
+ modifiers?: ModifierConfig[];
48
+ /**
49
+ * Children to render as carousel items.
50
+ */
38
51
  children: React.ReactNode;
39
52
  };
40
53
 
41
- type NativeCarouselProps = CarouselProps;
42
-
43
- const CarouselNativeView: React.ComponentType<NativeCarouselProps> = requireNativeView(
44
- 'ExpoUI',
45
- 'CarouselView'
46
- );
47
-
48
- export function transformCarouselProps(props: CarouselProps): NativeCarouselProps {
54
+ function transformProps<T extends { modifiers?: ModifierConfig[] }>(props: T): T {
49
55
  const { modifiers, ...restProps } = props;
50
56
  return {
51
57
  modifiers,
52
58
  ...(modifiers ? createViewModifierEventListener(modifiers) : undefined),
53
59
  ...restProps,
54
- };
60
+ } as T;
55
61
  }
56
62
 
57
- export function Carousel(props: CarouselProps) {
58
- return <CarouselNativeView {...transformCarouselProps(props)} />;
63
+ function createCarouselComponent<P extends { modifiers?: ModifierConfig[] }>(
64
+ viewName: string
65
+ ): React.ComponentType<P> {
66
+ const NativeView: React.ComponentType<P> = requireNativeView('ExpoUI', viewName);
67
+ return function CarouselComponent(props: P) {
68
+ return <NativeView {...transformProps(props)} />;
69
+ };
59
70
  }
71
+
72
+ // region HorizontalCenteredHeroCarousel
73
+
74
+ export type HorizontalCenteredHeroCarouselProps = CarouselCommonConfig & {
75
+ /**
76
+ * Maximum width of the hero item in dp.
77
+ * When unspecified, the hero item will be as wide as possible.
78
+ */
79
+ maxItemWidth?: number;
80
+ /**
81
+ * Minimum width of small peek items in dp.
82
+ * @default CarouselDefaults.MinSmallItemSize
83
+ */
84
+ minSmallItemWidth?: number;
85
+ /**
86
+ * Maximum width of small peek items in dp.
87
+ * @default CarouselDefaults.MaxSmallItemSize
88
+ */
89
+ maxSmallItemWidth?: number;
90
+ };
91
+
92
+ /**
93
+ * A hero carousel that centers one large item between two small peek items,
94
+ * matching Compose's `HorizontalCenteredHeroCarousel`.
95
+ */
96
+ export const HorizontalCenteredHeroCarousel =
97
+ createCarouselComponent<HorizontalCenteredHeroCarouselProps>(
98
+ 'HorizontalCenteredHeroCarouselView'
99
+ );
100
+
101
+ // endregion
102
+
103
+ // region HorizontalMultiBrowseCarousel
104
+
105
+ export type HorizontalMultiBrowseCarouselProps = CarouselCommonConfig & {
106
+ /**
107
+ * The preferred width of the large item in dp.
108
+ */
109
+ preferredItemWidth: number;
110
+ /**
111
+ * Minimum width of small peek items in dp.
112
+ * @default CarouselDefaults.MinSmallItemSize
113
+ */
114
+ minSmallItemWidth?: number;
115
+ /**
116
+ * Maximum width of small peek items in dp.
117
+ * @default CarouselDefaults.MaxSmallItemSize
118
+ */
119
+ maxSmallItemWidth?: number;
120
+ };
121
+
122
+ /**
123
+ * A carousel that shows a large item alongside smaller peek items,
124
+ * matching Compose's `HorizontalMultiBrowseCarousel`.
125
+ */
126
+ export const HorizontalMultiBrowseCarousel =
127
+ createCarouselComponent<HorizontalMultiBrowseCarouselProps>('HorizontalMultiBrowseCarouselView');
128
+
129
+ // endregion
130
+
131
+ // region HorizontalUncontainedCarousel
132
+
133
+ export type HorizontalUncontainedCarouselProps = CarouselCommonConfig & {
134
+ /**
135
+ * The width of each item in dp.
136
+ */
137
+ itemWidth: number;
138
+ };
139
+
140
+ /**
141
+ * A carousel where each item has a fixed width with free-form scrolling,
142
+ * matching Compose's `HorizontalUncontainedCarousel`.
143
+ */
144
+ export const HorizontalUncontainedCarousel =
145
+ createCarouselComponent<HorizontalUncontainedCarouselProps>('HorizontalUncontainedCarouselView');
146
+
147
+ // endregion
@@ -12,7 +12,7 @@ export type StrokeCap = 'round' | 'butt' | 'square';
12
12
  /**
13
13
  * Common props shared by all progress indicator variants.
14
14
  */
15
- type BaseProgressProps = {
15
+ export type ProgressCommonConfig = {
16
16
  /**
17
17
  * The current progress value between `0` and `1`. Omit for indeterminate.
18
18
  */
@@ -31,7 +31,7 @@ type BaseProgressProps = {
31
31
  modifiers?: ModifierConfig[];
32
32
  };
33
33
 
34
- function transformProps<T extends BaseProgressProps>(props: T): T {
34
+ function transformProps<T extends ProgressCommonConfig>(props: T): T {
35
35
  const { modifiers, ...restProps } = props;
36
36
  return {
37
37
  modifiers,
@@ -40,7 +40,7 @@ function transformProps<T extends BaseProgressProps>(props: T): T {
40
40
  } as T;
41
41
  }
42
42
 
43
- function createProgressComponent<P extends BaseProgressProps>(
43
+ function createProgressComponent<P extends ProgressCommonConfig>(
44
44
  viewName: string
45
45
  ): React.ComponentType<P> {
46
46
  const NativeView: React.ComponentType<P> = requireNativeView('ExpoUI', viewName);
@@ -70,7 +70,7 @@ export type DrawStopIndicatorConfig = {
70
70
  stopSize?: number;
71
71
  };
72
72
 
73
- export type LinearProgressIndicatorProps = BaseProgressProps & {
73
+ export type LinearProgressIndicatorProps = ProgressCommonConfig & {
74
74
  /**
75
75
  * Stroke cap style for the indicator ends.
76
76
  * @default 'round'
@@ -99,7 +99,7 @@ export const LinearProgressIndicator = createProgressComponent<LinearProgressInd
99
99
 
100
100
  // region CircularProgressIndicator
101
101
 
102
- export type CircularProgressIndicatorProps = BaseProgressProps & {
102
+ export type CircularProgressIndicatorProps = ProgressCommonConfig & {
103
103
  /**
104
104
  * Width of the circular stroke in dp.
105
105
  */
@@ -128,7 +128,7 @@ export const CircularProgressIndicator = createProgressComponent<CircularProgres
128
128
 
129
129
  // region LinearWavyProgressIndicator
130
130
 
131
- export type LinearWavyProgressIndicatorProps = BaseProgressProps & {
131
+ export type LinearWavyProgressIndicatorProps = ProgressCommonConfig & {
132
132
  /**
133
133
  * Size of the stop indicator in dp at the end of the determinate progress track.
134
134
  */
@@ -147,7 +147,7 @@ export const LinearWavyProgressIndicator =
147
147
 
148
148
  // region CircularWavyProgressIndicator
149
149
 
150
- export type CircularWavyProgressIndicatorProps = BaseProgressProps;
150
+ export type CircularWavyProgressIndicatorProps = ProgressCommonConfig;
151
151
 
152
152
  /**
153
153
  * A circular progress indicator with wavy animation style.
@@ -1 +0,0 @@
1
- d37f422ef8d7251d743ce6bbee5e16230ee6d654
@@ -1 +0,0 @@
1
- 2798646e8f071faefc4a8c8678182ac8aa59fb458469aa6cc088658f4337ada2
@@ -1 +0,0 @@
1
- 3d3bc9ee569cd399519716c66d92850b7bdde1ec0b0c328b938044699727988e55dbafec203f8f1b4613dd361bcfec03a21c084e031d73d95c45b982bd8ccd76
@@ -1 +0,0 @@
1
- 10502ee86098bcfdce95a529c46261bb
@@ -1 +0,0 @@
1
- 734807c9b8517ef0239b2f71af20b03bef6fa322
@@ -1 +0,0 @@
1
- 7ebaf9bde2723bcb47dd8a3cf5ffbdcf0f81b2d00b9db2926469cb968da468bf
@@ -1 +0,0 @@
1
- 5ef7ef206deaa6dfef5a2e05e537a30f0403374ac99fdaa68f1c9e93971f6b61fde7ca393032684eb926a3f9ab5f54f706eb6dd8c3908c26f4cb40408401a2f0
@@ -1 +0,0 @@
1
- b832195b632ff8761b0a6c59d4a12c0bbfb38f69
@@ -1 +0,0 @@
1
- 3cde2316fb065490b2bf67953e88eb1c0490df22f69928632b795e760e13a9eb
@@ -1 +0,0 @@
1
- 1cd6df7a2b2207a6167ddd1f4f34c37745a18fb16c125d58848cf3146fd8a11f43ccdc15f4c1a352a0d55efb1d2df382df19b30051197081b90a52077cb4a6e9
@@ -1 +0,0 @@
1
- d5d19d69bd1c2c6b960efb092f40bbe1
@@ -1 +0,0 @@
1
- 31874fcef8f1e3fef61c13fe7d64a32ac62819ce
@@ -1 +0,0 @@
1
- 16bf7ce47844a5483c85b20fad391cfc6c74912b344eddb1e95f70395d9e1c68
@@ -1 +0,0 @@
1
- f415dd7401f64dcab069526d91ecb1a42d76946ccf955930887bb74c84ac0cc3a7be6c13185cd34105466d1378532f738620c23cf6caa83444088a36d98acdb9