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