create-expo-stack 2.5.0-next.738ca1b → 2.5.0-next.77e2bc3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/build/templates/base/App.tsx.ejs +44 -110
  2. package/build/templates/base/components/BackButton.tsx.ejs +23 -0
  3. package/build/templates/base/components/Button.tsx.ejs +40 -0
  4. package/build/templates/base/components/EditScreenInfo.tsx.ejs +55 -0
  5. package/build/templates/base/components/HeaderButton.tsx.ejs +28 -0
  6. package/build/templates/base/components/ScreenContent.tsx.ejs +38 -0
  7. package/build/templates/base/components/TabBarIcon.tsx.ejs +15 -0
  8. package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/_layout.tsx.ejs +1 -13
  9. package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/index.tsx.ejs +18 -84
  10. package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/two.tsx.ejs +18 -84
  11. package/build/templates/packages/expo-router/drawer/app/(drawer)/_layout.tsx.ejs +4 -18
  12. package/build/templates/packages/expo-router/drawer/app/(drawer)/index.tsx.ejs +12 -98
  13. package/build/templates/packages/expo-router/drawer/app/modal.tsx.ejs +16 -92
  14. package/build/templates/packages/expo-router/stack/app/details.tsx.ejs +17 -171
  15. package/build/templates/packages/expo-router/stack/app/index.tsx.ejs +20 -202
  16. package/build/templates/packages/expo-router/tabs/app/(tabs)/_layout.tsx.ejs +6 -50
  17. package/build/templates/packages/expo-router/tabs/app/(tabs)/index.tsx.ejs +18 -102
  18. package/build/templates/packages/expo-router/tabs/app/(tabs)/two.tsx.ejs +18 -83
  19. package/build/templates/packages/expo-router/tabs/app/modal.tsx.ejs +17 -92
  20. package/build/templates/packages/i18next/components/InternalizationExample.tsx.ejs +1 -1
  21. package/build/templates/packages/i18next/translation/en.json.ejs +3 -3
  22. package/build/templates/packages/i18next/translation/fr.json.ejs +3 -3
  23. package/build/templates/packages/nativewind/components/BackButton.tsx.ejs +18 -0
  24. package/build/templates/packages/nativewind/components/Button.tsx.ejs +14 -0
  25. package/build/templates/packages/nativewind/components/EditScreenInfo.tsx.ejs +40 -0
  26. package/build/templates/packages/nativewind/components/ScreenContent.tsx.ejs +25 -0
  27. package/build/templates/packages/react-navigation/App.tsx.ejs +1 -1
  28. package/build/templates/packages/react-navigation/navigation/drawer-navigator.tsx.ejs +14 -26
  29. package/build/templates/packages/react-navigation/navigation/index.tsx.ejs +2 -101
  30. package/build/templates/packages/react-navigation/navigation/tab-navigator.tsx.ejs +8 -62
  31. package/build/templates/packages/react-navigation/screens/details.tsx.ejs +22 -108
  32. package/build/templates/packages/react-navigation/screens/home.tsx.ejs +3 -100
  33. package/build/templates/packages/react-navigation/screens/modal.tsx.ejs +16 -104
  34. package/build/templates/packages/react-navigation/screens/one.tsx.ejs +2 -115
  35. package/build/templates/packages/react-navigation/screens/overview.tsx.ejs +37 -199
  36. package/build/templates/packages/react-navigation/screens/two.tsx.ejs +3 -98
  37. package/build/templates/packages/restyle/components/BackButton.tsx.ejs +15 -0
  38. package/build/templates/packages/restyle/components/Button.tsx.ejs +32 -0
  39. package/build/templates/packages/restyle/components/EditScreenInfo.tsx.ejs +29 -0
  40. package/build/templates/packages/restyle/components/ScreenContent.tsx.ejs +20 -0
  41. package/build/templates/packages/tamagui/components/BackButton.tsx.ejs +19 -0
  42. package/build/templates/packages/tamagui/components/Button.tsx.ejs +9 -0
  43. package/build/templates/packages/tamagui/components/EditScreenInfo.tsx.ejs +29 -0
  44. package/build/templates/packages/tamagui/components/ScreenContent.tsx.ejs +22 -0
  45. package/build/templates/packages/unistyles/components/BackButton.tsx.ejs +26 -0
  46. package/build/templates/packages/unistyles/components/Button.tsx.ejs +12 -0
  47. package/build/templates/packages/unistyles/components/EditScreenInfo.tsx.ejs +61 -0
  48. package/build/templates/packages/unistyles/components/ScreenContent.tsx.ejs +24 -0
  49. package/build/templates/packages/unistyles/theme.ts.ejs +30 -46
  50. package/build/utilities/configureProjectFiles.js +68 -10
  51. package/build/utilities/generateProjectFiles.js +2 -2
  52. package/package.json +1 -1
  53. package/build/templates/packages/expo-router/drawer/components/edit-screen-info.tsx.ejs +0 -153
  54. package/build/templates/packages/expo-router/tabs/components/edit-screen-info.tsx.ejs +0 -153
  55. package/build/templates/packages/react-navigation/components/edit-screen-info.tsx.ejs +0 -180
