create-expo-stack 2.12.2 → 2.12.3-next.23deeea

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 (38) hide show
  1. package/README.md +1 -1
  2. package/build/templates/base/App.tsx.ejs +4 -1
  3. package/build/templates/base/app.json.ejs +5 -2
  4. package/build/templates/base/babel.config.js.ejs +11 -1
  5. package/build/templates/base/package.json.ejs +23 -18
  6. package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/_layout.tsx.ejs +13 -1
  7. package/build/templates/packages/expo-router/drawer/app/(drawer)/_layout.tsx.ejs +57 -27
  8. package/build/templates/packages/expo-router/drawer/app/+html.tsx.ejs +6 -3
  9. package/build/templates/packages/expo-router/drawer/app/+not-found.tsx.ejs +4 -5
  10. package/build/templates/packages/expo-router/drawer/app/_layout.tsx.ejs +30 -5
  11. package/build/templates/packages/expo-router/index.js.ejs +4 -0
  12. package/build/templates/packages/expo-router/stack/app/+html.tsx.ejs +6 -3
  13. package/build/templates/packages/expo-router/stack/app/+not-found.tsx.ejs +8 -11
  14. package/build/templates/packages/expo-router/stack/app/_layout.tsx.ejs +19 -3
  15. package/build/templates/packages/expo-router/stack/app/index.tsx.ejs +18 -2
  16. package/build/templates/packages/expo-router/tabs/app/(tabs)/_layout.tsx.ejs +20 -3
  17. package/build/templates/packages/expo-router/tabs/app/(tabs)/index.tsx.ejs +19 -4
  18. package/build/templates/packages/expo-router/tabs/app/(tabs)/two.tsx.ejs +19 -4
  19. package/build/templates/packages/expo-router/tabs/app/+html.tsx.ejs +6 -3
  20. package/build/templates/packages/expo-router/tabs/app/+not-found.tsx.ejs +3 -7
  21. package/build/templates/packages/expo-router/tabs/app/_layout.tsx.ejs +21 -5
  22. package/build/templates/packages/react-navigation/navigation/drawer-navigator.tsx.ejs +28 -0
  23. package/build/templates/packages/react-navigation/navigation/index.tsx.ejs +67 -10
  24. package/build/templates/packages/react-navigation/navigation/tab-navigator.tsx.ejs +21 -3
  25. package/build/templates/packages/react-navigation/screens/details.tsx.ejs +20 -4
  26. package/build/templates/packages/react-navigation/screens/overview.tsx.ejs +20 -5
  27. package/build/templates/packages/unistyles/components/BackButton.tsx.ejs +22 -20
  28. package/build/templates/packages/unistyles/components/Button.tsx.ejs +31 -9
  29. package/build/templates/packages/unistyles/components/Container.tsx.ejs +13 -5
  30. package/build/templates/packages/unistyles/components/EditScreenInfo.tsx.ejs +52 -49
  31. package/build/templates/packages/unistyles/components/ScreenContent.tsx.ejs +33 -15
  32. package/build/templates/packages/unistyles/theme.ts.ejs +29 -56
  33. package/build/templates/packages/unistyles/unistyles.ts.ejs +17 -17
  34. package/build/types/utilities/systemCommand.d.ts +3 -2
  35. package/build/utilities/configureProjectFiles.js +2 -1
  36. package/build/utilities/printOutput.js +24 -2
  37. package/build/utilities/systemCommand.js +6 -3
  38. package/package.json +72 -72
package/README.md CHANGED
@@ -74,7 +74,7 @@ Each project is generated based on the results of the CLI, on a per-file basis.
74
74
  | NativeWind | UI Framework | v4.1 | Tailwind CSS for React Native |
75
75
  | Restyle | UI Framework | v2 | Theme-based styling library for React Native |
76
76
  | Tamagui | UI Framework | v1 | Universal UI with a smart optimizing compiler |
77
- | Unistyles | UI Framework | v2 | Superset of StyleSheet |
77
+ | Unistyles | UI Framework | v3 | Superset of StyleSheet |
78
78
  | Safe Area Context | Safe Area Library | v4 | Safe area support |
79
79
  | React Native Web | Web Support | v0.19 | React Native for Web |
80
80
  | Firebase | Backend and Auth | v10 | Cloud-hosted NoSQL database from Google |
