create-expo-stack 2.0.8 → 2.0.10

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 (34) hide show
  1. package/build/commands/create-expo-stack.js +6 -5
  2. package/build/templates/base/App.tsx.ejs +41 -0
  3. package/build/templates/base/app.json.ejs +43 -0
  4. package/build/templates/base/assets/adaptive-icon.png +0 -0
  5. package/build/templates/base/assets/favicon.png +0 -0
  6. package/build/templates/base/assets/icon.png +0 -0
  7. package/build/templates/base/assets/splash.png +0 -0
  8. package/build/templates/base/babel.config.js.ejs +17 -0
  9. package/build/templates/base/package.json.ejs +75 -0
  10. package/build/templates/base/tsconfig.json.ejs +16 -0
  11. package/build/templates/packages/expo-router/expo-env.d.ts +4 -0
  12. package/build/templates/packages/expo-router/index.ts +1 -0
  13. package/build/templates/packages/expo-router/metro.config.js +11 -0
  14. package/build/templates/packages/expo-router/stack/app/_layout.tsx.ejs +56 -0
  15. package/build/templates/packages/expo-router/stack/app/details.tsx.ejs +58 -0
  16. package/build/templates/packages/expo-router/stack/app/index.tsx.ejs +96 -0
  17. package/build/templates/packages/expo-router/tabs/app/(tabs)/_layout.tsx.ejs +57 -0
  18. package/build/templates/packages/expo-router/tabs/app/(tabs)/index.tsx.ejs +52 -0
  19. package/build/templates/packages/expo-router/tabs/app/(tabs)/two.tsx.ejs +52 -0
  20. package/build/templates/packages/expo-router/tabs/app/_layout.tsx.ejs +15 -0
  21. package/build/templates/packages/expo-router/tabs/app/modal.tsx.ejs +55 -0
  22. package/build/templates/packages/expo-router/tabs/components/edit-screen-info.tsx.ejs +84 -0
  23. package/build/templates/packages/nativewind/app.d.ts +2 -0
  24. package/build/templates/packages/nativewind/tailwind.config.js.ejs +16 -0
  25. package/build/templates/packages/react-navigation/App.tsx.ejs +8 -0
  26. package/build/templates/packages/react-navigation/components/edit-screen-info.tsx.ejs +99 -0
  27. package/build/templates/packages/react-navigation/navigation/index.tsx.ejs +98 -0
  28. package/build/templates/packages/react-navigation/navigation/tab-navigator.tsx.ejs +62 -0
  29. package/build/templates/packages/react-navigation/screens/details.tsx.ejs +61 -0
  30. package/build/templates/packages/react-navigation/screens/modal.tsx.ejs +57 -0
  31. package/build/templates/packages/react-navigation/screens/one.tsx.ejs +54 -0
  32. package/build/templates/packages/react-navigation/screens/overview.tsx.ejs +97 -0
  33. package/build/templates/packages/react-navigation/screens/two.tsx.ejs +54 -0
  34. package/package.json +2 -2
@@ -49,7 +49,8 @@ var gluegun_1 = require("gluegun");
49
49
  var gradient = require("gradient-string");
50
50
  var figlet = require("figlet");
51
51
  // import { getUserPackageManager } from '../utilities/getUserPackageManager';
52
- var DEFAULT_APP_NAME = "my-expo-app";
52
+ var DEFAULT_APP_NAME = "myExpoApp";
53
+ var TITLE_TEXT = "create expo stack";
53
54
  var availablePackages = ["nativewind", "react-navigation", "expo-router"];