@@ -1,26 +1,10 @@
1
- import FontAwesome from "@expo/vector-icons/FontAwesome";
2
1
  import { Link, Tabs } from "expo-router";
3
- <% if (props.stylingPackage?.name === "unistyles") { %>
4
- import { createStyleSheet, useStyles } from 'react-native-unistyles'
5
- import { Pressable } from 'react-native';
6
- <% } else { %>
7
- import { Pressable, StyleSheet } from "react-native";
8
- <% } %>
2
+ import { HeaderButton } from '../../components/HeaderButton';
3
+ import { TabBarIcon } from '../../components/TabBarIcon';
4
+
9
5
 
10
- function TabBarIcon(props: {
11
- name: React.ComponentProps<typeof FontAwesome>["name"];
12
- color: string;
13
- }) {
14
- <% if (props.stylingPackage?.name === "unistyles") { %>
15
- const {styles} = useStyles(stylesheet)
16
- <% } %>
17
- return <FontAwesome size={28} style={styles.tabBarIcon} {...props} />;
18
- }
19
6
 
20
7
  export default function TabLayout() {
21
- <% if (props.stylingPackage?.name === "unistyles") { %>
22
- const { styles } = useStyles(stylesheet)
23
- <% } %>
24
8
  return (
25
9
  <Tabs
26
10
  screenOptions={{
@@ -30,19 +14,10 @@ export default function TabLayout() {
30
14
  name='index'
31
15
  options={{
32
16
  title: 'Tab One',
33
- tabBarIcon: ({ color }) => <TabBarIcon name='code' color={color} />,
17
+ tabBarIcon: ({ color }) => <TabBarIcon name="code" color={color} />,
34
18
  headerRight: () => (
35
19
  <Link href='/modal' asChild>
36
- <Pressable>
37
- {({ pressed }) => (
38
- <FontAwesome
39
- name='info-circle'
40
- size={25}
41
- color='gray'
42
- style={[styles.headerRight, { opacity: pressed ? 0.5 : 1 }]}
43
- />
44
- )}
45
- </Pressable>
20
+ <HeaderButton />
46
21
  </Link>
47
22
  ),
48
23
  }}
@@ -50,7 +25,7 @@ export default function TabLayout() {
50
25
  <Tabs.Screen
51
26
  name="two"
52
27
  options={{
53
- title: "Tab Two",
28
+ title: 'Tab Two',
54
29
  tabBarIcon: ({ color }) => <TabBarIcon name="code" color={color} />,
55
30
  }}
56
31
  />
@@ -58,22 +33,3 @@ export default function TabLayout() {
58
33
  );
59
34
  }
60
35
 
61
- <% if (props.stylingPackage?.name === "unistyles") { %>
62
- const stylesheet = createStyleSheet({
63
- headerRight: {
64
- marginRight: 15
65
- },
66
- tabBarIcon: {
67
- marginBottom: -3
68
- }
69
- });
70
- <% } else { %>
71
- const styles = StyleSheet.create({
72
- headerRight: {
73
- marginRight: 15
74
- },
75
- tabBarIcon: {
76
- marginBottom: -3
77
- }
78
- });
79
- <% } %>
@@ -1,106 +1,22 @@
1
- <% if (props.stylingPackage?.name === "nativewind") { %>
2
- import { Text, View } from "react-native";
3
- <% } else if (props.stylingPackage?.name === "tamagui") { %>
4
- import { YStack, H2, Separator, Theme } from "tamagui";
5
- <% } else if (props.stylingPackage?.name === "restyle") { %>
6
- import { Box, Text } from 'theme';
7
- <% } else if (props.stylingPackage?.name === "unistyles") { %>
8
- import { useStyles } from 'react-native-unistyles'
9
- import { Text, View } from 'react-native';
10
- <% } else { %>
11
- import { StyleSheet, Text, View } from "react-native";
12
- <% } %>
13
- <% if (props.internalizationPackage?.name === "i18next") { %>
14
- import { InternalizationExample } from '../../components/InternalizationExample';
15
- <% } %>
1
+ import { Stack } from 'expo-router';
2
+ import { StyleSheet, View } from 'react-native';
16
3
 
17
- import EditScreenInfo from "../../components/edit-screen-info";
4
+ import { ScreenContent } from '~/components/ScreenContent';
18
5
 
19
- export default function TabOneScreen() {
20
- <% if (props.stylingPackage?.name === "unistyles") { %>
21
- const { theme } = useStyles()
22
-
23
- return (
24
- <View style={theme.components.container}>
25
- <Text style={theme.components.title}>Tab One</Text>
26
- <% if (props.internalizationPackage?.name === "i18next") { %>
27
- <InternalizationExample />
28
- <% } %>
29
- <View style={theme.components.separator} />
30
- <EditScreenInfo path="app/(tabs)/index.tsx" />
31
- </View>
32
- );
33
- <% } else if (props.stylingPackage?.name === "nativewind") { %>
34
- return (
35
- <View className={styles.container}>
36
- <Text className={styles.title}>Tab One</Text>
37
- <% if (props.internalizationPackage?.name === "i18next") { %>
38
- <InternalizationExample />
39
- <% } %>
40
- <View className={styles.separator} />
41
- <EditScreenInfo path="app/(tabs)/index.tsx" />
42
- </View>
43
- );
44
- <% } else if (props.stylingPackage?.name === "tamagui") { %>
45
- return (
46
- <Theme name="light">
47
- <YStack flex={1} alignItems="center" justifyContent="center">
48
- <H2>Tab One</H2>
49
- <% if (props.internalizationPackage?.name === "i18next") { %>
50
- <InternalizationExample />
51
- <% } %>
52
- <Separator />
53
- <EditScreenInfo path="app/(tabs)/index.tsx" />
54
- </YStack>
55
- </Theme>
56
- );
57
- <% } else if (props.stylingPackage?.name === "restyle") { %>
58
- return (
59
- <Box flex={1} alignItems="center" justifyContent="center">
60
- <Text variant="title">Tab One</Text>
61
- <% if (props.internalizationPackage?.name === "i18next") { %>
62
- <InternalizationExample />
63
- <% } %>
64
- <Box height={1} marginVertical="l_32" width="80%" />
65
- <EditScreenInfo path="app/(tabs)/index.tsx" />
66
- </Box>
67
- );
68
- <% } else { %>
69
- return (
70
- <View style={styles.container}>
71
- <Text style={styles.title}>Tab One</Text>
72
- <% if (props.internalizationPackage?.name === "i18next") { %>
73
- <InternalizationExample />
74
- <% } %>
75
- <View style={styles.separator} />
76
- <EditScreenInfo path="app/(tabs)/index.tsx" />
77
- </View>
78
- );
79
- <% } %>
6
+ export default function Home() {
7
+ return (
8
+ <>
9
+ <Stack.Screen options={{ title: 'Tab One' }} />
10
+ <View style={styles.container}>
11
+ <ScreenContent path="app/(tabs)/index.tsx" title="Tab One" />
12
+ </View>
13
+ </>
14
+ );
80
15
  }
81
16
 
82
- <% if (props.stylingPackage?.name === "nativewind") { %>
83
- const styles = {
84
- container: `items-center flex-1 justify-center`,
85
- separator: `h-[1px] my-7 w-4/5 bg-gray-200`,
86
- title: `text-xl font-bold`
87
- };
88
- <% } else if (props.stylingPackage?.name === "stylesheet") { %>
89
- const styles = StyleSheet.create({
90
- container: {
91
- alignItems: "center",
92
- flex: 1,
93
- justifyContent: "center",
94
- },
95
- separator: {
96
- backgroundColor: '#d1d5db',
97
- height: 1,
98
- marginVertical: 30,
99
- width: "80%",
100
- },
101
- title: {
102
- fontSize: 20,
103
- fontWeight: "bold",
104
- }
105
- });
106
- <% } %>
17
+ const styles = StyleSheet.create({
18
+ container: {
19
+ flex: 1,
20
+ padding: 24,
21
+ },
22
+ });
@@ -1,87 +1,22 @@
1
- <% if (props.stylingPackage?.name === "nativewind") { %>
2
- import { Text, View } from "react-native";
3
- <% } else if (props.stylingPackage?.name === "tamagui") { %>
4
- import { YStack, H2, Separator, Theme } from "tamagui";
5
- <% } else if (props.stylingPackage?.name === "restyle") { %>
6
- import { Box, Text } from 'theme';
7
- <% } else if (props.stylingPackage?.name === "unistyles") { %>
8
- import { useStyles } from 'react-native-unistyles'
9
- import { Text, View } from 'react-native';
10
- <% } else { %>
11
- import { StyleSheet, Text, View } from "react-native";
12
- <% } %>
1
+ import { Stack } from 'expo-router';
2
+ import { StyleSheet, View } from 'react-native';
13
3
 
14
- import EditScreenInfo from "../../components/edit-screen-info";
4
+ import { ScreenContent } from '~/components/ScreenContent';
15
5
 
16
- export default function TabTwoScreen() {
17
- <% if (props.stylingPackage?.name === "unistyles") { %>
18
- const { theme } = useStyles()
19
-
20
- return (
21
- <View style={theme.components.container}>
22
- <Text style={theme.components.title}>Tab Two</Text>
23
- <View style={theme.components.separator} />
24
- <EditScreenInfo path='app/(tabs)/two.tsx' />
25
- </View>
26
- );
27
- <% } else if (props.stylingPackage?.name === "nativewind") { %>
28
- return (
29
- <View className={styles.container}>
30
- <Text className={styles.title}>Tab Two</Text>
31
- <View className={styles.separator} />
32
- <EditScreenInfo path="app/(tabs)/index.tsx" />
33
- </View>
34
- );
35
- <% } else if (props.stylingPackage?.name === "tamagui") { %>
36
- return (
37
- <Theme name="light">
38
- <YStack flex={1} alignItems="center" justifyContent="center">
39
- <H2>Tab Two</H2>
40
- <Separator />
41
- <EditScreenInfo path="app/(tabs)/index.tsx" />
42
- </YStack>
43
- </Theme>
44
- );
45
- <% } else if (props.stylingPackage?.name === "restyle") { %>
46
- return (
47
- <Box flex={1} alignItems="center" justifyContent="center">
48
- <Text variant="title">Tab Two</Text>
49
- <Box height={1} marginVertical="l_32" width="80%" />
50
- <EditScreenInfo path="app/(tabs)/two.tsx" />
51
- </Box>
52
- );
53
- <% } else { %>
54
- return (
55
- <View style={styles.container}>
56
- <Text style={styles.title}>Tab Two</Text>
57
- <View style={styles.separator} />
58
- <EditScreenInfo path="app/(tabs)/two.tsx" />
59
- </View>
60
- );
61
- <% } %>
6
+ export default function Home() {
7
+ return (
8
+ <>
9
+ <Stack.Screen options={{ title: 'Tab Two' }} />
10
+ <View style={styles.container}>
11
+ <ScreenContent path="app/(tabs)/two.tsx" title="Tab Two" />
12
+ </View>
13
+ </>
14
+ );
62
15
  }
63
16
 
64
- <% if (props.stylingPackage?.name === "nativewind") { %>
65
- const styles = {
66
- container: `items-center flex-1 justify-center`,
67
- separator: `h-[1px] my-7 w-4/5 bg-gray-200`,
68
- title: `text-xl font-bold`
69
- };
70
- <% } else if (props.stylingPackage?.name === "stylesheet") { %>
71
- const styles = StyleSheet.create({
72
- container: {
73
- alignItems: "center",
74
- flex: 1,
75
- justifyContent: "center",
76
- },
77
- separator: {
78
- height: 1,
79
- marginVertical: 30,
80
- width: "80%",
81
- },
82
- title: {
83
- fontSize: 20,
84
- fontWeight: "bold",
85
- }
86
- });
87
- <% } %>
17
+ const styles = StyleSheet.create({
18
+ container: {
19
+ flex: 1,
20
+ padding: 24,
21
+ },
22
+ });
@@ -1,95 +1,20 @@
1
- <% if (props.stylingPackage?.name === "nativewind") { %>
2
- import { Platform, Text, View } from "react-native";
3
- <% } else if (props.stylingPackage?.name === "tamagui") { %>
4
- import { YStack, Paragraph, Separator, Theme } from "tamagui";
5
- import { Platform } from 'react-native'
6
- <% } else if (props.stylingPackage?.name === "restyle") { %>
7
- import { Platform } from 'react-native';
8
- import { Box, Text } from 'theme';
9
- <% } else if (props.stylingPackage?.name === "unistyles") { %>
10
- import { useStyles } from 'react-native-unistyles'
11
- import { Platform, Text, View } from 'react-native';
12
- <% } else { %>
13
- import { Platform, StyleSheet, Text, View } from "react-native";
14
- <% } %>
15
- import { StatusBar } from "expo-status-bar";
16
-
17
- import EditScreenInfo from "../components/edit-screen-info";
1
+ import { ScreenContent } from 'components/ScreenContent';
2
+ import { StatusBar } from 'expo-status-bar';
3
+ import { Platform } from 'react-native';
18
4
 
19
- export default function ModalScreen() {
20
- <% if (props.stylingPackage?.name === "unistyles") { %>
21
- const { theme } = useStyles()
5
+ <% if (props.internalizationPackage?.name === "i18next") { %>
6
+ import { InternalizationExample } from 'components/InternalizationExample';
7
+ <% } %>
22
8
 
23
- return (
24
- <View style={theme.components.container}>
25
- <StatusBar style={Platform.OS === 'ios' ? 'light' : 'auto'} />
26
- <Text style={theme.components.title}>Modal</Text>
27
- <View style={theme.components.separator} />
28
- <EditScreenInfo path='app/modal.tsx' />
29
- </View>
30
- );
31
- <% } else if (props.stylingPackage?.name === "nativewind") { %>
32
- return (
33
- <View className={styles.container}>
34
- <StatusBar style={Platform.OS === "ios" ? "light" : "auto"} />
35
- <Text className={styles.title}>Modal</Text>
36
- <View className={styles.separator} />
37
- <EditScreenInfo path="app/modal.tsx" />
38
- </View>
39
- );
40
- <% } else if (props.stylingPackage?.name === "tamagui") { %>
41
- return (
42
- <Theme name="light">
43
- <YStack flex={1} alignItems="center" justifyContent="center">
44
- <StatusBar style={Platform.OS === "ios" ? "light" : "auto"} />
45
- <Paragraph>Modal</Paragraph>
46
- <Separator />
47
- <EditScreenInfo path="app/modal.tsx" />
48
- </YStack>
49
- </Theme>
50
- );
51
- <% } else if (props.stylingPackage?.name === "restyle") { %>
52
- return (
53
- <Box flex={1} alignItems="center" justifyContent="center">
54
- <StatusBar style={Platform.OS === 'ios' ? 'light' : 'auto'} />
55
- <Text variant="title">Modal</Text>
56
- <Box height={1} marginVertical="l_32" width="80%" />
57
- <EditScreenInfo path="app/modal.tsx" />
58
- </Box>
59
- );
60
- <% } else { %>
61
- return (
62
- <View style={styles.container}>
63
- <StatusBar style={Platform.OS === "ios" ? "light" : "auto"} />
64
- <Text style={styles.title}>Modal</Text>
65
- <View style={styles.separator} />
66
- <EditScreenInfo path="app/modal.tsx" />
67
- </View>
68
- );
69
- <% } %>
9
+ export default function Modal() {
10
+ return (
11
+ <>
12
+ <ScreenContent path="app/modal.tsx" title="Modal">
13
+ <% if (props.internalizationPackage?.name === "i18next") { %>
14
+ <InternalizationExample />
15
+ <% } %>
16
+ </ScreenContent>
17
+ <StatusBar style={Platform.OS === 'ios' ? 'light' : 'auto'} />
18
+ </>
19
+ );
70
20
  }
71
-
72
- <% if (props.stylingPackage?.name === "nativewind") { %>
73
- const styles = {
74
- container: `items-center flex-1 justify-center`,
75
- separator: `h-[1px] my-7 w-4/5 bg-gray-200`,
76
- title: `text-xl font-bold`
77
- };
78
- <% } else if (props.stylingPackage?.name === "stylesheet") { %>
79
- const styles = StyleSheet.create({
80
- container: {
81
- alignItems: "center",
82
- flex: 1,
83
- justifyContent: "center"
84
- },
85
- separator: {
86
- height: 1,
87
- marginVertical: 30,
88
- width: "80%"
89
- },
90
- title: {
91
- fontSize: 20,
92
- fontWeight: "bold"
93
- }
94
- });
95
- <% } %>
@@ -20,4 +20,4 @@ export const InternalizationExample = () => {
20
20
 
21
21
  export const styles = StyleSheet.create({
22
22
  content: { gap: 20, padding: 20 },
23
- });
23
+ });
@@ -1,8 +1,8 @@
1
1
  {
2
- "hello": "Hello, World!",
3
- "title": "Open up App.tsx to start working on your app!",
4
2
  "button": {
5
3
  "french": "Switch language to French",
6
4
  "english": "Switch language to English"
7
- }
5
+ },
6
+ "getStarted": "Open up the code for this screen:",
7
+ "changeCode": "Change any of the text, save the file, and your app will automatically update."
8
8
  }
@@ -1,8 +1,8 @@
1
1
  {
2
- "hello": "Bonjour, le monde !",
3
- "title": "Ouvrez App.tsx pour commencer à travailler sur votre application !",
4
2
  "button": {
5
3
  "french": "Changer la langue en français",
6
4
  "english": "Changer la langue en anglais"
7
- }
5
+ },
6
+ "getStarted": "Ouvrez le code de cet écran :",
7
+ "changeCode": "Modifiez n'importe quel texte, enregistrez le fichier et votre application sera automatiquement mise à jour."
8
8
  }
@@ -0,0 +1,18 @@
1
+ import { Feather } from '@expo/vector-icons';
2
+ import { Text, View } from 'react-native';
3
+
4
+ export const BackButton = ({ onPress }: { onPress: () => void }) => {
5
+ return (
6
+ <View className={styles.backButton}>
7
+ <Feather name="chevron-left" size={16} color="#007AFF" />
8
+ <Text className={styles.backButtonText} onPress={onPress}>
9
+ Back
10
+ </Text>
11
+ </View>
12
+ );
13
+ };
14
+
15
+ const styles = {
16
+ backButton: 'flex-row',
17
+ backButtonText: 'text-blue-500 ml-1',
18
+ };
@@ -0,0 +1,14 @@
1
+ import { Text, TouchableOpacity } from 'react-native';
2
+
3
+ export const Button = ({ onPress, title }: { onPress: () => void; title: string }) => {
4
+ return (
5
+ <TouchableOpacity className={styles.button} onPress={onPress}>
6
+ <Text className={styles.buttonText}>{title}</Text>
7
+ </TouchableOpacity>
8
+ );
9
+ };
10
+
11
+ export const styles = {
12
+ button: 'items-center bg-indigo-500 rounded-[28px] shadow-md p-4',
13
+ buttonText: 'text-white text-lg font-semibold text-center',
14
+ };
@@ -0,0 +1,40 @@
1
+ import { Text, View } from 'react-native';
2
+
3
+ <% if (props.internalizationPackage?.name === "i18next") { %>
4
+ import { useTranslation } from 'react-i18next';
5
+ <% } %>
6
+
7
+
8
+ export const EditScreenInfo = ({ path }: { path: string }) => {
9
+ <% if (props.internalizationPackage?.name === "i18next") { %>
10
+ const { t } = useTranslation();
11
+ const title = t('getStarted');
12
+ const description = t('changeCode')
13
+ <% } else { %>
14
+ const title = "Open up the code for this screen:"
15
+ const description = "Change any of the text, save the file, and your app will automatically update."
16
+ <% } %>
17
+ return (
18
+ <View>
19
+ <View className={styles.getStartedContainer}>
20
+ <Text className={styles.getStartedText}>{title}</Text>
21
+ <View className={styles.codeHighlightContainer + styles.homeScreenFilename}>
22
+ <Text>{path}</Text>
23
+ </View>
24
+ <Text className={styles.getStartedText}>
25
+ {description}
26
+ </Text>
27
+ </View>
28
+ </View>
29
+ );
30
+ };
31
+
32
+ const styles = {
33
+ codeHighlightContainer: `rounded-md px-1`,
34
+ getStartedContainer: `items-center mx-12`,
35
+ getStartedText: `text-lg leading-6 text-center`,
36
+ helpContainer: `items-center mx-5 mt-4`,
37
+ helpLink: `py-4`,
38
+ helpLinkText: `text-center`,
39
+ homeScreenFilename: `my-2`,
40
+ };
@@ -0,0 +1,25 @@
1
+ import { Text, View } from 'react-native';
2
+
3
+ import { EditScreenInfo } from './EditScreenInfo';
4
+
5
+ type ScreenContentProps = {
6
+ title: string;
7
+ path: string;
8
+ children?: React.ReactNode;
9
+ };
10
+
11
+ export const ScreenContent = ({ title, path, children} : ScreenContentProps) => {
12
+ return (
13
+ <View className={styles.container}>
14
+ <Text className={styles.title}>{title}</Text>
15
+ <View className={styles.separator} />
16
+ <EditScreenInfo path={path} />
17
+ {children}
18
+ </View>
19
+ );
20
+ };
21
+ const styles = {
22
+ container: `items-center flex-1 justify-center`,
23
+ separator: `h-[1px] my-7 w-4/5 bg-gray-200`,
24
+ title: `text-xl font-bold`,
25
+ };
@@ -22,7 +22,7 @@ import "react-native-gesture-handler";
22
22
  import { theme } from 'theme';
23
23
  <% } %>
24
24
 
25
- import RootStack from "./src/navigation";
25
+ import RootStack from "./navigation";
26
26
 
27
27
  export default function App() {
28
28
  <% if (props.stylingPackage?.name === "tamagui") { %>
@@ -1,7 +1,7 @@
1
- import { FontAwesome, Ionicons, MaterialIcons } from '@expo/vector-icons';
1
+ import { Ionicons, MaterialIcons } from '@expo/vector-icons';
2
2
  import { createDrawerNavigator } from '@react-navigation/drawer';
3
- import { Pressable } from 'react-native';
4
3
  import { StackScreenProps } from '@react-navigation/stack';
4
+ import { HeaderButton } from 'components/HeaderButton';
5
5
 
6
6
  import { RootStackParamList } from '.';
7
7
  import TabNavigator from './tab-navigator';
@@ -12,39 +12,27 @@ type Props = StackScreenProps<RootStackParamList, 'DrawerNavigator'>;
12
12
  const Drawer = createDrawerNavigator();
13
13
 
14
14
  export default function DrawerNavigator({ navigation }: Props) {
15
- return (
16
- <Drawer.Navigator>
15
+ return (
16
+ <Drawer.Navigator>
17
17
  <Drawer.Screen
18
18
  name="Home"
19
19
  component={Home}
20
20
  options={{
21
- drawerIcon: ({ size, color }) => <Ionicons name="home-outline" size={size} color={color} />,
21
+ drawerIcon: ({ size, color }) => (
22
+ <Ionicons name="home-outline" size={size} color={color} />
23
+ ),
22
24
  }}
23
25
  />
24
- <Drawer.Screen name="Tabs" component={TabNavigator}
26
+ <Drawer.Screen
27
+ name="Tabs"
28
+ component={TabNavigator}
25
29
  options={{
26
- headerRight: () => (
27
- <Pressable onPress={() => navigation.navigate('Modal')}>
28
- {({ pressed }) => (
29
- <FontAwesome
30
- name="info-circle"
31
- size={25}
32
- color="gray"
33
- style={[
34
- {
35
- marginRight: 16,
36
- opacity: pressed ? 0.5 : 1,
37
- },
38
- ]}
39
- />
40
- )}
41
- </Pressable>
42
- ),
30
+ headerRight: () => <HeaderButton onPress={() => navigation.navigate('Modal')} />,
43
31
  drawerIcon: ({ size, color }) => (
44
32
  <MaterialIcons name="border-bottom" size={size} color={color} />
45
33
  ),
46
34
  }}
47
- />
48
- </Drawer.Navigator>
49
- );
35
+ />
36
+ </Drawer.Navigator>
37
+ );
50
38
  }