expo-dev-launcher 6.0.6-canary-20250826-f475166 → 6.0.7

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 (30) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/debug/java/expo/modules/devlauncher/compose/BindingView.kt +3 -5
  4. package/android/src/debug/java/expo/modules/devlauncher/compose/DevLauncherBottomTabsNavigator.kt +16 -4
  5. package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/Accordion.kt +48 -42
  6. package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/CircularProgressBar.kt +6 -13
  7. package/android/src/debug/java/expo/modules/devlauncher/compose/routes/DevelopmentServers.kt +53 -0
  8. package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Home.kt +4 -2
  9. package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Profile.kt +2 -2
  10. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/BranchScreen.kt +1 -2
  11. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/BranchesScreen.kt +121 -129
  12. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/ErrorScreen.kt +24 -15
  13. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/HomeScreen.kt +20 -236
  14. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/SettingsScreen.kt +8 -103
  15. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ActionButton.kt +0 -29
  16. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AppHeader.kt +4 -6
  17. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AppLoadingErrorDialog.kt +33 -20
  18. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/DevelopmentSession.kt +122 -0
  19. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/FetchDevelopmentServersButton.kt +125 -0
  20. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/RunningAppCard.kt +1 -2
  21. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ScanQRCodeButton.kt +62 -0
  22. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ServerUrlInput.kt +12 -14
  23. package/android/src/main/res/drawable/download.xml +13 -0
  24. package/android/src/main/res/drawable/plus.xml +9 -0
  25. package/package.json +6 -5
  26. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/DevelopmentServerHelp.kt +0 -55
  27. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ProfileLayout.kt +0 -53
  28. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ScreenHeaderContainer.kt +0 -25
  29. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/SectionHeader.kt +0 -20
  30. /package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/{Asyncimage.kt → AsyncImage.kt} +0 -0
package/CHANGELOG.md CHANGED
@@ -10,6 +10,14 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 6.0.7 — 2025-08-28
14
+
15
+ _This version does not introduce any user-facing changes._
16
+
17
+ ## 6.0.6 — 2025-08-27
18
+
19
+ _This version does not introduce any user-facing changes._
20
+
13
21
  ## 6.0.5 — 2025-08-25
14
22
 
15
23
  _This version does not introduce any user-facing changes._
@@ -20,13 +20,13 @@ expoModule {
20
20
  }
21
21
 
22
22
  group = "host.exp.exponent"
23
- version = "6.0.6-canary-20250826-f475166"
23
+ version = "6.0.7"
24
24
 