54
55
  var defaultOptions = {
55
56
  projectName: DEFAULT_APP_NAME,
@@ -79,7 +80,7 @@ var command = {
79
80
  askName = {
80
81
  type: 'input',
81
82
  name: 'name',
82
- message: 'What do you want to name your project? (my-expo-app)',
83
+ message: "What do you want to name your project? (".concat(DEFAULT_APP_NAME, "})"),
83
84
  };
84
85
  return [4 /*yield*/, ask(askName)];
85
86
  case 1:
@@ -153,7 +154,7 @@ var command = {
153
154
  switch (_a.label) {
154
155
  case 0:
155
156
  cesGradient = gradient(Object.values(poimandresTheme));
156
- return [4 /*yield*/, figlet.text('create expo stack', {
157
+ return [4 /*yield*/, figlet.text(TITLE_TEXT, {
157
158
  font: "Standard",
158
159
  horizontalLayout: "default",
159
160
  verticalLayout: "default",
@@ -207,7 +208,7 @@ var command = {
207
208
  askName = {
208
209
  type: 'input',
209
210
  name: 'name',
210
- message: 'What do you want to name your project? (myExpoApp)',
211
+ message: "What do you want to name your project? (".concat(DEFAULT_APP_NAME, ")"),
211
212
  };
212
213
  return [4 /*yield*/, ask(askName)];
213
214
  case 4:
@@ -434,4 +435,4 @@ var command = {
434
435
  }); },
435
436
  };
436
437
  exports.default = command;
437
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWV4cG8tc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY3JlYXRlLWV4cG8tc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBZ0Q7QUFDaEQsMENBQTZDO0FBQzdDLCtCQUFrQztBQUVsQyw4RUFBOEU7QUFFOUUsSUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7QUFRdkMsSUFBTSxpQkFBaUIsR0FBRyxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxhQUFhLENBQVUsQ0FBQztBQWdCckYsSUFBTSxjQUFjLEdBQWU7SUFDakMsV0FBVyxFQUFFLGdCQUFnQjtJQUM3QixRQUFRLEVBQUUsRUFBRTtJQUNaLEtBQUssRUFBRTtRQUNMLEtBQUssRUFBRSxLQUFLO1FBQ1osU0FBUyxFQUFFLEtBQUs7UUFDaEIsV0FBVyxFQUFFLElBQUk7S0FDbEI7Q0FDRixDQUFDO0FBRUYsSUFBTSxPQUFPLEdBQW1CO0lBQzlCLElBQUksRUFBRSxtQkFBbUI7SUFDekIsV0FBVyxFQUFFLG1FQUFtRTtJQUNoRixHQUFHLEVBQUUsVUFBTyxPQUFPO1FBUWpCLFNBQWUsTUFBTTs7Ozs7OzRCQUdmLFVBQVUsR0FBRyxjQUFjLENBQUM7NEJBRWhDLCtEQUErRDs0QkFDL0QsSUFBSSxLQUFLLEVBQUU7Z0NBQ1QsVUFBVSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7NkJBQ2hDO2lDQUdHLENBQUMsS0FBSyxFQUFOLHdCQUFNOzRCQUNGLE9BQU8sR0FBRztnQ0FDZCxJQUFJLEVBQUUsT0FBTztnQ0FDYixJQUFJLEVBQUUsTUFBTTtnQ0FDWixPQUFPLEVBQUUsc0RBQXNEOzZCQUNoRSxDQUFBOzRCQUNnQixxQkFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUE7OzRCQUEzQixTQUFTLENBQUEsU0FBa0IsQ0FBQSxLQUF2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
438
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWV4cG8tc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY3JlYXRlLWV4cG8tc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBZ0Q7QUFDaEQsMENBQTZDO0FBQzdDLCtCQUFrQztBQUVsQyw4RUFBOEU7QUFFOUUsSUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFFckMsSUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUM7QUFRdkMsSUFBTSxpQkFBaUIsR0FBRyxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxhQUFhLENBQVUsQ0FBQztBQWdCckYsSUFBTSxjQUFjLEdBQWU7SUFDakMsV0FBVyxFQUFFLGdCQUFnQjtJQUM3QixRQUFRLEVBQUUsRUFBRTtJQUNaLEtBQUssRUFBRTtRQUNMLEtBQUssRUFBRSxLQUFLO1FBQ1osU0FBUyxFQUFFLEtBQUs7UUFDaEIsV0FBVyxFQUFFLElBQUk7S0FDbEI7Q0FDRixDQUFDO0FBRUYsSUFBTSxPQUFPLEdBQW1CO0lBQzlCLElBQUksRUFBRSxtQkFBbUI7SUFDekIsV0FBVyxFQUFFLG1FQUFtRTtJQUNoRixHQUFHLEVBQUUsVUFBTyxPQUFPO1FBUWpCLFNBQWUsTUFBTTs7Ozs7OzRCQUdmLFVBQVUsR0FBRyxjQUFjLENBQUM7NEJBRWhDLCtEQUErRDs0QkFDL0QsSUFBSSxLQUFLLEVBQUU7Z0NBQ1QsVUFBVSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7NkJBQ2hDO2lDQUdHLENBQUMsS0FBSyxFQUFOLHdCQUFNOzRCQUNGLE9BQU8sR0FBRztnQ0FDZCxJQUFJLEVBQUUsT0FBTztnQ0FDYixJQUFJLEVBQUUsTUFBTTtnQ0FDWixPQUFPLEVBQUUsa0RBQTJDLGdCQUFnQixPQUFJOzZCQUN6RSxDQUFBOzRCQUNnQixxQkFBTSxHQUFHLENBQUMsT0FB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
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+
3
+ <% if (props.useNativewind) {%>
4
+ import { Text, View } from 'react-native';
5
+ <% } else {%>
6
+ import { StyleSheet, Text, View } from 'react-native';
7
+ <% } %>
8
+ import { StatusBar } from 'expo-status-bar';
9
+
10
+ <% if (props.useNativewind) {%>
11
+ export default function App() {
12
+ return (
13
+ <View className={styles.container} %>>
14
+ <Text>Open up App.tsx to start working on your app!</Text>
15
+ <StatusBar style="auto" />
16
+ </View>
17
+ );
18
+ }
19
+
20
+ const styles = {
21
+ container: 'flex flex-1 items-center justify-center bg-white',
22
+ };
23
+ <% } else {%>
24
+ export default function App() {
25
+ return (
26
+ <View style={styles.container} %>>
27
+ <Text>Open up App.tsx to start working on your app!</Text>
28
+ <StatusBar style="auto" />
29
+ </View>
30
+ );
31
+ }
32
+
33
+ const styles = StyleSheet.create({
34
+ container: {
35
+ flex: 1,
36
+ backgroundColor: '#fff',
37
+ alignItems: 'center',
38
+ justifyContent: 'center',
39
+ },
40
+ });
41
+ <% } %>
@@ -0,0 +1,43 @@
1
+ {
2
+ "expo": {
3
+ "name": "<%= props.projectName %>",
4
+ "slug": "<%= props.projectName %>",
5
+ "version": "1.0.0",
6
+ <% if (props.navigationPackage?.name === 'expo-router') { %>
7
+ "scheme": "<%= props.projectName %>",
8
+ "web": {
9
+ "bundler": "metro",
10
+ "output": "static",
11
+ "favicon": "./assets/favicon.png"
12
+ },
13
+ "plugins": ["expo-router"],
14
+ "experiments": {
15
+ "typedRoutes": true
16
+ },
17
+ <% } else { %>
18
+ "web": {
19
+ "favicon": "./assets/favicon.png"
20
+ },
21
+ <% } %>
22
+ "orientation": "portrait",
23
+ "icon": "./assets/icon.png",
24
+ "userInterfaceStyle": "light",
25
+ "splash": {
26
+ "image": "./assets/splash.png",
27
+ "resizeMode": "contain",
28
+ "backgroundColor": "#ffffff"
29
+ },
30
+ "assetBundlePatterns": [
31
+ "**/*"
32
+ ],
33
+ "ios": {
34
+ "supportsTablet": true
35
+ },
36
+ "android": {
37
+ "adaptiveIcon": {
38
+ "foregroundImage": "./assets/adaptive-icon.png",
39
+ "backgroundColor": "#ffffff"
40
+ }
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,17 @@
1
+ module.exports = function(api) {
2
+ api.cache(true);
3
+ let plugins = [];
4
+
5
+ <% if (props.useNativewind) { %>
6
+ plugins.push('nativewind/babel');
7
+ <% } %>
8
+
9
+ <% if (props.navigationPackage?.name === 'expo-router') { %>
10
+ plugins.push('expo-router/babel');
11
+ <% } %>
12
+
13
+ return {
14
+ presets: ['babel-preset-expo'],
15
+ plugins: plugins,
16
+ };
17
+ };
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "<%= props.projectName %>",
3
+ "version": "1.0.0",
4
+ "scripts": {
5
+ "android": "expo start --android",
6
+ "format": "eslint \"**/*.{js,jsx,ts,tsx}\" --fix && prettier \"**/*.{js,jsx,ts,tsx,json}\" --write",
7
+ "ios": "expo start --ios",
8
+ "start": "expo start",
9
+ "web": "expo start --web"
10
+ },
11
+ "dependencies": {
12
+ <% if (props.useNativewind) { %>
13
+ "nativewind": "^2.0.11",
14
+ <% } %>
15
+
16
+ <% if (props.navigationPackage?.type === "navigation") { %>
17
+ "@react-navigation/native": "^6.1.7",
18
+ "react-native-gesture-handler": "~2.12.0",
19
+ "react-native-safe-area-context": "4.6.3",
20
+ "react-native-screens": "~3.22.0",
21
+ <% } %>
22
+
23
+ <% if (props.navigationPackage?.name === "react-navigation") { %>
24
+ "@react-navigation/stack": "^6.3.17",
25
+ <% } %>
26
+
27
+ <% if (props.navigationPackage?.options === "tabs" && props.navigationPackage?.name === "react-navigation") { %>
28
+ "@react-navigation/bottom-tabs": "^6.5.8",
29
+ <% } %>
30
+
31
+ <% if (props.navigationPackage?.name === "expo-router") { %>
32
+ "@expo/vector-icons": "^13.0.0",
33
+ "expo-linking": "~5.0.2",
34
+ "expo-router": "^2.0.0",
35
+ "expo-system-ui": "~2.4.0",
36
+ "expo-web-browser": "~12.3.2",
37
+ "react-dom": "18.2.0",
38
+ "react-native-web": "~0.19.6",
39
+ <% } %>
40
+
41
+ "expo": "~49.0.11",
42
+ "expo-status-bar": "~1.6.0",
43
+ "react": "18.2.0",
44
+ "react-native": "0.72.4"
45
+ },
46
+ "devDependencies": {
47
+ "@babel/core": "^7.20.0",
48
+ "@types/react": "~18.2.14",
49
+ "@typescript-eslint/eslint-plugin": "^6.7.2",
50
+ "@typescript-eslint/parser": "^6.7.2",
51
+ "eslint": "^8.50.0",
52
+ "eslint-config-universe": "^12.0.0",
53
+ "prettier": "^3.0.3",
54
+ <% if (props.useNativewind) { %>
55
+ "tailwindcss": "3.3.2",
56
+ <% } %>
57
+ "typescript": "^5.1.3"
58
+ },
59
+ "eslintConfig": {
60
+ "extends": "universe/native"
61
+ },
62
+ <% if (props.navigationPackage?.name === 'expo-router') { %>
63
+ "resolutions": {
64
+ "metro": "0.76.0",
65
+ "metro-resolver": "0.76.0"
66
+ },
67
+ "overrides": {
68
+ "metro": "0.76.0",
69
+ "metro-resolver": "0.76.0"
70
+ },
71
+ <% } else { %>
72
+ "main": "node_modules/expo/AppEntry.js",
73
+ <% } %>
74
+ "private": true
75
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "extends": "expo/tsconfig.base",
3
+ "compilerOptions": {
4
+ "strict": true
5
+ <% if (props.navigationPackage?.name === 'expo-router') { %>
6
+ },
7
+ "include": [
8
+ "**/*.ts",
9
+ "**/*.tsx",
10
+ ".expo/types/**/*.ts",
11
+ "expo-env.d.ts"
12
+ ]
13
+ <% } else { %>
14
+ }
15
+ <% } %>
16
+ }
@@ -0,0 +1,4 @@
1
+ // @ts-ignore
2
+ /// <reference types="expo-router/types" />
3
+
4
+ // NOTE: This file should not be edited and should be in your git ignore
@@ -0,0 +1 @@
1
+ import "expo-router/entry";
@@ -0,0 +1,11 @@
1
+ // Learn more https://docs.expo.io/guides/customizing-metro
2
+ const { getDefaultConfig } = require('expo/metro-config');
3
+
4
+ /** @type {import('expo/metro-config').MetroConfig} */
5
+ // eslint-disable-next-line no-undef
6
+ const config = getDefaultConfig(__dirname, {
7
+ // [Web-only]: Enables CSS support in Metro.
8
+ isCSSEnabled: true,
9
+ });
10
+
11
+ module.exports = config;
@@ -0,0 +1,56 @@
1
+ import { Feather } from "@expo/vector-icons";
2
+ import { Stack, useRouter } from "expo-router";
3
+ <% if (props.useNativewind) { %>
4
+ import { Text, TouchableOpacity, View } from "react-native";
5
+ <% } else { %>
6
+ import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
7
+ <% } %>
8
+
9
+ export default function Layout() {
10
+ const router = useRouter();
11
+ <% if (props.useNativewind) { %>
12
+ const BackButton = () => (
13
+ <TouchableOpacity onPress={router.back}>
14
+ <View className={styles.backButton}>
15
+ <Feather name="chevron-left" size={16} color="#007AFF" />
16
+ <Text className={styles.backButtonText}>Back</Text>
17
+ </View>
18
+ </TouchableOpacity>
19
+ );
20
+ <% } else { %>
21
+ const BackButton = () => (
22
+ <TouchableOpacity onPress={router.back}>
23
+ <View style={styles.backButton}>
24
+ <Feather name="chevron-left" size={16} color="#007AFF" />
25
+ <Text style={styles.backButtonText}>Back</Text>
26
+ </View>
27
+ </TouchableOpacity>
28
+ );
29
+ <% } %>
30
+
31
+ return (
32
+ <Stack>
33
+ <Stack.Screen name="index" options={{ title: "Overview" }} />
34
+ <Stack.Screen name="details"
35
+ options={{ title: "Details", headerLeft: () => <BackButton /> }}
36
+ />
37
+ </Stack>
38
+ );
39
+ }
40
+
41
+ <% if (props.useNativewind) { %>
42
+ const styles = {
43
+ backButton: "flex-row",
44
+ backButtonText: "text-blue-500 ml-1",
45
+ };
46
+ <% } else { %>
47
+ const styles = StyleSheet.create({
48
+ backButton: {
49
+ flexDirection: "row",
50
+ },
51
+ backButtonText: {
52
+ color: "#007AFF",
53
+ marginLeft: 4,
54
+ },
55
+ });
56
+ <% } %>
@@ -0,0 +1,58 @@
1
+ <% if (props.useNativewind) { %>
2
+ import { View, Text } from "react-native";
3
+ <% } else { %>
4
+ import { StyleSheet, View, Text } from "react-native";
5
+ <% } %>
6
+ import { useLocalSearchParams } from "expo-router";
7
+
8
+ export default function Details() {
9
+ const { name } = useLocalSearchParams();
10
+ <% if (props.useNativewind) { %>
11
+ return (
12
+ <View className={styles.container}>
13
+ <View className={styles.main}>
14
+ <Text className={styles.title}>Details</Text>
15
+ <Text className={styles.subtitle}>Showing details for user {name}.</Text>
16
+ </View>
17
+ </View>
18
+ );
19
+ <% } else { %>
20
+ return (
21
+ <View style={styles.container}>
22
+ <View style={styles.main}>
23
+ <Text style={styles.title}>Details</Text>
24
+ <Text style={styles.subtitle}>Showing details for user {name}.</Text>
25
+ </View>
26
+ </View>
27
+ );
28
+ <% } %>
29
+ }
30
+
31
+ <% if (props.useNativewind) { %>
32
+ const styles = {
33
+ container: "flex-1 p-6",
34
+ main: "flex-1 max-w-[960]",
35
+ title: "text-[64px] font-bold",
36
+ subtitle: "text-4xl text-gray-700",
37
+ };
38
+ <% } else { %>
39
+ const styles = StyleSheet.create({
40
+ container: {
41
+ flex: 1,
42
+ padding: 24,
43
+ },
44
+ main: {
45
+ flex: 1,
46
+ maxWidth: 960,
47
+ marginHorizontal: "auto",
48
+ },
49
+ title: {
50
+ fontSize: 64,
51
+ fontWeight: "bold",
52
+ },
53
+ subtitle: {
54
+ fontSize: 36,
55
+ color: "#38434D",
56
+ },
57
+ });
58
+ <% } %>
@@ -0,0 +1,96 @@
1
+ <% if (props.useNativewind) { %>
2
+ import { Text, TouchableOpacity, View } from "react-native";
3
+ <% } else { %>
4
+ import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
5
+ <% } %>
6
+ import { Link } from "expo-router";
7
+
8
+ export default function Page() {
9
+ <% if (props.useNativewind) { %>
10
+ return (
11
+ <View className={styles.container}>
12
+ <View className={styles.main}>
13
+ <View>
14
+ <Text className={styles.title}>Hello World</Text>
15
+ <Text className={styles.subtitle}>This is the first page of your app.</Text>
16
+ </View>
17
+ <Link href={{ pathname: "/details", params: { name: "Dan" } }} asChild>
18
+ <TouchableOpacity className={styles.button} >
19
+ <Text className={styles.buttonText}>Show Details</Text>
20
+ </TouchableOpacity>
21
+ </Link>
22
+ </View>
23
+ </View>
24
+ );
25
+ <% } else { %>
26
+ return (
27
+ <View style={styles.container}>
28
+ <View style={styles.main}>
29
+ <View>
30
+ <Text style={styles.title}>Hello World</Text>
31
+ <Text style={styles.subtitle}>This is the first page of your app.</Text>
32
+ </View>
33
+ <Link href={{ pathname: "/details", params: { name: "Dan" } }} asChild>
34
+ <TouchableOpacity style={styles.button} >
35
+ <Text style={styles.buttonText}>Show Details</Text>
36
+ </TouchableOpacity>
37
+ </Link>
38
+ </View>
39
+ </View>
40
+ );
41
+ <% } %>
42
+ }
43
+
44
+ <% if (props.useNativewind) { %>
45
+ const styles = {
46
+ button: "items-center bg-indigo-500 rounded-[28px] shadow-md p-4",
47
+ buttonText: "text-white text-lg font-semibold text-center",
48
+ container: "flex-1 p-6",
49
+ main: "flex-1 max-w-[960] justify-between",
50
+ title: "text-[64px] font-bold",
51
+ subtitle: "text-4xl text-gray-700",
52
+ };
53
+ <% } else { %>
54
+ const styles = StyleSheet.create({
55
+ button: {
56
+ alignItems: "center",
57
+ backgroundColor: "#6366F1",
58
+ borderRadius: 24,
59
+ elevation: 5,
60
+ flexDirection: "row",
61
+ justifyContent: "center",
62
+ padding: 16,
63
+ shadowColor: "#000",
64
+ shadowOffset: {
65
+ height: 2,
66
+ width: 0
67
+ },
68
+ shadowOpacity: 0.25,
69
+ shadowRadius: 3.84
70
+ },
71
+ buttonText: {
72
+ color: "#FFFFFF",
73
+ fontSize: 16,
74
+ fontWeight: "600",
75
+ textAlign: "center",
76
+ },
77
+ container: {
78
+ flex: 1,
79
+ padding: 24,
80
+ },
81
+ main: {
82
+ flex: 1,
83
+ maxWidth: 960,
84
+ marginHorizontal: "auto",
85
+ justifyContent: "space-between",
86
+ },
87
+ title: {
88
+ fontSize: 64,
89
+ fontWeight: "bold",
90
+ },
91
+ subtitle: {
92
+ color: "#38434D",
93
+ fontSize: 36,
94
+ }
95
+ });
96
+ <% } %>
@@ -0,0 +1,57 @@
1
+ import FontAwesome from "@expo/vector-icons/FontAwesome";
2
+ import { Link, Tabs } from "expo-router";
3
+ import { Pressable, StyleSheet } from "react-native";
4
+
5
+ function TabBarIcon(props: {
6
+ name: React.ComponentProps<typeof FontAwesome>["name"];
7
+ color: string;
8
+ }) {
9
+ return <FontAwesome size={28} style={styles.tabBarIcon} {...props} />;
10
+ }
11
+
12
+ export default function TabLayout() {
13
+ return (
14
+ <Tabs
15
+ screenOptions={{
16
+ tabBarActiveTintColor: "black",
17
+ }}>
18
+ <Tabs.Screen
19
+ name="index"
20
+ options={{
21
+ title: "Tab One",
22
+ tabBarIcon: ({ color }) => <TabBarIcon name="code" color={color} />,
23
+ headerRight: () => (
24
+ <Link href="/modal" asChild>
25
+ <Pressable>
26
+ {({ pressed }) => (
27
+ <FontAwesome
28
+ name="info-circle"
29
+ size={25}
30
+ color="gray"
31
+ style={[styles.headerRight, { opacity: pressed ? 0.5 : 1 }]}
32
+ />
33
+ )}
34
+ </Pressable>
35
+ </Link>
36
+ ),
37
+ }}
38
+ />
39
+ <Tabs.Screen
40
+ name="two"
41
+ options={{
42
+ title: "Tab Two",
43
+ tabBarIcon: ({ color }) => <TabBarIcon name="code" color={color} />,
44
+ }}
45
+ />
46
+ </Tabs>
47
+ );
48
+ }
49
+
50
+ const styles = StyleSheet.create({
51
+ headerRight: {
52
+ marginRight: 15
53
+ },
54
+ tabBarIcon: {
55
+ marginBottom: -3
56
+ }
57
+ });
@@ -0,0 +1,52 @@
1
+ <% if (props.useNativewind) { %>
2
+ import { Text, View } from "react-native";
3
+ <% } else { %>
4
+ import { StyleSheet, Text, View } from "react-native";
5
+ <% } %>
6
+
7
+ import EditScreenInfo from "../../components/edit-screen-info";
8
+
9
+ export default function TabOneScreen() {
10
+ <% if (props.useNativewind) { %>
11
+ return (
12
+ <View className={styles.container}>
13
+ <Text className={styles.title}>Tab One</Text>
14
+ <View className={styles.separator} />
15
+ <EditScreenInfo path="app/(tabs)/index.tsx" />
16
+ </View>
17
+ );
18
+ <% } else { %>
19
+ return (
20
+ <View style={styles.container}>
21
+ <Text style={styles.title}>Tab One</Text>
22
+ <View style={styles.separator} />
23
+ <EditScreenInfo path="app/(tabs)/index.tsx" />
24
+ </View>
25
+ );
26
+ <% } %>
27
+ }
28
+
29
+ <% if (props.useNativewind) { %>
30
+ const styles = {
31
+ container: `items-center flex-1 justify-center`,
32
+ separator: `h-[1px] my-7 w-4/5 bg-gray-200`,
33
+ title: `text-xl font-bold`
34
+ };
35
+ <% } else { %>
36
+ const styles = StyleSheet.create({
37
+ container: {
38
+ alignItems: "center",
39
+ flex: 1,
40
+ justifyContent: "center",
41
+ },
42
+ separator: {
43
+ height: 1,
44
+ marginVertical: 30,
45
+ width: "80%",
46
+ },
47
+ title: {
48
+ fontSize: 20,
49
+ fontWeight: "bold",
50
+ }
51
+ });
52
+ <% } %>