191d99453SEvan Baconimport { BottomTabNavigationProp } from '@react-navigation/bottom-tabs';
291d99453SEvan Baconimport { createStackNavigator } from '@react-navigation/stack';
391d99453SEvan Baconimport * as React from 'react';
491d99453SEvan Bacon
591d99453SEvan Baconimport TabIcon from '../components/TabIcon';
691d99453SEvan Baconimport { Layout } from '../constants';
791d99453SEvan Baconimport ExpoComponents from '../screens/ExpoComponentsScreen';
806642451SEvan Baconimport getStackConfig from './StackConfig';
9dc2b55f3SEvan Baconimport { optionalRequire } from './routeBuilder';
1091d99453SEvan Bacon
1191d99453SEvan Baconconst Stack = createStackNavigator();
1291d99453SEvan Bacon
13dc2b55f3SEvan Baconexport const Screens = [
14dc2b55f3SEvan Bacon  {
15dc2b55f3SEvan Bacon    getComponent() {
1674967a3cSCharlie Cruzan      return optionalRequire(() => require('../screens/FacebookAdsScreen'));
1774967a3cSCharlie Cruzan    },
1874967a3cSCharlie Cruzan    name: 'FacebookAds',
1974967a3cSCharlie Cruzan  },
2074967a3cSCharlie Cruzan  {
2174967a3cSCharlie Cruzan    getComponent() {
2274967a3cSCharlie Cruzan      return optionalRequire(() => require('../screens/DrawerLayoutAndroidScreen'));
2374967a3cSCharlie Cruzan    },
2474967a3cSCharlie Cruzan    name: 'DrawerLayoutAndroid',
2574967a3cSCharlie Cruzan  },
2674967a3cSCharlie Cruzan  {
2774967a3cSCharlie Cruzan    getComponent() {
28fa37026dSCharlie Cruzan      return optionalRequire(() => require('../screens/AdMobScreen'));
29fa37026dSCharlie Cruzan    },
30fa37026dSCharlie Cruzan    name: 'Admob',
31fa37026dSCharlie Cruzan  },
32fa37026dSCharlie Cruzan  {
33fa37026dSCharlie Cruzan    getComponent() {
34dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/BarCodeScannerScreen'));
35dc2b55f3SEvan Bacon    },
36dc2b55f3SEvan Bacon    name: 'BarCodeScanner',
37dc2b55f3SEvan Bacon  },
38dc2b55f3SEvan Bacon  {
39dc2b55f3SEvan Bacon    getComponent() {
40dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/ModalScreen'));
41dc2b55f3SEvan Bacon    },
42dc2b55f3SEvan Bacon    name: 'Modal',
43dc2b55f3SEvan Bacon  },
44dc2b55f3SEvan Bacon  {
45dc2b55f3SEvan Bacon    getComponent() {
46dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/ScrollViewScreen'));
47dc2b55f3SEvan Bacon    },
48dc2b55f3SEvan Bacon    name: 'ScrollView',
49dc2b55f3SEvan Bacon  },
50dc2b55f3SEvan Bacon  {
51dc2b55f3SEvan Bacon    getComponent() {
52dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/MaskedViewScreen'));
53dc2b55f3SEvan Bacon    },
54dc2b55f3SEvan Bacon    name: 'MaskedView',
55dc2b55f3SEvan Bacon    options: { title: 'Basic Mask Example' },
56dc2b55f3SEvan Bacon  },
57dc2b55f3SEvan Bacon  {
58dc2b55f3SEvan Bacon    getComponent() {
59*b4aa028bSBartłomiej Bukowski      return optionalRequire(() => require('../screens/BlurView/BlurViewScreen'));
60dc2b55f3SEvan Bacon    },
61dc2b55f3SEvan Bacon    name: 'BlurView',
62dc2b55f3SEvan Bacon  },
63dc2b55f3SEvan Bacon  {
64dc2b55f3SEvan Bacon    getComponent() {
65dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/Camera/CameraScreen'));
66dc2b55f3SEvan Bacon    },
67dc2b55f3SEvan Bacon    name: 'Camera',
68dc2b55f3SEvan Bacon  },
69dc2b55f3SEvan Bacon  {
70dc2b55f3SEvan Bacon    getComponent() {
71dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/TextScreen'));
72dc2b55f3SEvan Bacon    },
73dc2b55f3SEvan Bacon    name: 'Text',
74dc2b55f3SEvan Bacon  },
75dc2b55f3SEvan Bacon  {
76dc2b55f3SEvan Bacon    getComponent() {
77dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/TextInputScreen'));
78dc2b55f3SEvan Bacon    },
79dc2b55f3SEvan Bacon    name: 'TextInput',
80dc2b55f3SEvan Bacon  },
81dc2b55f3SEvan Bacon  {
82dc2b55f3SEvan Bacon    getComponent() {
83dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/TouchablesScreen'));
84dc2b55f3SEvan Bacon    },
85dc2b55f3SEvan Bacon    name: 'Touchables',
86dc2b55f3SEvan Bacon  },
87dc2b55f3SEvan Bacon  {
88dc2b55f3SEvan Bacon    getComponent() {
89dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/ProgressViewIOSScreen'));
90dc2b55f3SEvan Bacon    },
91dc2b55f3SEvan Bacon    name: 'ProgressViewIOS',
92dc2b55f3SEvan Bacon  },
93dc2b55f3SEvan Bacon  {
94dc2b55f3SEvan Bacon    getComponent() {
95dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/ProgressBarAndroidScreen'));
96dc2b55f3SEvan Bacon    },
97dc2b55f3SEvan Bacon    name: 'ProgressBarAndroid',
98dc2b55f3SEvan Bacon  },
99dc2b55f3SEvan Bacon  {
100dc2b55f3SEvan Bacon    getComponent() {
101dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/TouchableBounceScreen'));
102dc2b55f3SEvan Bacon    },
103dc2b55f3SEvan Bacon    name: 'TouchableBounce',
104dc2b55f3SEvan Bacon  },
105dc2b55f3SEvan Bacon  {
106dc2b55f3SEvan Bacon    getComponent() {
107dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/SwitchScreen'));
108dc2b55f3SEvan Bacon    },
109dc2b55f3SEvan Bacon    name: 'Switch',
110dc2b55f3SEvan Bacon  },
111dc2b55f3SEvan Bacon  {
112dc2b55f3SEvan Bacon    getComponent() {
113dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/SliderScreen'));
114dc2b55f3SEvan Bacon    },
115dc2b55f3SEvan Bacon    name: 'Slider',
116dc2b55f3SEvan Bacon  },
117dc2b55f3SEvan Bacon  {
118dc2b55f3SEvan Bacon    getComponent() {
119dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/PressableScreen'));
120dc2b55f3SEvan Bacon    },
121dc2b55f3SEvan Bacon    name: 'Pressable',
122dc2b55f3SEvan Bacon  },
123dc2b55f3SEvan Bacon  {
124dc2b55f3SEvan Bacon    getComponent() {
125dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/PickerScreen'));
126dc2b55f3SEvan Bacon    },
127dc2b55f3SEvan Bacon    name: 'Picker',
128dc2b55f3SEvan Bacon  },
129dc2b55f3SEvan Bacon  {
130dc2b55f3SEvan Bacon    getComponent() {
131dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/CheckboxScreen'));
132dc2b55f3SEvan Bacon    },
133dc2b55f3SEvan Bacon    name: 'Checkbox',
134dc2b55f3SEvan Bacon  },
135dc2b55f3SEvan Bacon  {
136dc2b55f3SEvan Bacon    getComponent() {
137dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/ButtonScreen'));
138dc2b55f3SEvan Bacon    },
139dc2b55f3SEvan Bacon    name: 'Button',
140dc2b55f3SEvan Bacon  },
141dc2b55f3SEvan Bacon  {
142dc2b55f3SEvan Bacon    getComponent() {
143dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/ActivityIndicatorScreen'));
144dc2b55f3SEvan Bacon    },
145dc2b55f3SEvan Bacon    name: 'ActivityIndicator',
146dc2b55f3SEvan Bacon  },
147dc2b55f3SEvan Bacon  {
148dc2b55f3SEvan Bacon    getComponent() {
149dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/QRCodeScreen'));
150dc2b55f3SEvan Bacon    },
151dc2b55f3SEvan Bacon    name: 'QRCode',
152dc2b55f3SEvan Bacon    options: { title: 'QR Code' },
153dc2b55f3SEvan Bacon  },
154dc2b55f3SEvan Bacon  {
155dc2b55f3SEvan Bacon    getComponent() {
156dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/DateTimePickerScreen'));
157dc2b55f3SEvan Bacon    },
158dc2b55f3SEvan Bacon    name: 'DateTimePicker',
159dc2b55f3SEvan Bacon  },
160dc2b55f3SEvan Bacon  {
161dc2b55f3SEvan Bacon    getComponent() {
162dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/GLScreen'));
163dc2b55f3SEvan Bacon    },
164dc2b55f3SEvan Bacon    name: 'GL',
165dc2b55f3SEvan Bacon    options: { title: 'Examples of GL use' },
166dc2b55f3SEvan Bacon  },
167dc2b55f3SEvan Bacon  {
168dc2b55f3SEvan Bacon    getComponent() {
169dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/ClearToBlueScreen'));
170dc2b55f3SEvan Bacon    },
171dc2b55f3SEvan Bacon    name: 'ClearToBlue',
172dc2b55f3SEvan Bacon    options: { title: 'Clear to blue' },
173dc2b55f3SEvan Bacon    route: 'gl/cleartoblue',
174dc2b55f3SEvan Bacon  },
175dc2b55f3SEvan Bacon  {
176dc2b55f3SEvan Bacon    getComponent() {
177dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/BasicTextureScreen'));
178dc2b55f3SEvan Bacon    },
179dc2b55f3SEvan Bacon    name: 'BasicTexture',
180dc2b55f3SEvan Bacon    options: { title: 'Basic texture use' },
181dc2b55f3SEvan Bacon    route: 'gl/basictexture',
182dc2b55f3SEvan Bacon  },
183dc2b55f3SEvan Bacon  {
184dc2b55f3SEvan Bacon    getComponent() {
185dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/GLViewScreen'));
186dc2b55f3SEvan Bacon    },
187dc2b55f3SEvan Bacon    name: 'GLViewScreen',
188dc2b55f3SEvan Bacon    options: { title: 'GLView example' },
189dc2b55f3SEvan Bacon    route: 'gl/glviewscreen',
190dc2b55f3SEvan Bacon  },
191dc2b55f3SEvan Bacon  {
192dc2b55f3SEvan Bacon    getComponent() {
193dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/GLMaskScreen'));
194dc2b55f3SEvan Bacon    },
195dc2b55f3SEvan Bacon    name: 'Mask',
196dc2b55f3SEvan Bacon    options: { title: 'MaskedView integration' },
197dc2b55f3SEvan Bacon    route: 'gl/mask',
198dc2b55f3SEvan Bacon  },
199dc2b55f3SEvan Bacon  {
200dc2b55f3SEvan Bacon    getComponent() {
201dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/GLSnapshotsScreen'));
202dc2b55f3SEvan Bacon    },
203dc2b55f3SEvan Bacon    name: 'Snapshots',
204dc2b55f3SEvan Bacon    options: { title: 'Taking snapshots' },
205dc2b55f3SEvan Bacon    route: 'gl/snapshots',
206dc2b55f3SEvan Bacon  },
207dc2b55f3SEvan Bacon  {
208dc2b55f3SEvan Bacon    getComponent() {
209dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/GLThreeComposerScreen'));
210dc2b55f3SEvan Bacon    },
211dc2b55f3SEvan Bacon    name: 'THREEComposer',
212dc2b55f3SEvan Bacon    options: { title: 'three.js glitch and film effects' },
213dc2b55f3SEvan Bacon    route: 'gl/threecomposer',
214dc2b55f3SEvan Bacon  },
215dc2b55f3SEvan Bacon  {
216dc2b55f3SEvan Bacon    getComponent() {
217dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/GLThreeDepthStencilBufferScreen'));
218dc2b55f3SEvan Bacon    },
219dc2b55f3SEvan Bacon    name: 'THREEDepthStencilBuffer',
220dc2b55f3SEvan Bacon    options: { title: 'three.js depth and stencil buffer' },
221dc2b55f3SEvan Bacon    route: 'gl/threedepthstencilbuffer',
222dc2b55f3SEvan Bacon  },
223dc2b55f3SEvan Bacon  {
224dc2b55f3SEvan Bacon    getComponent() {
225dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/GLThreeSpriteScreen'));
226dc2b55f3SEvan Bacon    },
227dc2b55f3SEvan Bacon    name: 'THREESprite',
228dc2b55f3SEvan Bacon    options: { title: 'three.js sprite rendering' },
229dc2b55f3SEvan Bacon    route: 'gl/threesprite',
230dc2b55f3SEvan Bacon  },
231dc2b55f3SEvan Bacon  {
232dc2b55f3SEvan Bacon    getComponent() {
233dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/ProcessingInAndOutScreen'));
234dc2b55f3SEvan Bacon    },
235dc2b55f3SEvan Bacon    name: 'ProcessingInAndOut',
236dc2b55f3SEvan Bacon    options: { title: "'In and out' from openprocessing.org" },
237dc2b55f3SEvan Bacon    route: 'gl/processinginandout',
238dc2b55f3SEvan Bacon  },
239dc2b55f3SEvan Bacon  {
240dc2b55f3SEvan Bacon    getComponent() {
241dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/ProcessingNoClearScreen'));
242dc2b55f3SEvan Bacon    },
243dc2b55f3SEvan Bacon    name: 'ProcessingNoClear',
244dc2b55f3SEvan Bacon    options: { title: 'Draw without clearing screen with processing.js' },
245dc2b55f3SEvan Bacon    route: 'gl/processingnoclear',
246dc2b55f3SEvan Bacon  },
247dc2b55f3SEvan Bacon  {
248dc2b55f3SEvan Bacon    getComponent() {
249dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/PIXIBasicScreen'));
250dc2b55f3SEvan Bacon    },
251dc2b55f3SEvan Bacon    name: 'PIXIBasic',
252dc2b55f3SEvan Bacon    options: { title: 'Basic pixi.js use' },
253dc2b55f3SEvan Bacon    route: 'gl/pixibasic',
254dc2b55f3SEvan Bacon  },
255dc2b55f3SEvan Bacon  {
256dc2b55f3SEvan Bacon    getComponent() {
257dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/PIXISpriteScreen'));
258dc2b55f3SEvan Bacon    },
259dc2b55f3SEvan Bacon    name: 'PIXISprite',
260dc2b55f3SEvan Bacon    options: { title: 'pixi.js sprite rendering' },
261dc2b55f3SEvan Bacon    route: 'gl/pixisprite',
262dc2b55f3SEvan Bacon  },
263dc2b55f3SEvan Bacon  {
264dc2b55f3SEvan Bacon    getComponent() {
265dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/GLCameraScreen'));
266dc2b55f3SEvan Bacon    },
267dc2b55f3SEvan Bacon    name: 'GLCamera',
268dc2b55f3SEvan Bacon    options: { title: 'Expo.Camera integration' },
269dc2b55f3SEvan Bacon    route: 'gl/glcamera',
270dc2b55f3SEvan Bacon  },
271dc2b55f3SEvan Bacon  {
272dc2b55f3SEvan Bacon    getComponent() {
273dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/WebGL2TransformFeedbackScreen'));
274dc2b55f3SEvan Bacon    },
275dc2b55f3SEvan Bacon    name: 'WebGL2TransformFeedback',
276dc2b55f3SEvan Bacon    options: { title: 'WebGL2 - Transform feedback' },
277dc2b55f3SEvan Bacon    route: 'gl/webgl2transformfeedback',
278dc2b55f3SEvan Bacon  },
279dc2b55f3SEvan Bacon  {
280dc2b55f3SEvan Bacon    getComponent() {
281dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/CanvasScreen'));
282dc2b55f3SEvan Bacon    },
283dc2b55f3SEvan Bacon    name: 'Canvas',
284dc2b55f3SEvan Bacon    options: { title: 'Canvas example - expo-2d-context' },
285dc2b55f3SEvan Bacon    route: 'gl/canvas',
286dc2b55f3SEvan Bacon  },
287dc2b55f3SEvan Bacon  {
288dc2b55f3SEvan Bacon    getComponent() {
289dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GL/GLHeadlessRenderingScreen'));
290dc2b55f3SEvan Bacon    },
291dc2b55f3SEvan Bacon    name: 'HeadlessRendering',
292dc2b55f3SEvan Bacon    options: { title: 'Headless rendering' },
293dc2b55f3SEvan Bacon    route: 'gl/headlessrendering',
294dc2b55f3SEvan Bacon  },
295dc2b55f3SEvan Bacon  {
296dc2b55f3SEvan Bacon    getComponent() {
297dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GestureHandlerPinchScreen'));
298dc2b55f3SEvan Bacon    },
299dc2b55f3SEvan Bacon    name: 'GestureHandlerPinch',
300dc2b55f3SEvan Bacon    options: { title: 'Pinch and Rotate' },
301dc2b55f3SEvan Bacon  },
302dc2b55f3SEvan Bacon  {
303dc2b55f3SEvan Bacon    getComponent() {
304dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GestureHandlerListScreen'));
305dc2b55f3SEvan Bacon    },
306dc2b55f3SEvan Bacon    name: 'GestureHandlerList',
307dc2b55f3SEvan Bacon    options: { title: 'Gesture Handler List' },
308dc2b55f3SEvan Bacon  },
309dc2b55f3SEvan Bacon  {
310dc2b55f3SEvan Bacon    getComponent() {
311dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GestureHandlerSwipeableScreen'));
312dc2b55f3SEvan Bacon    },
313dc2b55f3SEvan Bacon    name: 'GestureHandlerSwipeable',
314dc2b55f3SEvan Bacon    options: { title: 'Swipeable Rows' },
315dc2b55f3SEvan Bacon  },
316dc2b55f3SEvan Bacon  {
317dc2b55f3SEvan Bacon    getComponent() {
318dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/HTMLElementsScreen'));
319dc2b55f3SEvan Bacon    },
320dc2b55f3SEvan Bacon    name: 'HTML',
321dc2b55f3SEvan Bacon  },
322dc2b55f3SEvan Bacon  {
323dc2b55f3SEvan Bacon    getComponent() {
324dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/Image/ImageScreen'));
325dc2b55f3SEvan Bacon    },
326dc2b55f3SEvan Bacon    name: 'Image',
327dc2b55f3SEvan Bacon  },
328dc2b55f3SEvan Bacon  {
329dc2b55f3SEvan Bacon    getComponent() {
330dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/Image/ImageTestsScreen'));
331dc2b55f3SEvan Bacon    },
332dc2b55f3SEvan Bacon    name: 'ImageTests',
333dc2b55f3SEvan Bacon  },
334dc2b55f3SEvan Bacon  {
335dc2b55f3SEvan Bacon    getComponent() {
336dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/Image/ImageTestScreen'));
337dc2b55f3SEvan Bacon    },
338dc2b55f3SEvan Bacon    name: 'ImageTest',
339dc2b55f3SEvan Bacon  },
340dc2b55f3SEvan Bacon  {
341dc2b55f3SEvan Bacon    getComponent() {
342dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/Reanimated/ReanimatedScreen'));
343dc2b55f3SEvan Bacon    },
344dc2b55f3SEvan Bacon    name: 'Reanimated',
345dc2b55f3SEvan Bacon  },
346dc2b55f3SEvan Bacon  {
347dc2b55f3SEvan Bacon    getComponent() {
348dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GifScreen'));
349dc2b55f3SEvan Bacon    },
350dc2b55f3SEvan Bacon    name: 'Gif',
351dc2b55f3SEvan Bacon  },
352dc2b55f3SEvan Bacon  {
353dc2b55f3SEvan Bacon    getComponent() {
354dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/SegmentedControlScreen'));
355dc2b55f3SEvan Bacon    },
356dc2b55f3SEvan Bacon    name: 'SegmentedControl',
357dc2b55f3SEvan Bacon  },
358dc2b55f3SEvan Bacon  {
359dc2b55f3SEvan Bacon    getComponent() {
360dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/SVG/SVGScreen'));
361dc2b55f3SEvan Bacon    },
362dc2b55f3SEvan Bacon    name: 'SVG',
363dc2b55f3SEvan Bacon  },
364dc2b55f3SEvan Bacon  {
365dc2b55f3SEvan Bacon    getComponent() {
366dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/SVG/SVGExampleScreen'));
367dc2b55f3SEvan Bacon    },
368dc2b55f3SEvan Bacon    name: 'SVGExample',
369dc2b55f3SEvan Bacon  },
370dc2b55f3SEvan Bacon  {
371dc2b55f3SEvan Bacon    getComponent() {
372dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/LinearGradientScreen'));
373dc2b55f3SEvan Bacon    },
374dc2b55f3SEvan Bacon    name: 'LinearGradient',
375dc2b55f3SEvan Bacon  },
376dc2b55f3SEvan Bacon  {
377dc2b55f3SEvan Bacon    getComponent() {
378dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/LottieScreen'));
379dc2b55f3SEvan Bacon    },
380dc2b55f3SEvan Bacon    name: 'Lottie',
381dc2b55f3SEvan Bacon  },
382dc2b55f3SEvan Bacon  {
383dc2b55f3SEvan Bacon    getComponent() {
384dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/MapsScreen'));
385dc2b55f3SEvan Bacon    },
386dc2b55f3SEvan Bacon    name: 'Maps',
387dc2b55f3SEvan Bacon  },
388dc2b55f3SEvan Bacon  {
389dc2b55f3SEvan Bacon    getComponent() {
390dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/AV/VideoScreen'));
391dc2b55f3SEvan Bacon    },
392dc2b55f3SEvan Bacon    name: 'Video',
393dc2b55f3SEvan Bacon  },
394dc2b55f3SEvan Bacon  {
395dc2b55f3SEvan Bacon    getComponent() {
396dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/Screens'));
397dc2b55f3SEvan Bacon    },
398dc2b55f3SEvan Bacon    name: 'Screens',
399dc2b55f3SEvan Bacon  },
400dc2b55f3SEvan Bacon  {
401dc2b55f3SEvan Bacon    getComponent() {
402dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/WebViewScreen'));
403dc2b55f3SEvan Bacon    },
404dc2b55f3SEvan Bacon    name: 'WebView',
405dc2b55f3SEvan Bacon  },
406dc2b55f3SEvan Bacon  {
407dc2b55f3SEvan Bacon    getComponent() {
40843babc79SCharlie Cruzan      return optionalRequire(() => require('../screens/PagerViewScreen'));
409dc2b55f3SEvan Bacon    },
41043babc79SCharlie Cruzan    name: 'PagerView',
41143babc79SCharlie Cruzan    options: { gesturesEnabled: false, title: 'PagerView Example' },
412dc2b55f3SEvan Bacon  },
413dc2b55f3SEvan Bacon  {
414dc2b55f3SEvan Bacon    getComponent() {
415dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/SharedElementScreen'));
416dc2b55f3SEvan Bacon    },
417dc2b55f3SEvan Bacon    name: 'SharedElement',
418dc2b55f3SEvan Bacon  },
419dc2b55f3SEvan Bacon];
420dc2b55f3SEvan Bacon
42191d99453SEvan Baconfunction ExpoComponentsStackNavigator(props: { navigation: BottomTabNavigationProp<any> }) {
42291d99453SEvan Bacon  return (
42306642451SEvan Bacon    <Stack.Navigator {...props} {...getStackConfig(props)}>
42491d99453SEvan Bacon      <Stack.Screen
42591d99453SEvan Bacon        name="ExpoComponents"
42691d99453SEvan Bacon        options={{ title: Layout.isSmallDevice ? 'Expo SDK Components' : 'Components in Expo SDK' }}
42791d99453SEvan Bacon        component={ExpoComponents}
42891d99453SEvan Bacon      />
429dc2b55f3SEvan Bacon      {Screens.map(({ name, getComponent, options }) => (
430dc2b55f3SEvan Bacon        <Stack.Screen name={name} key={name} getComponent={getComponent} options={options ?? {}} />
43191d99453SEvan Bacon      ))}
43291d99453SEvan Bacon    </Stack.Navigator>
43391d99453SEvan Bacon  );
43491d99453SEvan Bacon}
435ea08dda8SEvan Bacon
436ea08dda8SEvan Baconconst icon = ({ focused }: { focused: boolean }) => {
437e8f3dbaeSEvan Bacon  return <TabIcon name="react" focused={focused} />;
438ea08dda8SEvan Bacon};
43991d99453SEvan BaconExpoComponentsStackNavigator.navigationOptions = {
440e8f3dbaeSEvan Bacon  title: 'Components',
44191d99453SEvan Bacon  tabBarLabel: 'Components',
442ea08dda8SEvan Bacon  tabBarIcon: icon,
443ea08dda8SEvan Bacon  drawerIcon: icon,
44491d99453SEvan Bacon};
44591d99453SEvan Baconexport default ExpoComponentsStackNavigator;
446