diff --git a/apps/mobile/.claude/settings.json b/apps/mobile/.claude/settings.json deleted file mode 100644 index 176e6a5..0000000 --- a/apps/mobile/.claude/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "enabledPlugins": { - "expo@claude-plugins-official": true - } -} diff --git a/apps/mobile/.gitignore b/apps/mobile/.gitignore deleted file mode 100644 index f8c6c2e..0000000 --- a/apps/mobile/.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files - -# dependencies -node_modules/ - -# Expo -.expo/ -dist/ -web-build/ -expo-env.d.ts - -# Native -.kotlin/ -*.orig.* -*.jks -*.p8 -*.p12 -*.key -*.mobileprovision - -# Metro -.metro-health-check* - -# debug -npm-debug.* -yarn-debug.* -yarn-error.* - -# macOS -.DS_Store -*.pem - -# local env files -.env*.local - -# typescript -*.tsbuildinfo - -app-example - -# generated native folders -/ios -/android diff --git a/apps/mobile/.vscode/extensions.json b/apps/mobile/.vscode/extensions.json deleted file mode 100644 index b7ed837..0000000 --- a/apps/mobile/.vscode/extensions.json +++ /dev/null @@ -1 +0,0 @@ -{ "recommendations": ["expo.vscode-expo-tools"] } diff --git a/apps/mobile/.vscode/settings.json b/apps/mobile/.vscode/settings.json deleted file mode 100644 index e2798e4..0000000 --- a/apps/mobile/.vscode/settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "editor.codeActionsOnSave": { - "source.fixAll": "explicit", - "source.organizeImports": "explicit", - "source.sortMembers": "explicit" - } -} diff --git a/apps/mobile/AGENTS.md b/apps/mobile/AGENTS.md deleted file mode 100644 index a62f7ed..0000000 --- a/apps/mobile/AGENTS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Expo HAS CHANGED - -Read the exact versioned docs at https://docs.expo.dev/versions/v55.0.0/ before writing any code. diff --git a/apps/mobile/CLAUDE.md b/apps/mobile/CLAUDE.md deleted file mode 100644 index 43c994c..0000000 --- a/apps/mobile/CLAUDE.md +++ /dev/null @@ -1 +0,0 @@ -@AGENTS.md diff --git a/apps/mobile/README.md b/apps/mobile/README.md deleted file mode 100644 index 4d67aec..0000000 --- a/apps/mobile/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# Welcome to your Expo app šŸ‘‹ - -This is an [Expo](https://expo.dev) project created with [`create-expo-app`](https://www.npmjs.com/package/create-expo-app). - -## Get started - -1. Install dependencies - - ```bash - npm install - ``` - -2. Start the app - - ```bash - npx expo start - ``` - -In the output, you'll find options to open the app in a - -- [development build](https://docs.expo.dev/develop/development-builds/introduction/) -- [Android emulator](https://docs.expo.dev/workflow/android-studio-emulator/) -- [iOS simulator](https://docs.expo.dev/workflow/ios-simulator/) -- [Expo Go](https://expo.dev/go), a limited sandbox for trying out app development with Expo - -You can start developing by editing the files inside the **app** directory. This project uses [file-based routing](https://docs.expo.dev/router/introduction). - -## Get a fresh project - -When you're ready, run: - -```bash -npm run reset-project -``` - -This command will move the starter code to the **app-example** directory and create a blank **app** directory where you can start developing. - -### Other setup steps - -- To set up ESLint for linting, run `npx expo lint`, or follow our guide on ["Using ESLint and Prettier"](https://docs.expo.dev/guides/using-eslint/) -- If you'd like to set up unit testing, follow our guide on ["Unit Testing with Jest"](https://docs.expo.dev/develop/unit-testing/) -- Learn more about the TypeScript setup in this template in our guide on ["Using TypeScript"](https://docs.expo.dev/guides/typescript/) - -## Learn more - -To learn more about developing your project with Expo, look at the following resources: - -- [Expo documentation](https://docs.expo.dev/): Learn fundamentals, or go into advanced topics with our [guides](https://docs.expo.dev/guides). -- [Learn Expo tutorial](https://docs.expo.dev/tutorial/introduction/): Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web. - -## Join the community - -Join our community of developers creating universal apps. - -- [Expo on GitHub](https://github.com/expo/expo): View our open source platform and contribute. -- [Discord community](https://chat.expo.dev): Chat with Expo users and ask questions. diff --git a/apps/mobile/app.json b/apps/mobile/app.json deleted file mode 100644 index 765ecc8..0000000 --- a/apps/mobile/app.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "expo": { - "name": "mobile", - "slug": "mobile", - "version": "1.0.0", - "orientation": "portrait", - "icon": "./assets/images/icon.png", - "scheme": "mobile", - "userInterfaceStyle": "automatic", - "ios": { - "icon": "./assets/expo.icon" - }, - "android": { - "adaptiveIcon": { - "backgroundColor": "#E6F4FE", - "foregroundImage": "./assets/images/android-icon-foreground.png", - "backgroundImage": "./assets/images/android-icon-background.png", - "monochromeImage": "./assets/images/android-icon-monochrome.png" - }, - "predictiveBackGestureEnabled": false - }, - "web": { - "output": "static", - "favicon": "./assets/images/favicon.png" - }, - "plugins": [ - "expo-router", - [ - "expo-splash-screen", - { - "backgroundColor": "#208AEF", - "android": { - "image": "./assets/images/splash-icon.png", - "imageWidth": 76 - } - } - ], - "expo-secure-store", - "expo-web-browser" - ], - "experiments": { - "typedRoutes": true, - "reactCompiler": true - }, - "extra": { - "router": {}, - "eas": { - "projectId": "00d6ac0f-2366-4d7e-843c-20cf79f4ea7d" - } - }, - "owner": "refrakts" - } -} diff --git a/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg b/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg deleted file mode 100644 index 51d3676..0000000 --- a/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/mobile/assets/expo.icon/Assets/grid.png b/apps/mobile/assets/expo.icon/Assets/grid.png deleted file mode 100644 index eefea24..0000000 Binary files a/apps/mobile/assets/expo.icon/Assets/grid.png and /dev/null differ diff --git a/apps/mobile/assets/expo.icon/icon.json b/apps/mobile/assets/expo.icon/icon.json deleted file mode 100644 index 7a2c33c..0000000 --- a/apps/mobile/assets/expo.icon/icon.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "fill" : { - "automatic-gradient" : "extended-srgb:0.00000,0.47843,1.00000,1.00000" - }, - "groups" : [ - { - "layers" : [ - { - "image-name" : "expo-symbol 2.svg", - "name" : "expo-symbol 2", - "position" : { - "scale" : 1, - "translation-in-points" : [ - 1.1008400065293245e-05, - -16.046875 - ] - } - }, - { - "image-name" : "grid.png", - "name" : "grid" - } - ], - "shadow" : { - "kind" : "neutral", - "opacity" : 0.5 - }, - "translucency" : { - "enabled" : true, - "value" : 0.5 - } - } - ], - "supported-platforms" : { - "circles" : [ - "watchOS" - ], - "squares" : "shared" - } -} \ No newline at end of file diff --git a/apps/mobile/assets/images/android-icon-background.png b/apps/mobile/assets/images/android-icon-background.png deleted file mode 100644 index 5ffefc5..0000000 Binary files a/apps/mobile/assets/images/android-icon-background.png and /dev/null differ diff --git a/apps/mobile/assets/images/android-icon-foreground.png b/apps/mobile/assets/images/android-icon-foreground.png deleted file mode 100644 index 3a9e501..0000000 Binary files a/apps/mobile/assets/images/android-icon-foreground.png and /dev/null differ diff --git a/apps/mobile/assets/images/android-icon-monochrome.png b/apps/mobile/assets/images/android-icon-monochrome.png deleted file mode 100644 index 77484eb..0000000 Binary files a/apps/mobile/assets/images/android-icon-monochrome.png and /dev/null differ diff --git a/apps/mobile/assets/images/expo-badge-white.png b/apps/mobile/assets/images/expo-badge-white.png deleted file mode 100644 index 2863067..0000000 Binary files a/apps/mobile/assets/images/expo-badge-white.png and /dev/null differ diff --git a/apps/mobile/assets/images/expo-badge.png b/apps/mobile/assets/images/expo-badge.png deleted file mode 100644 index 5d5c5bb..0000000 Binary files a/apps/mobile/assets/images/expo-badge.png and /dev/null differ diff --git a/apps/mobile/assets/images/expo-logo.png b/apps/mobile/assets/images/expo-logo.png deleted file mode 100644 index 6b1642a..0000000 Binary files a/apps/mobile/assets/images/expo-logo.png and /dev/null differ diff --git a/apps/mobile/assets/images/favicon.png b/apps/mobile/assets/images/favicon.png deleted file mode 100644 index 408bd74..0000000 Binary files a/apps/mobile/assets/images/favicon.png and /dev/null differ diff --git a/apps/mobile/assets/images/icon.png b/apps/mobile/assets/images/icon.png deleted file mode 100644 index 67c777a..0000000 Binary files a/apps/mobile/assets/images/icon.png and /dev/null differ diff --git a/apps/mobile/assets/images/logo-glow.png b/apps/mobile/assets/images/logo-glow.png deleted file mode 100644 index edc99be..0000000 Binary files a/apps/mobile/assets/images/logo-glow.png and /dev/null differ diff --git a/apps/mobile/assets/images/react-logo.png b/apps/mobile/assets/images/react-logo.png deleted file mode 100644 index 9d72a9f..0000000 Binary files a/apps/mobile/assets/images/react-logo.png and /dev/null differ diff --git a/apps/mobile/assets/images/react-logo@2x.png b/apps/mobile/assets/images/react-logo@2x.png deleted file mode 100644 index 2229b13..0000000 Binary files a/apps/mobile/assets/images/react-logo@2x.png and /dev/null differ diff --git a/apps/mobile/assets/images/react-logo@3x.png b/apps/mobile/assets/images/react-logo@3x.png deleted file mode 100644 index a99b203..0000000 Binary files a/apps/mobile/assets/images/react-logo@3x.png and /dev/null differ diff --git a/apps/mobile/assets/images/splash-icon.png b/apps/mobile/assets/images/splash-icon.png deleted file mode 100644 index 6b1642a..0000000 Binary files a/apps/mobile/assets/images/splash-icon.png and /dev/null differ diff --git a/apps/mobile/assets/images/tabIcons/explore.png b/apps/mobile/assets/images/tabIcons/explore.png deleted file mode 100644 index 73d8258..0000000 Binary files a/apps/mobile/assets/images/tabIcons/explore.png and /dev/null differ diff --git a/apps/mobile/assets/images/tabIcons/explore@2x.png b/apps/mobile/assets/images/tabIcons/explore@2x.png deleted file mode 100644 index 21b9bd2..0000000 Binary files a/apps/mobile/assets/images/tabIcons/explore@2x.png and /dev/null differ diff --git a/apps/mobile/assets/images/tabIcons/explore@3x.png b/apps/mobile/assets/images/tabIcons/explore@3x.png deleted file mode 100644 index 422202d..0000000 Binary files a/apps/mobile/assets/images/tabIcons/explore@3x.png and /dev/null differ diff --git a/apps/mobile/assets/images/tabIcons/home.png b/apps/mobile/assets/images/tabIcons/home.png deleted file mode 100644 index ad5699c..0000000 Binary files a/apps/mobile/assets/images/tabIcons/home.png and /dev/null differ diff --git a/apps/mobile/assets/images/tabIcons/home@2x.png b/apps/mobile/assets/images/tabIcons/home@2x.png deleted file mode 100644 index 22a1f2c..0000000 Binary files a/apps/mobile/assets/images/tabIcons/home@2x.png and /dev/null differ diff --git a/apps/mobile/assets/images/tabIcons/home@3x.png b/apps/mobile/assets/images/tabIcons/home@3x.png deleted file mode 100644 index f5d1f9a..0000000 Binary files a/apps/mobile/assets/images/tabIcons/home@3x.png and /dev/null differ diff --git a/apps/mobile/assets/images/tutorial-web.png b/apps/mobile/assets/images/tutorial-web.png deleted file mode 100644 index e4a8c58..0000000 Binary files a/apps/mobile/assets/images/tutorial-web.png and /dev/null differ diff --git a/apps/mobile/metro.config.js b/apps/mobile/metro.config.js deleted file mode 100644 index 73cd076..0000000 --- a/apps/mobile/metro.config.js +++ /dev/null @@ -1,12 +0,0 @@ -const { getDefaultConfig } = require("expo/metro-config"); -const path = require("path"); -const projectRoot = __dirname; -const workspaceRoot = path.resolve(projectRoot, "../.."); -const config = getDefaultConfig(projectRoot); -config.watchFolders = [workspaceRoot]; -config.resolver.nodeModulesPaths = [ - path.resolve(projectRoot, "node_modules"), - path.resolve(workspaceRoot, "node_modules"), -]; -config.resolver.disableHierarchicalLookup = true; -module.exports = config; diff --git a/apps/mobile/package.json b/apps/mobile/package.json deleted file mode 100644 index a41ac7b..0000000 --- a/apps/mobile/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "mobile", - "main": "expo-router/entry", - "version": "1.0.0", - "scripts": { - "start": "expo start", - "reset-project": "node ./scripts/reset-project.js", - "android": "expo start --android", - "ios": "expo start --ios", - "web": "expo start --web", - "lint": "expo lint" - }, - "dependencies": { - "@expo/ui": "~55.0.16", - "@react-navigation/bottom-tabs": "^7.15.5", - "@react-navigation/elements": "^2.9.10", - "@react-navigation/native": "^7.1.33", - "@shopify/flash-list": "2.0.2", - "@tanstack/react-query": "^5.100.10", - "expo": "~55.0.24", - "expo-auth-session": "~55.0.16", - "expo-constants": "~55.0.16", - "expo-crypto": "~55.0.15", - "expo-device": "~55.0.17", - "expo-font": "~55.0.7", - "expo-glass-effect": "~55.0.11", - "expo-image": "~55.0.10", - "expo-linking": "~55.0.15", - "expo-notifications": "~55.0.23", - "expo-router": "~55.0.14", - "expo-secure-store": "~55.0.14", - "expo-splash-screen": "~55.0.21", - "expo-status-bar": "~55.0.6", - "expo-symbols": "~55.0.8", - "expo-system-ui": "~55.0.18", - "expo-web-browser": "~55.0.16", - "react": "19.2.0", - "react-dom": "19.2.0", - "react-native": "0.83.6", - "react-native-gesture-handler": "~2.30.0", - "react-native-markdown-display": "^7.0.2", - "react-native-reanimated": "4.2.1", - "react-native-safe-area-context": "~5.6.2", - "react-native-screens": "~4.23.0", - "react-native-web": "~0.21.0", - "react-native-worklets": "0.7.4" - }, - "devDependencies": { - "@types/react": "~19.2.2", - "typescript": "~5.9.2" - }, - "private": true -} diff --git a/apps/mobile/scripts/reset-project.js b/apps/mobile/scripts/reset-project.js deleted file mode 100755 index 055d15b..0000000 --- a/apps/mobile/scripts/reset-project.js +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env node - -/** - * This script is used to reset the project to a blank state. - * It deletes or moves the /src and /scripts directories to /example based on user input and creates a new /src/app directory with an index.tsx and _layout.tsx file. - * You can remove the `reset-project` script from package.json and safely delete this file after running it. - */ - -const fs = require("fs"); -const path = require("path"); -const readline = require("readline"); - -const root = process.cwd(); -const oldDirs = ["src", "scripts"]; -const exampleDir = "example"; -const newAppDir = "src/app"; -const exampleDirPath = path.join(root, exampleDir); - -const indexContent = `import { Text, View, StyleSheet } from "react-native"; - -export default function Index() { - return ( - - Edit src/app/index.tsx to edit this screen. - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - alignItems: "center", - justifyContent: "center", - }, -}); -`; - -const layoutContent = `import { Stack } from "expo-router"; - -export default function RootLayout() { - return ; -} -`; - -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, -}); - -const moveDirectories = async (userInput) => { - try { - if (userInput === "y") { - // Create the app-example directory - await fs.promises.mkdir(exampleDirPath, { recursive: true }); - console.log(`šŸ“ /${exampleDir} directory created.`); - } - - // Move old directories to new app-example directory or delete them - for (const dir of oldDirs) { - const oldDirPath = path.join(root, dir); - if (fs.existsSync(oldDirPath)) { - if (userInput === "y") { - const newDirPath = path.join(root, exampleDir, dir); - await fs.promises.rename(oldDirPath, newDirPath); - console.log(`āž”ļø /${dir} moved to /${exampleDir}/${dir}.`); - } else { - await fs.promises.rm(oldDirPath, { recursive: true, force: true }); - console.log(`āŒ /${dir} deleted.`); - } - } else { - console.log(`āž”ļø /${dir} does not exist, skipping.`); - } - } - - // Create new /src/app directory - const newAppDirPath = path.join(root, newAppDir); - await fs.promises.mkdir(newAppDirPath, { recursive: true }); - console.log("\nšŸ“ New /src/app directory created."); - - // Create index.tsx - const indexPath = path.join(newAppDirPath, "index.tsx"); - await fs.promises.writeFile(indexPath, indexContent); - console.log("šŸ“„ src/app/index.tsx created."); - - // Create _layout.tsx - const layoutPath = path.join(newAppDirPath, "_layout.tsx"); - await fs.promises.writeFile(layoutPath, layoutContent); - console.log("šŸ“„ src/app/_layout.tsx created."); - - console.log("\nāœ… Project reset complete. Next steps:"); - console.log( - `1. Run \`npx expo start\` to start a development server.\n2. Edit src/app/index.tsx to edit the main screen.\n3. Put all your application code in /src, only screens and layout files should be in /src/app.${ - userInput === "y" - ? `\n4. Delete the /${exampleDir} directory when you're done referencing it.` - : "" - }` - ); - } catch (error) { - console.error(`āŒ Error during script execution: ${error.message}`); - } -}; - -rl.question( - "Do you want to move existing files to /example instead of deleting them? (Y/n): ", - (answer) => { - const userInput = answer.trim().toLowerCase() || "y"; - if (userInput === "y" || userInput === "n") { - moveDirectories(userInput).finally(() => rl.close()); - } else { - console.log("āŒ Invalid input. Please enter 'Y' or 'N'."); - rl.close(); - } - } -); diff --git a/apps/mobile/src/app/_layout.tsx b/apps/mobile/src/app/_layout.tsx deleted file mode 100644 index b04d0a8..0000000 --- a/apps/mobile/src/app/_layout.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native'; -import React from 'react'; -import { useColorScheme } from 'react-native'; - -import { AnimatedSplashOverlay } from '@/components/animated-icon'; -import AppTabs from '@/components/app-tabs'; - -export default function TabLayout() { - const colorScheme = useColorScheme(); - return ( - - - - - ); -} diff --git a/apps/mobile/src/app/explore.tsx b/apps/mobile/src/app/explore.tsx deleted file mode 100644 index f08c5d3..0000000 --- a/apps/mobile/src/app/explore.tsx +++ /dev/null @@ -1,181 +0,0 @@ -import { Image } from 'expo-image'; -import { SymbolView } from 'expo-symbols'; -import React from 'react'; -import { Platform, Pressable, ScrollView, StyleSheet } from 'react-native'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; - -import { ExternalLink } from '@/components/external-link'; -import { ThemedText } from '@/components/themed-text'; -import { ThemedView } from '@/components/themed-view'; -import { Collapsible } from '@/components/ui/collapsible'; -import { WebBadge } from '@/components/web-badge'; -import { BottomTabInset, MaxContentWidth, Spacing } from '@/constants/theme'; -import { useTheme } from '@/hooks/use-theme'; - -export default function TabTwoScreen() { - const safeAreaInsets = useSafeAreaInsets(); - const insets = { - ...safeAreaInsets, - bottom: safeAreaInsets.bottom + BottomTabInset + Spacing.three, - }; - const theme = useTheme(); - - const contentPlatformStyle = Platform.select({ - android: { - paddingTop: insets.top, - paddingLeft: insets.left, - paddingRight: insets.right, - paddingBottom: insets.bottom, - }, - web: { - paddingTop: Spacing.six, - paddingBottom: Spacing.four, - }, - }); - - return ( - - - - Explore - - This starter app includes example{'\n'}code to help you get started. - - - - pressed && styles.pressed}> - - Expo documentation - - - - - - - - - - This app has two screens: src/app/index.tsx and{' '} - src/app/explore.tsx - - - The layout file in src/app/_layout.tsx sets up - the tab navigator. - - - Learn more - - - - - - - You can open this project on Android, iOS, and the web. To open the web version, - press w in the terminal running this - project. - - - - - - - - For static images, you can use the @2x and{' '} - @3x suffixes to provide files for different - screen densities. - - - - Learn more - - - - - - This template has light and dark mode support. The{' '} - useColorScheme() hook lets you inspect what the - user's current color scheme is, and so you can adjust UI colors accordingly. - - - Learn more - - - - - - This template includes an example of an animated component. The{' '} - src/components/ui/collapsible.tsx component uses - the powerful react-native-reanimated library to - animate opening this hint. - - - - {Platform.OS === 'web' && } - - - ); -} - -const styles = StyleSheet.create({ - scrollView: { - flex: 1, - }, - contentContainer: { - flexDirection: 'row', - justifyContent: 'center', - }, - container: { - maxWidth: MaxContentWidth, - flexGrow: 1, - }, - titleContainer: { - gap: Spacing.three, - alignItems: 'center', - paddingHorizontal: Spacing.four, - paddingVertical: Spacing.six, - }, - centerText: { - textAlign: 'center', - }, - pressed: { - opacity: 0.7, - }, - linkButton: { - flexDirection: 'row', - paddingHorizontal: Spacing.four, - paddingVertical: Spacing.two, - borderRadius: Spacing.five, - justifyContent: 'center', - gap: Spacing.one, - alignItems: 'center', - }, - sectionsWrapper: { - gap: Spacing.five, - paddingHorizontal: Spacing.four, - paddingTop: Spacing.three, - }, - collapsibleContent: { - alignItems: 'center', - }, - imageTutorial: { - width: '100%', - aspectRatio: 296 / 171, - borderRadius: Spacing.three, - marginTop: Spacing.two, - }, - imageReact: { - width: 100, - height: 100, - alignSelf: 'center', - }, -}); diff --git a/apps/mobile/src/app/index.tsx b/apps/mobile/src/app/index.tsx deleted file mode 100644 index 8ec3e6f..0000000 --- a/apps/mobile/src/app/index.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import * as Device from 'expo-device'; -import { Platform, StyleSheet } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; - -import { AnimatedIcon } from '@/components/animated-icon'; -import { HintRow } from '@/components/hint-row'; -import { ThemedText } from '@/components/themed-text'; -import { ThemedView } from '@/components/themed-view'; -import { WebBadge } from '@/components/web-badge'; -import { BottomTabInset, MaxContentWidth, Spacing } from '@/constants/theme'; - -function getDevMenuHint() { - if (Platform.OS === 'web') { - return use browser devtools; - } - if (Device.isDevice) { - return ( - - shake device or press m in terminal - - ); - } - const shortcut = Platform.OS === 'android' ? 'cmd+m (or ctrl+m)' : 'cmd+d'; - return ( - - press {shortcut} - - ); -} - -export default function HomeScreen() { - return ( - - - - - - Welcome to Expo - - - - - get started - - - - src/app/index.tsx} - /> - - npm run reset-project} - /> - - - {Platform.OS === 'web' && } - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - flexDirection: 'row', - }, - safeArea: { - flex: 1, - paddingHorizontal: Spacing.four, - alignItems: 'center', - gap: Spacing.three, - paddingBottom: BottomTabInset + Spacing.three, - maxWidth: MaxContentWidth, - }, - heroSection: { - alignItems: 'center', - justifyContent: 'center', - flex: 1, - paddingHorizontal: Spacing.four, - gap: Spacing.four, - }, - title: { - textAlign: 'center', - }, - code: { - textTransform: 'uppercase', - }, - stepContainer: { - gap: Spacing.three, - alignSelf: 'stretch', - paddingHorizontal: Spacing.three, - paddingVertical: Spacing.four, - borderRadius: Spacing.four, - }, -}); diff --git a/apps/mobile/src/components/animated-icon.module.css b/apps/mobile/src/components/animated-icon.module.css deleted file mode 100644 index f8156fe..0000000 --- a/apps/mobile/src/components/animated-icon.module.css +++ /dev/null @@ -1,6 +0,0 @@ -.expoLogoBackground { - background-image: linear-gradient(180deg, #3c9ffe, #0274df); - border-radius: 40px; - width: 128px; - height: 128px; -} diff --git a/apps/mobile/src/components/animated-icon.tsx b/apps/mobile/src/components/animated-icon.tsx deleted file mode 100644 index 91a480f..0000000 --- a/apps/mobile/src/components/animated-icon.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { Image } from 'expo-image'; -import { useState } from 'react'; -import { Dimensions, StyleSheet, View } from 'react-native'; -import Animated, { Easing, Keyframe } from 'react-native-reanimated'; -import { scheduleOnRN } from 'react-native-worklets'; - -const INITIAL_SCALE_FACTOR = Dimensions.get('screen').height / 90; -const DURATION = 600; - -export function AnimatedSplashOverlay() { - const [visible, setVisible] = useState(true); - - if (!visible) return null; - - const splashKeyframe = new Keyframe({ - 0: { - transform: [{ scale: INITIAL_SCALE_FACTOR }], - opacity: 1, - }, - 20: { - opacity: 1, - }, - 70: { - opacity: 0, - easing: Easing.elastic(0.7), - }, - 100: { - opacity: 0, - transform: [{ scale: 1 }], - easing: Easing.elastic(0.7), - }, - }); - - return ( - { - 'worklet'; - if (finished) { - scheduleOnRN(setVisible, false); - } - })} - style={styles.backgroundSolidColor} - /> - ); -} - -const keyframe = new Keyframe({ - 0: { - transform: [{ scale: INITIAL_SCALE_FACTOR }], - }, - 100: { - transform: [{ scale: 1 }], - easing: Easing.elastic(0.7), - }, -}); - -const logoKeyframe = new Keyframe({ - 0: { - transform: [{ scale: 1.3 }], - opacity: 0, - }, - 40: { - transform: [{ scale: 1.3 }], - opacity: 0, - easing: Easing.elastic(0.7), - }, - 100: { - opacity: 1, - transform: [{ scale: 1 }], - easing: Easing.elastic(0.7), - }, -}); - -const glowKeyframe = new Keyframe({ - 0: { - transform: [{ rotateZ: '0deg' }], - }, - 100: { - transform: [{ rotateZ: '7200deg' }], - }, -}); - -export function AnimatedIcon() { - return ( - - - - - - - - - - - ); -} - -const styles = StyleSheet.create({ - imageContainer: { - justifyContent: 'center', - alignItems: 'center', - }, - glow: { - width: 201, - height: 201, - position: 'absolute', - }, - iconContainer: { - justifyContent: 'center', - alignItems: 'center', - width: 128, - height: 128, - zIndex: 100, - }, - image: { - position: 'absolute', - width: 76, - height: 71, - }, - background: { - borderRadius: 40, - experimental_backgroundImage: `linear-gradient(180deg, #3C9FFE, #0274DF)`, - width: 128, - height: 128, - position: 'absolute', - }, - backgroundSolidColor: { - ...StyleSheet.absoluteFillObject, - backgroundColor: '#208AEF', - zIndex: 1000, - }, -}); diff --git a/apps/mobile/src/components/animated-icon.web.tsx b/apps/mobile/src/components/animated-icon.web.tsx deleted file mode 100644 index dfbb1fd..0000000 --- a/apps/mobile/src/components/animated-icon.web.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import { Image } from 'expo-image'; -import { StyleSheet, View } from 'react-native'; -import Animated, { Keyframe, Easing } from 'react-native-reanimated'; - -import classes from './animated-icon.module.css'; -const DURATION = 300; - -export function AnimatedSplashOverlay() { - return null; -} - -const keyframe = new Keyframe({ - 0: { - transform: [{ scale: 0 }], - }, - 60: { - transform: [{ scale: 1.2 }], - easing: Easing.elastic(1.2), - }, - 100: { - transform: [{ scale: 1 }], - easing: Easing.elastic(1.2), - }, -}); - -const logoKeyframe = new Keyframe({ - 0: { - opacity: 0, - }, - 60: { - transform: [{ scale: 1.2 }], - opacity: 0, - easing: Easing.elastic(1.2), - }, - 100: { - transform: [{ scale: 1 }], - opacity: 1, - easing: Easing.elastic(1.2), - }, -}); - -const glowKeyframe = new Keyframe({ - 0: { - transform: [{ rotateZ: '-180deg' }, { scale: 0.8 }], - opacity: 0, - }, - [DURATION / 1000]: { - transform: [{ rotateZ: '0deg' }, { scale: 1 }], - opacity: 1, - easing: Easing.elastic(0.7), - }, - 100: { - transform: [{ rotateZ: '7200deg' }], - }, -}); - -export function AnimatedIcon() { - return ( - - - - - - -
- - - - - - - ); -} - -const styles = StyleSheet.create({ - container: { - alignItems: 'center', - width: '100%', - zIndex: 1000, - position: 'absolute', - top: 128 / 2 + 138, - }, - imageContainer: { - justifyContent: 'center', - alignItems: 'center', - }, - glow: { - width: 201, - height: 201, - position: 'absolute', - }, - iconContainer: { - justifyContent: 'center', - alignItems: 'center', - width: 128, - height: 128, - }, - image: { - position: 'absolute', - width: 76, - height: 71, - }, - background: { - width: 128, - height: 128, - position: 'absolute', - }, -}); diff --git a/apps/mobile/src/components/app-tabs.tsx b/apps/mobile/src/components/app-tabs.tsx deleted file mode 100644 index 0e1bc23..0000000 --- a/apps/mobile/src/components/app-tabs.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { NativeTabs } from 'expo-router/unstable-native-tabs'; -import React from 'react'; -import { useColorScheme } from 'react-native'; - -import { Colors } from '@/constants/theme'; - -export default function AppTabs() { - const scheme = useColorScheme(); - const colors = Colors[scheme === 'unspecified' ? 'light' : scheme]; - - return ( - - - Home - - - - - Explore - - - - ); -} diff --git a/apps/mobile/src/components/app-tabs.web.tsx b/apps/mobile/src/components/app-tabs.web.tsx deleted file mode 100644 index 6542e46..0000000 --- a/apps/mobile/src/components/app-tabs.web.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import { - Tabs, - TabList, - TabTrigger, - TabSlot, - TabTriggerSlotProps, - TabListProps, -} from 'expo-router/ui'; -import { SymbolView } from 'expo-symbols'; -import React from 'react'; -import { Pressable, useColorScheme, View, StyleSheet } from 'react-native'; - -import { ExternalLink } from './external-link'; -import { ThemedText } from './themed-text'; -import { ThemedView } from './themed-view'; - -import { Colors, MaxContentWidth, Spacing } from '@/constants/theme'; - -export default function AppTabs() { - return ( - - - - - - Home - - - Explore - - - - - ); -} - -export function TabButton({ children, isFocused, ...props }: TabTriggerSlotProps) { - return ( - pressed && styles.pressed}> - - - {children} - - - - ); -} - -export function CustomTabList(props: TabListProps) { - const scheme = useColorScheme(); - const colors = Colors[scheme === 'unspecified' ? 'light' : scheme]; - - return ( - - - - Expo Starter - - - {props.children} - - - - Docs - - - - - - ); -} - -const styles = StyleSheet.create({ - tabListContainer: { - position: 'absolute', - width: '100%', - padding: Spacing.three, - justifyContent: 'center', - alignItems: 'center', - flexDirection: 'row', - }, - innerContainer: { - paddingVertical: Spacing.two, - paddingHorizontal: Spacing.five, - borderRadius: Spacing.five, - flexDirection: 'row', - alignItems: 'center', - flexGrow: 1, - gap: Spacing.two, - maxWidth: MaxContentWidth, - }, - brandText: { - marginRight: 'auto', - }, - pressed: { - opacity: 0.7, - }, - tabButtonView: { - paddingVertical: Spacing.one, - paddingHorizontal: Spacing.three, - borderRadius: Spacing.three, - }, - externalPressable: { - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - gap: Spacing.one, - marginLeft: Spacing.three, - }, -}); diff --git a/apps/mobile/src/components/external-link.tsx b/apps/mobile/src/components/external-link.tsx deleted file mode 100644 index 883e515..0000000 --- a/apps/mobile/src/components/external-link.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Href, Link } from 'expo-router'; -import { openBrowserAsync, WebBrowserPresentationStyle } from 'expo-web-browser'; -import { type ComponentProps } from 'react'; - -type Props = Omit, 'href'> & { href: Href & string }; - -export function ExternalLink({ href, ...rest }: Props) { - return ( - { - if (process.env.EXPO_OS !== 'web') { - // Prevent the default behavior of linking to the default browser on native. - event.preventDefault(); - // Open the link in an in-app browser. - await openBrowserAsync(href, { - presentationStyle: WebBrowserPresentationStyle.AUTOMATIC, - }); - } - }} - /> - ); -} diff --git a/apps/mobile/src/components/hint-row.tsx b/apps/mobile/src/components/hint-row.tsx deleted file mode 100644 index a66062b..0000000 --- a/apps/mobile/src/components/hint-row.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React, { type ReactNode } from 'react'; -import { View, StyleSheet } from 'react-native'; - -import { ThemedText } from './themed-text'; -import { ThemedView } from './themed-view'; - -import { Spacing } from '@/constants/theme'; - -type HintRowProps = { - title?: string; - hint?: ReactNode; -}; - -export function HintRow({ title = 'Try editing', hint = 'app/index.tsx' }: HintRowProps) { - return ( - - {title} - - {hint} - - - ); -} - -const styles = StyleSheet.create({ - stepRow: { - flexDirection: 'row', - justifyContent: 'space-between', - }, - codeSnippet: { - borderRadius: Spacing.two, - paddingVertical: Spacing.half, - paddingHorizontal: Spacing.two, - }, -}); diff --git a/apps/mobile/src/components/themed-text.tsx b/apps/mobile/src/components/themed-text.tsx deleted file mode 100644 index 799c8b1..0000000 --- a/apps/mobile/src/components/themed-text.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { Platform, StyleSheet, Text, type TextProps } from 'react-native'; - -import { Fonts, ThemeColor } from '@/constants/theme'; -import { useTheme } from '@/hooks/use-theme'; - -export type ThemedTextProps = TextProps & { - type?: 'default' | 'title' | 'small' | 'smallBold' | 'subtitle' | 'link' | 'linkPrimary' | 'code'; - themeColor?: ThemeColor; -}; - -export function ThemedText({ style, type = 'default', themeColor, ...rest }: ThemedTextProps) { - const theme = useTheme(); - - return ( - - ); -} - -const styles = StyleSheet.create({ - small: { - fontSize: 14, - lineHeight: 20, - fontWeight: 500, - }, - smallBold: { - fontSize: 14, - lineHeight: 20, - fontWeight: 700, - }, - default: { - fontSize: 16, - lineHeight: 24, - fontWeight: 500, - }, - title: { - fontSize: 48, - fontWeight: 600, - lineHeight: 52, - }, - subtitle: { - fontSize: 32, - lineHeight: 44, - fontWeight: 600, - }, - link: { - lineHeight: 30, - fontSize: 14, - }, - linkPrimary: { - lineHeight: 30, - fontSize: 14, - color: '#3c87f7', - }, - code: { - fontFamily: Fonts.mono, - fontWeight: Platform.select({ android: 700 }) ?? 500, - fontSize: 12, - }, -}); diff --git a/apps/mobile/src/components/themed-view.tsx b/apps/mobile/src/components/themed-view.tsx deleted file mode 100644 index c710df9..0000000 --- a/apps/mobile/src/components/themed-view.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { View, type ViewProps } from 'react-native'; - -import { ThemeColor } from '@/constants/theme'; -import { useTheme } from '@/hooks/use-theme'; - -export type ThemedViewProps = ViewProps & { - lightColor?: string; - darkColor?: string; - type?: ThemeColor; -}; - -export function ThemedView({ style, lightColor, darkColor, type, ...otherProps }: ThemedViewProps) { - const theme = useTheme(); - - return ; -} diff --git a/apps/mobile/src/components/ui/collapsible.tsx b/apps/mobile/src/components/ui/collapsible.tsx deleted file mode 100644 index d0d745b..0000000 --- a/apps/mobile/src/components/ui/collapsible.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { SymbolView } from 'expo-symbols'; -import { PropsWithChildren, useState } from 'react'; -import { Pressable, StyleSheet } from 'react-native'; -import Animated, { FadeIn } from 'react-native-reanimated'; - -import { ThemedText } from '@/components/themed-text'; -import { ThemedView } from '@/components/themed-view'; -import { Spacing } from '@/constants/theme'; -import { useTheme } from '@/hooks/use-theme'; - -export function Collapsible({ children, title }: PropsWithChildren & { title: string }) { - const [isOpen, setIsOpen] = useState(false); - const theme = useTheme(); - - return ( - - [styles.heading, pressed && styles.pressedHeading]} - onPress={() => setIsOpen((value) => !value)}> - - - - - {title} - - {isOpen && ( - - - {children} - - - )} - - ); -} - -const styles = StyleSheet.create({ - heading: { - flexDirection: 'row', - alignItems: 'center', - gap: Spacing.two, - }, - pressedHeading: { - opacity: 0.7, - }, - button: { - width: Spacing.four, - height: Spacing.four, - borderRadius: 12, - justifyContent: 'center', - alignItems: 'center', - }, - content: { - marginTop: Spacing.three, - borderRadius: Spacing.three, - marginLeft: Spacing.four, - padding: Spacing.four, - }, -}); diff --git a/apps/mobile/src/components/web-badge.tsx b/apps/mobile/src/components/web-badge.tsx deleted file mode 100644 index 23933d2..0000000 --- a/apps/mobile/src/components/web-badge.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { version } from 'expo/package.json'; -import { Image } from 'expo-image'; -import React from 'react'; -import { useColorScheme, StyleSheet } from 'react-native'; - -import { ThemedText } from './themed-text'; -import { ThemedView } from './themed-view'; - -import { Spacing } from '@/constants/theme'; - -export function WebBadge() { - const scheme = useColorScheme(); - - return ( - - - v{version} - - - - ); -} - -const styles = StyleSheet.create({ - container: { - padding: Spacing.five, - alignItems: 'center', - gap: Spacing.two, - }, - versionText: { - textAlign: 'center', - }, - badgeImage: { - width: 123, - aspectRatio: 123 / 24, - }, -}); diff --git a/apps/mobile/src/constants/theme.ts b/apps/mobile/src/constants/theme.ts deleted file mode 100644 index c10ed27..0000000 --- a/apps/mobile/src/constants/theme.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Below are the colors that are used in the app. The colors are defined in the light and dark mode. - * 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. - */ - -import '@/global.css'; - -import { Platform } from 'react-native'; - -export const Colors = { - light: { - text: '#000000', - background: '#ffffff', - backgroundElement: '#F0F0F3', - backgroundSelected: '#E0E1E6', - textSecondary: '#60646C', - }, - dark: { - text: '#ffffff', - background: '#000000', - backgroundElement: '#212225', - backgroundSelected: '#2E3135', - textSecondary: '#B0B4BA', - }, -} as const; - -export type ThemeColor = keyof typeof Colors.light & keyof typeof Colors.dark; - -export const Fonts = Platform.select({ - ios: { - /** iOS `UIFontDescriptorSystemDesignDefault` */ - sans: 'system-ui', - /** iOS `UIFontDescriptorSystemDesignSerif` */ - serif: 'ui-serif', - /** iOS `UIFontDescriptorSystemDesignRounded` */ - rounded: 'ui-rounded', - /** iOS `UIFontDescriptorSystemDesignMonospaced` */ - mono: 'ui-monospace', - }, - default: { - sans: 'normal', - serif: 'serif', - rounded: 'normal', - mono: 'monospace', - }, - web: { - sans: 'var(--font-display)', - serif: 'var(--font-serif)', - rounded: 'var(--font-rounded)', - mono: 'var(--font-mono)', - }, -}); - -export const Spacing = { - half: 2, - one: 4, - two: 8, - three: 16, - four: 24, - five: 32, - six: 64, -} as const; - -export const BottomTabInset = Platform.select({ ios: 50, android: 80 }) ?? 0; -export const MaxContentWidth = 800; diff --git a/apps/mobile/src/global.css b/apps/mobile/src/global.css deleted file mode 100644 index c8fe503..0000000 --- a/apps/mobile/src/global.css +++ /dev/null @@ -1,9 +0,0 @@ -:root { - --font-display: - Spline Sans, Inter, ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, - Segoe UI Symbol, Noto Color Emoji; - --font-mono: - ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace; - --font-rounded: 'SF Pro Rounded', 'Hiragino Maru Gothic ProN', Meiryo, 'MS PGothic', sans-serif; - --font-serif: Georgia, 'Times New Roman', serif; -} diff --git a/apps/mobile/src/hooks/use-color-scheme.ts b/apps/mobile/src/hooks/use-color-scheme.ts deleted file mode 100644 index 17e3c63..0000000 --- a/apps/mobile/src/hooks/use-color-scheme.ts +++ /dev/null @@ -1 +0,0 @@ -export { useColorScheme } from 'react-native'; diff --git a/apps/mobile/src/hooks/use-color-scheme.web.ts b/apps/mobile/src/hooks/use-color-scheme.web.ts deleted file mode 100644 index 7eb1c1b..0000000 --- a/apps/mobile/src/hooks/use-color-scheme.web.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { useEffect, useState } from 'react'; -import { useColorScheme as useRNColorScheme } from 'react-native'; - -/** - * To support static rendering, this value needs to be re-calculated on the client side for web - */ -export function useColorScheme() { - const [hasHydrated, setHasHydrated] = useState(false); - - useEffect(() => { - setHasHydrated(true); - }, []); - - const colorScheme = useRNColorScheme(); - - if (hasHydrated) { - return colorScheme; - } - - return 'light'; -} diff --git a/apps/mobile/src/hooks/use-theme.ts b/apps/mobile/src/hooks/use-theme.ts deleted file mode 100644 index 677e015..0000000 --- a/apps/mobile/src/hooks/use-theme.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Learn more about light and dark modes: - * https://docs.expo.dev/guides/color-schemes/ - */ - -import { Colors } from '@/constants/theme'; -import { useColorScheme } from '@/hooks/use-color-scheme'; - -export function useTheme() { - const scheme = useColorScheme(); - const theme = scheme === 'unspecified' ? 'light' : scheme; - - return Colors[theme]; -} diff --git a/apps/mobile/tsconfig.json b/apps/mobile/tsconfig.json deleted file mode 100644 index 2e9a669..0000000 --- a/apps/mobile/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "expo/tsconfig.base", - "compilerOptions": { - "strict": true, - "paths": { - "@/*": [ - "./src/*" - ], - "@/assets/*": [ - "./assets/*" - ] - } - }, - "include": [ - "**/*.ts", - "**/*.tsx", - ".expo/types/**/*.ts", - "expo-env.d.ts" - ] -} diff --git a/packages/protocol/package.json b/packages/protocol/package.json deleted file mode 100644 index 443bdbf..0000000 --- a/packages/protocol/package.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"@constructor/protocol","private":true,"version":"0.0.0","main":"src/index.ts","types":"src/index.ts"}