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() {
59b4aa028bSBartł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() {
29779e2cd13SWojciech Kozyra      return optionalRequire(() => require('../screens/GL/GLReanimatedExample'));
29879e2cd13SWojciech Kozyra    },
29979e2cd13SWojciech Kozyra    name: 'ReanimatedWorklets',
30079e2cd13SWojciech Kozyra    options: { title: 'Reanimated worklets + gesture handler' },
30179e2cd13SWojciech Kozyra    route: 'gl/reanimated',
30279e2cd13SWojciech Kozyra  },
30379e2cd13SWojciech Kozyra  {
30479e2cd13SWojciech Kozyra    getComponent() {
305dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GestureHandlerPinchScreen'));
306dc2b55f3SEvan Bacon    },
307dc2b55f3SEvan Bacon    name: 'GestureHandlerPinch',
308dc2b55f3SEvan Bacon    options: { title: 'Pinch and Rotate' },
309dc2b55f3SEvan Bacon  },
310dc2b55f3SEvan Bacon  {
311dc2b55f3SEvan Bacon    getComponent() {
312dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GestureHandlerListScreen'));
313dc2b55f3SEvan Bacon    },
314dc2b55f3SEvan Bacon    name: 'GestureHandlerList',
315dc2b55f3SEvan Bacon    options: { title: 'Gesture Handler List' },
316dc2b55f3SEvan Bacon  },
317dc2b55f3SEvan Bacon  {
318dc2b55f3SEvan Bacon    getComponent() {
319dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GestureHandlerSwipeableScreen'));
320dc2b55f3SEvan Bacon    },
321dc2b55f3SEvan Bacon    name: 'GestureHandlerSwipeable',
322dc2b55f3SEvan Bacon    options: { title: 'Swipeable Rows' },
323dc2b55f3SEvan Bacon  },
324dc2b55f3SEvan Bacon  {
325dc2b55f3SEvan Bacon    getComponent() {
326dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/HTMLElementsScreen'));
327dc2b55f3SEvan Bacon    },
328dc2b55f3SEvan Bacon    name: 'HTML',
329dc2b55f3SEvan Bacon  },
330dc2b55f3SEvan Bacon  {
331dc2b55f3SEvan Bacon    getComponent() {
332dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/Image/ImageScreen'));
333dc2b55f3SEvan Bacon    },
334dc2b55f3SEvan Bacon    name: 'Image',
335dc2b55f3SEvan Bacon  },
336dc2b55f3SEvan Bacon  {
337dc2b55f3SEvan Bacon    getComponent() {
338dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/Image/ImageTestsScreen'));
339dc2b55f3SEvan Bacon    },
340dc2b55f3SEvan Bacon    name: 'ImageTests',
341dc2b55f3SEvan Bacon  },
342dc2b55f3SEvan Bacon  {
343dc2b55f3SEvan Bacon    getComponent() {
344dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/Image/ImageTestScreen'));
345dc2b55f3SEvan Bacon    },
346dc2b55f3SEvan Bacon    name: 'ImageTest',
347dc2b55f3SEvan Bacon  },
348dc2b55f3SEvan Bacon  {
349dc2b55f3SEvan Bacon    getComponent() {
350dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/Reanimated/ReanimatedScreen'));
351dc2b55f3SEvan Bacon    },
352dc2b55f3SEvan Bacon    name: 'Reanimated',
353dc2b55f3SEvan Bacon  },
354dc2b55f3SEvan Bacon  {
355dc2b55f3SEvan Bacon    getComponent() {
356dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/GifScreen'));
357dc2b55f3SEvan Bacon    },
358dc2b55f3SEvan Bacon    name: 'Gif',
359dc2b55f3SEvan Bacon  },
360dc2b55f3SEvan Bacon  {
361dc2b55f3SEvan Bacon    getComponent() {
362dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/SegmentedControlScreen'));
363dc2b55f3SEvan Bacon    },
364dc2b55f3SEvan Bacon    name: 'SegmentedControl',
365dc2b55f3SEvan Bacon  },
366dc2b55f3SEvan Bacon  {
367dc2b55f3SEvan Bacon    getComponent() {
368*a1a2c328SKudo Chien      return optionalRequire(() => require('../screens/Skia/SkiaScreen'));
369*a1a2c328SKudo Chien    },
370*a1a2c328SKudo Chien    name: 'Skia',
371*a1a2c328SKudo Chien  },
372*a1a2c328SKudo Chien  {
373*a1a2c328SKudo Chien    getComponent() {
374dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/SVG/SVGScreen'));
375dc2b55f3SEvan Bacon    },
376dc2b55f3SEvan Bacon    name: 'SVG',
377dc2b55f3SEvan Bacon  },
378dc2b55f3SEvan Bacon  {
379dc2b55f3SEvan Bacon    getComponent() {
380dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/SVG/SVGExampleScreen'));
381dc2b55f3SEvan Bacon    },
382dc2b55f3SEvan Bacon    name: 'SVGExample',
383dc2b55f3SEvan Bacon  },
384dc2b55f3SEvan Bacon  {
385dc2b55f3SEvan Bacon    getComponent() {
386dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/LinearGradientScreen'));
387dc2b55f3SEvan Bacon    },
388dc2b55f3SEvan Bacon    name: 'LinearGradient',
389dc2b55f3SEvan Bacon  },
390dc2b55f3SEvan Bacon  {
391dc2b55f3SEvan Bacon    getComponent() {
392dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/LottieScreen'));
393dc2b55f3SEvan Bacon    },
394dc2b55f3SEvan Bacon    name: 'Lottie',
395dc2b55f3SEvan Bacon  },
396dc2b55f3SEvan Bacon  {
397dc2b55f3SEvan Bacon    getComponent() {
398dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/MapsScreen'));
399dc2b55f3SEvan Bacon    },
400dc2b55f3SEvan Bacon    name: 'Maps',
401dc2b55f3SEvan Bacon  },
402dc2b55f3SEvan Bacon  {
403dc2b55f3SEvan Bacon    getComponent() {
404dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/AV/VideoScreen'));
405dc2b55f3SEvan Bacon    },
406dc2b55f3SEvan Bacon    name: 'Video',
407dc2b55f3SEvan Bacon  },
408dc2b55f3SEvan Bacon  {
409dc2b55f3SEvan Bacon    getComponent() {
410dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/Screens'));
411dc2b55f3SEvan Bacon    },
412dc2b55f3SEvan Bacon    name: 'Screens',
413dc2b55f3SEvan Bacon  },
414dc2b55f3SEvan Bacon  {
415dc2b55f3SEvan Bacon    getComponent() {
416dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/WebViewScreen'));
417dc2b55f3SEvan Bacon    },
418dc2b55f3SEvan Bacon    name: 'WebView',
419dc2b55f3SEvan Bacon  },
420dc2b55f3SEvan Bacon  {
421dc2b55f3SEvan Bacon    getComponent() {
42243babc79SCharlie Cruzan      return optionalRequire(() => require('../screens/PagerViewScreen'));
423dc2b55f3SEvan Bacon    },
42443babc79SCharlie Cruzan    name: 'PagerView',
42543babc79SCharlie Cruzan    options: { gesturesEnabled: false, title: 'PagerView Example' },
426dc2b55f3SEvan Bacon  },
427dc2b55f3SEvan Bacon  {
428dc2b55f3SEvan Bacon    getComponent() {
429dc2b55f3SEvan Bacon      return optionalRequire(() => require('../screens/SharedElementScreen'));
430dc2b55f3SEvan Bacon    },
431dc2b55f3SEvan Bacon    name: 'SharedElement',
432dc2b55f3SEvan Bacon  },
433dc2b55f3SEvan Bacon];
434dc2b55f3SEvan Bacon
43591d99453SEvan Baconfunction ExpoComponentsStackNavigator(props: { navigation: BottomTabNavigationProp<any> }) {
43691d99453SEvan Bacon  return (
43706642451SEvan Bacon    <Stack.Navigator {...props} {...getStackConfig(props)}>
43891d99453SEvan Bacon      <Stack.Screen
43991d99453SEvan Bacon        name="ExpoComponents"
44091d99453SEvan Bacon        options={{ title: Layout.isSmallDevice ? 'Expo SDK Components' : 'Components in Expo SDK' }}
44191d99453SEvan Bacon        component={ExpoComponents}
44291d99453SEvan Bacon      />
443dc2b55f3SEvan Bacon      {Screens.map(({ name, getComponent, options }) => (
444dc2b55f3SEvan Bacon        <Stack.Screen name={name} key={name} getComponent={getComponent} options={options ?? {}} />
44591d99453SEvan Bacon      ))}
44691d99453SEvan Bacon    </Stack.Navigator>
44791d99453SEvan Bacon  );
44891d99453SEvan Bacon}
449ea08dda8SEvan Bacon
450ea08dda8SEvan Baconconst icon = ({ focused }: { focused: boolean }) => {
451e8f3dbaeSEvan Bacon  return <TabIcon name="react" focused={focused} />;
452ea08dda8SEvan Bacon};
45391d99453SEvan BaconExpoComponentsStackNavigator.navigationOptions = {
454e8f3dbaeSEvan Bacon  title: 'Components',
45591d99453SEvan Bacon  tabBarLabel: 'Components',
456ea08dda8SEvan Bacon  tabBarIcon: icon,
457ea08dda8SEvan Bacon  drawerIcon: icon,
45891d99453SEvan Bacon};
45991d99453SEvan Baconexport default ExpoComponentsStackNavigator;
460