@@ -1,3 +1,6 @@
1
+ <% if (props.stylingPackage?.name === "unistyles") { %>
2
+ import './unistyles';
3
+ <% } %>
1
4
  import { ScreenContent } from 'components/ScreenContent';
2
5
  import { StatusBar } from 'expo-status-bar';
3
6
 
@@ -29,7 +32,7 @@ import { StatusBar } from 'expo-status-bar';
29
32
  <% } %>
30
33
 
31
34
  <% if (props.stylingPackage?.name === "restyle") {%>
32
- export default function App() {
35
+ export default function App() {
33
36
  return (
34
37
  <ThemeProvider theme={theme}>
35
38
  <ScreenContent title="Home" path="App.tsx">
@@ -3,6 +3,9 @@
3
3
  "name": "<%= props.projectName %>",
4
4
  "slug": "<%= props.projectName %>",
5
5
  "version": "1.0.0",
6
+ <% if (props.stylingPackage?.name === "unistyles") { %>
7
+ "newArchEnabled": true,
8
+ <% } %>
6
9
  <% if (props.navigationPackage?.name === 'expo-router') { %>
7
10
  "scheme": "<%= props.projectName %>",
8
11
  "web": {
@@ -58,7 +61,7 @@
58
61
  <% } %>
59
62
  "orientation": "portrait",
60
63
  "icon": "./assets/icon.png",
61
- <% if (props.stylingPackage?.name === "nativewindui") { %>
64
+ <% if (props.stylingPackage?.name === "nativewindui" || props.stylingPackage?.name === "unistyles") { %>
62
65
  "userInterfaceStyle": "automatic",
63
66
  <% } else { %>
64
67
  "userInterfaceStyle": "light",
@@ -81,4 +84,4 @@
81
84
  }
82
85
  }
83
86
  }
84
- }
87
+ }
@@ -1,7 +1,7 @@
1
1
  module.exports = function(api) {
2
2
  api.cache(true);
3
3
  let plugins = [];
4
-
4
+
5
5
  <% if (props.stylingPackage?.name === "tamagui") { %>
6
6
  plugins.push([
7
7
  '@tamagui/babel-plugin',
@@ -12,6 +12,16 @@ module.exports = function(api) {
12
12
  ]);
13
13
  <% } %>
14
14
 
15
+ <% if (props.stylingPackage?.name === "unistyles") { %>
16
+ plugins.push([
17
+ 'react-native-unistyles/plugin',
18
+ {
19
+ autoProcessRoot: 'app',
20
+ autoProcessImports: ['~/components']
21
+ }
22
+ ]);
23
+ <% } %>
24
+
15
25
  <% if (props.navigationPackage?.options.type === "drawer + tabs") { %>
16
26
  plugins.push('react-native-reanimated/plugin');
17
27
  <% } %>
@@ -1,9 +1,11 @@
1
1
  {
2
2
  "name": "<%= props.projectName %>",
3
3
  "version": "1.0.0",
4
- <% if (props.navigationPackage?.name === "expo-router") { %>
5
- "main": "expo-router/entry",
6
- <% } %>
4
+ <% if (props.navigationPackage?.name === "expo-router" && props.stylingPackage?.name === 'unistyles') { %>
5
+ "main": "index.js",
6
+ <% } else if (props.navigationPackage?.name === "expo-router") { %>
7
+ "main": "expo-router/entry",
8
+ <% } %>
7
9
  "scripts": {
8
10
  <% if (props.flags?.eas) { %>
9
11
  "start": "expo start --dev-client",
@@ -71,22 +73,25 @@
71
73
  <% if (props.stateManagementPackage?.name === "zustand") { %>
72
74
  "zustand": "^4.5.1",
73
75
  <% } %>
74
-
76
+
75
77
  <% if (props.stylingPackage?.name === "restyle") { %>
76
78
  "@shopify/restyle": "^2.4.2",
77
79
  <% } %>
78
80
 
79
81
  <% if (props.stylingPackage?.name === "tamagui") { %>
80
- "tamagui": "1.74.8",
81
- "@tamagui/font-inter": "1.74.8",
82
- "@tamagui/shorthands": "1.74.8",
83
- "@tamagui/themes": "1.74.8",
84
- "@tamagui/react-native-media-driver": "1.74.8",
85
- "expo-font": "~12.0.5",
82
+ "@tamagui/font-inter": "^1.125.8",
83
+ "@tamagui/react-native-media-driver": "^1.125.8",
84
+ "@tamagui/shorthands": "^1.125.8",
85
+ "@tamagui/themes": "^1.125.8",
86
+ "tamagui": "^1.125.8",
87
+ "@tamagui/animations-react-native": "^1.125.8",
88
+ "expo-font": "~13.0.3",
86
89
  <% } %>
87
90
 
88
91
  <% if (props.stylingPackage?.name === "unistyles") { %>
89
- "react-native-unistyles": "^2.1.1",
92
+ "react-native-unistyles": "3.0.0-nightly-20250220",
93
+ "react-native-nitro-modules": "0.22.1",
94
+ "react-native-edge-to-edge": "1.4.3",
90
95
  <% } %>
91
96
 
92
97
  <% if (props.navigationPackage?.type === "navigation") { %>
@@ -121,12 +126,12 @@
121
126
  "@react-navigation/drawer": "^7.0.0",
122
127
  "@react-navigation/bottom-tabs": "^7.0.5",
123
128
  <% } %>
124
-
129
+
125
130
  <% if (props.navigationPackage?.name === "expo-router") { %>
126
131
  "@expo/vector-icons": "^14.0.0",
127
132
  "expo-linking": "~6.3.1",
128
- "expo-router": "~4.0.6",
129
- "expo-constants": "~16.0.1",
133
+ "expo-router": "~4.0.6",
134
+ "expo-constants": "~16.0.1",
130
135
  "expo-system-ui": "~3.0.4",
131
136
  "expo-web-browser": "~13.0.3",
132
137
  "react-dom": "18.3.1",
@@ -142,15 +147,15 @@
142
147
  <% if (props.authenticationPackage?.name === "firebase") { %>
143
148
  "firebase": "^10.5.2",
144
149
  <% } %>
145
-
150
+
146
151
  <% if (props.internalizationPackage?.name === "i18next") { %>
147
152
  "i18next": "^23.7.20",
148
153
  "react-i18next": "^14.0.1",
149
154
  "expo-localization": "~14.8.3",
150
- <% } %>
155
+ <% } %>
151
156
  <% if (props.flags?.eas || props.stylingPackage?.name === "nativewindui") { %>
152
157
  "expo-dev-client": "~5.0.4",
153
- "expo-dev-launcher": "^5.0.17",
158
+ "expo-dev-launcher": "^5.0.17",
154
159
  <% } %>
155
160
 
156
161
  "expo": "^52.0.7",
@@ -175,7 +180,7 @@
175
180
  "prettier-plugin-tailwindcss": "^0.5.11",
176
181
  <% } %>
177
182
  <% if (props.stylingPackage?.name === "tamagui") { %>
178
- "@tamagui/babel-plugin": "1.74.8",
183
+ "@tamagui/babel-plugin": "^1.125.8",
179
184
  <% } %>
180
185
  "typescript": "~5.3.3"
181
186
  },
@@ -1,13 +1,25 @@
1
1
  import { Tabs } from 'expo-router';
2
2
  import { TabBarIcon } from '~/components/TabBarIcon';
3
-
3
+ <% if (props.stylingPackage?.name === "unistyles") { %>
4
+ import { useUnistyles } from "react-native-unistyles";
5
+ <% } %>
4
6
 
5
7
  export default function TabLayout() {
8
+ <% if (props.stylingPackage?.name === "unistyles") { %>
9
+ const { theme } = useUnistyles();
10
+ <% } %>
6
11
  return (
7
12
  <Tabs
8
13
  screenOptions={{
9
14
  headerShown: false,
15
+ <% if (props.stylingPackage?.name === "unistyles") { %>
16
+ tabBarActiveTintColor: theme.colors.astral,
17
+ tabBarStyle: {
18
+ backgroundColor: theme.colors.background,
19
+ }
20
+ <% } else { %>
10
21
  tabBarActiveTintColor: 'black',
22
+ <% } %>
11
23
  }}>
12
24
  <Tabs.Screen
13
25
  name="index"
@@ -1,35 +1,65 @@
1
1
  import { Ionicons, MaterialIcons } from '@expo/vector-icons';
2
2
  import { Link } from 'expo-router';
3
3
  import { Drawer } from 'expo-router/drawer';
4
+ <% if (props.stylingPackage?.name === "unistyles") { %>
5
+ import { useUnistyles } from "react-native-unistyles";
6
+ <% } %>
4
7
 
5
8
  import { HeaderButton } from '../../components/HeaderButton';
6
9
 
7
- const DrawerLayout = () => (
8
- <Drawer>
9
- <Drawer.Screen
10
- name="index"
11
- options={{
12
- headerTitle: 'Home',
13
- drawerLabel: 'Home',
14
- drawerIcon: ({ size, color }) => <Ionicons name="home-outline" size={size} color={color} />,
15
- }}
16
- />
17
- <Drawer.Screen
18
- name="(tabs)"
19
- options={{
20
- headerTitle: 'Tabs',
21
- drawerLabel: 'Tabs',
22
- drawerIcon: ({ size, color }) => (
23
- <MaterialIcons name="border-bottom" size={size} color={color} />
24
- ),
25
- headerRight: () => (
26
- <Link href="/modal" asChild>
27
- <HeaderButton />
28
- </Link>
29
- ),
30
- }}
31
- />
32
- </Drawer>
33
- );
10
+ const DrawerLayout = () => {
11
+ <% if (props.stylingPackage?.name === "unistyles") { %>
12
+ const { theme } = useUnistyles();
13
+ <% } %>
14
+
15
+ return (
16
+ <% if (props.stylingPackage?.name === "unistyles") { %>
17
+ <Drawer
18
+ screenOptions={{
19
+ headerStyle: {
20
+ backgroundColor: theme.colors.background,
21
+ },
22
+ headerTitleStyle: {
23
+ color: theme.colors.typography,
24
+ },
25
+ headerTintColor: theme.colors.typography,
26
+ drawerStyle: {
27
+ backgroundColor: theme.colors.background,
28
+ },
29
+ drawerLabelStyle: {
30
+ color: theme.colors.typography,
31
+ },
32
+ drawerInactiveTintColor: theme.colors.typography,
33
+ }}
34
+ >
35
+ <% } else { %>
36
+ <Drawer>
37
+ <% } %>
38
+ <Drawer.Screen
39
+ name="index"
40
+ options={{
41
+ headerTitle: 'Home',
42
+ drawerLabel: 'Home',
43
+ drawerIcon: ({ size, color }) => <Ionicons name="home-outline" size={size} color={color} />,
44
+ }}
45
+ />
46
+ <Drawer.Screen
47
+ name="(tabs)"
48
+ options={{
49
+ headerTitle: 'Tabs',
50
+ drawerLabel: 'Tabs',
51
+ drawerIcon: ({ size, color }) => (
52
+ <MaterialIcons name="border-bottom" size={size} color={color} />
53
+ ),
54
+ headerRight: () => (
55
+ <Link href="/modal" asChild>
56
+ <HeaderButton />
57
+ </Link>
58
+ ),
59
+ }}
60
+ />
61
+ </Drawer>
62
+ );
63
+ }
34
64
 
35
65
  export default DrawerLayout;
@@ -1,4 +1,7 @@
1
1
  import { ScrollViewStyleReset } from 'expo-router/html';
2
+ <% if (props.stylingPackage?.name === "unistyles") { %>
3
+ import '../unistyles';
4
+ <% } %>
2
5
 
3
6
  // This file is web-only and used to configure the root HTML for every
4
7
  // web page during static rendering.
@@ -11,7 +14,7 @@ export default function Root({ children }: { children: React.ReactNode }) {
11
14
  <meta charSet="utf-8" />
12
15
  <meta httpEquiv="X-UA-Compatible" content="IE=edge" />
13
16
 
14
- {/*
17
+ {/*
15
18
  This viewport disables scaling which makes the mobile website act more like a native app.
16
19
  However this does reduce built-in accessibility. If you want to enable scaling, use this instead:
17
20
  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
@@ -20,8 +23,8 @@ export default function Root({ children }: { children: React.ReactNode }) {
20
23
  name="viewport"
21
24
  content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1.00001,viewport-fit=cover"
22
25
  />
23
- {/*
24
- Disable body scrolling on web. This makes ScrollView components work closer to how they do on native.
26
+ {/*
27
+ Disable body scrolling on web. This makes ScrollView components work closer to how they do on native.
25
28
  However, body scrolling is often nice to have for mobile web. If you want to enable it, remove this line.
26
29
  */}
27
30
  <ScrollViewStyleReset />
@@ -4,7 +4,7 @@ import { Link, Stack } from 'expo-router';
4
4
 
5
5
  import { Container } from '~/components/Container';
6
6
  <% } else if (props.stylingPackage?.name === "unistyles") { %>
7
- import { createStyleSheet, useStyles } from 'react-native-unistyles'
7
+ import { StyleSheet } from 'react-native-unistyles'
8
8
  import { Text } from 'react-native';
9
9
 
10
10
  import { Container } from '~/components/Container';
@@ -24,8 +24,6 @@ import { Link, Stack } from 'expo-router';
24
24
  export default function NotFoundScreen() {
25
25
  <% if (props.stylingPackage?.name === "restyle") { %>
26
26
  const styles = useStyles();
27
- <% } else if (props.stylingPackage?.name === "unistyles") {%>
28
- const { styles } = useStyles(stylesheet);
29
27
  <% } %>
30
28
 
31
29
  return (
@@ -84,10 +82,11 @@ export default function NotFoundScreen() {
84
82
  linkText: `text-base text-[#2e78b7]`,
85
83
  };
86
84
  <% } else if (props.stylingPackage?.name === "unistyles") { %>
87
- const stylesheet = createStyleSheet((theme) => ({
85
+ const styles = StyleSheet.create((theme) => ({
88
86
  title: {
89
87
  fontSize: 20,
90
88
  fontWeight: 'bold',
89
+ color: theme.colors.typography,
91
90
  },
92
91
  link: {
93
92
  marginTop: 16,
@@ -120,4 +119,4 @@ export default function NotFoundScreen() {
120
119
  paddingVertical: theme.spacing.m_16,
121
120
  },
122
121
  }));
123
- <% } %>
122
+ <% } %>
@@ -4,9 +4,6 @@
4
4
  import '../global.css';
5
5
  import 'expo-dev-client';
6
6
  <% } %>
7
- <% if (props.stylingPackage?.name === "unistyles") { %>
8
- import '../unistyles';
9
- <% } %>
10
7
 
11
8
  <% if (props.internalizationPackage?.name === "i18next") { %>
12
9
  import '../translation';
@@ -27,10 +24,14 @@ import { Stack } from 'expo-router';
27
24
  SplashScreen.preventAutoHideAsync();
28
25
  <% } else if (props.stylingPackage?.name === "restyle") { %>
29
26
  import { ThemeProvider } from '@shopify/restyle';
30
-
27
+
31
28
  import { theme } from '../theme';
32
29
  <% } %>
33
30
 
31
+ <% if (props.stylingPackage?.name === "unistyles") { %>
32
+ import { useUnistyles } from "react-native-unistyles";
33
+ <% } %>
34
+
34
35
  <% if (props.analyticsPackage?.name === "vexo-analytics") { %>
35
36
  import { vexo } from 'vexo-analytics';
36
37
 
@@ -57,6 +58,9 @@ export default function RootLayout() {
57
58
 
58
59
  if (!loaded) return null;
59
60
  <% } %>
61
+ <% if (props.stylingPackage?.name === "unistyles") { %>
62
+ const { theme } = useUnistyles();
63
+ <% } %>
60
64
 
61
65
  return (
62
66
  <% if (props.stylingPackage?.name === "tamagui") { %>
@@ -65,7 +69,28 @@ export default function RootLayout() {
65
69
  <ThemeProvider theme={theme}>
66
70
  <% } %>
67
71
  <GestureHandlerRootView style={{ flex: 1 }}>
72
+ <% if (props.stylingPackage?.name === "unistyles") { %>
73
+ <Stack
74
+ screenOptions={{
75
+ headerStyle: {
76
+ backgroundColor: theme.colors.background,
77
+ },
78
+ headerTitleStyle: {
79
+ color: theme.colors.typography,
80
+ },
81
+ headerTintColor: theme.colors.typography,
82
+ drawerStyle: {
83
+ backgroundColor: theme.colors.background,
84
+ },
85
+ drawerLabelStyle: {
86
+ color: theme.colors.typography,
87
+ },
88
+ drawerInactiveTintColor: theme.colors.typography,
89
+ }}
90
+ >
91
+ <% } else { %>
68
92
  <Stack>
93
+ <% } %>
69
94
  <Stack.Screen name="(drawer)" options={{ headerShown: false }} />
70
95
  <Stack.Screen name="modal" options={{ title: 'Modal', presentation: 'modal' }} />
71
96
  </Stack>
@@ -76,4 +101,4 @@ export default function RootLayout() {
76
101
  </ThemeProvider>
77
102
  <% } %>
78
103
  );
79
- }
104
+ }
@@ -0,0 +1,4 @@
1
+ <% if (props.stylingPackage?.name === 'unistyles') { %>
2
+ import 'expo-router/entry';
3
+ import './unistyles';
4
+ <% } %>
@@ -1,4 +1,7 @@
1
1
  import { ScrollViewStyleReset } from 'expo-router/html';
2
+ <% if (props.stylingPackage?.name === "unistyles") { %>
3
+ import '../unistyles';
4
+ <% } %>
2
5
 
3
6
  // This file is web-only and used to configure the root HTML for every
4
7
  // web page during static rendering.
@@ -11,7 +14,7 @@ export default function Root({ children }: { children: React.ReactNode }) {
11
14
  <meta charSet="utf-8" />
12
15
  <meta httpEquiv="X-UA-Compatible" content="IE=edge" />
13
16
 
14
- {/*
17
+ {/*
15
18
  This viewport disables scaling which makes the mobile website act more like a native app.
16
19
  However this does reduce built-in accessibility. If you want to enable scaling, use this instead:
17
20
  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
@@ -20,8 +23,8 @@ export default function Root({ children }: { children: React.ReactNode }) {
20
23
  name="viewport"
21
24
  content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1.00001,viewport-fit=cover"
22
25
  />
23
- {/*
24
- Disable body scrolling on web. This makes ScrollView components work closer to how they do on native.
26
+ {/*
27
+ Disable body scrolling on web. This makes ScrollView components work closer to how they do on native.
25
28
  However, body scrolling is often nice to have for mobile web. If you want to enable it, remove this line.
26
29
  */}
27
30
  <ScrollViewStyleReset />
@@ -4,7 +4,7 @@ import { Link, Stack } from 'expo-router';
4
4
 
5
5
  import { Container } from '~/components/Container';
6
6
  <% } else if (props.stylingPackage?.name === "unistyles") { %>
7
- import { createStyleSheet, useStyles } from 'react-native-unistyles'
7
+ import { StyleSheet } from 'react-native-unistyles'
8
8
  import { Text } from 'react-native';
9
9
 
10
10
  import { Container } from '~/components/Container';
@@ -26,10 +26,6 @@ export default function NotFoundScreen() {
26
26
  const styles = useStyles();
27
27
  <% } %>
28
28
 
29
- <% if (props.stylingPackage?.name === "unistyles") {%>
30
- const { styles } = useStyles(stylesheet)
31
- <% } %>
32
-
33
29
  return (
34
30
  <% if (props.stylingPackage?.name === "nativewind") {%>
35
31
  <>
@@ -86,10 +82,11 @@ export default function NotFoundScreen() {
86
82
  linkText: `text-base text-[#2e78b7]`,
87
83
  };
88
84
  <% } else if (props.stylingPackage?.name === "unistyles") { %>
89
- const stylesheet = createStyleSheet({
85
+ const styles = StyleSheet.create((theme) => ({
90
86
  title: {
91
87
  fontSize: 20,
92
88
  fontWeight: 'bold',
89
+ color: theme.colors.typography,
93
90
  },
94
91
  link: {
95
92
  marginTop: 16,
@@ -97,11 +94,11 @@ export default function NotFoundScreen() {
97
94
  },
98
95
  linkText: {
99
96
  fontSize: 14,
100
- color: '#2e78b7',
97
+ color: theme.colors.astral
101
98
  },
102
- });
99
+ }));
103
100
  <% } else if (props.stylingPackage?.name === "stylesheet") { %>
104
- const styles = StyleSheet.create({
101
+ const styles = StyleSheet.create({
105
102
  title: {
106
103
  fontSize: 20,
107
104
  fontWeight: 'bold',
@@ -114,7 +111,7 @@ export default function NotFoundScreen() {
114
111
  fontSize: 14,
115
112
  color: '#2e78b7',
116
113
  },
117
- });
114
+ });
118
115
  <% } else if (props.stylingPackage?.name === "restyle") { %>
119
116
  const useStyles = makeStyles((theme) => ({
120
117
  link: {
@@ -122,4 +119,4 @@ export default function NotFoundScreen() {
122
119
  paddingVertical: theme.spacing.m_16,
123
120
  },
124
121
  }));
125
- <% } %>
122
+ <% } %>
@@ -3,7 +3,7 @@
3
3
  <% } %>
4
4
 
5
5
  <% if (props.stylingPackage?.name === "unistyles") { %>
6
- import '../unistyles';
6
+ import { useUnistyles } from "react-native-unistyles";
7
7
  <% } %>
8
8
  <% if (props.internalizationPackage?.name === "i18next") { %>
9
9
  import '../translation';
@@ -29,7 +29,9 @@ import '../unistyles';
29
29
  <% } %>
30
30
 
31
31
  export default function Layout() {
32
-
32
+ <% if (props.stylingPackage?.name === "unistyles") { %>
33
+ const { theme } = useUnistyles();
34
+ <% } %>
33
35
  <% if (props.stylingPackage?.name === "tamagui") { %>
34
36
  const [loaded] = useFonts({
35
37
  Inter: require("@tamagui/font-inter/otf/Inter-Medium.otf"),
@@ -51,7 +53,21 @@ export default function Layout() {
51
53
  <% } else if (props.stylingPackage?.name === "restyle") { %>
52
54
  <ThemeProvider theme={theme}>
53
55
  <% } %>
54
- <Stack />
56
+ <% if (props.stylingPackage?.name === "unistyles") { %>
57
+ <Stack
58
+ screenOptions={{
59
+ headerStyle: {
60
+ backgroundColor: theme.colors.background,
61
+ },
62
+ headerTitleStyle: {
63
+ color: theme.colors.typography,
64
+ },
65
+ headerTintColor: theme.colors.typography
66
+ }}
67
+ />
68
+ <% } else { %>
69
+ <Stack />
70
+ <% } %>
55
71
  <% if (props.stylingPackage?.name === "tamagui") { %>
56
72
  </TamaguiProvider>
57
73
  <% } else if (props.stylingPackage?.name === "restyle") { %>
@@ -1,5 +1,9 @@
1
1
  import { Stack, Link } from 'expo-router';
2
2
 
3
+ <% if (props.stylingPackage?.name === "unistyles") { %>
4
+ import { StyleSheet } from 'react-native-unistyles';
5
+ <% } %>
6
+
3
7
  import { Button } from '~/components/Button';
4
8
  import { Container } from '~/components/Container';
5
9
  import { ScreenContent } from '~/components/ScreenContent';
@@ -19,9 +23,21 @@ export default function Home() {
19
23
  <% } %>
20
24
  </ScreenContent>
21
25
  <Link href={{ pathname: '/details', params: { name: 'Dan' } }} asChild>
22
- <Button title="Show Details" />
26
+ <% if (props.stylingPackage?.name === "unistyles") { %>
27
+ <Button title="Show Details" style={styles.button} />
28
+ <% } else { %>
29
+ <Button title="Show Details" />
30
+ <% } %>
23
31
  </Link>
24
32
  </Container>
25
33
  </>
26
34
  );
27
- }
35
+ }
36
+
37
+ <% if (props.stylingPackage?.name === "unistyles") { %>
38
+ const styles = StyleSheet.create((theme) => ({
39
+ button: {
40
+ marginHorizontal: theme.margins.xl,
41
+ },
42
+ }));
43
+ <% } %>
@@ -1,14 +1,31 @@
1
1
  import { Link, Tabs } from "expo-router";
2
+ <% if (props.stylingPackage?.name === "unistyles") { %>
3
+ import { useUnistyles } from "react-native-unistyles";
4
+ <% } %>
2
5
  import { HeaderButton } from '../../components/HeaderButton';
3
6
  import { TabBarIcon } from '../../components/TabBarIcon';
4
7
 
5
-
6
-
7
8
  export default function TabLayout() {
9
+ <% if (props.stylingPackage?.name === "unistyles") { %>
10
+ const { theme } = useUnistyles();
11
+ <% } %>
8
12
  return (
9
13
  <Tabs
10
14
  screenOptions={{
11
- tabBarActiveTintColor: 'black',
15
+ <% if (props.stylingPackage?.name === "unistyles") { %>
16
+ headerStyle: {
17
+ backgroundColor: theme.colors.background,
18
+ },
19
+ headerTitleStyle: {
20
+ color: theme.colors.typography,
21
+ },
22
+ tabBarActiveTintColor: theme.colors.astral,
23
+ tabBarStyle: {
24
+ backgroundColor: theme.colors.background,
25
+ },
26
+ <% } else { %>
27
+ tabBarActiveTintColor: 'black',
28
+ <% } %>
12
29
  }}>
13
30
  <Tabs.Screen
14
31
  name='index'