expo-template-default 54.0.0 → 54.0.1
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/app/(tabs)/_layout.tsx +4 -14
- package/app/(tabs)/explore.tsx +18 -19
- package/app/(tabs)/index.tsx +28 -5
- package/app/_layout.tsx +6 -11
- package/app/modal.tsx +29 -0
- package/app.json +2 -2
- package/components/{ExternalLink.tsx → external-link.tsx} +5 -4
- package/components/hello-wave.tsx +19 -0
- package/components/{ParallaxScrollView.tsx → parallax-scroll-view.tsx} +20 -23
- package/components/{ThemedText.tsx → themed-text.tsx} +1 -1
- package/components/{ThemedView.tsx → themed-view.tsx} +1 -1
- package/components/{Collapsible.tsx → ui/collapsible.tsx} +5 -5
- package/constants/theme.ts +53 -0
- package/hooks/{useThemeColor.ts → use-theme-color.ts} +2 -2
- package/package.json +19 -27
- package/app/+not-found.tsx +0 -32
- package/assets/fonts/SpaceMono-Regular.ttf +0 -0
- package/components/HelloWave.tsx +0 -40
- package/components/ui/TabBarBackground.ios.tsx +0 -26
- package/components/ui/TabBarBackground.tsx +0 -9
- package/constants/Colors.ts +0 -26
- /package/components/{HapticTab.tsx → haptic-tab.tsx} +0 -0
- /package/components/ui/{IconSymbol.ios.tsx → icon-symbol.ios.tsx} +0 -0
- /package/components/ui/{IconSymbol.tsx → icon-symbol.tsx} +0 -0
- /package/hooks/{useColorScheme.ts → use-color-scheme.ts} +0 -0
- /package/hooks/{useColorScheme.web.ts → use-color-scheme.web.ts} +0 -0
package/app/(tabs)/_layout.tsx
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { Tabs } from 'expo-router';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { Platform } from 'react-native';
|
|
4
3
|
|
|
5
|
-
import { HapticTab } from '@/components/
|
|
6
|
-
import { IconSymbol } from '@/components/ui/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { useColorScheme } from '@/hooks/useColorScheme';
|
|
4
|
+
import { HapticTab } from '@/components/haptic-tab';
|
|
5
|
+
import { IconSymbol } from '@/components/ui/icon-symbol';
|
|
6
|
+
import { Colors } from '@/constants/theme';
|
|
7
|
+
import { useColorScheme } from '@/hooks/use-color-scheme';
|
|
10
8
|
|
|
11
9
|
export default function TabLayout() {
|
|
12
10
|
const colorScheme = useColorScheme();
|
|
@@ -17,14 +15,6 @@ export default function TabLayout() {
|
|
|
17
15
|
tabBarActiveTintColor: Colors[colorScheme ?? 'light'].tint,
|
|
18
16
|
headerShown: false,
|
|
19
17
|
tabBarButton: HapticTab,
|
|
20
|
-
tabBarBackground: TabBarBackground,
|
|
21
|
-
tabBarStyle: Platform.select({
|
|
22
|
-
ios: {
|
|
23
|
-
// Use a transparent background on iOS to show the blur effect
|
|
24
|
-
position: 'absolute',
|
|
25
|
-
},
|
|
26
|
-
default: {},
|
|
27
|
-
}),
|
|
28
18
|
}}>
|
|
29
19
|
<Tabs.Screen
|
|
30
20
|
name="index"
|
package/app/(tabs)/explore.tsx
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Image } from 'expo-image';
|
|
2
2
|
import { Platform, StyleSheet } from 'react-native';
|
|
3
3
|
|
|
4
|
-
import { Collapsible } from '@/components/
|
|
5
|
-
import { ExternalLink } from '@/components/
|
|
6
|
-
import ParallaxScrollView from '@/components/
|
|
7
|
-
import { ThemedText } from '@/components/
|
|
8
|
-
import { ThemedView } from '@/components/
|
|
9
|
-
import { IconSymbol } from '@/components/ui/
|
|
4
|
+
import { Collapsible } from '@/components/ui/collapsible';
|
|
5
|
+
import { ExternalLink } from '@/components/external-link';
|
|
6
|
+
import ParallaxScrollView from '@/components/parallax-scroll-view';
|
|
7
|
+
import { ThemedText } from '@/components/themed-text';
|
|
8
|
+
import { ThemedView } from '@/components/themed-view';
|
|
9
|
+
import { IconSymbol } from '@/components/ui/icon-symbol';
|
|
10
|
+
import { Fonts } from '@/constants/theme';
|
|
10
11
|
|
|
11
12
|
export default function TabTwoScreen() {
|
|
12
13
|
return (
|
|
@@ -21,7 +22,13 @@ export default function TabTwoScreen() {
|
|
|
21
22
|
/>
|
|
22
23
|
}>
|
|
23
24
|
<ThemedView style={styles.titleContainer}>
|
|
24
|
-
<ThemedText
|
|
25
|
+
<ThemedText
|
|
26
|
+
type="title"
|
|
27
|
+
style={{
|
|
28
|
+
fontFamily: Fonts.rounded,
|
|
29
|
+
}}>
|
|
30
|
+
Explore
|
|
31
|
+
</ThemedText>
|
|
25
32
|
</ThemedView>
|
|
26
33
|
<ThemedText>This app includes example code to help you get started.</ThemedText>
|
|
27
34
|
<Collapsible title="File-based routing">
|
|
@@ -58,17 +65,6 @@ export default function TabTwoScreen() {
|
|
|
58
65
|
<ThemedText type="link">Learn more</ThemedText>
|
|
59
66
|
</ExternalLink>
|
|
60
67
|
</Collapsible>
|
|
61
|
-
<Collapsible title="Custom fonts">
|
|
62
|
-
<ThemedText>
|
|
63
|
-
Open <ThemedText type="defaultSemiBold">app/_layout.tsx</ThemedText> to see how to load{' '}
|
|
64
|
-
<ThemedText style={{ fontFamily: 'SpaceMono' }}>
|
|
65
|
-
custom fonts such as this one.
|
|
66
|
-
</ThemedText>
|
|
67
|
-
</ThemedText>
|
|
68
|
-
<ExternalLink href="https://docs.expo.dev/versions/latest/sdk/font">
|
|
69
|
-
<ThemedText type="link">Learn more</ThemedText>
|
|
70
|
-
</ExternalLink>
|
|
71
|
-
</Collapsible>
|
|
72
68
|
<Collapsible title="Light and dark mode components">
|
|
73
69
|
<ThemedText>
|
|
74
70
|
This template has light and dark mode support. The{' '}
|
|
@@ -83,7 +79,10 @@ export default function TabTwoScreen() {
|
|
|
83
79
|
<ThemedText>
|
|
84
80
|
This template includes an example of an animated component. The{' '}
|
|
85
81
|
<ThemedText type="defaultSemiBold">components/HelloWave.tsx</ThemedText> component uses
|
|
86
|
-
the powerful
|
|
82
|
+
the powerful{' '}
|
|
83
|
+
<ThemedText type="defaultSemiBold" style={{ fontFamily: Fonts.mono }}>
|
|
84
|
+
react-native-reanimated
|
|
85
|
+
</ThemedText>{' '}
|
|
87
86
|
library to create a waving hand animation.
|
|
88
87
|
</ThemedText>
|
|
89
88
|
{Platform.select({
|
package/app/(tabs)/index.tsx
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Image } from 'expo-image';
|
|
2
2
|
import { Platform, StyleSheet } from 'react-native';
|
|
3
3
|
|
|
4
|
-
import { HelloWave } from '@/components/
|
|
5
|
-
import ParallaxScrollView from '@/components/
|
|
6
|
-
import { ThemedText } from '@/components/
|
|
7
|
-
import { ThemedView } from '@/components/
|
|
4
|
+
import { HelloWave } from '@/components/hello-wave';
|
|
5
|
+
import ParallaxScrollView from '@/components/parallax-scroll-view';
|
|
6
|
+
import { ThemedText } from '@/components/themed-text';
|
|
7
|
+
import { ThemedView } from '@/components/themed-view';
|
|
8
|
+
import { Link } from 'expo-router';
|
|
8
9
|
|
|
9
10
|
export default function HomeScreen() {
|
|
10
11
|
return (
|
|
@@ -36,7 +37,29 @@ export default function HomeScreen() {
|
|
|
36
37
|
</ThemedText>
|
|
37
38
|
</ThemedView>
|
|
38
39
|
<ThemedView style={styles.stepContainer}>
|
|
39
|
-
<
|
|
40
|
+
<Link href="/modal">
|
|
41
|
+
<Link.Trigger>
|
|
42
|
+
<ThemedText type="subtitle">Step 2: Explore</ThemedText>
|
|
43
|
+
</Link.Trigger>
|
|
44
|
+
<Link.Preview />
|
|
45
|
+
<Link.Menu>
|
|
46
|
+
<Link.MenuAction title="Action" icon="cube" onPress={() => alert('Action pressed')} />
|
|
47
|
+
<Link.MenuAction
|
|
48
|
+
title="Share"
|
|
49
|
+
icon="square.and.arrow.up"
|
|
50
|
+
onPress={() => alert('Share pressed')}
|
|
51
|
+
/>
|
|
52
|
+
<Link.Menu title="More" icon="ellipsis">
|
|
53
|
+
<Link.MenuAction
|
|
54
|
+
title="Delete"
|
|
55
|
+
icon="trash"
|
|
56
|
+
destructive
|
|
57
|
+
onPress={() => alert('Delete pressed')}
|
|
58
|
+
/>
|
|
59
|
+
</Link.Menu>
|
|
60
|
+
</Link.Menu>
|
|
61
|
+
</Link>
|
|
62
|
+
|
|
40
63
|
<ThemedText>
|
|
41
64
|
{`Tap the Explore tab to learn more about what's included in this starter app.`}
|
|
42
65
|
</ThemedText>
|
package/app/_layout.tsx
CHANGED
|
@@ -1,27 +1,22 @@
|
|
|
1
1
|
import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native';
|
|
2
|
-
import { useFonts } from 'expo-font';
|
|
3
2
|
import { Stack } from 'expo-router';
|
|
4
3
|
import { StatusBar } from 'expo-status-bar';
|
|
5
4
|
import 'react-native-reanimated';
|
|
6
5
|
|
|
7
|
-
import { useColorScheme } from '@/hooks/
|
|
6
|
+
import { useColorScheme } from '@/hooks/use-color-scheme';
|
|
7
|
+
|
|
8
|
+
export const unstable_settings = {
|
|
9
|
+
anchor: '(tabs)',
|
|
10
|
+
};
|
|
8
11
|
|
|
9
12
|
export default function RootLayout() {
|
|
10
13
|
const colorScheme = useColorScheme();
|
|
11
|
-
const [loaded] = useFonts({
|
|
12
|
-
SpaceMono: require('../assets/fonts/SpaceMono-Regular.ttf'),
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
if (!loaded) {
|
|
16
|
-
// Async font loading only occurs in development.
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
14
|
|
|
20
15
|
return (
|
|
21
16
|
<ThemeProvider value={colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
|
|
22
17
|
<Stack>
|
|
23
18
|
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
|
|
24
|
-
<Stack.Screen name="
|
|
19
|
+
<Stack.Screen name="modal" options={{ presentation: 'modal', title: 'Modal' }} />
|
|
25
20
|
</Stack>
|
|
26
21
|
<StatusBar style="auto" />
|
|
27
22
|
</ThemeProvider>
|
package/app/modal.tsx
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Link } from 'expo-router';
|
|
2
|
+
import { StyleSheet } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import { ThemedText } from '@/components/themed-text';
|
|
5
|
+
import { ThemedView } from '@/components/themed-view';
|
|
6
|
+
|
|
7
|
+
export default function ModalScreen() {
|
|
8
|
+
return (
|
|
9
|
+
<ThemedView style={styles.container}>
|
|
10
|
+
<ThemedText type="title">This is a modal</ThemedText>
|
|
11
|
+
<Link href="/" dismissTo style={styles.link}>
|
|
12
|
+
<ThemedText type="link">Go to home screen</ThemedText>
|
|
13
|
+
</Link>
|
|
14
|
+
</ThemedView>
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const styles = StyleSheet.create({
|
|
19
|
+
container: {
|
|
20
|
+
flex: 1,
|
|
21
|
+
alignItems: 'center',
|
|
22
|
+
justifyContent: 'center',
|
|
23
|
+
padding: 20,
|
|
24
|
+
},
|
|
25
|
+
link: {
|
|
26
|
+
marginTop: 15,
|
|
27
|
+
paddingVertical: 15,
|
|
28
|
+
},
|
|
29
|
+
});
|
package/app.json
CHANGED
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"foregroundImage": "./assets/images/adaptive-icon.png",
|
|
17
17
|
"backgroundColor": "#ffffff"
|
|
18
18
|
},
|
|
19
|
-
"edgeToEdgeEnabled": true
|
|
19
|
+
"edgeToEdgeEnabled": true,
|
|
20
|
+
"predictiveBackGestureEnabled": true
|
|
20
21
|
},
|
|
21
22
|
"web": {
|
|
22
|
-
"bundler": "metro",
|
|
23
23
|
"output": "static",
|
|
24
24
|
"favicon": "./assets/images/favicon.png"
|
|
25
25
|
},
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Href, Link } from 'expo-router';
|
|
2
|
-
import { openBrowserAsync } from 'expo-web-browser';
|
|
2
|
+
import { openBrowserAsync, WebBrowserPresentationStyle } from 'expo-web-browser';
|
|
3
3
|
import { type ComponentProps } from 'react';
|
|
4
|
-
import { Platform } from 'react-native';
|
|
5
4
|
|
|
6
5
|
type Props = Omit<ComponentProps<typeof Link>, 'href'> & { href: Href & string };
|
|
7
6
|
|
|
@@ -12,11 +11,13 @@ export function ExternalLink({ href, ...rest }: Props) {
|
|
|
12
11
|
{...rest}
|
|
13
12
|
href={href}
|
|
14
13
|
onPress={async (event) => {
|
|
15
|
-
if (
|
|
14
|
+
if (process.env.EXPO_OS !== 'web') {
|
|
16
15
|
// Prevent the default behavior of linking to the default browser on native.
|
|
17
16
|
event.preventDefault();
|
|
18
17
|
// Open the link in an in-app browser.
|
|
19
|
-
await openBrowserAsync(href
|
|
18
|
+
await openBrowserAsync(href, {
|
|
19
|
+
presentationStyle: WebBrowserPresentationStyle.AUTOMATIC,
|
|
20
|
+
});
|
|
20
21
|
}
|
|
21
22
|
}}
|
|
22
23
|
/>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Animated from 'react-native-reanimated';
|
|
2
|
+
|
|
3
|
+
export function HelloWave() {
|
|
4
|
+
return (
|
|
5
|
+
<Animated.Text
|
|
6
|
+
style={{
|
|
7
|
+
fontSize: 28,
|
|
8
|
+
lineHeight: 32,
|
|
9
|
+
marginTop: -6,
|
|
10
|
+
animationName: {
|
|
11
|
+
'50%': { transform: [{ rotate: '25deg' }] },
|
|
12
|
+
},
|
|
13
|
+
animationIterationCount: 4,
|
|
14
|
+
animationDuration: '300ms',
|
|
15
|
+
}}>
|
|
16
|
+
👋
|
|
17
|
+
</Animated.Text>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -4,12 +4,12 @@ import Animated, {
|
|
|
4
4
|
interpolate,
|
|
5
5
|
useAnimatedRef,
|
|
6
6
|
useAnimatedStyle,
|
|
7
|
-
|
|
7
|
+
useScrollOffset,
|
|
8
8
|
} from 'react-native-reanimated';
|
|
9
9
|
|
|
10
|
-
import { ThemedView } from '@/components/
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
10
|
+
import { ThemedView } from '@/components/themed-view';
|
|
11
|
+
import { useColorScheme } from '@/hooks/use-color-scheme';
|
|
12
|
+
import { useThemeColor } from '@/hooks/use-theme-color';
|
|
13
13
|
|
|
14
14
|
const HEADER_HEIGHT = 250;
|
|
15
15
|
|
|
@@ -23,10 +23,10 @@ export default function ParallaxScrollView({
|
|
|
23
23
|
headerImage,
|
|
24
24
|
headerBackgroundColor,
|
|
25
25
|
}: Props) {
|
|
26
|
+
const backgroundColor = useThemeColor({}, 'background');
|
|
26
27
|
const colorScheme = useColorScheme() ?? 'light';
|
|
27
28
|
const scrollRef = useAnimatedRef<Animated.ScrollView>();
|
|
28
|
-
const scrollOffset =
|
|
29
|
-
const { scrollInsetBottom, paddingBottom } = useBottomTabOverflow();
|
|
29
|
+
const scrollOffset = useScrollOffset(scrollRef);
|
|
30
30
|
const headerAnimatedStyle = useAnimatedStyle(() => {
|
|
31
31
|
return {
|
|
32
32
|
transform: [
|
|
@@ -45,23 +45,20 @@ export default function ParallaxScrollView({
|
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
return (
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
<ThemedView style={styles.content}>{children}</ThemedView>
|
|
63
|
-
</Animated.ScrollView>
|
|
64
|
-
</ThemedView>
|
|
48
|
+
<Animated.ScrollView
|
|
49
|
+
ref={scrollRef}
|
|
50
|
+
style={{ backgroundColor, flex: 1 }}
|
|
51
|
+
scrollEventThrottle={16}>
|
|
52
|
+
<Animated.View
|
|
53
|
+
style={[
|
|
54
|
+
styles.header,
|
|
55
|
+
{ backgroundColor: headerBackgroundColor[colorScheme] },
|
|
56
|
+
headerAnimatedStyle,
|
|
57
|
+
]}>
|
|
58
|
+
{headerImage}
|
|
59
|
+
</Animated.View>
|
|
60
|
+
<ThemedView style={styles.content}>{children}</ThemedView>
|
|
61
|
+
</Animated.ScrollView>
|
|
65
62
|
);
|
|
66
63
|
}
|
|
67
64
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { PropsWithChildren, useState } from 'react';
|
|
2
2
|
import { StyleSheet, TouchableOpacity } from 'react-native';
|
|
3
3
|
|
|
4
|
-
import { ThemedText } from '@/components/
|
|
5
|
-
import { ThemedView } from '@/components/
|
|
6
|
-
import { IconSymbol } from '@/components/ui/
|
|
7
|
-
import { Colors } from '@/constants/
|
|
8
|
-
import { useColorScheme } from '@/hooks/
|
|
4
|
+
import { ThemedText } from '@/components/themed-text';
|
|
5
|
+
import { ThemedView } from '@/components/themed-view';
|
|
6
|
+
import { IconSymbol } from '@/components/ui/icon-symbol';
|
|
7
|
+
import { Colors } from '@/constants/theme';
|
|
8
|
+
import { useColorScheme } from '@/hooks/use-color-scheme';
|
|
9
9
|
|
|
10
10
|
export function Collapsible({ children, title }: PropsWithChildren & { title: string }) {
|
|
11
11
|
const [isOpen, setIsOpen] = useState(false);
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Below are the colors that are used in the app. The colors are defined in the light and dark mode.
|
|
3
|
+
* There are many other ways to style your app. For example, [Nativewind](https://www.nativewind.dev/), [Tamagui](https://tamagui.dev/), [unistyles](https://reactnativeunistyles.vercel.app), etc.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { Platform } from 'react-native';
|
|
7
|
+
|
|
8
|
+
const tintColorLight = '#0a7ea4';
|
|
9
|
+
const tintColorDark = '#fff';
|
|
10
|
+
|
|
11
|
+
export const Colors = {
|
|
12
|
+
light: {
|
|
13
|
+
text: '#11181C',
|
|
14
|
+
background: '#fff',
|
|
15
|
+
tint: tintColorLight,
|
|
16
|
+
icon: '#687076',
|
|
17
|
+
tabIconDefault: '#687076',
|
|
18
|
+
tabIconSelected: tintColorLight,
|
|
19
|
+
},
|
|
20
|
+
dark: {
|
|
21
|
+
text: '#ECEDEE',
|
|
22
|
+
background: '#151718',
|
|
23
|
+
tint: tintColorDark,
|
|
24
|
+
icon: '#9BA1A6',
|
|
25
|
+
tabIconDefault: '#9BA1A6',
|
|
26
|
+
tabIconSelected: tintColorDark,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const Fonts = Platform.select({
|
|
31
|
+
ios: {
|
|
32
|
+
/** iOS `UIFontDescriptorSystemDesignDefault` */
|
|
33
|
+
sans: 'system-ui',
|
|
34
|
+
/** iOS `UIFontDescriptorSystemDesignSerif` */
|
|
35
|
+
serif: 'ui-serif',
|
|
36
|
+
/** iOS `UIFontDescriptorSystemDesignRounded` */
|
|
37
|
+
rounded: 'ui-rounded',
|
|
38
|
+
/** iOS `UIFontDescriptorSystemDesignMonospaced` */
|
|
39
|
+
mono: 'ui-monospace',
|
|
40
|
+
},
|
|
41
|
+
default: {
|
|
42
|
+
sans: 'normal',
|
|
43
|
+
serif: 'serif',
|
|
44
|
+
rounded: 'normal',
|
|
45
|
+
mono: 'monospace',
|
|
46
|
+
},
|
|
47
|
+
web: {
|
|
48
|
+
sans: "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif",
|
|
49
|
+
serif: "Georgia, 'Times New Roman', serif",
|
|
50
|
+
rounded: "'SF Pro Rounded', 'Hiragino Maru Gothic ProN', Meiryo, 'MS PGothic', sans-serif",
|
|
51
|
+
mono: "SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace",
|
|
52
|
+
},
|
|
53
|
+
});
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* https://docs.expo.dev/guides/color-schemes/
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { Colors } from '@/constants/
|
|
7
|
-
import { useColorScheme } from '@/hooks/
|
|
6
|
+
import { Colors } from '@/constants/theme';
|
|
7
|
+
import { useColorScheme } from '@/hooks/use-color-scheme';
|
|
8
8
|
|
|
9
9
|
export function useThemeColor(
|
|
10
10
|
props: { light?: string; dark?: string },
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "expo-template-default",
|
|
3
3
|
"license": "0BSD",
|
|
4
4
|
"main": "expo-router/entry",
|
|
5
|
-
"version": "54.0.
|
|
5
|
+
"version": "54.0.1",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"start": "expo start",
|
|
8
8
|
"reset-project": "node ./scripts/reset-project.js",
|
|
@@ -13,39 +13,31 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@expo/vector-icons": "^14.1.0",
|
|
16
|
-
"@react-navigation/bottom-tabs": "^7.
|
|
17
|
-
"@react-navigation/elements": "^2.3
|
|
18
|
-
"@react-navigation/native": "^7.1.
|
|
19
|
-
"expo": "~54.0.0-preview.
|
|
20
|
-
"expo-
|
|
21
|
-
"expo-
|
|
22
|
-
"expo-
|
|
23
|
-
"expo-
|
|
24
|
-
"expo-
|
|
25
|
-
"expo-
|
|
26
|
-
"expo-
|
|
27
|
-
"expo-splash-screen": "~31.0.0",
|
|
28
|
-
"expo-status-bar": "~3.0.0",
|
|
29
|
-
"expo-symbols": "~1.0.0",
|
|
30
|
-
"expo-system-ui": "~6.0.0",
|
|
31
|
-
"expo-web-browser": "~15.0.0",
|
|
16
|
+
"@react-navigation/bottom-tabs": "^7.4.0",
|
|
17
|
+
"@react-navigation/elements": "^2.6.3",
|
|
18
|
+
"@react-navigation/native": "^7.1.8",
|
|
19
|
+
"expo": "~54.0.0-preview.1",
|
|
20
|
+
"expo-haptics": "~15.0.1",
|
|
21
|
+
"expo-image": "~3.0.1",
|
|
22
|
+
"expo-router": "~6.0.0-beta.1",
|
|
23
|
+
"expo-splash-screen": "~31.0.1",
|
|
24
|
+
"expo-status-bar": "~3.0.1",
|
|
25
|
+
"expo-symbols": "~1.0.1",
|
|
26
|
+
"expo-web-browser": "~15.0.1",
|
|
32
27
|
"react": "19.1.0",
|
|
33
28
|
"react-dom": "19.1.0",
|
|
34
29
|
"react-native": "0.81.0",
|
|
35
30
|
"react-native-gesture-handler": "~2.28.0",
|
|
36
31
|
"react-native-worklets": "~0.4.1",
|
|
37
32
|
"react-native-reanimated": "~4.0.2",
|
|
38
|
-
"react-native-safe-area-context": "5.
|
|
39
|
-
"react-native-screens": "
|
|
40
|
-
"react-native-web": "~0.21.0"
|
|
41
|
-
"react-native-webview": "13.15.0"
|
|
33
|
+
"react-native-safe-area-context": "5.6.0",
|
|
34
|
+
"react-native-screens": "4.14.0",
|
|
35
|
+
"react-native-web": "~0.21.0"
|
|
42
36
|
},
|
|
43
37
|
"devDependencies": {
|
|
44
|
-
"@
|
|
45
|
-
"
|
|
46
|
-
"typescript": "~5.8.3",
|
|
38
|
+
"@types/react": "~19.1.0",
|
|
39
|
+
"typescript": "~5.9.2",
|
|
47
40
|
"eslint": "^9.25.0",
|
|
48
|
-
"eslint-config-expo": "~
|
|
49
|
-
}
|
|
50
|
-
"gitHead": "cb7062e2c17d1fb09522834aaaac0e19b766df62"
|
|
41
|
+
"eslint-config-expo": "~10.0.0"
|
|
42
|
+
}
|
|
51
43
|
}
|
package/app/+not-found.tsx
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Link, Stack } from 'expo-router';
|
|
2
|
-
import { StyleSheet } from 'react-native';
|
|
3
|
-
|
|
4
|
-
import { ThemedText } from '@/components/ThemedText';
|
|
5
|
-
import { ThemedView } from '@/components/ThemedView';
|
|
6
|
-
|
|
7
|
-
export default function NotFoundScreen() {
|
|
8
|
-
return (
|
|
9
|
-
<>
|
|
10
|
-
<Stack.Screen options={{ title: 'Oops!' }} />
|
|
11
|
-
<ThemedView style={styles.container}>
|
|
12
|
-
<ThemedText type="title">This screen does not exist.</ThemedText>
|
|
13
|
-
<Link href="/" style={styles.link}>
|
|
14
|
-
<ThemedText type="link">Go to home screen!</ThemedText>
|
|
15
|
-
</Link>
|
|
16
|
-
</ThemedView>
|
|
17
|
-
</>
|
|
18
|
-
);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const styles = StyleSheet.create({
|
|
22
|
-
container: {
|
|
23
|
-
flex: 1,
|
|
24
|
-
alignItems: 'center',
|
|
25
|
-
justifyContent: 'center',
|
|
26
|
-
padding: 20,
|
|
27
|
-
},
|
|
28
|
-
link: {
|
|
29
|
-
marginTop: 15,
|
|
30
|
-
paddingVertical: 15,
|
|
31
|
-
},
|
|
32
|
-
});
|
|
Binary file
|
package/components/HelloWave.tsx
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
2
|
-
import { StyleSheet } from 'react-native';
|
|
3
|
-
import Animated, {
|
|
4
|
-
useAnimatedStyle,
|
|
5
|
-
useSharedValue,
|
|
6
|
-
withRepeat,
|
|
7
|
-
withSequence,
|
|
8
|
-
withTiming,
|
|
9
|
-
} from 'react-native-reanimated';
|
|
10
|
-
|
|
11
|
-
import { ThemedText } from '@/components/ThemedText';
|
|
12
|
-
|
|
13
|
-
export function HelloWave() {
|
|
14
|
-
const rotationAnimation = useSharedValue(0);
|
|
15
|
-
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
rotationAnimation.value = withRepeat(
|
|
18
|
-
withSequence(withTiming(25, { duration: 150 }), withTiming(0, { duration: 150 })),
|
|
19
|
-
4 // Run the animation 4 times
|
|
20
|
-
);
|
|
21
|
-
}, [rotationAnimation]);
|
|
22
|
-
|
|
23
|
-
const animatedStyle = useAnimatedStyle(() => ({
|
|
24
|
-
transform: [{ rotate: `${rotationAnimation.value}deg` }],
|
|
25
|
-
}));
|
|
26
|
-
|
|
27
|
-
return (
|
|
28
|
-
<Animated.View style={animatedStyle}>
|
|
29
|
-
<ThemedText style={styles.text}>👋</ThemedText>
|
|
30
|
-
</Animated.View>
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const styles = StyleSheet.create({
|
|
35
|
-
text: {
|
|
36
|
-
fontSize: 28,
|
|
37
|
-
lineHeight: 32,
|
|
38
|
-
marginTop: -6,
|
|
39
|
-
},
|
|
40
|
-
});
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { BlurView } from 'expo-blur';
|
|
2
|
-
import { StyleSheet } from 'react-native';
|
|
3
|
-
import { useBottomTabBarHeight } from '@react-navigation/bottom-tabs';
|
|
4
|
-
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
5
|
-
|
|
6
|
-
export function TabBarBackground() {
|
|
7
|
-
return (
|
|
8
|
-
<BlurView
|
|
9
|
-
// System chrome material automatically adapts to the system's theme
|
|
10
|
-
// and matches the native tab bar appearance on iOS.
|
|
11
|
-
tint="systemChromeMaterial"
|
|
12
|
-
intensity={70}
|
|
13
|
-
style={StyleSheet.absoluteFill}
|
|
14
|
-
/>
|
|
15
|
-
);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function useBottomTabOverflow() {
|
|
19
|
-
const insets = useSafeAreaInsets();
|
|
20
|
-
const tabBarHeight = useBottomTabBarHeight();
|
|
21
|
-
|
|
22
|
-
return {
|
|
23
|
-
scrollInsetBottom: tabBarHeight - insets.bottom,
|
|
24
|
-
paddingBottom: tabBarHeight,
|
|
25
|
-
};
|
|
26
|
-
}
|
package/constants/Colors.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Below are the colors that are used in the app. The colors are defined in the light and dark mode.
|
|
3
|
-
* There are many other ways to style your app. For example, [Nativewind](https://www.nativewind.dev/), [Tamagui](https://tamagui.dev/), [unistyles](https://reactnativeunistyles.vercel.app), etc.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const tintColorLight = '#0a7ea4';
|
|
7
|
-
const tintColorDark = '#fff';
|
|
8
|
-
|
|
9
|
-
export const Colors = {
|
|
10
|
-
light: {
|
|
11
|
-
text: '#11181C',
|
|
12
|
-
background: '#fff',
|
|
13
|
-
tint: tintColorLight,
|
|
14
|
-
icon: '#687076',
|
|
15
|
-
tabIconDefault: '#687076',
|
|
16
|
-
tabIconSelected: tintColorLight,
|
|
17
|
-
},
|
|
18
|
-
dark: {
|
|
19
|
-
text: '#ECEDEE',
|
|
20
|
-
background: '#151718',
|
|
21
|
-
tint: tintColorDark,
|
|
22
|
-
icon: '#9BA1A6',
|
|
23
|
-
tabIconDefault: '#9BA1A6',
|
|
24
|
-
tabIconSelected: tintColorDark,
|
|
25
|
-
},
|
|
26
|
-
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|