create-better-t-stack 2.43.1 → 2.45.0

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 (71) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/index.d.ts +38 -1
  3. package/dist/index.js +1 -1
  4. package/dist/{src-CLCbHMKK.js → src-Cve0nldx.js} +102 -17
  5. package/package.json +3 -1
  6. package/templates/auth/better-auth/native/native-base/lib/auth-client.ts.hbs +3 -2
  7. package/templates/auth/better-auth/server/base/src/lib/auth.ts.hbs +5 -5
  8. package/templates/backend/server/next/package.json.hbs +3 -3
  9. package/templates/frontend/native/native-base/assets/images/android-icon-background.png +0 -0
  10. package/templates/frontend/native/native-base/assets/images/android-icon-foreground.png +0 -0
  11. package/templates/frontend/native/native-base/assets/images/android-icon-monochrome.png +0 -0
  12. package/templates/frontend/native/native-base/assets/images/favicon.png +0 -0
  13. package/templates/frontend/native/native-base/assets/images/icon.png +0 -0
  14. package/templates/frontend/native/native-base/assets/images/partial-react-logo.png +0 -0
  15. package/templates/frontend/native/native-base/assets/images/react-logo.png +0 -0
  16. package/templates/frontend/native/native-base/assets/images/react-logo@2x.png +0 -0
  17. package/templates/frontend/native/native-base/assets/images/react-logo@3x.png +0 -0
  18. package/templates/frontend/native/nativewind/app/(drawer)/(tabs)/{_layout.tsx → _layout.tsx.hbs} +3 -3
  19. package/templates/frontend/native/nativewind/app/{+not-found.tsx → +not-found.tsx.hbs} +1 -1
  20. package/templates/frontend/native/nativewind/app.json.hbs +49 -0
  21. package/templates/frontend/native/nativewind/babel.config.js.hbs +14 -0
  22. package/templates/frontend/native/nativewind/components/{container.tsx → container.tsx.hbs} +1 -1
  23. package/templates/frontend/native/nativewind/components/{header-button.tsx → header-button.tsx.hbs} +1 -1
  24. package/templates/frontend/native/{unistyles/components/tabbar-icon.tsx → nativewind/components/tabbar-icon.tsx.hbs} +1 -1
  25. package/templates/frontend/native/nativewind/metro.config.js.hbs +31 -0
  26. package/templates/frontend/native/nativewind/package.json.hbs +23 -21
  27. package/templates/frontend/native/nativewind/tailwind.config.js.hbs +59 -0
  28. package/templates/frontend/native/unistyles/app/(drawer)/(tabs)/{_layout.tsx → _layout.tsx.hbs} +3 -3
  29. package/templates/frontend/native/unistyles/app/(drawer)/index.tsx.hbs +1 -3
  30. package/templates/frontend/native/unistyles/app/{+not-found.tsx → +not-found.tsx.hbs} +2 -2
  31. package/templates/frontend/native/unistyles/app/_layout.tsx.hbs +2 -2
  32. package/templates/frontend/native/unistyles/app.json.hbs +49 -0
  33. package/templates/frontend/native/unistyles/babel.config.js.hbs +21 -0
  34. package/templates/frontend/native/unistyles/components/{container.tsx → container.tsx.hbs} +1 -1
  35. package/templates/frontend/native/unistyles/components/{header-button.tsx → header-button.tsx.hbs} +1 -1
  36. package/templates/frontend/native/{nativewind/components/tabbar-icon.tsx → unistyles/components/tabbar-icon.tsx.hbs} +1 -1
  37. package/templates/frontend/native/unistyles/metro.config.js.hbs +5 -0
  38. package/templates/frontend/native/unistyles/package.json.hbs +29 -28
  39. package/templates/frontend/native/unistyles/theme.ts.hbs +98 -0
  40. package/templates/frontend/react/next/package.json.hbs +3 -3
  41. package/templates/frontend/react/react-router/package.json.hbs +3 -3
  42. package/templates/frontend/react/tanstack-router/package.json.hbs +3 -3
  43. package/templates/frontend/react/tanstack-start/package.json.hbs +3 -3
  44. package/templates/frontend/native/native-base/assets/favicon.png +0 -0
  45. package/templates/frontend/native/native-base/assets/icon.png +0 -0
  46. package/templates/frontend/native/native-base/assets/splash.png +0 -0
  47. package/templates/frontend/native/nativewind/app/+html.tsx +0 -47
  48. package/templates/frontend/native/nativewind/app-env.d.ts +0 -2
  49. package/templates/frontend/native/nativewind/app.json +0 -46
  50. package/templates/frontend/native/nativewind/babel.config.js +0 -11
  51. package/templates/frontend/native/nativewind/metro.config.js +0 -59
  52. package/templates/frontend/native/nativewind/tailwind.config.js +0 -59
  53. package/templates/frontend/native/unistyles/app/+html.tsx +0 -48
  54. package/templates/frontend/native/unistyles/app.json +0 -44
  55. package/templates/frontend/native/unistyles/babel.config.js +0 -21
  56. package/templates/frontend/native/unistyles/expo-env.d.ts +0 -3
  57. package/templates/frontend/native/unistyles/metro.config.js +0 -20
  58. package/templates/frontend/native/unistyles/theme.ts +0 -98
  59. /package/templates/frontend/native/native-base/assets/{adaptive-icon.png → images/splash-icon.png} +0 -0
  60. /package/templates/frontend/native/nativewind/app/(drawer)/(tabs)/{index.tsx → index.tsx.hbs} +0 -0
  61. /package/templates/frontend/native/nativewind/app/(drawer)/(tabs)/{two.tsx → two.tsx.hbs} +0 -0
  62. /package/templates/frontend/native/nativewind/app/{modal.tsx → modal.tsx.hbs} +0 -0
  63. /package/templates/frontend/native/nativewind/lib/{android-navigation-bar.tsx → android-navigation-bar.tsx.hbs} +0 -0
  64. /package/templates/frontend/native/nativewind/lib/{constants.ts → constants.ts.hbs} +0 -0
  65. /package/templates/frontend/native/nativewind/lib/{use-color-scheme.ts → use-color-scheme.ts.hbs} +0 -0
  66. /package/templates/frontend/native/unistyles/app/(drawer)/(tabs)/{index.tsx → index.tsx.hbs} +0 -0
  67. /package/templates/frontend/native/unistyles/app/(drawer)/(tabs)/{two.tsx → two.tsx.hbs} +0 -0
  68. /package/templates/frontend/native/unistyles/app/{modal.tsx → modal.tsx.hbs} +0 -0
  69. /package/templates/frontend/native/unistyles/{breakpoints.ts → breakpoints.ts.hbs} +0 -0
  70. /package/templates/frontend/native/unistyles/{index.js → index.js.hbs} +0 -0
  71. /package/templates/frontend/native/unistyles/{unistyles.ts → unistyles.ts.hbs} +0 -0
