diff --git a/app.json b/app.json
index 58f4e6cc..e1ec7ea6 100644
--- a/app.json
+++ b/app.json
@@ -6,12 +6,15 @@
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "light",
+ "scheme": "your-app-scheme",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
- "assetBundlePatterns": ["**/*"],
+ "assetBundlePatterns": [
+ "**/*"
+ ],
"ios": {
"supportsTablet": true
},
@@ -23,6 +26,9 @@
},
"web": {
"favicon": "./assets/favicon.png"
- }
+ },
+ "plugins": [
+ "expo-router"
+ ]
}
}
diff --git a/babel.config.js b/babel.config.js
index 025278d5..5c596dc8 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -2,5 +2,6 @@ module.exports = api => {
api.cache(true);
return {
presets: ['babel-preset-expo'],
+ plugins: ['expo-router/babel']
};
};
diff --git a/package-lock.json b/package-lock.json
index 1567fb15..32e891c5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,9 +15,13 @@
"@react-navigation/native-stack": "^6.9.14",
"axios": "^1.5.0",
"expo": "~49.0.11",
+ "expo-constants": "~14.4.2",
+ "expo-linking": "~5.0.2",
+ "expo-router": "^2.0.0",
"expo-status-bar": "~1.6.0",
"react": "18.2.0",
"react-native": "0.72.4",
+ "react-native-gesture-handler": "~2.12.0",
"react-native-ionicons": "^4.6.5",
"react-native-safe-area-context": "4.6.3",
"react-native-screens": "~3.22.0",
@@ -1997,6 +2001,14 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@bacons/react-views": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@bacons/react-views/-/react-views-1.1.3.tgz",
+ "integrity": "sha512-aLipQAkQKRzG64e28XHBpByyBPfANz0A6POqYHGyryHizG9vLCLNQwLe8gwFANEMBWW2Mx5YdQ7RkNdQMQ+CXQ==",
+ "peerDependencies": {
+ "react-native": "*"
+ }
+ },
"node_modules/@calblueprint/eslint-config-react": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/@calblueprint/eslint-config-react/-/eslint-config-react-0.0.3.tgz",
@@ -2047,6 +2059,17 @@
"node": ">=0.10.0"
}
},
+ "node_modules/@egjs/hammerjs": {
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz",
+ "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==",
+ "dependencies": {
+ "@types/hammerjs": "^2.0.36"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
@@ -2209,9 +2232,9 @@
}
},
"node_modules/@expo/cli": {
- "version": "0.10.12",
- "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.10.12.tgz",
- "integrity": "sha512-sc4IkRBbm6HO1Z/0JeJMY/sJiyCAfHyt2EOHhAY8jYfbXr/aqCIGsPrwEGQAfGpsE2OPvyzRa+byZG03HRPTkQ==",
+ "version": "0.10.13",
+ "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.10.13.tgz",
+ "integrity": "sha512-8ciyz+yIDih6zCNMWK0IyEv411W7vej/TaWIFGarogPVbFokXrUKr0aKoQG1RU1SLlY4eUpHakbIzqog+rhJdQ==",
"dependencies": {
"@babel/runtime": "^7.20.0",
"@expo/code-signing-certificates": "0.0.5",
@@ -3074,6 +3097,18 @@
"node": ">=8"
}
},
+ "node_modules/@expo/metro-runtime": {
+ "version": "2.2.10",
+ "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-2.2.10.tgz",
+ "integrity": "sha512-4lEHpOpm7FFwnNsD985eZFtcf32WakD8wSGZmfqc/bkBks076PUb5qIfTgJviGEHF9OAuic+htQi/IcbEdBr9w==",
+ "dependencies": {
+ "@bacons/react-views": "^1.1.3",
+ "qs": "^6.10.3"
+ },
+ "peerDependencies": {
+ "react-native": "*"
+ }
+ },
"node_modules/@expo/osascript": {
"version": "2.0.33",
"resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.0.33.tgz",
@@ -3087,9 +3122,9 @@
}
},
"node_modules/@expo/package-manager": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.1.1.tgz",
- "integrity": "sha512-NxtfIA25iEiNwMT+s8PEmdKzjyfWd2qkCLJkf6jKZGaH9c06YXyOAi2jvCyM8XuSzJz4pcEH8kz1HkJAInjB7Q==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.1.2.tgz",
+ "integrity": "sha512-JI9XzrxB0QVXysyuJ996FPCJGDCYRkbUvgG4QmMTTMFA1T+mv8YzazC3T9C1pHQUAAveVCre1+Pqv0nZXN24Xg==",
"dependencies": {
"@expo/json-file": "^8.2.37",
"@expo/spawn-async": "^1.5.0",
@@ -4029,6 +4064,29 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz",
+ "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-slot": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz",
+ "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
"node_modules/@react-native-community/cli": {
"version": "11.3.6",
"resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-11.3.6.tgz",
@@ -6235,6 +6293,11 @@
"@sinonjs/commons": "^3.0.0"
}
},
+ "node_modules/@types/hammerjs": {
+ "version": "2.0.42",
+ "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.42.tgz",
+ "integrity": "sha512-Xxk14BrwHnGi0xlURPRb+Y0UNn2w3cTkeFm7pKMsYOaNgH/kabbJLhcBoNIodwsbTz7Z8KcWjtDvlGH0nc0U9w=="
+ },
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
@@ -6259,8 +6322,7 @@
"node_modules/@types/json-schema": {
"version": "7.0.13",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz",
- "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==",
- "dev": true
+ "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ=="
},
"node_modules/@types/json5": {
"version": "0.0.29",
@@ -6279,6 +6341,11 @@
"integrity": "sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg==",
"dev": true
},
+ "node_modules/@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
"node_modules/@types/react": {
"version": "18.2.22",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.22.tgz",
@@ -6750,6 +6817,42 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ajv-formats/node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ },
"node_modules/anser": {
"version": "1.4.10",
"resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz",
@@ -9212,12 +9315,12 @@
}
},
"node_modules/expo": {
- "version": "49.0.11",
- "resolved": "https://registry.npmjs.org/expo/-/expo-49.0.11.tgz",
- "integrity": "sha512-4UtSnaVn4bAEsdp2Z2I8okCJEmAm2cj1Rl3ifm79fI4zMz3EqBaXMKs6OdMSTa6DWq3dZp8C/5dEKy/ynah0CA==",
+ "version": "49.0.13",
+ "resolved": "https://registry.npmjs.org/expo/-/expo-49.0.13.tgz",
+ "integrity": "sha512-k2QFmT5XN490ksjKJgogfS5SFj6ZKCu1GwWz4VUV4S9gkPjzr8zQAZoVPKaWxUYRb6xDpTJXdhLt7gSnV3bJvw==",
"dependencies": {
"@babel/runtime": "^7.20.0",
- "@expo/cli": "0.10.12",
+ "@expo/cli": "0.10.13",
"@expo/config": "8.1.2",
"@expo/config-plugins": "7.2.5",
"@expo/vector-icons": "^13.0.0",
@@ -9297,6 +9400,19 @@
"expo": "*"
}
},
+ "node_modules/expo-head": {
+ "version": "0.0.14",
+ "resolved": "https://registry.npmjs.org/expo-head/-/expo-head-0.0.14.tgz",
+ "integrity": "sha512-NvG6dwzi06F2hlYuz1rW/O8B/Us/2lDHTHZv0DJJmSWjAuT3Ja04WtS0QI9Yn5n0bSKKPrEGl4515q1zJ9MI0A==",
+ "dependencies": {
+ "react-helmet-async": "^1.3.0"
+ },
+ "peerDependencies": {
+ "expo": "*",
+ "react": "*",
+ "react-native": "*"
+ }
+ },
"node_modules/expo-keep-awake": {
"version": "12.3.0",
"resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-12.3.0.tgz",
@@ -9305,6 +9421,18 @@
"expo": "*"
}
},
+ "node_modules/expo-linking": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-5.0.2.tgz",
+ "integrity": "sha512-SPQus0+tYGx9c69Uw4wmdo3rkKX8vRT1vyJz/mvkpSlZN986s0NmP/V0M5vDv5Zv2qZzVdqJyuITFe0Pg5aI+A==",
+ "dependencies": {
+ "@types/qs": "^6.9.7",
+ "expo-constants": "~14.4.2",
+ "invariant": "^2.2.4",
+ "qs": "^6.11.0",
+ "url-parse": "^1.5.9"
+ }
+ },
"node_modules/expo-modules-autolinking": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.5.1.tgz",
@@ -9427,6 +9555,59 @@
"invariant": "^2.2.4"
}
},
+ "node_modules/expo-router": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-2.0.8.tgz",
+ "integrity": "sha512-hKm15AzEmqASgts1qf1UQzjB4ON6iXrV+KsHVicK7L3lb2rLpI6Cj5ayWjjUAQ7GmTw5O2FR/gdlPYil4hALIQ==",
+ "dependencies": {
+ "@bacons/react-views": "^1.1.3",
+ "@expo/metro-runtime": "2.2.10",
+ "@radix-ui/react-slot": "1.0.1",
+ "@react-navigation/bottom-tabs": "~6.5.7",
+ "@react-navigation/native": "~6.1.6",
+ "@react-navigation/native-stack": "~6.9.12",
+ "expo-head": "0.0.14",
+ "expo-splash-screen": "~0.20.2",
+ "query-string": "7.1.3",
+ "react-helmet-async": "^1.3.0",
+ "schema-utils": "^4.0.1",
+ "url": "^0.11.0"
+ },
+ "peerDependencies": {
+ "@react-navigation/drawer": "^6.5.8",
+ "expo": "^49.0.0",
+ "expo-constants": "*",
+ "expo-linking": "*",
+ "expo-status-bar": "*",
+ "metro": "~0.76.7",
+ "react-native-gesture-handler": "*",
+ "react-native-reanimated": "*",
+ "react-native-safe-area-context": "*",
+ "react-native-screens": "*"
+ },
+ "peerDependenciesMeta": {
+ "@react-navigation/drawer": {
+ "optional": true
+ },
+ "@testing-library/jest-native": {
+ "optional": true
+ },
+ "react-native-reanimated": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/expo-splash-screen": {
+ "version": "0.20.5",
+ "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.20.5.tgz",
+ "integrity": "sha512-nTALYdjHpeEA30rdOWSguxn72ctv8WM8ptuUgpfRgsWyn4i6rwYds/rBXisX69XO5fg+XjHAQqijGx/b28+3tg==",
+ "dependencies": {
+ "@expo/prebuild-config": "6.2.6"
+ },
+ "peerDependencies": {
+ "expo": "*"
+ }
+ },
"node_modules/expo-status-bar": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.6.0.tgz",
@@ -10132,7 +10313,6 @@
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
- "peer": true,
"dependencies": {
"react-is": "^16.7.0"
}
@@ -10140,8 +10320,7 @@
"node_modules/hoist-non-react-statics/node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "peer": true
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"node_modules/hosted-git-info": {
"version": "3.0.8",
@@ -14252,9 +14431,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.30",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz",
- "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==",
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
"funding": [
{
"type": "opencollective",
@@ -14428,7 +14607,6 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- "dev": true,
"engines": {
"node": ">=6"
}
@@ -14580,6 +14758,33 @@
}
}
},
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-dom/node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/react-fast-compare": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
+ "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
+ },
"node_modules/react-freeze": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.3.tgz",
@@ -14591,6 +14796,22 @@
"react": ">=17.0.0"
}
},
+ "node_modules/react-helmet-async": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz",
+ "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "invariant": "^2.2.4",
+ "prop-types": "^15.7.2",
+ "react-fast-compare": "^3.2.0",
+ "shallowequal": "^1.1.0"
+ },
+ "peerDependencies": {
+ "react": "^16.6.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
@@ -14648,6 +14869,22 @@
"react": "18.2.0"
}
},
+ "node_modules/react-native-gesture-handler": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.12.1.tgz",
+ "integrity": "sha512-deqh36bw82CFUV9EC4tTo2PP1i9HfCOORGS3Zmv71UYhEZEHkzZv18IZNPB+2Awzj45vLIidZxGYGFxHlDSQ5A==",
+ "dependencies": {
+ "@egjs/hammerjs": "^2.0.17",
+ "hoist-non-react-statics": "^3.3.0",
+ "invariant": "^2.2.4",
+ "lodash": "^4.17.21",
+ "prop-types": "^15.7.2"
+ },
+ "peerDependencies": {
+ "react": "*",
+ "react-native": "*"
+ }
+ },
"node_modules/react-native-ionicons": {
"version": "4.6.5",
"resolved": "https://registry.npmjs.org/react-native-ionicons/-/react-native-ionicons-4.6.5.tgz",
@@ -15152,6 +15389,55 @@
"loose-envify": "^1.1.0"
}
},
+ "node_modules/schema-utils": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
+ "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
+ },
+ "engines": {
+ "node": ">= 12.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/schema-utils/node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/schema-utils/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/schema-utils/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ },
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -15299,6 +15585,11 @@
"node": ">=8"
}
},
+ "node_modules/shallowequal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
+ },
"node_modules/shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -16401,11 +16692,19 @@
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
"dependencies": {
"punycode": "^2.1.0"
}
},
+ "node_modules/url": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz",
+ "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==",
+ "dependencies": {
+ "punycode": "^1.4.1",
+ "qs": "^6.11.2"
+ }
+ },
"node_modules/url-join": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz",
@@ -16420,6 +16719,25 @@
"requires-port": "^1.0.0"
}
},
+ "node_modules/url/node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="
+ },
+ "node_modules/url/node_modules/qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/use-latest-callback": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.6.tgz",
diff --git a/package.json b/package.json
index 84cf2be5..e25f7cc1 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "girls-write-now",
"version": "1.0.0",
- "main": "node_modules/expo/AppEntry.js",
+ "main": "expo-router/entry",
"scripts": {
"start": "expo start",
"android": "expo start --android",
@@ -25,7 +25,11 @@
"react-native-ionicons": "^4.6.5",
"react-native-safe-area-context": "4.6.3",
"react-native-screens": "~3.22.0",
- "react-native-vector-icons": "^10.0.0"
+ "react-native-vector-icons": "^10.0.0",
+ "expo-router": "^2.0.0",
+ "expo-linking": "~5.0.2",
+ "expo-constants": "~14.4.2",
+ "react-native-gesture-handler": "~2.12.0"
},
"devDependencies": {
"@babel/core": "^7.20.0",
diff --git a/src/app/(bottomTabs)/_layout.tsx b/src/app/(bottomTabs)/_layout.tsx
new file mode 100644
index 00000000..33620acf
--- /dev/null
+++ b/src/app/(bottomTabs)/_layout.tsx
@@ -0,0 +1,17 @@
+import { Tabs } from 'expo-router/tabs';
+
+export default function AppLayout() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/app/(bottomTabs)/home/index.tsx b/src/app/(bottomTabs)/home/index.tsx
new file mode 100644
index 00000000..aef2ea04
--- /dev/null
+++ b/src/app/(bottomTabs)/home/index.tsx
@@ -0,0 +1,16 @@
+import { Link } from 'expo-router';
+import React from 'react';
+import { Button, Text, View } from 'react-native';
+
+export default function HomeScreen() {
+ return (
+
+ GIRLS WRITE NOW!
+
+
+
+
+
+
+ );
+}
diff --git a/src/app/(bottomTabs)/search/index.tsx b/src/app/(bottomTabs)/search/index.tsx
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/index.tsx b/src/app/index.tsx
new file mode 100644
index 00000000..b24931b0
--- /dev/null
+++ b/src/app/index.tsx
@@ -0,0 +1,15 @@
+import { Link } from 'expo-router';
+import React from 'react';
+import { Button, View } from 'react-native';
+
+export default function WelcomeScreen() {
+ return (
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/app/mycontent/index.tsx b/src/app/mycontent/index.tsx
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/story/index.tsx b/src/app/story/index.tsx
new file mode 100644
index 00000000..ff6535de
--- /dev/null
+++ b/src/app/story/index.tsx
@@ -0,0 +1,10 @@
+import React from 'react';
+import { Text, View } from 'react-native';
+
+export default function StoryScreen() {
+ return (
+
+ Story Page
+
+ );
+}
\ No newline at end of file
diff --git a/src/app/tabs/index.tsx b/src/app/tabs/index.tsx
new file mode 100644
index 00000000..5ae230be
--- /dev/null
+++ b/src/app/tabs/index.tsx
@@ -0,0 +1,17 @@
+import { Tabs } from 'expo-router/tabs';
+
+export default function AppLayout() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file