25
25
  android {
26
26
  namespace "expo.modules.devlauncher"
27
27
  defaultConfig {
28
28
  versionCode 9
29
- versionName "6.0.6-canary-20250826-f475166"
29
+ versionName "6.0.7"
30
30
  }
31
31
 
32
32
  buildTypes {
@@ -3,17 +3,15 @@ package expo.modules.devlauncher.compose
3
3
  import android.content.Context
4
4
  import android.widget.LinearLayout
5
5
  import androidx.compose.ui.platform.ComposeView
6
- import expo.modules.devmenu.compose.theme.AppTheme
6
+ import expo.modules.devmenu.compose.newtheme.AppTheme
7
7
 
8
8
  class BindingView(context: Context) : LinearLayout(context) {
9
9
  init {
10
10
  addView(
11
11
  ComposeView(context).apply {
12
12
  setContent {
13
- expo.modules.devmenu.compose.newtheme.AppTheme {
14
- AppTheme {
15
- DevLauncherBottomTabsNavigator()
16
- }
13
+ AppTheme {
14
+ DevLauncherBottomTabsNavigator()
17
15
  }
18
16
  }
19
17
  }
@@ -18,6 +18,7 @@ import androidx.navigation.compose.rememberNavController
18
18
  import expo.modules.devlauncher.compose.primitives.DefaultScaffold
19
19
  import expo.modules.devlauncher.compose.routes.CrashReport
20
20
  import expo.modules.devlauncher.compose.routes.CrashReportRoute
21
+ import expo.modules.devlauncher.compose.routes.DevelopmentServersRoute
21
22
  import expo.modules.devlauncher.compose.routes.HomeRoute
22
23
  import expo.modules.devlauncher.compose.routes.ProfileRoute
23
24
  import expo.modules.devlauncher.compose.routes.Routes
@@ -56,10 +57,15 @@ object Main
56
57
  fun DevLauncherBottomTabsNavigator() {
57
58
  val mainNavController = rememberNavController()
58
59
  val bottomTabsNavController = rememberNavController()
59
- val bottomSheetState = rememberBottomSheetState()
60
+ val profileBottomSheetState = rememberBottomSheetState()
61
+ val developmentServersBottomSheetState = rememberBottomSheetState()
60
62
 
61
63
  val navigateToProfile = remember {
62
- { bottomSheetState.targetDetent = Full }
64
+ { profileBottomSheetState.targetDetent = Full }
65
+ }
66
+
67
+ val openDevelopmentServers = remember {
68
+ { developmentServersBottomSheetState.targetDetent = Full }
63
69
  }
64
70
 
65
71
  NavHost(
@@ -94,7 +100,11 @@ fun DevLauncherBottomTabsNavigator() {
94
100
  }
95
101
  ) {
96
102
  composable<Routes.Home> {
97
- HomeRoute(navController = mainNavController, onProfileClick = navigateToProfile)
103
+ HomeRoute(
104
+ navController = mainNavController,
105
+ onProfileClick = navigateToProfile,
106
+ onDevServersClick = openDevelopmentServers
107
+ )
98
108
  }
99
109
  composable<Routes.Updates> {
100
110
  UpdatesRoute(onProfileClick = navigateToProfile)
@@ -124,5 +134,7 @@ fun DevLauncherBottomTabsNavigator() {
124
134
  }
125
135
  }
126
136
 
127
- ProfileRoute(bottomSheetState)
137
+ ProfileRoute(profileBottomSheetState)
138
+
139
+ DevelopmentServersRoute(developmentServersBottomSheetState)
128
140
  }
@@ -1,7 +1,6 @@
1
1
  package expo.modules.devlauncher.compose.primitives
2
2
 
3
3
  import androidx.compose.animation.AnimatedVisibility
4
- import androidx.compose.animation.core.animateFloatAsState
5
4
  import androidx.compose.animation.core.tween
6
5
  import androidx.compose.animation.expandVertically
7
6
  import androidx.compose.animation.shrinkVertically
@@ -10,6 +9,8 @@ import androidx.compose.foundation.layout.Arrangement
10
9
  import androidx.compose.foundation.layout.Box
11
10
  import androidx.compose.foundation.layout.Column
12
11
  import androidx.compose.foundation.layout.Row
12
+ import androidx.compose.foundation.layout.fillMaxWidth
13
+ import androidx.compose.foundation.layout.padding
13
14
  import androidx.compose.foundation.layout.size
14
15
  import androidx.compose.runtime.Composable
15
16
  import androidx.compose.runtime.getValue
@@ -18,7 +19,6 @@ import androidx.compose.runtime.remember
18
19
  import androidx.compose.runtime.setValue
19
20
  import androidx.compose.ui.Alignment
20
21
  import androidx.compose.ui.Modifier
21
- import androidx.compose.ui.draw.rotate
22
22
  import androidx.compose.ui.res.painterResource
23
23
  import androidx.compose.ui.tooling.preview.Preview
24
24
  import androidx.compose.ui.unit.dp
@@ -26,7 +26,8 @@ import com.composeunstyled.Icon
26
26
  import expo.modules.devlauncher.R
27
27
  import expo.modules.devmenu.compose.newtheme.NewAppTheme
28
28
  import expo.modules.devmenu.compose.primitives.NewText
29
- import expo.modules.devmenu.compose.primitives.Text
29
+ import expo.modules.devmenu.compose.primitives.RoundedSurface
30
+ import expo.modules.devmenu.compose.primitives.Spacer
30
31
 
31
32
  @Composable
32
33
  fun Accordion(
@@ -36,58 +37,63 @@ fun Accordion(
36
37
  accordionContent: @Composable () -> Unit = {}
37
38
  ) {
38
39
  var expanded by remember { mutableStateOf(initialState) }
39
- val arrowRotation by animateFloatAsState(
40
- targetValue = if (expanded) 90f else 0f,
41
- label = "accordion-arrow"
42
- )
43
40
 
44
- Column {
45
- Box(
41
+ RoundedSurface(
42
+ color = NewAppTheme.colors.background.subtle,
43
+ borderRadius = NewAppTheme.borderRadius.xl
44
+ ) {
45
+ Column(
46
46
  modifier = Modifier
47
+ .fillMaxWidth()
47
48
  .clickable { expanded = !expanded }
49
+ .padding(NewAppTheme.spacing.`3`)
48
50
  ) {
49
- Row(
50
- horizontalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`2`),
51
- verticalAlignment = Alignment.CenterVertically,
52
- modifier = modifier
53
- ) {
54
- Icon(
55
- painter = painterResource(R.drawable.arrow_right),
56
- contentDescription = "Accordion Arrow",
57
- tint = NewAppTheme.colors.text.link,
58
- modifier = Modifier
59
- .rotate(arrowRotation)
60
- .size(16.dp)
61
- )
51
+ Box {
52
+ Row(
53
+ horizontalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`2`),
54
+ verticalAlignment = Alignment.CenterVertically,
55
+ modifier = modifier
56
+ ) {
57
+ Icon(
58
+ painter = painterResource(R.drawable.plus),
59
+ contentDescription = "Accordion Arrow",
60
+ tint = NewAppTheme.colors.text.link,
61
+ modifier = Modifier
62
+ .size(16.dp)
63
+ )
62
64
 
63
- NewText(
64
- text = text,
65
- style = NewAppTheme.font.sm,
66
- color = NewAppTheme.colors.text.link
67
- )
65
+ NewText(
66
+ text = text,
67
+ style = NewAppTheme.font.sm,
68
+ color = NewAppTheme.colors.text.link
69
+ )
70
+ }
68
71
  }
69
- }
70
72
 
71
- AnimatedVisibility(
72
- visible = expanded,
73
- enter = expandVertically(
74
- expandFrom = Alignment.Top,
75
- animationSpec = tween()
76
- ),
77
- exit = shrinkVertically(
78
- shrinkTowards = Alignment.Top,
79
- animationSpec = tween()
80
- )
81
- ) {
82
- accordionContent()
73
+ AnimatedVisibility(
74
+ visible = expanded,
75
+ enter = expandVertically(
76
+ expandFrom = Alignment.Top,
77
+ animationSpec = tween()
78
+ ),
79
+ exit = shrinkVertically(
80
+ shrinkTowards = Alignment.Top,
81
+ animationSpec = tween()
82
+ )
83
+ ) {
84
+ Column {
85
+ Spacer(NewAppTheme.spacing.`3`)
86
+ accordionContent()
87
+ }
88
+ }
83
89
  }
84
90
  }
85
91
  }
86
92
 
87
93
  @Composable
88
- @Preview(showBackground = true, heightDp = 200)
94
+ @Preview(showBackground = true, heightDp = 200, widthDp = 300)
89
95
  fun AccordionVariantPreview() {
90
96
  Accordion(text = "Enter URL manually") {
91
- Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac nisl interdum, mattis purus a, consequat ipsum. Aliquam sem mauris, egestas a elit a, lacinia efficitur nisi. Maecenas scelerisque erat nisi, ac interdum mauris volutpat vel. Proin sed lectus at purus interdum porta. Ut mollis feugiat dignissim.")
97
+ NewText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac nisl interdum, mattis purus a, consequat ipsum. Aliquam sem mauris, egestas a elit a, lacinia efficitur nisi. Maecenas scelerisque erat nisi, ac interdum mauris volutpat vel. Proin sed lectus at purus interdum porta. Ut mollis feugiat dignissim.")
92
98
  }
93
99
  }
@@ -17,8 +17,10 @@ import androidx.compose.ui.graphics.drawscope.withTransform
17
17
  import androidx.compose.ui.tooling.preview.Preview
18
18
  import androidx.compose.ui.unit.Dp
19
19
  import androidx.compose.ui.unit.dp
20
- import expo.modules.devmenu.compose.theme.Pallet
21
- import expo.modules.devmenu.compose.theme.Theme
20
+ import expo.modules.devmenu.compose.newtheme.NewAppTheme
21
+ import io.github.lukmccall.colors.blue
22
+ import io.github.lukmccall.colors.gray
23
+
22
24
  import kotlin.time.Duration
23
25
  import kotlin.time.Duration.Companion.seconds
24
26
 
@@ -29,17 +31,8 @@ fun CircularProgressBar(
29
31
  strokeWidth: Dp = size / 8,
30
32
  duration: Duration = 1.seconds
31
33
  ) {
32
- val backgroundColor = if (Theme.isDarkTheme) {
33
- Pallet.Dark.Gray.gray300
34
- } else {
35
- Pallet.Light.Gray.gray300
36
- }
37
-
38
- val progressColor = if (Theme.isDarkTheme) {
39
- Pallet.Dark.Blue.blue500
40
- } else {
41
- Pallet.Light.Blue.blue500
42
- }
34
+ val backgroundColor = NewAppTheme.pallet.gray.`3`
35
+ val progressColor = NewAppTheme.pallet.blue.`5`
43
36
 
44
37
  val transition = rememberInfiniteTransition(label = "infiniteSpinningTransition")
45
38
 
@@ -0,0 +1,53 @@
1
+ package expo.modules.devlauncher.compose.routes
2
+
3
+ import androidx.compose.foundation.layout.Column
4
+ import androidx.compose.foundation.layout.fillMaxWidth
5
+ import androidx.compose.foundation.layout.padding
6
+ import androidx.compose.runtime.Composable
7
+ import androidx.compose.ui.Modifier
8
+ import androidx.compose.ui.text.font.FontWeight
9
+ import androidx.compose.ui.text.style.TextAlign
10
+ import com.composables.core.ModalBottomSheetState
11
+ import com.composables.core.SheetDetent.Companion.Hidden
12
+ import expo.modules.devlauncher.compose.ui.ActionButton
13
+ import expo.modules.devlauncher.compose.ui.BottomSheet
14
+ import expo.modules.devlauncher.compose.ui.DevelopmentSessionHelp
15
+ import expo.modules.devmenu.compose.newtheme.NewAppTheme
16
+ import expo.modules.devmenu.compose.primitives.NewText
17
+ import expo.modules.devmenu.compose.primitives.Spacer
18
+
19
+ @Composable
20
+ fun DevelopmentServersRoute(
21
+ bottomSheetState: ModalBottomSheetState
22
+ ) {
23
+ BottomSheet(bottomSheetState) {
24
+ Column {
25
+ NewText(
26
+ "Development Servers",
27
+ style = NewAppTheme.font.xxl.merge(
28
+ fontWeight = FontWeight.SemiBold,
29
+ textAlign = TextAlign.Center
30
+ ),
31
+ modifier = Modifier
32
+ .padding(vertical = NewAppTheme.spacing.`4`)
33
+ .fillMaxWidth()
34
+ )
35
+
36
+ Spacer(NewAppTheme.spacing.`3`)
37
+
38
+ DevelopmentSessionHelp()
39
+
40
+ Spacer(NewAppTheme.spacing.`5`)
41
+
42
+ ActionButton(
43
+ text = "Dismiss",
44
+ foreground = NewAppTheme.colors.text.secondary,
45
+ background = NewAppTheme.colors.background.element,
46
+ modifier = Modifier.padding(NewAppTheme.spacing.`3`),
47
+ onClick = {
48
+ bottomSheetState.targetDetent = Hidden
49
+ }
50
+ )
51
+ }
52
+ }
53
+ }
@@ -13,7 +13,8 @@ import expo.modules.devlauncher.compose.screens.HomeScreen
13
13
  @Composable
14
14
  fun HomeRoute(
15
15
  navController: NavController,
16
- onProfileClick: () -> Unit
16
+ onProfileClick: () -> Unit,
17
+ onDevServersClick: () -> Unit
17
18
  ) {
18
19
  DefaultScreenContainer {
19
20
  val viewModel = viewModel<HomeViewModel>()
@@ -42,7 +43,8 @@ fun HomeRoute(
42
43
  else -> viewModel.onAction(action)
43
44
  }
44
45
  },
45
- onProfileClick = onProfileClick
46
+ onProfileClick = onProfileClick,
47
+ onDevServersClick = onDevServersClick
46
48
  )
47
49
  }
48
50
  }
@@ -99,14 +99,14 @@ fun ProfileRoute(
99
99
  )
100
100
  )
101
101
  .background(
102
- NewAppTheme.colors.background.default,
102
+ Color.White,
103
103
  shape = RoundedCornerShape(NewAppTheme.borderRadius.md)
104
104
  )
105
105
  ) {
106
106
  Icon(
107
107
  painter = painterResource(R.drawable.expo_logo),
108
108
  contentDescription = "Expo logo",
109
- tint = NewAppTheme.colors.icon.default,
109
+ tint = Color.Black,
110
110
  modifier = Modifier
111
111
  .size(24.dp)
112
112
  .align(Alignment.Center)
@@ -41,7 +41,6 @@ import expo.modules.devmenu.compose.primitives.Divider
41
41
  import expo.modules.devmenu.compose.primitives.NewText
42
42
  import expo.modules.devmenu.compose.primitives.RoundedSurface
43
43
  import expo.modules.devmenu.compose.primitives.Spacer
44
- import expo.modules.devmenu.compose.theme.Theme
45
44
 
46
45
  @Composable
47
46
  fun BranchScreen(
@@ -200,7 +199,7 @@ fun BranchScreen(
200
199
  verticalAlignment = Alignment.CenterVertically
201
200
  ) {
202
201
  CircularProgressBar(
203
- size = Theme.sizing.icon.large
202
+ size = 44.dp
204
203
  )
205
204
  }
206
205
  }