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