create-expo-stack 2.4.0-next.f483b52 → 2.4.1-next.9242c21
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.
- package/README.md +1 -0
- package/build/commands/create-expo-stack.js +39 -17
- package/build/templates/base/App.tsx.ejs +25 -0
- package/build/templates/base/babel.config.js.ejs +10 -11
- package/build/templates/base/package.json.ejs +29 -21
- package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/_layout.tsx.ejs +41 -0
- package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/index.tsx.ejs +88 -0
- package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/two.tsx.ejs +88 -0
- package/build/templates/packages/expo-router/drawer/app/(drawer)/_layout.tsx.ejs +43 -19
- package/build/templates/packages/expo-router/drawer/app/(drawer)/index.tsx.ejs +20 -1
- package/build/templates/packages/expo-router/drawer/app/[...unmatched].tsx.ejs +26 -0
- package/build/templates/packages/expo-router/drawer/app/_layout.tsx.ejs +39 -30
- package/build/templates/packages/expo-router/drawer/app/modal.tsx.ejs +96 -0
- package/build/templates/packages/expo-router/drawer/components/edit-screen-info.tsx.ejs +153 -0
- package/build/templates/packages/expo-router/metro.config.js.ejs +16 -0
- package/build/templates/packages/expo-router/stack/app/[...unmatched].tsx.ejs +28 -0
- package/build/templates/packages/expo-router/stack/app/_layout.tsx.ejs +7 -0
- package/build/templates/packages/expo-router/stack/app/details.tsx.ejs +43 -1
- package/build/templates/packages/expo-router/stack/app/index.tsx.ejs +36 -0
- package/build/templates/packages/expo-router/tabs/app/(tabs)/_layout.tsx.ejs +30 -8
- package/build/templates/packages/expo-router/tabs/app/(tabs)/index.tsx.ejs +16 -2
- package/build/templates/packages/expo-router/tabs/app/(tabs)/two.tsx.ejs +15 -2
- package/build/templates/packages/expo-router/tabs/app/[...unmatched].tsx.ejs +28 -0
- package/build/templates/packages/expo-router/tabs/app/_layout.tsx.ejs +7 -0
- package/build/templates/packages/expo-router/tabs/app/modal.tsx.ejs +15 -1
- package/build/templates/packages/expo-router/tabs/components/edit-screen-info.tsx.ejs +36 -0
- package/build/templates/packages/firebase/metro.config.js.ejs +9 -10
- package/build/templates/packages/nativewind/global.css +3 -0
- package/build/templates/packages/nativewind/metro.config.js +7 -0
- package/build/templates/packages/nativewind/tailwind.config.js.ejs +1 -0
- package/build/templates/packages/react-navigation/App.tsx.ejs +6 -0
- package/build/templates/packages/react-navigation/components/edit-screen-info.tsx.ejs +59 -0
- package/build/templates/packages/react-navigation/navigation/drawer-navigator.tsx.ejs +41 -6
- package/build/templates/packages/react-navigation/navigation/index.tsx.ejs +31 -2
- package/build/templates/packages/react-navigation/navigation/tab-navigator.tsx.ejs +47 -17
- package/build/templates/packages/react-navigation/screens/details.tsx.ejs +25 -0
- package/build/templates/packages/react-navigation/screens/home.tsx.ejs +83 -0
- package/build/templates/packages/react-navigation/screens/modal.tsx.ejs +13 -0
- package/build/templates/packages/react-navigation/screens/one.tsx.ejs +12 -0
- package/build/templates/packages/react-navigation/screens/overview.tsx.ejs +33 -2
- package/build/templates/packages/react-navigation/screens/two.tsx.ejs +12 -0
- package/build/templates/packages/unistyles/breakpoints.ts.ejs +9 -0
- package/build/templates/packages/unistyles/theme.ts.ejs +76 -0
- package/build/templates/packages/unistyles/unistyles.ts.ejs +27 -0
- package/build/types/types.d.ts +2 -2
- package/build/types/utilities/printOutput.d.ts +2 -2
- package/build/types.js +3 -2
- package/build/utilities/configureProjectFiles.js +29 -8
- package/build/utilities/generateProjectFiles.js +5 -2
- package/build/utilities/printOutput.js +14 -2
- package/build/utilities/runCLI.js +7 -3
- package/build/utilities/showHelp.js +3 -1
- package/package.json +2 -2
- package/build/templates/packages/expo-router/drawer/app/(drawer)/news.tsx.ejs +0 -71
- package/build/templates/packages/expo-router/metro.config.js +0 -11
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
<% } else if (props.stylingPackage?.name === "restyle") { %>
|
|
7
7
|
import { TouchableOpacity } from 'react-native';
|
|
8
8
|
import { Box, Text, makeStyles } from 'theme';
|
|
9
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
10
|
+
import { createStyleSheet, useStyles } from 'react-native-unistyles';
|
|
11
|
+
import { Text, TouchableOpacity, View } from 'react-native';
|
|
9
12
|
<% } else { %>
|
|
10
13
|
import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
|
|
11
14
|
<% } %>
|
|
@@ -18,6 +21,10 @@ export default function Page() {
|
|
|
18
21
|
const styles = useStyles();
|
|
19
22
|
<% } %>
|
|
20
23
|
|
|
24
|
+
<% if (props.stylingPackage?.name === "unistyles") { %>
|
|
25
|
+
const { styles, theme } = useStyles(stylesheet);
|
|
26
|
+
<% } %>
|
|
27
|
+
|
|
21
28
|
return (
|
|
22
29
|
<% if (props.stylingPackage?.name === "nativewind") { %>
|
|
23
30
|
<View className={styles.container}>
|
|
@@ -70,6 +77,21 @@ export default function Page() {
|
|
|
70
77
|
</Box>
|
|
71
78
|
</Box>
|
|
72
79
|
</>
|
|
80
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
81
|
+
<View style={styles.container}>
|
|
82
|
+
<View style={styles.main}>
|
|
83
|
+
<Stack.Screen options={{ title: 'Overview' }} />
|
|
84
|
+
<View>
|
|
85
|
+
<Text style={theme.components.title}>Hello World</Text>
|
|
86
|
+
<Text style={theme.components.subtitle}>This is the first page of your app.</Text>
|
|
87
|
+
</View>
|
|
88
|
+
<Link href={{ pathname: '/details', params: { name: 'Dan' } }} asChild>
|
|
89
|
+
<TouchableOpacity style={theme.components.button} >
|
|
90
|
+
<Text style={theme.components.buttonText}>Show Details</Text>
|
|
91
|
+
</TouchableOpacity>
|
|
92
|
+
</Link>
|
|
93
|
+
</View>
|
|
94
|
+
</View>
|
|
73
95
|
<% } else { %>
|
|
74
96
|
<View style={styles.container}>
|
|
75
97
|
<View style={styles.main}>
|
|
@@ -117,6 +139,20 @@ export default function Page() {
|
|
|
117
139
|
shadowRadius: 3.84,
|
|
118
140
|
},
|
|
119
141
|
}));
|
|
142
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
143
|
+
const stylesheet = createStyleSheet({
|
|
144
|
+
container: {
|
|
145
|
+
flex: 1,
|
|
146
|
+
padding: 24,
|
|
147
|
+
},
|
|
148
|
+
main: {
|
|
149
|
+
flex: 1,
|
|
150
|
+
maxWidth: 960,
|
|
151
|
+
marginHorizontal: 'auto',
|
|
152
|
+
justifyContent: 'space-between',
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
|
|
120
156
|
<% } else if (props.stylingPackage?.name === "stylesheet") { %>
|
|
121
157
|
const styles = StyleSheet.create({
|
|
122
158
|
button: {
|
|
@@ -1,33 +1,44 @@
|
|
|
1
1
|
import FontAwesome from "@expo/vector-icons/FontAwesome";
|
|
2
2
|
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 { %>
|
|
3
7
|
import { Pressable, StyleSheet } from "react-native";
|
|
8
|
+
<% } %>
|
|
4
9
|
|
|
5
10
|
function TabBarIcon(props: {
|
|
6
11
|
name: React.ComponentProps<typeof FontAwesome>["name"];
|
|
7
12
|
color: string;
|
|
8
13
|
}) {
|
|
14
|
+
<% if (props.stylingPackage?.name === "unistyles") { %>
|
|
15
|
+
const {styles} = useStyles(stylesheet)
|
|
16
|
+
<% } %>
|
|
9
17
|
return <FontAwesome size={28} style={styles.tabBarIcon} {...props} />;
|
|
10
18
|
}
|
|
11
19
|
|
|
12
20
|
export default function TabLayout() {
|
|
21
|
+
<% if (props.stylingPackage?.name === "unistyles") { %>
|
|
22
|
+
const { styles } = useStyles(stylesheet)
|
|
23
|
+
<% } %>
|
|
13
24
|
return (
|
|
14
25
|
<Tabs
|
|
15
26
|
screenOptions={{
|
|
16
|
-
tabBarActiveTintColor:
|
|
27
|
+
tabBarActiveTintColor: 'black',
|
|
17
28
|
}}>
|
|
18
29
|
<Tabs.Screen
|
|
19
|
-
name=
|
|
30
|
+
name='index'
|
|
20
31
|
options={{
|
|
21
|
-
title:
|
|
22
|
-
tabBarIcon: ({ color }) => <TabBarIcon name=
|
|
32
|
+
title: 'Tab One',
|
|
33
|
+
tabBarIcon: ({ color }) => <TabBarIcon name='code' color={color} />,
|
|
23
34
|
headerRight: () => (
|
|
24
|
-
<Link href=
|
|
35
|
+
<Link href='/modal' asChild>
|
|
25
36
|
<Pressable>
|
|
26
37
|
{({ pressed }) => (
|
|
27
38
|
<FontAwesome
|
|
28
|
-
name=
|
|
39
|
+
name='info-circle'
|
|
29
40
|
size={25}
|
|
30
|
-
color=
|
|
41
|
+
color='gray'
|
|
31
42
|
style={[styles.headerRight, { opacity: pressed ? 0.5 : 1 }]}
|
|
32
43
|
/>
|
|
33
44
|
)}
|
|
@@ -47,6 +58,16 @@ export default function TabLayout() {
|
|
|
47
58
|
);
|
|
48
59
|
}
|
|
49
60
|
|
|
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 { %>
|
|
50
71
|
const styles = StyleSheet.create({
|
|
51
72
|
headerRight: {
|
|
52
73
|
marginRight: 15
|
|
@@ -54,4 +75,5 @@ const styles = StyleSheet.create({
|
|
|
54
75
|
tabBarIcon: {
|
|
55
76
|
marginBottom: -3
|
|
56
77
|
}
|
|
57
|
-
});
|
|
78
|
+
});
|
|
79
|
+
<% } %>
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
import { YStack, H2, Separator, Theme } from "tamagui";
|
|
5
5
|
<% } else if (props.stylingPackage?.name === "restyle") { %>
|
|
6
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';
|
|
7
10
|
<% } else { %>
|
|
8
11
|
import { StyleSheet, Text, View } from "react-native";
|
|
9
12
|
<% } %>
|
|
@@ -11,7 +14,17 @@
|
|
|
11
14
|
import EditScreenInfo from "../../components/edit-screen-info";
|
|
12
15
|
|
|
13
16
|
export default function TabOneScreen() {
|
|
14
|
-
|
|
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 One</Text>
|
|
23
|
+
<View style={theme.components.separator} />
|
|
24
|
+
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
25
|
+
</View>
|
|
26
|
+
);
|
|
27
|
+
<% } else if (props.stylingPackage?.name === "nativewind") { %>
|
|
15
28
|
return (
|
|
16
29
|
<View className={styles.container}>
|
|
17
30
|
<Text className={styles.title}>Tab One</Text>
|
|
@@ -36,7 +49,7 @@ export default function TabOneScreen() {
|
|
|
36
49
|
<Box height={1} marginVertical="l_32" width="80%" />
|
|
37
50
|
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
38
51
|
</Box>
|
|
39
|
-
);
|
|
52
|
+
);
|
|
40
53
|
<% } else { %>
|
|
41
54
|
return (
|
|
42
55
|
<View style={styles.container}>
|
|
@@ -62,6 +75,7 @@ export default function TabOneScreen() {
|
|
|
62
75
|
justifyContent: "center",
|
|
63
76
|
},
|
|
64
77
|
separator: {
|
|
78
|
+
backgroundColor: '#d1d5db',
|
|
65
79
|
height: 1,
|
|
66
80
|
marginVertical: 30,
|
|
67
81
|
width: "80%",
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
import { YStack, H2, Separator, Theme } from "tamagui";
|
|
5
5
|
<% } else if (props.stylingPackage?.name === "restyle") { %>
|
|
6
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';
|
|
7
10
|
<% } else { %>
|
|
8
11
|
import { StyleSheet, Text, View } from "react-native";
|
|
9
12
|
<% } %>
|
|
@@ -11,7 +14,17 @@
|
|
|
11
14
|
import EditScreenInfo from "../../components/edit-screen-info";
|
|
12
15
|
|
|
13
16
|
export default function TabTwoScreen() {
|
|
14
|
-
<% if (props.stylingPackage?.name === "
|
|
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") { %>
|
|
15
28
|
return (
|
|
16
29
|
<View className={styles.container}>
|
|
17
30
|
<Text className={styles.title}>Tab Two</Text>
|
|
@@ -36,7 +49,7 @@ export default function TabTwoScreen() {
|
|
|
36
49
|
<Box height={1} marginVertical="l_32" width="80%" />
|
|
37
50
|
<EditScreenInfo path="app/(tabs)/two.tsx" />
|
|
38
51
|
</Box>
|
|
39
|
-
);
|
|
52
|
+
);
|
|
40
53
|
<% } else { %>
|
|
41
54
|
return (
|
|
42
55
|
<View style={styles.container}>
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Link, Stack } from 'expo-router';
|
|
2
2
|
<% if (props.stylingPackage?.name === "nativewind") {%>
|
|
3
3
|
import { Text, View } from 'react-native';
|
|
4
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
5
|
+
import { createStyleSheet, useStyles } from 'react-native-unistyles'
|
|
6
|
+
import { Text, View } from 'react-native';
|
|
4
7
|
<% } else if (props.stylingPackage?.name === "stylesheet") { %>
|
|
5
8
|
import { StyleSheet, Text, View } from 'react-native';
|
|
6
9
|
<% } else if (props.stylingPackage?.name === "tamagui") { %>
|
|
@@ -15,6 +18,10 @@ export default function NotFoundScreen() {
|
|
|
15
18
|
const styles = useStyles();
|
|
16
19
|
<% } %>
|
|
17
20
|
|
|
21
|
+
<% if (props.stylingPackage?.name === "unistyles") {%>
|
|
22
|
+
const { styles } = useStyles(stylesheet);
|
|
23
|
+
<% } %>
|
|
24
|
+
|
|
18
25
|
return (
|
|
19
26
|
<% if (props.stylingPackage?.name === "nativewind") {%>
|
|
20
27
|
<>
|
|
@@ -71,6 +78,27 @@ export default function NotFoundScreen() {
|
|
|
71
78
|
link: `mt-4 pt-4`,
|
|
72
79
|
linkText: `text-base text-[#2e78b7]`,
|
|
73
80
|
};
|
|
81
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
82
|
+
const stylesheet = createStyleSheet((theme) => ({
|
|
83
|
+
container: {
|
|
84
|
+
flex: 1,
|
|
85
|
+
alignItems: 'center',
|
|
86
|
+
justifyContent: 'center',
|
|
87
|
+
padding: 20,
|
|
88
|
+
},
|
|
89
|
+
title: {
|
|
90
|
+
fontSize: 20,
|
|
91
|
+
fontWeight: 'bold',
|
|
92
|
+
},
|
|
93
|
+
link: {
|
|
94
|
+
marginTop: 16,
|
|
95
|
+
paddingVertical: 16,
|
|
96
|
+
},
|
|
97
|
+
linkText: {
|
|
98
|
+
fontSize: 14,
|
|
99
|
+
color: theme.colors.astral,
|
|
100
|
+
},
|
|
101
|
+
}));
|
|
74
102
|
<% } else if (props.stylingPackage?.name === "stylesheet") { %>
|
|
75
103
|
const styles = StyleSheet.create({
|
|
76
104
|
container: {
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
<% if (props.stylingPackage?.name === "nativewind") { %>
|
|
2
|
+
import '../global.css';
|
|
3
|
+
<% } %>
|
|
4
|
+
<% if (props.stylingPackage?.name === "unistyles") { %>
|
|
5
|
+
import '../unistyles';
|
|
6
|
+
<% } %>
|
|
7
|
+
|
|
1
8
|
<% if (props.stylingPackage?.name === "tamagui") { %>
|
|
2
9
|
import React, { useEffect } from "react";
|
|
3
10
|
import { TamaguiProvider } from 'tamagui'
|
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
<% } else if (props.stylingPackage?.name === "restyle") { %>
|
|
7
7
|
import { Platform } from 'react-native';
|
|
8
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';
|
|
9
12
|
<% } else { %>
|
|
10
13
|
import { Platform, StyleSheet, Text, View } from "react-native";
|
|
11
14
|
<% } %>
|
|
@@ -14,7 +17,18 @@ import { StatusBar } from "expo-status-bar";
|
|
|
14
17
|
import EditScreenInfo from "../components/edit-screen-info";
|
|
15
18
|
|
|
16
19
|
export default function ModalScreen() {
|
|
17
|
-
<% if (props.stylingPackage?.name === "
|
|
20
|
+
<% if (props.stylingPackage?.name === "unistyles") { %>
|
|
21
|
+
const { theme } = useStyles()
|
|
22
|
+
|
|
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") { %>
|
|
18
32
|
return (
|
|
19
33
|
<View className={styles.container}>
|
|
20
34
|
<StatusBar style={Platform.OS === "ios" ? "light" : "auto"} />
|
|
@@ -4,11 +4,17 @@
|
|
|
4
4
|
import { YStack, H4, Paragraph } from "tamagui"
|
|
5
5
|
<% } else if (props.stylingPackage?.name === "restyle") { %>
|
|
6
6
|
import { Box, Text } from 'theme';
|
|
7
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
8
|
+
import { createStyleSheet, useStyles } from 'react-native-unistyles'
|
|
9
|
+
import { Text, View } from 'react-native';
|
|
7
10
|
<% } else { %>
|
|
8
11
|
import { StyleSheet, Text, View } from "react-native";
|
|
9
12
|
<% } %>
|
|
10
13
|
|
|
11
14
|
export default function EditScreenInfo({ path }: { path: string }) {
|
|
15
|
+
<% if (props.stylingPackage?.name === "unistyles") { %>
|
|
16
|
+
const { styles } = useStyles(stylesheet);
|
|
17
|
+
<% } %>
|
|
12
18
|
<% if (props.stylingPackage?.name === "nativewind") { %>
|
|
13
19
|
return (
|
|
14
20
|
<View>
|
|
@@ -84,6 +90,36 @@ export default function EditScreenInfo({ path }: { path: string }) {
|
|
|
84
90
|
helpLinkText: `text-center`,
|
|
85
91
|
homeScreenFilename: `my-2`,
|
|
86
92
|
};
|
|
93
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
94
|
+
const stylesheet = createStyleSheet({
|
|
95
|
+
codeHighlightContainer: {
|
|
96
|
+
borderRadius: 3,
|
|
97
|
+
paddingHorizontal: 4
|
|
98
|
+
},
|
|
99
|
+
getStartedContainer: {
|
|
100
|
+
alignItems: 'center',
|
|
101
|
+
marginHorizontal: 50
|
|
102
|
+
},
|
|
103
|
+
getStartedText: {
|
|
104
|
+
fontSize: 17,
|
|
105
|
+
lineHeight: 24,
|
|
106
|
+
textAlign: 'center'
|
|
107
|
+
},
|
|
108
|
+
helpContainer: {
|
|
109
|
+
alignItems: 'center',
|
|
110
|
+
marginHorizontal: 20,
|
|
111
|
+
marginTop: 15
|
|
112
|
+
},
|
|
113
|
+
helpLink: {
|
|
114
|
+
paddingVertical: 15
|
|
115
|
+
},
|
|
116
|
+
helpLinkText: {
|
|
117
|
+
textAlign: 'center'
|
|
118
|
+
},
|
|
119
|
+
homeScreenFilename: {
|
|
120
|
+
marginVertical: 7
|
|
121
|
+
}
|
|
122
|
+
});
|
|
87
123
|
<% } else if (props.stylingPackage?.name === "stylesheet") { %>
|
|
88
124
|
const styles = StyleSheet.create({
|
|
89
125
|
codeHighlightContainer: {
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
const { getDefaultConfig } = require('expo/metro-config');
|
|
2
|
+
<% if (props.stylingPackage?.name === "nativewind") { %>
|
|
3
|
+
const { withNativeWind } = require("nativewind/metro");
|
|
4
|
+
<% } %>
|
|
2
5
|
|
|
3
6
|
/** @type {import('expo/metro-config').MetroConfig} */
|
|
4
7
|
// eslint-disable-next-line no-undef
|
|
5
|
-
const config = getDefaultConfig(__dirname
|
|
6
|
-
<%_ if (props.navigationPackage?.name === "expo-router") { -%>
|
|
7
|
-
, {
|
|
8
|
-
// [Web-only]: Enables CSS support in Metro.
|
|
9
|
-
isCSSEnabled: true
|
|
10
|
-
}
|
|
11
|
-
<% } %>
|
|
12
|
-
);
|
|
13
|
-
config.resolver.sourceExts.push('cjs');
|
|
8
|
+
const config = getDefaultConfig(__dirname);
|
|
14
9
|
|
|
15
|
-
|
|
10
|
+
<% if (props.stylingPackage?.name === "nativewind") { %>
|
|
11
|
+
module.exports = withNativeWind(config, { input: "./global.css" });
|
|
12
|
+
<% } else { %>
|
|
13
|
+
module.exports = config;
|
|
14
|
+
<% } %>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const { getDefaultConfig } = require('expo/metro-config');
|
|
2
|
+
const { withNativeWind } = require('nativewind/metro');
|
|
3
|
+
|
|
4
|
+
// eslint-disable-next-line no-undef
|
|
5
|
+
const config = getDefaultConfig(__dirname);
|
|
6
|
+
|
|
7
|
+
module.exports = withNativeWind(config, { input: './global.css' });
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
<% if (props.stylingPackage?.name === "nativewind") { %>
|
|
2
|
+
import './global.css';
|
|
3
|
+
<% } %>
|
|
4
|
+
<% if (props.stylingPackage?.name === "unistyles") { %>
|
|
5
|
+
import './unistyles';
|
|
6
|
+
<% } %>
|
|
1
7
|
import "react-native-gesture-handler";
|
|
2
8
|
<% if (props.stylingPackage?.name === "tamagui") { %>
|
|
3
9
|
import React, { useEffect } from "react";
|
|
@@ -3,6 +3,9 @@ import React from "react";
|
|
|
3
3
|
import { Text, View } from "react-native";
|
|
4
4
|
<% } else if (props.stylingPackage?.name === "restyle") { %>
|
|
5
5
|
import { Box, Text } from 'theme';
|
|
6
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
7
|
+
import { createStyleSheet, useStyles } from 'react-native-unistyles'
|
|
8
|
+
import { Text, View } from 'react-native';
|
|
6
9
|
<% } else { %>
|
|
7
10
|
import { StyleSheet, Text, View } from "react-native";
|
|
8
11
|
<% } %>
|
|
@@ -52,6 +55,32 @@ import React from "react";
|
|
|
52
55
|
</Box>
|
|
53
56
|
);
|
|
54
57
|
}
|
|
58
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
59
|
+
export default function EditScreenInfo({ path }: { path: string }) {
|
|
60
|
+
const { styles } = useStyles(stylesheet)
|
|
61
|
+
return (
|
|
62
|
+
<View>
|
|
63
|
+
<View style={styles.getStartedContainer}>
|
|
64
|
+
<Text
|
|
65
|
+
style={styles.getStartedText}>
|
|
66
|
+
Open up the code for this screen:
|
|
67
|
+
</Text>
|
|
68
|
+
|
|
69
|
+
<View
|
|
70
|
+
style={[styles.codeHighlightContainer, styles.homeScreenFilename]}
|
|
71
|
+
>
|
|
72
|
+
<Text>{path}</Text>
|
|
73
|
+
</View>
|
|
74
|
+
|
|
75
|
+
<Text
|
|
76
|
+
style={styles.getStartedText}
|
|
77
|
+
>
|
|
78
|
+
Change any of the text, save the file, and your app will automatically update.
|
|
79
|
+
</Text>
|
|
80
|
+
</View>
|
|
81
|
+
</View>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
55
84
|
<% } else { %>
|
|
56
85
|
export default function EditScreenInfo({ path }: { path: string }) {
|
|
57
86
|
return (
|
|
@@ -88,6 +117,36 @@ import React from "react";
|
|
|
88
117
|
helpLink: "py-4",
|
|
89
118
|
helpLinkText: "text-center"
|
|
90
119
|
};
|
|
120
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
121
|
+
const stylesheet = createStyleSheet({
|
|
122
|
+
codeHighlightContainer: {
|
|
123
|
+
borderRadius: 3,
|
|
124
|
+
paddingHorizontal: 4
|
|
125
|
+
},
|
|
126
|
+
getStartedContainer: {
|
|
127
|
+
alignItems: 'center',
|
|
128
|
+
marginHorizontal: 50
|
|
129
|
+
},
|
|
130
|
+
getStartedText: {
|
|
131
|
+
fontSize: 17,
|
|
132
|
+
lineHeight: 24,
|
|
133
|
+
textAlign: 'center'
|
|
134
|
+
},
|
|
135
|
+
helpContainer: {
|
|
136
|
+
alignItems: 'center',
|
|
137
|
+
marginHorizontal: 20,
|
|
138
|
+
marginTop: 15
|
|
139
|
+
},
|
|
140
|
+
helpLink: {
|
|
141
|
+
paddingVertical: 15
|
|
142
|
+
},
|
|
143
|
+
helpLinkText: {
|
|
144
|
+
textAlign: 'center'
|
|
145
|
+
},
|
|
146
|
+
homeScreenFilename: {
|
|
147
|
+
marginVertical: 7
|
|
148
|
+
}
|
|
149
|
+
});
|
|
91
150
|
<% } else if (props.stylingPackage?.name !== "restyle") { %>
|
|
92
151
|
const styles = StyleSheet.create({
|
|
93
152
|
codeHighlightContainer: {
|
|
@@ -1,15 +1,50 @@
|
|
|
1
|
+
import { FontAwesome, Ionicons, MaterialIcons } from '@expo/vector-icons';
|
|
1
2
|
import { createDrawerNavigator } from '@react-navigation/drawer';
|
|
3
|
+
import { Pressable } from 'react-native';
|
|
4
|
+
import { StackScreenProps } from '@react-navigation/stack';
|
|
2
5
|
|
|
3
|
-
import
|
|
4
|
-
import
|
|
6
|
+
import { RootStackParamList } from '.';
|
|
7
|
+
import TabNavigator from './tab-navigator';
|
|
8
|
+
import Home from '../screens/home';
|
|
9
|
+
|
|
10
|
+
type Props = StackScreenProps<RootStackParamList, 'DrawerNavigator'>;
|
|
5
11
|
|
|
6
12
|
const Drawer = createDrawerNavigator();
|
|
7
13
|
|
|
8
|
-
export default function DrawerNavigator() {
|
|
14
|
+
export default function DrawerNavigator({ navigation }: Props) {
|
|
9
15
|
return (
|
|
10
|
-
<Drawer.Navigator
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
<Drawer.Navigator>
|
|
17
|
+
<Drawer.Screen
|
|
18
|
+
name="Home"
|
|
19
|
+
component={Home}
|
|
20
|
+
options={{
|
|
21
|
+
drawerIcon: ({ size, color }) => <Ionicons name="home-outline" size={size} color={color} />,
|
|
22
|
+
}}
|
|
23
|
+
/>
|
|
24
|
+
<Drawer.Screen name="Tabs" component={TabNavigator}
|
|
25
|
+
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
|
+
),
|
|
43
|
+
drawerIcon: ({ size, color }) => (
|
|
44
|
+
<MaterialIcons name="border-bottom" size={size} color={color} />
|
|
45
|
+
),
|
|
46
|
+
}}
|
|
47
|
+
/>
|
|
13
48
|
</Drawer.Navigator>
|
|
14
49
|
);
|
|
15
50
|
}
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
import { Button, Text } from "tamagui";
|
|
9
9
|
<% } else if (props.stylingPackage?.name === "restyle") { %>
|
|
10
10
|
import { Box, Text, useTheme } from 'theme';
|
|
11
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
12
|
+
import { createStyleSheet, useStyles } from 'react-native-unistyles'
|
|
13
|
+
import { Text, View } from 'react-native';
|
|
11
14
|
<% } else { %>
|
|
12
15
|
import { Text, View, StyleSheet } from "react-native";
|
|
13
16
|
<% } %>
|
|
@@ -26,6 +29,11 @@
|
|
|
26
29
|
<% if (props.stylingPackage?.name === "restyle") { %>
|
|
27
30
|
const { colors } = useTheme();
|
|
28
31
|
<% } %>
|
|
32
|
+
|
|
33
|
+
<% if (props.stylingPackage?.name === "unistyles") { %>
|
|
34
|
+
const { styles, theme } = useStyles(stylesheet);
|
|
35
|
+
<% } %>
|
|
36
|
+
|
|
29
37
|
return (
|
|
30
38
|
<NavigationContainer>
|
|
31
39
|
<Stack.Navigator initialRouteName="Overview">
|
|
@@ -69,6 +77,15 @@
|
|
|
69
77
|
</Box>
|
|
70
78
|
),
|
|
71
79
|
})}
|
|
80
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
81
|
+
options={({ navigation }) => ({
|
|
82
|
+
headerLeft: () => (
|
|
83
|
+
<View style={styles.backButton}>
|
|
84
|
+
<Feather name="chevron-left" size={16} color={theme.colors.azureRadiance} />
|
|
85
|
+
<Text style={styles.backButtonText} onPress={navigation.goBack}>Back</Text>
|
|
86
|
+
</View>
|
|
87
|
+
)
|
|
88
|
+
})}
|
|
72
89
|
<% } else { %>
|
|
73
90
|
options={({ navigation }) => ({
|
|
74
91
|
headerLeft: () => (
|
|
@@ -90,6 +107,17 @@
|
|
|
90
107
|
backButton: "flex-row",
|
|
91
108
|
backButtonText: "text-blue-500 ml-1"
|
|
92
109
|
};
|
|
110
|
+
<% } else if (props.stylingPackage?.name === "unistyles") { %>
|
|
111
|
+
const stylesheet = createStyleSheet((theme) => ({
|
|
112
|
+
backButton: {
|
|
113
|
+
flexDirection: 'row',
|
|
114
|
+
paddingLeft: 20,
|
|
115
|
+
},
|
|
116
|
+
backButtonText: {
|
|
117
|
+
color: theme.colors.azureRadiance,
|
|
118
|
+
marginLeft: 4,
|
|
119
|
+
},
|
|
120
|
+
}));
|
|
93
121
|
<% } else if (props.stylingPackage?.name === "stylesheet") { %>
|
|
94
122
|
const styles = StyleSheet.create({
|
|
95
123
|
backButton: {
|
|
@@ -134,7 +162,7 @@
|
|
|
134
162
|
</NavigationContainer>
|
|
135
163
|
);
|
|
136
164
|
}
|
|
137
|
-
<% } else if (props.navigationPackage?.options.type === 'drawer') { %>
|
|
165
|
+
<% } else if (props.navigationPackage?.options.type === 'drawer + tabs') { %>
|
|
138
166
|
import { NavigationContainer } from "@react-navigation/native";
|
|
139
167
|
import { createStackNavigator } from '@react-navigation/stack';
|
|
140
168
|
|
|
@@ -144,6 +172,7 @@
|
|
|
144
172
|
export type RootStackParamList = {
|
|
145
173
|
DrawerNavigator: undefined;
|
|
146
174
|
Modal: undefined;
|
|
175
|
+
TabNavigator: undefined;
|
|
147
176
|
};
|
|
148
177
|
|
|
149
178
|
const Stack = createStackNavigator<RootStackParamList>();
|
|
@@ -160,7 +189,7 @@
|
|
|
160
189
|
<Stack.Screen
|
|
161
190
|
name="Modal"
|
|
162
191
|
component={Modal}
|
|
163
|
-
options={{ presentation: "modal" }}
|
|
192
|
+
options={{ presentation: "modal", headerLeft: () => null }}
|
|
164
193
|
/>
|
|
165
194
|
</Stack.Navigator>
|
|
166
195
|
</NavigationContainer>
|