@@ -46,9 +46,7 @@ export default function Home() {
46
46
  contentContainerStyle={styles.container}
47
47
  showsVerticalScrollIndicator={false}
48
48
  >
49
- <Text className="font-mono text-foreground text-3xl font-bold mb-4">
50
- BETTER T STACK
51
- </Text>
49
+ <Text style={styles.heroTitle}>BETTER T STACK</Text>
52
50
  <View style={styles.statusCard}>
53
51
  <View style={styles.statusHeader}>
54
52
  <Text style={styles.statusTitle}>System Status</Text>
@@ -1,12 +1,12 @@
1
- import { Container } from "@/components/container";
2
1
  import { Link, Stack } from "expo-router";
3
2
  import { Text, View } from "react-native";
4
3
  import { StyleSheet } from "react-native-unistyles";
4
+ import { Container } from "@/components/container";
5
5
 
6
6
  export default function NotFoundScreen() {
7
7
  return (
8
8
  <>
9
- <Stack.Screen options={{ title: "Oops!" }} />
9
+ <Stack.Screen options=\{{ title: "Oops!" }} />
10
10
  <Container>
11
11
  <View style={styles.container}>
12
12
  <View style={styles.content}>
@@ -22,14 +22,14 @@ import { QueryClientProvider } from "@tanstack/react-query";
22
22
  import { Stack } from "expo-router";
23
23
  import { GestureHandlerRootView } from "react-native-gesture-handler";
24
24
  import { useUnistyles } from "react-native-unistyles";
25
+ import { StatusBar } from "expo-status-bar";
25
26
 
26
27
  export const unstable_settings = {
27
- // Ensure that reloading on `/modal` keeps a back button present.
28
28
  initialRouteName: "(drawer)",
29
29
  };
30
30
 
31
31
  {{#if (eq backend "convex")}}
32
- const convex = new ConvexReactClient(process.env.EXPO_PUBLIC_CONVEX_URL!, {
32
+ const convex = new ConvexReactClient(process.env.EXPO_PUBLIC_CONVEX_URL || "", {
33
33
  unsavedChangesWarning: false,
34
34
  });
35
35
  {{/if}}
@@ -0,0 +1,49 @@
1
+ {
2
+ "expo": {
3
+ "name": "{{projectName}}",
4
+ "slug": "{{projectName}}",
5
+ "version": "1.0.0",
6
+ "orientation": "portrait",
7
+ "icon": "./assets/images/icon.png",
8
+ "scheme": "mybettertapp",
9
+ "userInterfaceStyle": "automatic",
10
+ "newArchEnabled": true,
11
+ "ios": {
12
+ "supportsTablet": true
13
+ },
14
+ "android": {
15
+ "adaptiveIcon": {
16
+ "backgroundColor": "#E6F4FE",
17
+ "foregroundImage": "./assets/images/android-icon-foreground.png",
18
+ "backgroundImage": "./assets/images/android-icon-background.png",
19
+ "monochromeImage": "./assets/images/android-icon-monochrome.png"
20
+ },
21
+ "edgeToEdgeEnabled": true,
22
+ "predictiveBackGestureEnabled": false,
23
+ "package": "com.anonymous.mybettertapp6"
24
+ },
25
+ "web": {
26
+ "output": "static",
27
+ "favicon": "./assets/images/favicon.png"
28
+ },
29
+ "plugins": [
30
+ "expo-router",
31
+ [
32
+ "expo-splash-screen",
33
+ {
34
+ "image": "./assets/images/splash-icon.png",
35
+ "imageWidth": 200,
36
+ "resizeMode": "contain",
37
+ "backgroundColor": "#ffffff",
38
+ "dark": {
39
+ "backgroundColor": "#000000"
40
+ }
41
+ }
42
+ ]
43
+ ],
44
+ "experiments": {
45
+ "typedRoutes": true,
46
+ "reactCompiler": true
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,21 @@
1
+ module.exports = (api) => {
2
+ api.cache(true);
3
+ const plugins = [];
4
+
5
+ plugins.push([
6
+ "react-native-unistyles/plugin",
7
+ {
8
+ root: "src",
9
+ autoProcessRoot: "app",
10
+ autoProcessImports: ["@/components"],
11
+ },
12
+ ]);
13
+
14
+ plugins.push("react-native-worklets/plugin");
15
+
16
+ return {
17
+ presets: ["babel-preset-expo"],
18
+
19
+ plugins,
20
+ };
21
+ };
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { SafeAreaView } from "react-native";
2
+ import { SafeAreaView } from "react-native-safe-area-context";
3
3
  import { StyleSheet } from "react-native-unistyles";
4
4
 
5
5
  export const Container = ({ children }: { children: React.ReactNode }) => {
@@ -14,7 +14,7 @@ export const HeaderButton = forwardRef<
14
14
  name="info-circle"
15
15
  size={20}
16
16
  color={styles.icon.color}
17
- style={{
17
+ style=\{{
18
18
  opacity: pressed ? 0.7 : 1,
19
19
  }}
20
20
  />
@@ -4,5 +4,5 @@ export const TabBarIcon = (props: {
4
4
  name: React.ComponentProps<typeof FontAwesome>["name"];
5
5
  color: string;
6
6
  }) => {
7
- return <FontAwesome size={24} style={{ marginBottom: -3 }} {...props} />;
7
+ return <FontAwesome size={24} style=\{{ marginBottom: -3 }} {...props} />;
8
8
  };
@@ -0,0 +1,5 @@
1
+ const { getDefaultConfig } = require("expo/metro-config");
2
+
3
+ const config = getDefaultConfig(__dirname);
4
+
5
+ module.exports = config;
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "native",
3
3
  "version": "1.0.0",
4
+ "private": true,
4
5
  "main": "index.js",
5
6
  "scripts": {
6
7
  "dev": "expo start --clear",
@@ -9,7 +10,7 @@
9
10
  "web": "expo start --web"
10
11
  },
11
12
  "dependencies": {
12
- "@expo/vector-icons": "^14.1.0",
13
+ "@expo/vector-icons": "^15.0.2",
13
14
  "@react-navigation/bottom-tabs": "^7.3.10",
14
15
  "@react-navigation/drawer": "^7.3.9",
15
16
  "@react-navigation/native": "^7.1.6",
@@ -17,35 +18,35 @@
17
18
  "@stardazed/streams-text-encoding": "^1.0.2",
18
19
  "@ungap/structured-clone": "^1.3.0",
19
20
  {{/if}}
20
- "@tanstack/react-form": "^1.14.0",
21
- "babel-plugin-react-compiler": "^19.1.0-rc.2",
22
- "expo": "^53.0.17",
23
- "expo-constants": "~17.1.7",
24
- "expo-crypto": "~14.1.5",
25
- "expo-linking": "~7.1.7",
26
- "expo-router": "~5.1.3",
27
- "expo-secure-store": "~14.2.3",
28
- "expo-status-bar": "~2.2.3",
29
- "expo-system-ui": "~5.0.10",
30
- "expo-dev-client": "~5.2.4",
31
- "expo-web-browser": "~14.2.0",
32
- "react": "19.0.0",
33
- "react-dom": "19.0.0",
34
- "react-native": "0.79.5",
35
- "react-native-edge-to-edge": "1.6.0",
36
- "react-native-gesture-handler": "~2.24.0",
37
- "react-native-nitro-modules": "0.26.3",
38
- "react-native-reanimated": "~3.17.4",
39
- "react-native-safe-area-context": "5.4.0",
40
- "react-native-screens": "~4.11.1",
41
- "react-native-unistyles": "^3.0.0",
42
- "react-native-web": "^0.20.0"
21
+ "@tanstack/react-form": "^1.0.5",
22
+ "expo": "^54.0.0",
23
+ "expo-constants": "~18.0.8",
24
+ "expo-crypto": "~15.0.6",
25
+ "expo-linking": "~8.0.7",
26
+ "expo-router": "~6.0.0",
27
+ "expo-secure-store": "~15.0.6",
28
+ "expo-splash-screen": "~31.0.8",
29
+ "expo-status-bar": "^3.0.7",
30
+ "expo-system-ui": "~6.0.7",
31
+ "expo-dev-client": "~6.0.11",
32
+ "expo-web-browser": "~15.0.6",
33
+ "react": "19.1.0",
34
+ "react-dom": "19.1.0",
35
+ "react-native": "0.81.4",
36
+ "react-native-edge-to-edge": "^1.7.0",
37
+ "react-native-gesture-handler": "~2.28.0",
38
+ "react-native-nitro-modules": "^0.29.4",
39
+ "react-native-reanimated": "~4.1.0",
40
+ "react-native-safe-area-context": "~5.6.0",
41
+ "react-native-screens": "~4.16.0",
42
+ "react-native-unistyles": "^3.0.12",
43
+ "react-native-web": "^0.21.0",
44
+ "react-native-worklets": "^0.5.1"
43
45
  },
44
46
  "devDependencies": {
45
47
  "ajv": "^8.17.1",
46
48
  "@babel/core": "^7.28.0",
47
- "@types/react": "~19.0.10",
48
- "typescript": "~5.8.3"
49
- },
50
- "private": true
49
+ "@types/react": "~19.1.10",
50
+ "typescript": "~5.9.2"
51
+ }
51
52
  }
@@ -0,0 +1,98 @@
1
+ const sharedColors = {
2
+ success: "#22C55E",
3
+ destructive: "#EF4444",
4
+ warning: "#F59E0B",
5
+ info: "#3B82F6",
6
+ } as const;
7
+
8
+ export const lightTheme = {
9
+ colors: {
10
+ ...sharedColors,
11
+ typography: "hsl(0 0% 0%)",
12
+ background: "hsl(0 0% 100%)",
13
+ foreground: "hsl(0 0% 0%)",
14
+ card: "hsl(0 0% 98%)",
15
+ cardForeground: "hsl(0 0% 0%)",
16
+ primary: "hsl(0 0% 10%)",
17
+ primaryForeground: "hsl(0 0% 100%)",
18
+ secondary: "hsl(0 0% 95%)",
19
+ secondaryForeground: "hsl(0 0% 0%)",
20
+ muted: "hsl(0 0% 96%)",
21
+ mutedForeground: "hsl(0 0% 45%)",
22
+ accent: "hsl(0 0% 96%)",
23
+ accentForeground: "hsl(0 0% 0%)",
24
+ border: "hsl(0 0% 90%)",
25
+ input: "hsl(0 0% 90%)",
26
+ ring: "hsl(0 0% 20%)",
27
+ },
28
+ spacing: {
29
+ xs: 4,
30
+ sm: 8,
31
+ md: 16,
32
+ lg: 24,
33
+ xl: 32,
34
+ xxl: 48,
35
+ },
36
+ borderRadius: {
37
+ sm: 6,
38
+ md: 8,
39
+ lg: 12,
40
+ xl: 16,
41
+ },
42
+ fontSize: {
43
+ xs: 12,
44
+ sm: 14,
45
+ base: 16,
46
+ lg: 18,
47
+ xl: 20,
48
+ "2xl": 24,
49
+ "3xl": 30,
50
+ "4xl": 36,
51
+ },
52
+ } as const;
53
+
54
+ export const darkTheme = {
55
+ colors: {
56
+ ...sharedColors,
57
+ typography: "hsl(0 0% 100%)",
58
+ background: "hsl(0 0% 0%)",
59
+ foreground: "hsl(0 0% 100%)",
60
+ card: "hsl(0 0% 2%)",
61
+ cardForeground: "hsl(0 0% 100%)",
62
+ primary: "hsl(0 0% 90%)",
63
+ primaryForeground: "hsl(0 0% 0%)",
64
+ secondary: "hsl(0 0% 10%)",
65
+ secondaryForeground: "hsl(0 0% 100%)",
66
+ muted: "hsl(0 0% 8%)",
67
+ mutedForeground: "hsl(0 0% 65%)",
68
+ accent: "hsl(0 0% 8%)",
69
+ accentForeground: "hsl(0 0% 100%)",
70
+ border: "hsl(0 0% 15%)",
71
+ input: "hsl(0 0% 15%)",
72
+ ring: "hsl(0 0% 80%)",
73
+ },
74
+ spacing: {
75
+ xs: 4,
76
+ sm: 8,
77
+ md: 16,
78
+ lg: 24,
79
+ xl: 32,
80
+ xxl: 48,
81
+ },
82
+ borderRadius: {
83
+ sm: 6,
84
+ md: 8,
85
+ lg: 12,
86
+ xl: 16,
87
+ },
88
+ fontSize: {
89
+ xs: 12,
90
+ sm: 14,
91
+ base: 16,
92
+ lg: 18,
93
+ xl: 20,
94
+ "2xl": 24,
95
+ "3xl": 30,
96
+ "4xl": 36,
97
+ },
98
+ } as const;
@@ -15,8 +15,8 @@
15
15
  "lucide-react": "^0.487.0",
16
16
  "next": "15.5.0",
17
17
  "next-themes": "^0.4.6",
18
- "react": "^19.0.0",
19
- "react-dom": "^19.0.0",
18
+ "react": "19.1.0",
19
+ "react-dom": "19.1.0",
20
20
  "sonner": "^2.0.5",
21
21
  "tailwind-merge": "^3.3.1",
22
22
  "tw-animate-css": "^1.3.4",
@@ -25,7 +25,7 @@
25
25
  "devDependencies": {
26
26
  "@tailwindcss/postcss": "^4.1.10",
27
27
  "@types/node": "^20",
28
- "@types/react": "^19",
28
+ "@types/react": "~19.1.10",
29
29
  "@types/react-dom": "^19",
30
30
  "tailwindcss": "^4.1.10",
31
31
  "typescript": "^5"
@@ -19,8 +19,8 @@
19
19
  "isbot": "^5.1.28",
20
20
  "lucide-react": "^0.511.0",
21
21
  "next-themes": "^0.4.6",
22
- "react": "19.0.0",
23
- "react-dom": "19.0.0",
22
+ "react": "19.1.0",
23
+ "react-dom": "19.1.0",
24
24
  "react-router": "^7.6.1",
25
25
  "sonner": "^2.0.3",
26
26
  "tailwind-merge": "^3.3.0",
@@ -31,7 +31,7 @@
31
31
  "@react-router/dev": "^7.6.1",
32
32
  "@tailwindcss/vite": "^4.1.8",
33
33
  "@types/node": "^20",
34
- "@types/react": "^19.0.12",
34
+ "@types/react": "~19.1.10",
35
35
  "@types/react-dom": "^19.0.4",
36
36
  "react-router-devtools": "^1.1.0",
37
37
  "tailwindcss": "^4.1.8",
@@ -20,8 +20,8 @@
20
20
  "clsx": "^2.1.1",
21
21
  "lucide-react": "^0.473.0",
22
22
  "next-themes": "^0.4.6",
23
- "react": "^19.0.0",
24
- "react-dom": "^19.0.0",
23
+ "react": "19.1.0",
24
+ "react-dom": "19.1.0",
25
25
  "sonner": "^2.0.5",
26
26
  "tailwind-merge": "^3.3.1",
27
27
  "tw-animate-css": "^1.2.5",
@@ -31,7 +31,7 @@
31
31
  "@tanstack/react-router-devtools": "^1.114.27",
32
32
  "@tanstack/router-plugin": "^1.114.27",
33
33
  "@types/node": "^22.13.13",
34
- "@types/react": "^19.0.12",
34
+ "@types/react": "~19.1.10",
35
35
  "@types/react-dom": "^19.0.4",
36
36
  "@vitejs/plugin-react": "^4.3.4",
37
37
  "postcss": "^8.5.3",
@@ -20,8 +20,8 @@
20
20
  "clsx": "^2.1.1",
21
21
  "lucide-react": "^0.525.0",
22
22
  "next-themes": "^0.4.6",
23
- "react": "19.0.0",
24
- "react-dom": "19.0.0",
23
+ "react": "19.1.0",
24
+ "react-dom": "19.1.0",
25
25
  "sonner": "^2.0.3",
26
26
  "tailwindcss": "^4.1.3",
27
27
  "tailwind-merge": "^3.3.1",
@@ -33,7 +33,7 @@
33
33
  "@tanstack/react-router-devtools": "^1.121.0-alpha.27",
34
34
  "@testing-library/dom": "^10.4.0",
35
35
  "@testing-library/react": "^16.2.0",
36
- "@types/react": "^19.0.12",
36
+ "@types/react": "~19.1.10",
37
37
  "@types/react-dom": "^19.0.4",
38
38
  "@vitejs/plugin-react": "^5.0.1",
39
39
  "jsdom": "^26.0.0",
@@ -1,47 +0,0 @@
1
- import { ScrollViewStyleReset } from 'expo-router/html';
2
- import { ReactNode } from 'react';
3
-
4
- // This file is web-only and used to configure the root HTML for every
5
- // web page during static rendering.
6
- // The contents of this function only run in Node.js environments and
7
- // do not have access to the DOM or browser APIs.
8
- export default function Root({ children }: { children: ReactNode }) {
9
- return (
10
- <html lang="en">
11
- <head>
12
- <meta charSet="utf-8" />
13
- <meta content="IE=edge" httpEquiv="X-UA-Compatible" />
14
-
15
- {/*
16
- This viewport disables scaling which makes the mobile website act more like a native app.
17
- However this does reduce built-in accessibility. If you want to enable scaling, use this instead:
18
- <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
19
- */}
20
- <meta
21
- content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1.00001,viewport-fit=cover"
22
- name="viewport"
23
- />
24
- {/*
25
- Disable body scrolling on web. This makes ScrollView components work closer to how they do on native.
26
- However, body scrolling is often nice to have for mobile web. If you want to enable it, remove this line.
27
- */}
28
- <ScrollViewStyleReset />
29
-
30
- {/* Using raw CSS styles as an escape-hatch to ensure the background color never flickers in dark-mode. */}
31
- <style dangerouslySetInnerHTML={{ __html: responsiveBackground }} />
32
- {/* Add any additional <head> elements that you want globally available on web... */}
33
- </head>
34
- <body>{children}</body>
35
- </html>
36
- );
37
- }
38
-
39
- const responsiveBackground = `
40
- body {
41
- background-color: #fff;
42
- }
43
- @media (prefers-color-scheme: dark) {
44
- body {
45
- background-color: #000;
46
- }
47
- }`;
@@ -1,2 +0,0 @@
1
- // @ts-ignore
2
- /// <reference types="nativewind/types" />
@@ -1,46 +0,0 @@
1
- {
2
- "expo": {
3
- "name": "my-better-t-app",
4
- "slug": "my-better-t-app",
5
- "version": "1.0.0",
6
- "scheme": "my-better-t-app",
7
- "web": {
8
- "bundler": "metro",
9
- "output": "static",
10
- "favicon": "./assets/favicon.png"
11
- },
12
- "plugins": [
13
- "expo-router",
14
- "expo-secure-store",
15
- "expo-web-browser"
16
- ],
17
- "experiments": {
18
- "typedRoutes": true,
19
- "tsconfigPaths": true
20
- },
21
- "newArchEnabled": true,
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
- "bundleIdentifier": "com.amanvarshney01.mybettertapp"
36
- },
37
- "android": {
38
- "adaptiveIcon": {
39
- "foregroundImage": "./assets/adaptive-icon.png",
40
- "backgroundColor": "#ffffff"
41
- },
42
- "package": "com.amanvarshney01.mybettertapp",
43
- "edgeToEdgeEnabled": true
44
- }
45
- }
46
- }
@@ -1,11 +0,0 @@
1
- module.exports = function (api) {
2
- api.cache(true);
3
- const plugins = [];
4
-
5
- plugins.push('react-native-reanimated/plugin');
6
-
7
- return {
8
- presets: [['babel-preset-expo', { jsxImportSource: 'nativewind' }], 'nativewind/babel'],
9
- plugins,
10
- };
11
- };
@@ -1,59 +0,0 @@
1
- // Learn more https://docs.expo.io/guides/customizing-metro
2
- const { getDefaultConfig } = require("expo/metro-config");
3
- const { FileStore } = require("metro-cache");
4
- const { withNativeWind } = require("nativewind/metro");
5
- const path = require("node:path");
6
-
7
- const config = withTurborepoManagedCache(
8
- withMonorepoPaths(
9
- withNativeWind(getDefaultConfig(__dirname), {
10
- input: "./global.css",
11
- configPath: "./tailwind.config.js",
12
- }),
13
- ),
14
- );
15
-
16
- config.resolver.unstable_enablePackageExports = true;
17
-
18
- config.resolver.disableHierarchicalLookup = true;
19
-
20
- module.exports = config;
21
-
22
- /**
23
- * Add the monorepo paths to the Metro config.
24
- * This allows Metro to resolve modules from the monorepo.
25
- *
26
- * @see https://docs.expo.dev/guides/monorepos/#modify-the-metro-config
27
- * @param {import('expo/metro-config').MetroConfig} config
28
- * @returns {import('expo/metro-config').MetroConfig}
29
- */
30
- function withMonorepoPaths(config) {
31
- const projectRoot = __dirname;
32
- const workspaceRoot = path.resolve(projectRoot, "../..");
33
-
34
- // #1 - Watch all files in the monorepo
35
- config.watchFolders = [workspaceRoot];
36
-
37
- // #2 - Resolve modules within the project's `node_modules` first, then all monorepo modules
38
- config.resolver.nodeModulesPaths = [
39
- path.resolve(projectRoot, "node_modules"),
40
- path.resolve(workspaceRoot, "node_modules"),
41
- ];
42
-
43
- return config;
44
- }
45
-
46
- /**
47
- * Move the Metro cache to the `.cache/metro` folder.
48
- * If you have any environment variables, you can configure Turborepo to invalidate it when needed.
49
- *
50
- * @see https://turbo.build/repo/docs/reference/configuration#env
51
- * @param {import('expo/metro-config').MetroConfig} config
52
- * @returns {import('expo/metro-config').MetroConfig}
53
- */
54
- function withTurborepoManagedCache(config) {
55
- config.cacheStores = [
56
- new FileStore({ root: path.join(__dirname, ".cache/metro") }),
57
- ];
58
- return config;
59
- }
@@ -1,59 +0,0 @@
1
- const { hairlineWidth } = require("nativewind/theme");
2
-
3
- /** @type {import('tailwindcss').Config} */
4
- module.exports = {
5
- darkMode: "class",
6
- content: ["./app/**/*.{js,ts,tsx}", "./components/**/*.{js,ts,tsx}"],
7
-
8
- presets: [require("nativewind/preset")],
9
- theme: {
10
- extend: {
11
- colors: {
12
- background: "hsl(var(--background))",
13
- foreground: "hsl(var(--foreground))",
14
- card: {
15
- DEFAULT: "hsl(var(--card))",
16
- foreground: "hsl(var(--card-foreground))",
17
- },
18
- popover: {
19
- DEFAULT: "hsl(var(--popover))",
20
- foreground: "hsl(var(--popover-foreground))",
21
- },
22
- primary: {
23
- DEFAULT: "hsl(var(--primary))",
24
- foreground: "hsl(var(--primary-foreground))",
25
- },
26
- secondary: {
27
- DEFAULT: "hsl(var(--secondary))",
28
- foreground: "hsl(var(--secondary-foreground))",
29
- },
30
- muted: {
31
- DEFAULT: "hsl(var(--muted))",
32
- foreground: "hsl(var(--muted-foreground))",
33
- },
34
- accent: {
35
- DEFAULT: "hsl(var(--accent))",
36
- foreground: "hsl(var(--accent-foreground))",
37
- },
38
- destructive: {
39
- DEFAULT: "hsl(var(--destructive))",
40
- foreground: "hsl(var(--destructive-foreground))",
41
- },
42
- border: "hsl(var(--border))",
43
- input: "hsl(var(--input))",
44
- ring: "hsl(var(--ring))",
45
- radius: "var(--radius)",
46
- },
47
- borderRadius: {
48
- xl: "calc(var(--radius) + 4px)",
49
- lg: "var(--radius)",
50
- md: "calc(var(--radius) - 2px)",
51
- sm: "calc(var(--radius) - 4px)",
52
- },
53
- borderWidth: {
54
- hairline: hairlineWidth(),
55
- },
56
- },
57
- },
58
- plugins: [],
59
- };