expo-dev-menu 6.1.6 → 6.1.8

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.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,18 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 6.1.8 — 2025-04-30
14
+
15
+ ### 🐛 Bug fixes
16
+
17
+ - Fixed Property "require" doesn't exist error. ([#36484](https://github.com/expo/expo/pull/36484) by [@kudo](https://github.com/kudo))
18
+
19
+ ## 6.1.7 — 2025-04-28
20
+
21
+ ### 💡 Others
22
+
23
+ - [Android] Enable edge-to-edge. ([#36370](https://github.com/expo/expo/pull/36370) by [@behenate](https://github.com/behenate))
24
+
13
25
  ## 6.1.6 — 2025-04-25
14
26
 
15
27
  _This version does not introduce any user-facing changes._
@@ -4,7 +4,7 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'host.exp.exponent'
7
- version = '6.1.6'
7
+ version = '6.1.8'
8
8
 
9
9
  expoModule {
10
10
  canBePublished false
@@ -14,7 +14,7 @@ android {
14
14
  namespace "expo.modules.devmenu"
15
15
  defaultConfig {
16
16
  versionCode 10
17
- versionName '6.1.6'
17
+ versionName '6.1.8'
18
18
  }
19
19
 
20
20
  sourceSets {
@@ -9,7 +9,11 @@ import android.view.View
9
9
  import android.view.ViewGroup
10
10
  import android.widget.FrameLayout
11
11
  import androidx.coordinatorlayout.widget.CoordinatorLayout
12
+ import androidx.core.view.ViewCompat
13
+ import androidx.core.view.WindowCompat
14
+ import androidx.core.view.WindowInsetsCompat
12
15
  import androidx.core.view.doOnLayout
16
+ import androidx.core.view.updatePadding
13
17
  import com.facebook.react.ReactActivity
14
18
  import com.facebook.react.ReactActivityDelegate
15
19
  import com.facebook.react.ReactDelegate
@@ -126,10 +130,21 @@ class DevMenuActivity : ReactActivity() {
126
130
  }
127
131
 
128
132
  override fun setContentView(view: View?) {
133
+ // Enables edge-to-edge
134
+ WindowCompat.setDecorFitsSystemWindows(window, false)
135
+
129
136
  super.setContentView(R.layout.bottom_sheet)
130
137
 
131
138
  val mainLayout = findViewById<CoordinatorLayout>(R.id.main_layout)
132
139
  val bottomSheet = findViewById<FrameLayout>(R.id.bottom_sheet)
140
+
141
+ // Adds transparent top padding to avoid the status bar
142
+ ViewCompat.setOnApplyWindowInsetsListener(bottomSheet) { view, windowInsets ->
143
+ val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
144
+ view.updatePadding(top = insets.top)
145
+ WindowInsetsCompat.CONSUMED
146
+ }
147
+
133
148
  (view?.parent as? ViewGroup)?.removeView(view)
134
149
  bottomSheet.addView(view)
135
150
 
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
- <resources>
2
+ <resources xmlns:tools="http://schemas.android.com/tools">
3
3
 
4
4
  <style name="Theme.AppCompat.Transparent.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
5
5
  <item name="android:windowIsTranslucent">true</item>
@@ -9,6 +9,10 @@
9
9
  <item name="android:windowIsFloating">false</item>
10
10
  <item name="android:backgroundDimEnabled">false</item>
11
11
  <item name="android:windowAnimationStyle">@null</item>
12
+ <item name="android:enforceNavigationBarContrast" tools:targetApi="q">true</item>
13
+ <item name="android:navigationBarColor">@android:color/transparent</item>
14
+ <item name="android:statusBarColor">@android:color/transparent</item>
15
+ <item name="android:windowDrawsSystemBarBackgrounds">true</item>
12
16
  </style>
13
17
 
14
18
  </resources>
@@ -1,6 +1,7 @@
1
1
  import { ThemeProvider } from 'expo-dev-client-components';
2
2
  import * as React from 'react';
3
3
 
4
+ import { SafeAreaProvider } from '../../vendored/react-native-safe-area-context/src';
4
5
  import { AppInfoContextProvider, AppInfoContextProviderProps } from '../hooks/useAppInfo';
5
6
  import { DevSettingsProviderProps, DevSettingsProvider } from '../hooks/useDevSettings';
6
7
  import { MenuPreferencesProvider, MenuPreferencesProviderProps } from '../hooks/useMenuPreferences';
@@ -20,11 +21,13 @@ export function AppProviders({
20
21
  }: AppProvidersProps) {
21
22
  return (
22
23
  <DevSettingsProvider devSettings={devSettings}>
23
- <AppInfoContextProvider appInfo={appInfo}>
24
- <MenuPreferencesProvider menuPreferences={menuPreferences}>
25
- <ThemeProvider themePreference="no-preference">{children}</ThemeProvider>
26
- </MenuPreferencesProvider>
27
- </AppInfoContextProvider>
24
+ <SafeAreaProvider>
25
+ <AppInfoContextProvider appInfo={appInfo}>
26
+ <MenuPreferencesProvider menuPreferences={menuPreferences}>
27
+ <ThemeProvider themePreference="no-preference">{children}</ThemeProvider>
28
+ </MenuPreferencesProvider>
29
+ </AppInfoContextProvider>
30
+ </SafeAreaProvider>
28
31
  </DevSettingsProvider>
29
32
  );
30
33
  }
@@ -24,6 +24,7 @@ import * as React from 'react';
24
24
  import { Platform, ScrollView, Switch } from 'react-native';
25
25
 
26
26
  import { Onboarding } from './Onboarding';
27
+ import { SafeAreaView } from '../../vendored/react-native-safe-area-context/src';
27
28
  import { useAppInfo } from '../hooks/useAppInfo';
28
29
  import { useClipboard } from '../hooks/useClipboard';
29
30
  import { useDevSettings } from '../hooks/useDevSettings';
@@ -64,279 +65,285 @@ export function Main({ registeredCallbacks = [], isDevice }: MainProps) {
64
65
 
65
66
  return (
66
67
  <View flex="1" bg="secondary">
67
- <View py="medium" bg="default">
68
- <Row align="start">
69
- <Spacer.Horizontal size="medium" />
70
- <Row align="center" shrink="1">
71
- <View>
72
- <View height="xl" width="xl" overflow="hidden" bg="secondary" rounded="medium">
73
- {Boolean(appInfo?.appIcon) && (
74
- <Image
75
- source={{ uri: appInfo?.appIcon }}
76
- style={{ flex: 1, resizeMode: 'contain' }}
77
- />
78
- )}
68
+ {/*Use default edges for android, do not enable for iOS*/}
69
+ <SafeAreaView style={{ flex: 1 }} edges={Platform.OS === 'android' ? undefined : []}>
70
+ <View py="medium" bg="default">
71
+ <Row align="start">
72
+ <Spacer.Horizontal size="medium" />
73
+ <Row align="center" shrink="1">
74
+ <View>
75
+ <View height="xl" width="xl" overflow="hidden" bg="secondary" rounded="medium">
76
+ {Boolean(appInfo?.appIcon) && (
77
+ <Image
78
+ source={{ uri: appInfo?.appIcon }}
79
+ style={{ flex: 1, resizeMode: 'contain' }}
80
+ />
81
+ )}
82
+ </View>
79
83
  </View>
80
- </View>
81
84
 
82
- <Spacer.Horizontal size="small" />
85
+ <Spacer.Horizontal size="small" />
83
86
 
84
- <View shrink="1">
85
- <Row style={{ flexWrap: 'wrap' }}>
86
- <Heading weight="bold" numberOfLines={1}>
87
- {appInfo?.appName}
88
- </Heading>
89
- </Row>
87
+ <View shrink="1">
88
+ <Row style={{ flexWrap: 'wrap' }}>
89
+ <Heading weight="bold" numberOfLines={1}>
90
+ {appInfo?.appName}
91
+ </Heading>
92
+ </Row>
90
93
 
91
- {Boolean(appInfo?.runtimeVersion) && (
92
- <>
93
- <Text size="small" color="secondary">
94
- {`Runtime version: ${appInfo?.runtimeVersion}`}
95
- </Text>
96
- </>
97
- )}
94
+ {Boolean(appInfo?.runtimeVersion) && (
95
+ <>
96
+ <Text size="small" color="secondary">
97
+ {`Runtime version: ${appInfo?.runtimeVersion}`}
98
+ </Text>
99
+ </>
100
+ )}
98
101
 
99
- {Boolean(appInfo?.sdkVersion) && !appInfo?.runtimeVersion && (
100
- <>
101
- <Text size="small" color="secondary">
102
- {`SDK version: ${appInfo?.sdkVersion}`}
103
- </Text>
104
- </>
105
- )}
106
- </View>
102
+ {Boolean(appInfo?.sdkVersion) && !appInfo?.runtimeVersion && (
103
+ <>
104
+ <Text size="small" color="secondary">
105
+ {`SDK version: ${appInfo?.sdkVersion}`}
106
+ </Text>
107
+ </>
108
+ )}
109
+ </View>
107
110
 
108
- <Spacer.Horizontal />
111
+ <Spacer.Horizontal />
109
112
 
110
- <View width="large" style={{ alignSelf: 'flex-start' }}>
111
- <Button.FadeOnPressContainer onPress={hideMenu} bg="ghost" rounded="full">
112
- <View padding="micro">
113
- <XIcon />
114
- </View>
115
- </Button.FadeOnPressContainer>
116
- </View>
113
+ <View width="large" style={{ alignSelf: 'flex-start' }}>
114
+ <Button.FadeOnPressContainer onPress={hideMenu} bg="ghost" rounded="full">
115
+ <View padding="micro">
116
+ <XIcon />
117
+ </View>
118
+ </Button.FadeOnPressContainer>
119
+ </View>
117
120
 
118
- <Spacer.Horizontal size="small" />
121
+ <Spacer.Horizontal size="small" />
122
+ </Row>
119
123
  </Row>
120
- </Row>
121
- </View>
122
-
123
- <Divider />
124
- <View style={{ flex: 1 }}>
125
- <ScrollView nestedScrollEnabled>
126
- {Boolean(appInfo?.hostUrl) && (
127
- <>
128
- <View bg="default" padding="medium">
129
- <Text color="secondary">Connected to:</Text>
124
+ </View>
130
125
 
131
- <Spacer.Vertical size="small" />
132
- <Button.FadeOnPressContainer
133
- bg="default"
134
- onPress={onCopyUrlPress}
135
- testID="main.copyUrlButton">
136
- <Row align="center">
137
- <StatusIndicator style={{ width: 10, height: 10 }} status="success" />
138
- <Spacer.Horizontal size="small" />
139
- <Row flex="1" justify="between">
140
- <Text type="mono" numberOfLines={2} size="small">
141
- {appInfo?.hostUrl}
142
- </Text>
126
+ <Divider />
127
+ <View style={{ flex: 1 }}>
128
+ <ScrollView nestedScrollEnabled>
129
+ {Boolean(appInfo?.hostUrl) && (
130
+ <>
131
+ <View bg="default" padding="medium">
132
+ <Text color="secondary">Connected to:</Text>
143
133
 
144
- <ClipboardIcon />
134
+ <Spacer.Vertical size="small" />
135
+ <Button.FadeOnPressContainer
136
+ bg="default"
137
+ onPress={onCopyUrlPress}
138
+ testID="main.copyUrlButton">
139
+ <Row align="center">
140
+ <StatusIndicator style={{ width: 10, height: 10 }} status="success" />
141
+ <Spacer.Horizontal size="small" />
142
+ <Row flex="1" justify="between">
143
+ <Text type="mono" numberOfLines={2} size="small">
144
+ {appInfo?.hostUrl}
145
+ </Text>
146
+
147
+ <ClipboardIcon />
148
+ </Row>
149
+ <Spacer.Horizontal size="small" />
145
150
  </Row>
146
- <Spacer.Horizontal size="small" />
147
- </Row>
148
- </Button.FadeOnPressContainer>
149
- </View>
151
+ </Button.FadeOnPressContainer>
152
+ </View>
150
153
 
151
- <Divider />
152
- </>
153
- )}
154
-
155
- {registeredCallbacks.length > 0 && (
156
- <View>
157
- <View mx="large">
158
- <Heading size="small" color="secondary">
159
- Custom Menu Items
160
- </Heading>
161
- </View>
154
+ <Divider />
155
+ </>
156
+ )}
162
157
 
163
- <Spacer.Vertical size="small" />
164
-
165
- <View mx="small">
166
- {registeredCallbacks.map((name, index, arr) => {
167
- const isFirst = index === 0;
168
- const isLast = index === arr.length - 1;
169
- const onPress = () => fireCallbackAsync(name);
170
-
171
- return (
172
- <View key={name + index}>
173
- <View
174
- bg="default"
175
- roundedTop={isFirst ? 'large' : 'none'}
176
- roundedBottom={isLast ? 'large' : 'none'}>
177
- <SettingsRowButton label={name} icon={null} onPress={onPress} />
178
- </View>
179
- {!isLast && <Divider />}
180
- </View>
181
- );
182
- })}
183
- </View>
158
+ {registeredCallbacks.length > 0 && (
159
+ <View>
160
+ <View mx="large">
161
+ <Heading size="small" color="secondary">
162
+ Custom Menu Items
163
+ </Heading>
164
+ </View>
184
165
 
185
- <Spacer.Vertical size="medium" />
186
- </View>
187
- )}
166
+ <Spacer.Vertical size="small" />
188
167
 
189
- <View margin="small">
190
- <View
191
- {...(isDevLauncherInstalled ? { roundedTop: 'large' } : { rounded: 'large' })}
192
- bg="default">
193
- <SettingsRowButton label="Reload" icon={<RefreshIcon />} onPress={actions.reload} />
194
- </View>
195
- {isDevLauncherInstalled && (
196
- <>
197
- <Divider />
198
- <View roundedBottom="large" bg="default">
199
- <SettingsRowButton
200
- label="Go home"
201
- icon={<HomeFilledIcon tintColor={lightTheme.icon.default} />}
202
- onPress={actions.navigateToLauncher}
203
- />
168
+ <View mx="small">
169
+ {registeredCallbacks.map((name, index, arr) => {
170
+ const isFirst = index === 0;
171
+ const isLast = index === arr.length - 1;
172
+ const onPress = () => fireCallbackAsync(name);
173
+
174
+ return (
175
+ <View key={name + index}>
176
+ <View
177
+ bg="default"
178
+ roundedTop={isFirst ? 'large' : 'none'}
179
+ roundedBottom={isLast ? 'large' : 'none'}>
180
+ <SettingsRowButton label={name} icon={null} onPress={onPress} />
181
+ </View>
182
+ {!isLast && <Divider />}
183
+ </View>
184
+ );
185
+ })}
204
186
  </View>
205
- </>
187
+
188
+ <Spacer.Vertical size="medium" />
189
+ </View>
206
190
  )}
207
- </View>
208
191
 
209
- <View mx="small">
210
- <View bg="default" roundedTop="large">
211
- <SettingsRowButton
212
- disabled={!devSettings.isPerfMonitorAvailable}
213
- label="Toggle performance monitor"
214
- icon={<PerformanceIcon />}
215
- onPress={actions.togglePerformanceMonitor}
216
- />
217
- </View>
218
- <Divider />
219
- <View bg="default">
220
- <SettingsRowButton
221
- disabled={!devSettings.isElementInspectorAvailable}
222
- label="Toggle element inspector"
223
- icon={<InspectElementIcon />}
224
- onPress={actions.toggleElementInspector}
225
- />
192
+ <View margin="small">
193
+ <View
194
+ {...(isDevLauncherInstalled ? { roundedTop: 'large' } : { rounded: 'large' })}
195
+ bg="default">
196
+ <SettingsRowButton label="Reload" icon={<RefreshIcon />} onPress={actions.reload} />
197
+ </View>
198
+ {isDevLauncherInstalled && (
199
+ <>
200
+ <Divider />
201
+ <View roundedBottom="large" bg="default">
202
+ <SettingsRowButton
203
+ label="Go home"
204
+ icon={<HomeFilledIcon tintColor={lightTheme.icon.default} />}
205
+ onPress={actions.navigateToLauncher}
206
+ />
207
+ </View>
208
+ </>
209
+ )}
226
210
  </View>
227
- <Divider />
228
- {devSettings.isJSInspectorAvailable && (
211
+
212
+ <View mx="small">
213
+ <View bg="default" roundedTop="large">
214
+ <SettingsRowButton
215
+ disabled={!devSettings.isPerfMonitorAvailable}
216
+ label="Toggle performance monitor"
217
+ icon={<PerformanceIcon />}
218
+ onPress={actions.togglePerformanceMonitor}
219
+ />
220
+ </View>
221
+ <Divider />
229
222
  <View bg="default">
230
223
  <SettingsRowButton
231
- disabled={!devSettings.isJSInspectorAvailable}
232
- label="Open JS debugger"
233
- icon={<DebugIcon />}
234
- onPress={actions.openJSInspector}
224
+ disabled={!devSettings.isElementInspectorAvailable}
225
+ label="Toggle element inspector"
226
+ icon={<InspectElementIcon />}
227
+ onPress={actions.toggleElementInspector}
228
+ />
229
+ </View>
230
+ <Divider />
231
+ {devSettings.isJSInspectorAvailable && (
232
+ <View bg="default">
233
+ <SettingsRowButton
234
+ disabled={!devSettings.isJSInspectorAvailable}
235
+ label="Open JS debugger"
236
+ icon={<DebugIcon />}
237
+ onPress={actions.openJSInspector}
238
+ />
239
+ </View>
240
+ )}
241
+ <Divider />
242
+ <View bg="default" roundedBottom="large">
243
+ <SettingsRowSwitch
244
+ disabled={!devSettings.isHotLoadingAvailable}
245
+ testID="fast-refresh"
246
+ label="Fast refresh"
247
+ icon={<RunIcon />}
248
+ isEnabled={devSettings.isHotLoadingEnabled}
249
+ setIsEnabled={actions.toggleFastRefresh}
235
250
  />
236
251
  </View>
237
- )}
238
- <Divider />
239
- <View bg="default" roundedBottom="large">
240
- <SettingsRowSwitch
241
- disabled={!devSettings.isHotLoadingAvailable}
242
- testID="fast-refresh"
243
- label="Fast refresh"
244
- icon={<RunIcon />}
245
- isEnabled={devSettings.isHotLoadingEnabled}
246
- setIsEnabled={actions.toggleFastRefresh}
247
- />
248
252
  </View>
249
- </View>
250
253
 
251
- {appInfo?.engine === 'Hermes' && (
252
- <>
253
- <Spacer.Vertical size="large" />
254
+ {appInfo?.engine === 'Hermes' && (
255
+ <>
256
+ <Spacer.Vertical size="large" />
254
257
 
255
- <View mx="small">
256
- <View bg="warning" padding="medium" rounded="medium" border="warning">
257
- <Row align="center">
258
- <WarningIcon />
258
+ <View mx="small">
259
+ <View bg="warning" padding="medium" rounded="medium" border="warning">
260
+ <Row align="center">
261
+ <WarningIcon />
259
262
 
260
- <Spacer.Horizontal size="tiny" />
263
+ <Spacer.Horizontal size="tiny" />
261
264
 
262
- <Heading color="warning" size="small" style={{ top: 1 }}>
263
- Warning
264
- </Heading>
265
- </Row>
265
+ <Heading color="warning" size="small" style={{ top: 1 }}>
266
+ Warning
267
+ </Heading>
268
+ </Row>
266
269
 
267
- <Spacer.Vertical size="small" />
270
+ <Spacer.Vertical size="small" />
268
271
 
269
- <View>
270
- <Text size="small" color="warning">
271
- Debugging not working? Try manually reloading first
272
- </Text>
272
+ <View>
273
+ <Text size="small" color="warning">
274
+ Debugging not working? Try manually reloading first
275
+ </Text>
276
+ </View>
273
277
  </View>
274
278
  </View>
275
- </View>
276
- </>
277
- )}
278
-
279
- {!hasDisabledDevSettingOption && (
280
- <>
281
- <Spacer.Vertical size="large" />
282
- <Text size="small" color="secondary" align="center">
283
- Some settings are unavailable for this development build.
284
- </Text>
285
- </>
286
- )}
287
-
288
- <Spacer.Vertical size="large" />
289
-
290
- <View mx="small" rounded="large" overflow="hidden">
291
- <AppInfoRow title="Version" value={appInfo?.appVersion || 'Unknown'} />
292
- <Divider />
293
- {Boolean(appInfo?.runtimeVersion) && (
294
- <>
295
- <AppInfoRow title="Runtime version" value={appInfo?.runtimeVersion || 'Unknown'} />
296
- <Divider />
297
279
  </>
298
280
  )}
299
281
 
300
- {Boolean(appInfo?.sdkVersion) && !appInfo?.runtimeVersion && (
282
+ {!hasDisabledDevSettingOption && (
301
283
  <>
302
- <AppInfoRow title="SDK Version" value={appInfo?.sdkVersion || 'Unknown'} />
303
- <Divider />
284
+ <Spacer.Vertical size="large" />
285
+ <Text size="small" color="secondary" align="center">
286
+ Some settings are unavailable for this development build.
287
+ </Text>
304
288
  </>
305
289
  )}
306
290
 
307
- <Button.FadeOnPressContainer
308
- bg="default"
309
- roundedTop="none"
310
- roundedBottom="large"
311
- onPress={onCopyAppInfoPress}
312
- disabled={hasCopiedAppInfoContent}>
313
- <Row px="medium" py="small" align="center" bg="default">
314
- <Text color="link" size="medium">
315
- {hasCopiedAppInfoContent ? 'Copied to clipboard!' : 'Tap to Copy All'}
316
- </Text>
317
- </Row>
318
- </Button.FadeOnPressContainer>
319
- </View>
291
+ <Spacer.Vertical size="large" />
320
292
 
321
- <Spacer.Vertical size="large" />
322
- <View mx="small" rounded="large" overflow="hidden">
323
- <Button.FadeOnPressContainer
324
- bg="default"
325
- roundedTop="none"
326
- roundedBottom="large"
327
- onPress={actions.openRNDevMenu}>
328
- <Row px="medium" py="small" align="center" bg="default">
329
- <Text>Open React Native dev menu</Text>
330
- </Row>
331
- </Button.FadeOnPressContainer>
332
- </View>
293
+ <View mx="small" rounded="large" overflow="hidden">
294
+ <AppInfoRow title="Version" value={appInfo?.appVersion || 'Unknown'} />
295
+ <Divider />
296
+ {Boolean(appInfo?.runtimeVersion) && (
297
+ <>
298
+ <AppInfoRow
299
+ title="Runtime version"
300
+ value={appInfo?.runtimeVersion || 'Unknown'}
301
+ />
302
+ <Divider />
303
+ </>
304
+ )}
333
305
 
334
- {Platform.OS === 'android' && <View style={{ height: 50 }} />}
335
- <Spacer.Vertical size="large" />
336
- </ScrollView>
306
+ {Boolean(appInfo?.sdkVersion) && !appInfo?.runtimeVersion && (
307
+ <>
308
+ <AppInfoRow title="SDK Version" value={appInfo?.sdkVersion || 'Unknown'} />
309
+ <Divider />
310
+ </>
311
+ )}
337
312
 
338
- <Onboarding isDevice={isDevice} />
339
- </View>
313
+ <Button.FadeOnPressContainer
314
+ bg="default"
315
+ roundedTop="none"
316
+ roundedBottom="large"
317
+ onPress={onCopyAppInfoPress}
318
+ disabled={hasCopiedAppInfoContent}>
319
+ <Row px="medium" py="small" align="center" bg="default">
320
+ <Text color="link" size="medium">
321
+ {hasCopiedAppInfoContent ? 'Copied to clipboard!' : 'Tap to Copy All'}
322
+ </Text>
323
+ </Row>
324
+ </Button.FadeOnPressContainer>
325
+ </View>
326
+
327
+ <Spacer.Vertical size="large" />
328
+ <View mx="small" rounded="large" overflow="hidden">
329
+ <Button.FadeOnPressContainer
330
+ bg="default"
331
+ roundedTop="none"
332
+ roundedBottom="large"
333
+ onPress={actions.openRNDevMenu}>
334
+ <Row px="medium" py="small" align="center" bg="default">
335
+ <Text>Open React Native dev menu</Text>
336
+ </Row>
337
+ </Button.FadeOnPressContainer>
338
+ </View>
339
+
340
+ {Platform.OS === 'android' && <View style={{ height: 50 }} />}
341
+ <Spacer.Vertical size="large" />
342
+ </ScrollView>
343
+
344
+ <Onboarding isDevice={isDevice} />
345
+ </View>
346
+ </SafeAreaView>
340
347
  </View>
341
348
  );
342
349
  }