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