diff --git a/mobile/App.tsx b/mobile/App.tsx
index 0329d0c93c3a2f575e4d87faeea9b6029d400ef1..1f2524956405f01b2efd04ba0567f9d36f9358cc 100644
--- a/mobile/App.tsx
+++ b/mobile/App.tsx
@@ -1,12 +1,13 @@
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';
+import { StateSelectionPage } from './src/screens/state_selection/state_selection_page';
+import { DataContextProvider } from './src/contexts/data_context';
export default function App() {
return (
-
- Open up App.tsx to start working on your app!
-
-
+
+
+
);
}
diff --git a/mobile/app.json b/mobile/app.json
index 2cabcf6a585a6c45149f25d728cda97b3d88f816..69fc5a602dda22f61f9f4077ebdbaddc04690f80 100644
--- a/mobile/app.json
+++ b/mobile/app.json
@@ -1,6 +1,7 @@
{
"expo": {
- "name": "mobile",
+ "name": "pueblos-magicos",
+ "scheme": "myapp",
"slug": "mobile",
"version": "1.0.0",
"orientation": "portrait",
@@ -21,10 +22,23 @@
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#ffffff"
- }
+ },
+ "package": "com.lorenzotrujillo.mobile"
},
"web": {
"favicon": "./assets/favicon.png"
+ },
+ "plugins": [
+ "expo-router",
+ "expo-secure-store"
+ ],
+ "extra": {
+ "router": {
+ "origin": false
+ },
+ "eas": {
+ "projectId": "e886fd36-a509-4844-bc03-c722bb61a245"
+ }
}
}
}
diff --git a/mobile/app/(modal)/[id].tsx b/mobile/app/(modal)/[id].tsx
new file mode 100644
index 0000000000000000000000000000000000000000..10b634af72befe858588698ddb01065b09a4cb95
--- /dev/null
+++ b/mobile/app/(modal)/[id].tsx
@@ -0,0 +1,16 @@
+import { View, Text } from "react-native";
+import { TownSelectionPage } from "../../src/screens/town_selection/town_selection_page";
+import { useLocalSearchParams } from "expo-router";
+import { FullPageLoader } from "../../src/components/full_page_loader/full_page_loader";
+
+export default function Main () {
+ const { id } = useLocalSearchParams<{ id: string }>();
+ if (!id) {
+ return (
+
+ );
+ }
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/mobile/app/(tabs)/_layout.tsx b/mobile/app/(tabs)/_layout.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..55ed70f32f84cf80dee8f4a668bb71c3dfa6f51c
--- /dev/null
+++ b/mobile/app/(tabs)/_layout.tsx
@@ -0,0 +1,61 @@
+import { Redirect, Tabs } from "expo-router";
+import { Ionicons } from "@expo/vector-icons";
+import { FontAwesome5 } from "@expo/vector-icons";
+import { LIGTHT_THEME } from "../../src/constants/theme";
+import { useAuth } from "../../src/contexts/auth_context";
+
+export default function Layout() {
+ const { user } = useAuth();
+ console.log(user);
+ if (!user) {
+ return ;
+ }
+
+ return (
+
+ {
+ if (focused) {
+ return ;
+ }
+ return ;
+ },
+ }}
+ />
+ {
+ if (focused) {
+ return ;
+ }
+ return ;
+ },
+ }}
+ />
+ {
+ if (focused) {
+ return ;
+ }
+ return ;
+ },
+ }}
+ />
+
+ );
+}
diff --git a/mobile/app/(tabs)/account.tsx b/mobile/app/(tabs)/account.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..64a31b2656e51ef36c81e9b7ed4d375ac42bb46c
--- /dev/null
+++ b/mobile/app/(tabs)/account.tsx
@@ -0,0 +1,7 @@
+import { AccountPage } from "../../src/screens/account/account_page";
+
+export default function AccountScreen() {
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/mobile/app/(tabs)/index.tsx b/mobile/app/(tabs)/index.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..9c27cc41088bc8b8aa55884c331e0e26f3b1ac82
--- /dev/null
+++ b/mobile/app/(tabs)/index.tsx
@@ -0,0 +1,7 @@
+import { DataContextProvider } from '../../src/contexts/data_context';
+import { StateSelectionPage } from '../../src/screens/state_selection/state_selection_page';
+export default function Main () {
+ return (
+
+ );
+};
\ No newline at end of file
diff --git a/mobile/app/(tabs)/travel_history.tsx b/mobile/app/(tabs)/travel_history.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..2416e829975cee925257c510ad938654f0a465b0
--- /dev/null
+++ b/mobile/app/(tabs)/travel_history.tsx
@@ -0,0 +1,9 @@
+import { View } from "react-native";
+
+export default function TravelHistoryScreen() {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/mobile/app/_layout.tsx b/mobile/app/_layout.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..0f888a4299603b9843ed97d426e166150d8f127c
--- /dev/null
+++ b/mobile/app/_layout.tsx
@@ -0,0 +1,49 @@
+import { Stack, Tabs } from "expo-router";
+import { DataContextProvider } from "../src/contexts/data_context";
+import { LIGTHT_THEME } from "../src/constants/theme";
+import { AuthContextProvider, useAuth } from "../src/contexts/auth_context";
+import { ActivityIndicator } from "react-native";
+
+export default function Root() {
+ return
+
+
+
+ ;
+}
+
+const MainLayout = () => {
+ const { isLoading } = useAuth();
+
+ if (isLoading) {
+ return ;
+ }
+
+ return (
+
+
+
+
+
+
+ );
+};
diff --git a/mobile/app/login.tsx b/mobile/app/login.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..d574b54332899c8146da2303ea23f71130ec3579
--- /dev/null
+++ b/mobile/app/login.tsx
@@ -0,0 +1,9 @@
+import { LoginPage } from "../src/screens/login/login_page";
+
+const LoginScreen = () => {
+ return (
+
+ );
+};
+
+export default LoginScreen;
diff --git a/mobile/app/sign_up.tsx b/mobile/app/sign_up.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..236776dbd566288ab8011409dccbb8ed64334d12
--- /dev/null
+++ b/mobile/app/sign_up.tsx
@@ -0,0 +1,64 @@
+import { View, StyleSheet, Image, Text, Button } from "react-native";
+import { LIGTHT_THEME } from "../src/constants/theme";
+import { SignUpForm } from "../src/components/sign_up_form/sign_up_form";
+import { router } from "expo-router";
+const loginImage = require("../assets/login-image.jpg");
+
+const SignUp = () => {
+ return (
+
+
+
+
+
+
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ mainContainer: {
+ flex: 1,
+ backgroundColor: LIGTHT_THEME.color.background,
+ },
+ imageContainer: {
+ height: "40%",
+ overflow: "hidden",
+ borderBottomLeftRadius: 70,
+ elevation: 5,
+ },
+ loginContainer: {
+ marginHorizontal: 20,
+ marginTop: "-30%",
+ marginBottom: 20,
+ elevation: 5,
+ borderRadius: 10,
+ backgroundColor: LIGTHT_THEME.color.white,
+ height: "70%",
+ },
+ loginScroll: {
+ padding: 20,
+ gap: 10,
+ justifyContent: "center",
+ },
+ title: { fontSize: 30, fontWeight: "bold", alignSelf: "center" },
+ submitBtn: {
+ backgroundColor: "black",
+ borderRadius: 5,
+ width: "100%",
+ padding: 10,
+ justifyContent: "center",
+ alignItems: "center",
+ },
+ submitBtnText: {
+ color: "white",
+ fontSize: 20,
+ }
+});
+export default SignUp;
diff --git a/mobile/assets/avatar.png b/mobile/assets/avatar.png
new file mode 100644
index 0000000000000000000000000000000000000000..92ec0d582bdd93d401b8bbce083d9b5c3010e7ea
Binary files /dev/null and b/mobile/assets/avatar.png differ
diff --git a/mobile/assets/login-image.jpg b/mobile/assets/login-image.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bd95374c4221142da130ea43833a9cba02f5cf01
Binary files /dev/null and b/mobile/assets/login-image.jpg differ
diff --git a/mobile/assets/placeholder.jpeg b/mobile/assets/placeholder.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..3d6d23dc23591693b50a4b5b05d11c7aaa05b7a4
Binary files /dev/null and b/mobile/assets/placeholder.jpeg differ
diff --git a/mobile/babel.config.js b/mobile/babel.config.js
index 4881319389c48e973055a974bf3afeb05c53cb7d..dab49a2fa5b67f42c24ae66b6d661c6a750e4dde 100644
--- a/mobile/babel.config.js
+++ b/mobile/babel.config.js
@@ -4,4 +4,4 @@ module.exports = function(api) {
presets: ['babel-preset-expo'],
plugins: ["nativewind/babel"],
};
-};
+};
\ No newline at end of file
diff --git a/mobile/eas.json b/mobile/eas.json
new file mode 100644
index 0000000000000000000000000000000000000000..3db9958861a6290d614f0e5474245a71216eddda
--- /dev/null
+++ b/mobile/eas.json
@@ -0,0 +1,21 @@
+{
+ "build": {
+ "preview": {
+ "android": {
+ "buildType": "apk"
+ }
+ },
+ "preview2": {
+ "android": {
+ "gradleCommand": ":app:assembleRelease"
+ }
+ },
+ "preview3": {
+ "developmentClient": true
+ },
+ "preview4": {
+ "distribution": "internal"
+ },
+ "production": {}
+ }
+}
\ No newline at end of file
diff --git a/mobile/package-lock.json b/mobile/package-lock.json
index e2e19ad4234891d8c4b628f6aa8cabe6d1689a32..0afd893fe98cdbe613a7878777e5d4b05b85f0b1 100644
--- a/mobile/package-lock.json
+++ b/mobile/package-lock.json
@@ -8,11 +8,19 @@
"name": "mobile",
"version": "1.0.0",
"dependencies": {
- "expo": "~50.0.11",
+ "axios": "^1.6.8",
+ "expo": "~50.0.14",
+ "expo-constants": "~15.4.5",
+ "expo-linking": "~6.2.2",
+ "expo-router": "~3.4.8",
+ "expo-secure-store": "~12.8.1",
"expo-status-bar": "~1.11.1",
"nativewind": "^2.0.11",
"react": "18.2.0",
- "react-native": "0.73.4"
+ "react-hook-form": "^7.51.2",
+ "react-native": "0.73.6",
+ "react-native-safe-area-context": "4.8.2",
+ "react-native-screens": "~3.29.0"
},
"devDependencies": {
"@babel/core": "^7.20.0",
@@ -2037,9 +2045,9 @@
}
},
"node_modules/@expo/cli": {
- "version": "0.17.7",
- "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.17.7.tgz",
- "integrity": "sha512-sOssVCFCVXSdZr2/KdqPeT2Qwxmty3rZeO9g5RbzZexHz93VUyONuqGwO1VlYKibn7FLYEGUovqU9Xi8zVB6JQ==",
+ "version": "0.17.8",
+ "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.17.8.tgz",
+ "integrity": "sha512-yfkoghCltbGPDbRI71Qu3puInjXx4wO82+uhW82qbWLvosfIN7ep5Gr0Lq54liJpvlUG6M0IXM1GiGqcCyP12w==",
"dependencies": {
"@babel/runtime": "^7.20.0",
"@expo/code-signing-certificates": "0.0.5",
@@ -3018,6 +3026,14 @@
"node": ">= 8"
}
},
+ "node_modules/@expo/metro-runtime": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.1.3.tgz",
+ "integrity": "sha512-u1CaQJJlSgvxBB5NJ6YMVvSDTTRzjT71dHpEBnKPZhpFv5ebVry52FZ2sEeEEA6mHG5zGxWXmHImW3hNKHh8EA==",
+ "peerDependencies": {
+ "react-native": "*"
+ }
+ },
"node_modules/@expo/osascript": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.0.tgz",
@@ -3233,6 +3249,17 @@
"resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz",
"integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ=="
},
+ "node_modules/@expo/server": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.3.1.tgz",
+ "integrity": "sha512-cCKyVA2IR9J4hDFPXzj3L08+Ngd/7z2F+JtdW0NLy03qShXBI5NSEEcaiHtjrgsLXPDe9PBw5Xgsfmxuduyggg==",
+ "dependencies": {
+ "@remix-run/node": "^1.19.3",
+ "abort-controller": "^3.0.0",
+ "debug": "^4.3.4",
+ "source-map-support": "~0.5.21"
+ }
+ },
"node_modules/@expo/spawn-async": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.5.0.tgz",
@@ -3547,12 +3574,12 @@
}
},
"node_modules/@jridgewell/source-map": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
- "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
@@ -3678,20 +3705,43 @@
"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": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.2.tgz",
- "integrity": "sha512-WgoUWwLDcf/G1Su2COUUVs3RzAwnV/vUTdISSpAUGgSc57mPabaAoUctKTnfYEhCnE3j02k3VtaVPwCAFRO3TQ==",
- "dependencies": {
- "@react-native-community/cli-clean": "12.3.2",
- "@react-native-community/cli-config": "12.3.2",
- "@react-native-community/cli-debugger-ui": "12.3.2",
- "@react-native-community/cli-doctor": "12.3.2",
- "@react-native-community/cli-hermes": "12.3.2",
- "@react-native-community/cli-plugin-metro": "12.3.2",
- "@react-native-community/cli-server-api": "12.3.2",
- "@react-native-community/cli-tools": "12.3.2",
- "@react-native-community/cli-types": "12.3.2",
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.6.tgz",
+ "integrity": "sha512-647OSi6xBb8FbwFqX9zsJxOzu685AWtrOUWHfOkbKD+5LOpGORw+GQo0F9rWZnB68rLQyfKUZWJeaD00pGv5fw==",
+ "dependencies": {
+ "@react-native-community/cli-clean": "12.3.6",
+ "@react-native-community/cli-config": "12.3.6",
+ "@react-native-community/cli-debugger-ui": "12.3.6",
+ "@react-native-community/cli-doctor": "12.3.6",
+ "@react-native-community/cli-hermes": "12.3.6",
+ "@react-native-community/cli-plugin-metro": "12.3.6",
+ "@react-native-community/cli-server-api": "12.3.6",
+ "@react-native-community/cli-tools": "12.3.6",
+ "@react-native-community/cli-types": "12.3.6",
"chalk": "^4.1.2",
"commander": "^9.4.1",
"deepmerge": "^4.3.0",
@@ -3710,11 +3760,11 @@
}
},
"node_modules/@react-native-community/cli-clean": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.2.tgz",
- "integrity": "sha512-90k2hCX0ddSFPT7EN7h5SZj0XZPXP0+y/++v262hssoey3nhurwF57NGWN0XAR0o9BSW7+mBfeInfabzDraO6A==",
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.6.tgz",
+ "integrity": "sha512-gUU29ep8xM0BbnZjwz9MyID74KKwutq9x5iv4BCr2im6nly4UMf1B1D+V225wR7VcDGzbgWjaezsJShLLhC5ig==",
"dependencies": {
- "@react-native-community/cli-tools": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.6",
"chalk": "^4.1.2",
"execa": "^5.0.0"
}
@@ -3915,11 +3965,11 @@
}
},
"node_modules/@react-native-community/cli-config": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.2.tgz",
- "integrity": "sha512-UUCzDjQgvAVL/57rL7eOuFUhd+d+6qfM7V8uOegQFeFEmSmvUUDLYoXpBa5vAK9JgQtSqMBJ1Shmwao+/oElxQ==",
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.6.tgz",
+ "integrity": "sha512-JGWSYQ9EAK6m2v0abXwFLEfsqJ1zkhzZ4CV261QZF9MoUNB6h57a274h1MLQR9mG6Tsh38wBUuNfEPUvS1vYew==",
"dependencies": {
- "@react-native-community/cli-tools": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.6",
"chalk": "^4.1.2",
"cosmiconfig": "^5.1.0",
"deepmerge": "^4.3.0",
@@ -3992,29 +4042,28 @@
}
},
"node_modules/@react-native-community/cli-debugger-ui": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.2.tgz",
- "integrity": "sha512-nSWQUL+51J682DlfcC1bjkUbQbGvHCC25jpqTwHIjmmVjYCX1uHuhPSqQKgPNdvtfOkrkACxczd7kVMmetxY2Q==",
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.6.tgz",
+ "integrity": "sha512-SjUKKsx5FmcK9G6Pb6UBFT0s9JexVStK5WInmANw75Hm7YokVvHEgtprQDz2Uvy5znX5g2ujzrkIU//T15KQzA==",
"dependencies": {
"serve-static": "^1.13.1"
}
},
"node_modules/@react-native-community/cli-doctor": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.2.tgz",
- "integrity": "sha512-GrAabdY4qtBX49knHFvEAdLtCjkmndjTeqhYO6BhsbAeKOtspcLT/0WRgdLIaKODRa61ADNB3K5Zm4dU0QrZOg==",
- "dependencies": {
- "@react-native-community/cli-config": "12.3.2",
- "@react-native-community/cli-platform-android": "12.3.2",
- "@react-native-community/cli-platform-ios": "12.3.2",
- "@react-native-community/cli-tools": "12.3.2",
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.6.tgz",
+ "integrity": "sha512-fvBDv2lTthfw4WOQKkdTop2PlE9GtfrlNnpjB818MhcdEnPjfQw5YaTUcnNEGsvGomdCs1MVRMgYXXwPSN6OvQ==",
+ "dependencies": {
+ "@react-native-community/cli-config": "12.3.6",
+ "@react-native-community/cli-platform-android": "12.3.6",
+ "@react-native-community/cli-platform-ios": "12.3.6",
+ "@react-native-community/cli-tools": "12.3.6",
"chalk": "^4.1.2",
"command-exists": "^1.2.8",
"deepmerge": "^4.3.0",
"envinfo": "^7.10.0",
"execa": "^5.0.0",
"hermes-profile-transformer": "^0.0.6",
- "ip": "^1.1.5",
"node-stream-zip": "^1.9.1",
"ora": "^5.4.1",
"semver": "^7.5.2",
@@ -4320,15 +4369,14 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/@react-native-community/cli-hermes": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.2.tgz",
- "integrity": "sha512-SL6F9O8ghp4ESBFH2YAPLtIN39jdnvGBKnK4FGKpDCjtB3DnUmDsGFlH46S+GGt5M6VzfG2eeKEOKf3pZ6jUzA==",
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.6.tgz",
+ "integrity": "sha512-sNGwfOCl8OAIjWCkwuLpP8NZbuO0dhDI/2W7NeOGDzIBsf4/c4MptTrULWtGIH9okVPLSPX0NnRyGQ+mSwWyuQ==",
"dependencies": {
- "@react-native-community/cli-platform-android": "12.3.2",
- "@react-native-community/cli-tools": "12.3.2",
+ "@react-native-community/cli-platform-android": "12.3.6",
+ "@react-native-community/cli-tools": "12.3.6",
"chalk": "^4.1.2",
- "hermes-profile-transformer": "^0.0.6",
- "ip": "^1.1.5"
+ "hermes-profile-transformer": "^0.0.6"
}
},
"node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": {
@@ -4396,11 +4444,11 @@
}
},
"node_modules/@react-native-community/cli-platform-android": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.2.tgz",
- "integrity": "sha512-MZ5nO8yi/N+Fj2i9BJcJ9C/ez+9/Ir7lQt49DWRo9YDmzye66mYLr/P2l/qxsixllbbDi7BXrlLpxaEhMrDopg==",
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.6.tgz",
+ "integrity": "sha512-DeDDAB8lHpuGIAPXeeD9Qu2+/wDTFPo99c8uSW49L0hkmZJixzvvvffbGQAYk32H0TmaI7rzvzH+qzu7z3891g==",
"dependencies": {
- "@react-native-community/cli-tools": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.6",
"chalk": "^4.1.2",
"execa": "^5.0.0",
"fast-xml-parser": "^4.2.4",
@@ -4604,11 +4652,11 @@
}
},
"node_modules/@react-native-community/cli-platform-ios": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.2.tgz",
- "integrity": "sha512-OcWEAbkev1IL6SUiQnM6DQdsvfsKZhRZtoBNSj9MfdmwotVZSOEZJ+IjZ1FR9ChvMWayO9ns/o8LgoQxr1ZXeg==",
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.6.tgz",
+ "integrity": "sha512-3eZ0jMCkKUO58wzPWlvAPRqezVKm9EPZyaPyHbRPWU8qw7JqkvnRlWIaYDGpjCJgVW4k2hKsEursLtYKb188tg==",
"dependencies": {
- "@react-native-community/cli-tools": "12.3.2",
+ "@react-native-community/cli-tools": "12.3.6",
"chalk": "^4.1.2",
"execa": "^5.0.0",
"fast-xml-parser": "^4.0.12",
@@ -4883,17 +4931,17 @@
}
},
"node_modules/@react-native-community/cli-plugin-metro": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.2.tgz",
- "integrity": "sha512-FpFBwu+d2E7KRhYPTkKvQsWb2/JKsJv+t1tcqgQkn+oByhp+qGyXBobFB8/R3yYvRRDCSDhS+atWTJzk9TjM8g=="
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.6.tgz",
+ "integrity": "sha512-3jxSBQt4fkS+KtHCPSyB5auIT+KKIrPCv9Dk14FbvOaEh9erUWEm/5PZWmtboW1z7CYeNbFMeXm9fM2xwtVOpg=="
},
"node_modules/@react-native-community/cli-server-api": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.2.tgz",
- "integrity": "sha512-iwa7EO9XFA/OjI5pPLLpI/6mFVqv8L73kNck3CNOJIUCCveGXBKK0VMyOkXaf/BYnihgQrXh+x5cxbDbggr7+Q==",
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.6.tgz",
+ "integrity": "sha512-80NIMzo8b2W+PL0Jd7NjiJW9mgaT8Y8wsIT/lh6mAvYH7mK0ecDJUYUTAAv79Tbo1iCGPAr3T295DlVtS8s4yQ==",
"dependencies": {
- "@react-native-community/cli-debugger-ui": "12.3.2",
- "@react-native-community/cli-tools": "12.3.2",
+ "@react-native-community/cli-debugger-ui": "12.3.6",
+ "@react-native-community/cli-tools": "12.3.6",
"compression": "^1.7.1",
"connect": "^3.6.5",
"errorhandler": "^1.5.1",
@@ -4924,9 +4972,9 @@
}
},
"node_modules/@react-native-community/cli-tools": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.2.tgz",
- "integrity": "sha512-nDH7vuEicHI2TI0jac/DjT3fr977iWXRdgVAqPZFFczlbs7A8GQvEdGnZ1G8dqRUmg+kptw0e4hwczAOG89JzQ==",
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.6.tgz",
+ "integrity": "sha512-FPEvZn19UTMMXUp/piwKZSh8cMEfO8G3KDtOwo53O347GTcwNrKjgZGtLSPELBX2gr+YlzEft3CoRv2Qmo83fQ==",
"dependencies": {
"appdirsjs": "^1.2.4",
"chalk": "^4.1.2",
@@ -5152,9 +5200,9 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/@react-native-community/cli-types": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.2.tgz",
- "integrity": "sha512-9D0UEFqLW8JmS16mjHJxUJWX8E+zJddrHILSH8AJHZ0NNHv4u2DXKdb0wFLMobFxGNxPT+VSOjc60fGvXzWHog==",
+ "version": "12.3.6",
+ "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.6.tgz",
+ "integrity": "sha512-xPqTgcUtZowQ8WKOkI9TLGBwH2bGggOC4d2FFaIRST3gTcjrEeGRNeR5aXCzJFIgItIft8sd7p2oKEdy90+01Q==",
"dependencies": {
"joi": "^17.2.1"
}
@@ -5535,13 +5583,13 @@
}
},
"node_modules/@react-native/community-cli-plugin": {
- "version": "0.73.16",
- "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.16.tgz",
- "integrity": "sha512-eNH3v3qJJF6f0n/Dck90qfC9gVOR4coAXMTdYECO33GfgjTi+73vf/SBqlXw9HICH/RNZYGPM3wca4FRF7TYeQ==",
+ "version": "0.73.17",
+ "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.17.tgz",
+ "integrity": "sha512-F3PXZkcHg+1ARIr6FRQCQiB7ZAA+MQXGmq051metRscoLvgYJwj7dgC8pvgy0kexzUkHu5BNKrZeySzUft3xuQ==",
"dependencies": {
- "@react-native-community/cli-server-api": "12.3.2",
- "@react-native-community/cli-tools": "12.3.2",
- "@react-native/dev-middleware": "0.73.7",
+ "@react-native-community/cli-server-api": "12.3.6",
+ "@react-native-community/cli-tools": "12.3.6",
+ "@react-native/dev-middleware": "0.73.8",
"@react-native/metro-babel-transformer": "0.73.15",
"chalk": "^4.0.0",
"execa": "^5.1.1",
@@ -5555,26 +5603,6 @@
"node": ">=18"
}
},
- "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": {
- "version": "0.73.7",
- "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz",
- "integrity": "sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg==",
- "dependencies": {
- "@isaacs/ttlcache": "^1.4.1",
- "@react-native/debugger-frontend": "0.73.3",
- "chrome-launcher": "^0.15.2",
- "chromium-edge-launcher": "^1.0.0",
- "connect": "^3.6.5",
- "debug": "^2.2.0",
- "node-fetch": "^2.2.0",
- "open": "^7.0.3",
- "serve-static": "^1.13.1",
- "temp-dir": "^2.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -5633,14 +5661,6 @@
"node": ">= 8"
}
},
- "node_modules/@react-native/community-cli-plugin/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
"node_modules/@react-native/community-cli-plugin/node_modules/execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -5701,11 +5721,6 @@
"node": ">=6"
}
},
- "node_modules/@react-native/community-cli-plugin/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
"node_modules/@react-native/community-cli-plugin/node_modules/npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -5731,21 +5746,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@react-native/community-cli-plugin/node_modules/open": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
- "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
- "dependencies": {
- "is-docker": "^2.0.0",
- "is-wsl": "^2.1.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/@react-native/community-cli-plugin/node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@@ -5921,6 +5921,210 @@
"react-native": "*"
}
},
+ "node_modules/@react-navigation/bottom-tabs": {
+ "version": "6.5.20",
+ "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz",
+ "integrity": "sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA==",
+ "dependencies": {
+ "@react-navigation/elements": "^1.3.30",
+ "color": "^4.2.3",
+ "warn-once": "^0.1.0"
+ },
+ "peerDependencies": {
+ "@react-navigation/native": "^6.0.0",
+ "react": "*",
+ "react-native": "*",
+ "react-native-safe-area-context": ">= 3.0.0",
+ "react-native-screens": ">= 3.0.0"
+ }
+ },
+ "node_modules/@react-navigation/core": {
+ "version": "6.4.16",
+ "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.16.tgz",
+ "integrity": "sha512-UDTJBsHxnzgFETR3ZxhctP+RWr4SkyeZpbhpkQoIGOuwSCkt1SE0qjU48/u6r6w6XlX8OqVudn1Ab0QFXTHxuQ==",
+ "dependencies": {
+ "@react-navigation/routers": "^6.1.9",
+ "escape-string-regexp": "^4.0.0",
+ "nanoid": "^3.1.23",
+ "query-string": "^7.1.3",
+ "react-is": "^16.13.0",
+ "use-latest-callback": "^0.1.9"
+ },
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
+ "node_modules/@react-navigation/core/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@react-navigation/core/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=="
+ },
+ "node_modules/@react-navigation/elements": {
+ "version": "1.3.30",
+ "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.30.tgz",
+ "integrity": "sha512-plhc8UvCZs0UkV+sI+3bisIyn78wz9O/BiWZXpounu72k/R/Sj5PuZYFJ1fi6psvriUveMCGh4LeZckAZu2qiQ==",
+ "peerDependencies": {
+ "@react-navigation/native": "^6.0.0",
+ "react": "*",
+ "react-native": "*",
+ "react-native-safe-area-context": ">= 3.0.0"
+ }
+ },
+ "node_modules/@react-navigation/native": {
+ "version": "6.1.17",
+ "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.17.tgz",
+ "integrity": "sha512-mer3OvfwWOHoUSMJyLa4vnBH3zpFmCwuzrBPlw7feXklurr/ZDiLjLxUScOot6jLRMz/67GyilEYMmP99LL0RQ==",
+ "dependencies": {
+ "@react-navigation/core": "^6.4.16",
+ "escape-string-regexp": "^4.0.0",
+ "fast-deep-equal": "^3.1.3",
+ "nanoid": "^3.1.23"
+ },
+ "peerDependencies": {
+ "react": "*",
+ "react-native": "*"
+ }
+ },
+ "node_modules/@react-navigation/native-stack": {
+ "version": "6.9.26",
+ "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.26.tgz",
+ "integrity": "sha512-++dueQ+FDj2XkZ902DVrK79ub1vp19nSdAZWxKRgd6+Bc0Niiesua6rMCqymYOVaYh+dagwkA9r00bpt/U5WLw==",
+ "dependencies": {
+ "@react-navigation/elements": "^1.3.30",
+ "warn-once": "^0.1.0"
+ },
+ "peerDependencies": {
+ "@react-navigation/native": "^6.0.0",
+ "react": "*",
+ "react-native": "*",
+ "react-native-safe-area-context": ">= 3.0.0",
+ "react-native-screens": ">= 3.0.0"
+ }
+ },
+ "node_modules/@react-navigation/native/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@react-navigation/routers": {
+ "version": "6.1.9",
+ "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.9.tgz",
+ "integrity": "sha512-lTM8gSFHSfkJvQkxacGM6VJtBt61ip2XO54aNfswD+KMw6eeZ4oehl7m0me3CR9hnDE4+60iAZR8sAhvCiI3NA==",
+ "dependencies": {
+ "nanoid": "^3.1.23"
+ }
+ },
+ "node_modules/@remix-run/node": {
+ "version": "1.19.3",
+ "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-1.19.3.tgz",
+ "integrity": "sha512-z5qrVL65xLXIUpU4mkR4MKlMeKARLepgHAk4W5YY3IBXOreRqOGUC70POViYmY7x38c2Ia1NwqL80H+0h7jbMw==",
+ "dependencies": {
+ "@remix-run/server-runtime": "1.19.3",
+ "@remix-run/web-fetch": "^4.3.6",
+ "@remix-run/web-file": "^3.0.3",
+ "@remix-run/web-stream": "^1.0.4",
+ "@web3-storage/multipart-parser": "^1.0.0",
+ "abort-controller": "^3.0.0",
+ "cookie-signature": "^1.1.0",
+ "source-map-support": "^0.5.21",
+ "stream-slice": "^0.1.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@remix-run/router": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz",
+ "integrity": "sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@remix-run/server-runtime": {
+ "version": "1.19.3",
+ "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-1.19.3.tgz",
+ "integrity": "sha512-KzQ+htUsKqpBgKE2tWo7kIIGy3MyHP58Io/itUPvV+weDjApwr9tQr9PZDPA3yAY6rAzLax7BU0NMSYCXWFY5A==",
+ "dependencies": {
+ "@remix-run/router": "1.7.2",
+ "@types/cookie": "^0.4.1",
+ "@web3-storage/multipart-parser": "^1.0.0",
+ "cookie": "^0.4.1",
+ "set-cookie-parser": "^2.4.8",
+ "source-map": "^0.7.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@remix-run/web-blob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/web-blob/-/web-blob-3.1.0.tgz",
+ "integrity": "sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==",
+ "dependencies": {
+ "@remix-run/web-stream": "^1.1.0",
+ "web-encoding": "1.1.5"
+ }
+ },
+ "node_modules/@remix-run/web-fetch": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@remix-run/web-fetch/-/web-fetch-4.4.2.tgz",
+ "integrity": "sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA==",
+ "dependencies": {
+ "@remix-run/web-blob": "^3.1.0",
+ "@remix-run/web-file": "^3.1.0",
+ "@remix-run/web-form-data": "^3.1.0",
+ "@remix-run/web-stream": "^1.1.0",
+ "@web3-storage/multipart-parser": "^1.0.0",
+ "abort-controller": "^3.0.0",
+ "data-uri-to-buffer": "^3.0.1",
+ "mrmime": "^1.0.0"
+ },
+ "engines": {
+ "node": "^10.17 || >=12.3"
+ }
+ },
+ "node_modules/@remix-run/web-file": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/web-file/-/web-file-3.1.0.tgz",
+ "integrity": "sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ==",
+ "dependencies": {
+ "@remix-run/web-blob": "^3.1.0"
+ }
+ },
+ "node_modules/@remix-run/web-form-data": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/web-form-data/-/web-form-data-3.1.0.tgz",
+ "integrity": "sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A==",
+ "dependencies": {
+ "web-encoding": "1.1.5"
+ }
+ },
+ "node_modules/@remix-run/web-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/web-stream/-/web-stream-1.1.0.tgz",
+ "integrity": "sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==",
+ "dependencies": {
+ "web-streams-polyfill": "^3.1.1"
+ }
+ },
"node_modules/@segment/loosely-validate-event": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz",
@@ -5969,6 +6173,11 @@
"@sinonjs/commons": "^3.0.0"
}
},
+ "node_modules/@types/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
+ },
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
@@ -5990,6 +6199,11 @@
"@types/istanbul-lib-report": "*"
}
},
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
+ },
"node_modules/@types/node": {
"version": "20.11.25",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz",
@@ -6063,6 +6277,11 @@
"graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0"
}
},
+ "node_modules/@web3-storage/multipart-parser": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz",
+ "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw=="
+ },
"node_modules/@xmldom/xmldom": {
"version": "0.7.13",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz",
@@ -6071,6 +6290,12 @@
"node": ">=10.0.0"
}
},
+ "node_modules/@zxing/text-encoding": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz",
+ "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==",
+ "optional": true
+ },
"node_modules/abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
@@ -6128,6 +6353,48 @@
"node": ">=8"
}
},
+ "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": {
+ "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-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/anser": {
"version": "1.4.10",
"resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz",
@@ -6277,6 +6544,43 @@
"node": ">= 4.0.0"
}
},
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
+ "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/axios/node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/babel-core": {
"version": "7.0.0-bridge.0",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
@@ -6711,6 +7015,24 @@
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/caller-callsite": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
@@ -7005,6 +7327,18 @@
"node": ">=6"
}
},
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -7018,6 +7352,31 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
},
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/color/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
"node_modules/colorette": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
@@ -7138,6 +7497,22 @@
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
},
+ "node_modules/cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.1.tgz",
+ "integrity": "sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==",
+ "engines": {
+ "node": ">=6.6.0"
+ }
+ },
"node_modules/core-js-compat": {
"version": "3.36.0",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz",
@@ -7261,6 +7636,14 @@
"resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz",
"integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw=="
},
+ "node_modules/data-uri-to-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
+ "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/dayjs": {
"version": "1.11.10",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
@@ -7290,6 +7673,14 @@
"node": ">=0.10.0"
}
},
+ "node_modules/decode-uri-component": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
@@ -7337,6 +7728,22 @@
"node": ">=0.8"
}
},
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/define-lazy-prop": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
@@ -7554,6 +7961,25 @@
"node": ">= 0.8"
}
},
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/escalade": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
@@ -7634,12 +8060,12 @@
}
},
"node_modules/expo": {
- "version": "50.0.11",
- "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.11.tgz",
- "integrity": "sha512-XEq8By1l8FQo2SEzhXfQEoKBd0nZ9j6HKsDzj1dUrRVYd02SMH/xUCERxuRaWUL2u1bWdfaFlg/Dmc/2JlVkKQ==",
+ "version": "50.0.14",
+ "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.14.tgz",
+ "integrity": "sha512-yLPdxCMVAbmeEIpzzyAuJ79wvr6ToDDtQmuLDMAgWtjqP8x3CGddXxUe07PpKEQgzwJabdHvCLP5Bv94wMFIjQ==",
"dependencies": {
"@babel/runtime": "^7.20.0",
- "@expo/cli": "0.17.7",
+ "@expo/cli": "0.17.8",
"@expo/config": "8.5.4",
"@expo/config-plugins": "7.8.4",
"@expo/metro-config": "0.17.6",
@@ -7650,7 +8076,7 @@
"expo-font": "~11.10.3",
"expo-keep-awake": "~12.8.2",
"expo-modules-autolinking": "1.10.3",
- "expo-modules-core": "1.11.10",
+ "expo-modules-core": "1.11.12",
"fbemitter": "^3.0.0",
"whatwg-url-without-unicode": "8.0.0-3"
},
@@ -7709,6 +8135,15 @@
"expo": "*"
}
},
+ "node_modules/expo-linking": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-6.2.2.tgz",
+ "integrity": "sha512-FEe6lP4f7xFT/vjoHRG+tt6EPVtkEGaWNK1smpaUevmNdyCJKqW0PDB8o8sfG6y7fly8ULe8qg3HhKh5J7aqUQ==",
+ "dependencies": {
+ "expo-constants": "~15.4.3",
+ "invariant": "^2.2.4"
+ }
+ },
"node_modules/expo-modules-autolinking": {
"version": "1.10.3",
"resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.10.3.tgz",
@@ -7822,12 +8257,68 @@
"node": ">= 10.0.0"
}
},
- "node_modules/expo-modules-core": {
- "version": "1.11.10",
- "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.10.tgz",
- "integrity": "sha512-L1DSxV3AUnEvR8+G1JHbMPjpwqALv0AF71oREhDJ/ehI2TDX6LkE+up5BUK1/++UjmVu1lviefbUfLut2F5wNQ==",
+ "node_modules/expo-modules-core": {
+ "version": "1.11.12",
+ "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.12.tgz",
+ "integrity": "sha512-/e8g4kis0pFLer7C0PLyx98AfmztIM6gU9jLkYnB1pU9JAfQf904XEi3bmszO7uoteBQwSL6FLp1m3TePKhDaA==",
+ "dependencies": {
+ "invariant": "^2.2.4"
+ }
+ },
+ "node_modules/expo-router": {
+ "version": "3.4.8",
+ "resolved": "https://registry.npmjs.org/expo-router/-/expo-router-3.4.8.tgz",
+ "integrity": "sha512-fOOAWHH4LSPjPFtIZbApxdTNU8xSS8qKvhZ7PfWNMfx9510J1R1Ce/nwENPzcRLHRuVofDsSAEBfi4kV03fJwg==",
+ "dependencies": {
+ "@expo/metro-runtime": "3.1.3",
+ "@expo/server": "^0.3.0",
+ "@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-splash-screen": "0.26.4",
+ "react-helmet-async": "^1.3.0",
+ "schema-utils": "^4.0.1"
+ },
+ "peerDependencies": {
+ "@react-navigation/drawer": "^6.5.8",
+ "expo": "*",
+ "expo-constants": "*",
+ "expo-linking": "*",
+ "expo-status-bar": "*",
+ "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-secure-store": {
+ "version": "12.8.1",
+ "resolved": "https://registry.npmjs.org/expo-secure-store/-/expo-secure-store-12.8.1.tgz",
+ "integrity": "sha512-Ju3jmkHby4w7rIzdYAt9kQyQ7HhHJ0qRaiQOInknhOLIltftHjEgF4I1UmzKc7P5RCfGNmVbEH729Pncp/sHXQ==",
+ "peerDependencies": {
+ "expo": "*"
+ }
+ },
+ "node_modules/expo-splash-screen": {
+ "version": "0.26.4",
+ "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.26.4.tgz",
+ "integrity": "sha512-2DwofTQ0FFQCsvDysm/msENsbyNsJiAJwK3qK/oXeizECAPqD7bK19J4z9kuEbr7ORPX9MLnTQYKl6kmX3keUg==",
"dependencies": {
- "invariant": "^2.2.4"
+ "@expo/prebuild-config": "6.7.4"
+ },
+ "peerDependencies": {
+ "expo": "*"
}
},
"node_modules/expo-status-bar": {
@@ -7840,6 +8331,11 @@
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
"node_modules/fast-glob": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
@@ -7856,9 +8352,9 @@
}
},
"node_modules/fast-xml-parser": {
- "version": "4.3.5",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.5.tgz",
- "integrity": "sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz",
+ "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==",
"funding": [
{
"type": "github",
@@ -7935,6 +8431,14 @@
"node": ">=8"
}
},
+ "node_modules/filter-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz",
+ "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
@@ -8014,11 +8518,38 @@
"node": ">=0.4.0"
}
},
+ "node_modules/follow-redirects": {
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fontfaceobserver": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz",
"integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg=="
},
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
"node_modules/form-data": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
@@ -8114,6 +8645,24 @@
"node": "6.* || 8.* || >= 10.*"
}
},
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/get-port": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
@@ -8198,6 +8747,17 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
@@ -8233,6 +8793,53 @@
"node": ">=4"
}
},
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/hasown": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
@@ -8459,11 +9066,6 @@
"loose-envify": "^1.0.0"
}
},
- "node_modules/ip": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz",
- "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ=="
- },
"node_modules/ip-regex": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
@@ -8480,6 +9082,21 @@
"node": ">= 0.10"
}
},
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -8501,6 +9118,17 @@
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-core-module": {
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
@@ -8550,6 +9178,20 @@
"node": ">=4"
}
},
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -8642,6 +9284,20 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+ "dependencies": {
+ "which-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-unicode-supported": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
@@ -9275,6 +9931,11 @@
"is-buffer": "~1.1.1"
}
},
+ "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/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -9846,9 +10507,9 @@
}
},
"node_modules/metro": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.6.tgz",
- "integrity": "sha512-f6Nhnht9TxVRP6zdBq9J2jNdeDBxRmJFnjxhQS1GeCpokBvI6fTXq+wHTLz5jZA+75fwbkPSzBxBJzQa6xi0AQ==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro/-/metro-0.80.7.tgz",
+ "integrity": "sha512-con7RTEulmefHplqusjpoGD+r4CBuDLaeI261hFcSuTv6+Arm5FgSYmUcBa3MeqJbC/U8v0uT6MbdkEFCEl1xg==",
"dependencies": {
"@babel/code-frame": "^7.0.0",
"@babel/core": "^7.20.0",
@@ -9865,24 +10526,24 @@
"denodeify": "^1.2.1",
"error-stack-parser": "^2.0.6",
"graceful-fs": "^4.2.4",
- "hermes-parser": "0.19.1",
+ "hermes-parser": "0.20.1",
"image-size": "^1.0.2",
"invariant": "^2.2.4",
"jest-worker": "^29.6.3",
"jsc-safe-url": "^0.2.2",
"lodash.throttle": "^4.1.1",
- "metro-babel-transformer": "0.80.6",
- "metro-cache": "0.80.6",
- "metro-cache-key": "0.80.6",
- "metro-config": "0.80.6",
- "metro-core": "0.80.6",
- "metro-file-map": "0.80.6",
- "metro-resolver": "0.80.6",
- "metro-runtime": "0.80.6",
- "metro-source-map": "0.80.6",
- "metro-symbolicate": "0.80.6",
- "metro-transform-plugins": "0.80.6",
- "metro-transform-worker": "0.80.6",
+ "metro-babel-transformer": "0.80.7",
+ "metro-cache": "0.80.7",
+ "metro-cache-key": "0.80.7",
+ "metro-config": "0.80.7",
+ "metro-core": "0.80.7",
+ "metro-file-map": "0.80.7",
+ "metro-resolver": "0.80.7",
+ "metro-runtime": "0.80.7",
+ "metro-source-map": "0.80.7",
+ "metro-symbolicate": "0.80.7",
+ "metro-transform-plugins": "0.80.7",
+ "metro-transform-worker": "0.80.7",
"mime-types": "^2.1.27",
"node-fetch": "^2.2.0",
"nullthrows": "^1.1.1",
@@ -9902,12 +10563,12 @@
}
},
"node_modules/metro-babel-transformer": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.6.tgz",
- "integrity": "sha512-ssuoVC4OzqaOt3LpwfUbDfBlFGRu9v1Yf2JJnKPz0ROYHNjSBws4aUesqQQ/Ea8DbiH7TK4j4cJmm+XjdHmgqA==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.80.7.tgz",
+ "integrity": "sha512-b773yA16DsDQiM4OOzCsr1gwEd+iio9au98o3bj7F/bxVyoz1LuYox06BIdsiLL1o4kV5VtzTu3UXSJ2X0ZGXg==",
"dependencies": {
"@babel/core": "^7.20.0",
- "hermes-parser": "0.19.1",
+ "hermes-parser": "0.20.1",
"nullthrows": "^1.1.1"
},
"engines": {
@@ -9915,24 +10576,24 @@
}
},
"node_modules/metro-babel-transformer/node_modules/hermes-estree": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz",
- "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g=="
+ "version": "0.20.1",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz",
+ "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg=="
},
"node_modules/metro-babel-transformer/node_modules/hermes-parser": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz",
- "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==",
+ "version": "0.20.1",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz",
+ "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==",
"dependencies": {
- "hermes-estree": "0.19.1"
+ "hermes-estree": "0.20.1"
}
},
"node_modules/metro-cache": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.6.tgz",
- "integrity": "sha512-NP81pHSPkzs+iNlpVkJqijrpcd6lfuDAunYH9/Rn8oLNz0yLfkl8lt+xOdUU4IkFt3oVcTBEFCnzAzv4B8YhyA==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.80.7.tgz",
+ "integrity": "sha512-N6HyLjwDKusqJDaVyP57SVZKP51m1FFVcbIWQXu938W30nCXQEuWOx4e6adKgfEOZpscisWojfrCFN42/A8uug==",
"dependencies": {
- "metro-core": "0.80.6",
+ "metro-core": "0.80.7",
"rimraf": "^3.0.2"
},
"engines": {
@@ -9940,9 +10601,9 @@
}
},
"node_modules/metro-cache-key": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.6.tgz",
- "integrity": "sha512-DFmjQacC8m/S3HpELklLMWkPGP/fZPX3BSgjd0xQvwIvWyFwk8Nn/lfp/uWdEVDtDSIr64/anXU5uWohGwlWXw==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.80.7.tgz",
+ "integrity": "sha512-sfCOtooMqmmm2v0a4EsYr5knYJGIArZJ5Y7MAcmsVU2pcqg+JQyPhYr/zqSkXBBipRxXr7aNXul9StKzKjsnbw==",
"engines": {
"node": ">=18"
}
@@ -9962,38 +10623,38 @@
}
},
"node_modules/metro-config": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.6.tgz",
- "integrity": "sha512-vHYYvJpRTWYbmvqlR7i04xQpZCHJ6yfZ/xIcPdz2ssbdJGGJbiT1Aar9wr8RAhsccSxdJgfE5B1DB8Mo+DnhIg==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.80.7.tgz",
+ "integrity": "sha512-kpXCidthS/kFlEoXjWQp+IyCU5ICCOESVgwXEzViSDOv5bPJz2ytIr2lF623e50QzyrpFBSnOPjnyd1JbsVPvQ==",
"dependencies": {
"connect": "^3.6.5",
"cosmiconfig": "^5.0.5",
"jest-validate": "^29.6.3",
- "metro": "0.80.6",
- "metro-cache": "0.80.6",
- "metro-core": "0.80.6",
- "metro-runtime": "0.80.6"
+ "metro": "0.80.7",
+ "metro-cache": "0.80.7",
+ "metro-core": "0.80.7",
+ "metro-runtime": "0.80.7"
},
"engines": {
"node": ">=18"
}
},
"node_modules/metro-core": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.6.tgz",
- "integrity": "sha512-fn4rryTUAwzFJWj7VIPDH4CcW/q7MV4oGobqR6NsuxZoIGYrVpK7pBasumu5YbCqifuErMs5s23BhmrDNeZURw==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.80.7.tgz",
+ "integrity": "sha512-bl3D6TtIa2mSdVTbkskMPcJSdoivO0F06u8ip/oS/T6RsbjkMTN3OZBjJXclY9I0FcN14q8I5YQt1oriySY/2Q==",
"dependencies": {
"lodash.throttle": "^4.1.1",
- "metro-resolver": "0.80.6"
+ "metro-resolver": "0.80.7"
},
"engines": {
"node": ">=18"
}
},
"node_modules/metro-file-map": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.6.tgz",
- "integrity": "sha512-S3CUqvpXpc+q3q+hCEWvFKhVqgq0VmXdZQDF6u7ue86E2elq1XLnfLOt9JSpwyhpMQRyysjSCnd/Yh6GZMNHoQ==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.80.7.tgz",
+ "integrity": "sha512-A9IAmFZu/Ch7zJ4LzJChsvhedNOipuIXaOz6N8J44rqVZHI0uIqDKVGCne7lzc97djF1Ti4tH9nP64u4IdhpSg==",
"dependencies": {
"anymatch": "^3.0.3",
"debug": "^2.2.0",
@@ -10027,9 +10688,9 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/metro-minify-terser": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.6.tgz",
- "integrity": "sha512-83eZaH2+B+jP92KuodPqXknzwmiboKAuZY4doRfTEEXAG57pNVNN6cqSRJlwDnmaTBKRffxoncBXbYqHQgulgg==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.80.7.tgz",
+ "integrity": "sha512-9/mYV1tMGeoFSTMFr94oigJM2qMXJO3hvlibkaQ21HZjVyrfb54bSYyfIIRvAsjY2RCBRg9r2OrT+YbxnMypig==",
"dependencies": {
"terser": "^5.15.0"
},
@@ -10038,17 +10699,17 @@
}
},
"node_modules/metro-resolver": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.6.tgz",
- "integrity": "sha512-R7trfglG4zY4X9XyM9cvuffAhQ9W1reWoahr1jdEWa6rOI8PyM0qXjcsb8l+fsOQhdSiVlkKcYAmkyrs1S/zrA==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.80.7.tgz",
+ "integrity": "sha512-xW7M0TITuKs2rYQqbIQn297+MVWfDuGptPnfZ+RBG9afdN//Zpmg14KFMIYU4r5AH2WS+nxwL57DbZft1MyoHg==",
"engines": {
"node": ">=18"
}
},
"node_modules/metro-runtime": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.6.tgz",
- "integrity": "sha512-21GQVd0pp2nACoK0C2PL8mBsEhIFUFFntYrWRlYNHtPQoqDzddrPEIgkyaABGXGued+dZoBlFQl+LASlmmfkvw==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.80.7.tgz",
+ "integrity": "sha512-gWqzfm9YQw9I08L23hcLmY7XNx48W0c0vLEkVEF5P7ZNIOSfX9CkEv0JvTTJWshRYkbgIqsdtpMAHq13LJJ6iA==",
"dependencies": {
"@babel/runtime": "^7.0.0"
},
@@ -10057,16 +10718,16 @@
}
},
"node_modules/metro-source-map": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.6.tgz",
- "integrity": "sha512-lqDuSLctWy9Qccu4Zl0YB1PzItpsqcKGb1nK0aDY+lzJ26X65OCib2VzHlj+xj7e4PiIKOfsvDCczCBz4cnxdg==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.80.7.tgz",
+ "integrity": "sha512-6a1m/51ekkAl+ISNBcKQUXTU+AldbbPUHDE3DDDU17Y0HNoovkQR23DB/uH/SzUHQszYxK1fnwUTSxpzOjx+pw==",
"dependencies": {
"@babel/traverse": "^7.20.0",
"@babel/types": "^7.20.0",
"invariant": "^2.2.4",
- "metro-symbolicate": "0.80.6",
+ "metro-symbolicate": "0.80.7",
"nullthrows": "^1.1.1",
- "ob1": "0.80.6",
+ "ob1": "0.80.7",
"source-map": "^0.5.6",
"vlq": "^1.0.0"
},
@@ -10083,12 +10744,12 @@
}
},
"node_modules/metro-symbolicate": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.6.tgz",
- "integrity": "sha512-SGwKeBi+lK7NmM5+EcW6DyRRa9HmGSvH0LJtlT4XoRMbpxzsLYs0qUEA+olD96pOIP+ta7I8S30nQr2ttqgO8A==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.80.7.tgz",
+ "integrity": "sha512-WrBR5FQhVf/Y2N3zBS5TvNdwYzcQTLdJj9kcn0MIt+DpdgfLuUDjHXYaq4G9fZubofInx2dUcqr4WCn6fkIxuA==",
"dependencies": {
"invariant": "^2.2.4",
- "metro-source-map": "0.80.6",
+ "metro-source-map": "0.80.7",
"nullthrows": "^1.1.1",
"source-map": "^0.5.6",
"through2": "^2.0.1",
@@ -10110,9 +10771,9 @@
}
},
"node_modules/metro-transform-plugins": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.6.tgz",
- "integrity": "sha512-e04tdTC5Fy1vOQrTTXb5biao0t7nR/h+b1IaBTlM5UaHaAJZr658uVOoZhkRxKjbhF2mIwJ/8DdorD2CA15BCg==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.80.7.tgz",
+ "integrity": "sha512-ENGvQF7wZCtn2rO6jwsYy3XRSPrlm0G/1TgDC8AXdvz0yjfAe1ODSCYWxP8S3JXfjKL5m3b6j9RsV8sQIxsUjQ==",
"dependencies": {
"@babel/core": "^7.20.0",
"@babel/generator": "^7.20.0",
@@ -10125,21 +10786,21 @@
}
},
"node_modules/metro-transform-worker": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.6.tgz",
- "integrity": "sha512-jV+VgCLiCj5jQadW/h09qJaqDreL6XcBRY52STCoz2xWn6WWLLMB5nXzQtvFNPmnIOps+Xu8+d5hiPcBNOhYmA==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.80.7.tgz",
+ "integrity": "sha512-QcgKpx3WZo71jTtXMEeeFuGpA+nG8YuWjxPTIsIYTjgDxcArS8zDDRzS18mmYkP65yyzH4dT94B1FJH9+flRag==",
"dependencies": {
"@babel/core": "^7.20.0",
"@babel/generator": "^7.20.0",
"@babel/parser": "^7.20.0",
"@babel/types": "^7.20.0",
- "metro": "0.80.6",
- "metro-babel-transformer": "0.80.6",
- "metro-cache": "0.80.6",
- "metro-cache-key": "0.80.6",
- "metro-minify-terser": "0.80.6",
- "metro-source-map": "0.80.6",
- "metro-transform-plugins": "0.80.6",
+ "metro": "0.80.7",
+ "metro-babel-transformer": "0.80.7",
+ "metro-cache": "0.80.7",
+ "metro-cache-key": "0.80.7",
+ "metro-minify-terser": "0.80.7",
+ "metro-source-map": "0.80.7",
+ "metro-transform-plugins": "0.80.7",
"nullthrows": "^1.1.1"
},
"engines": {
@@ -10213,16 +10874,16 @@
}
},
"node_modules/metro/node_modules/hermes-estree": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.19.1.tgz",
- "integrity": "sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g=="
+ "version": "0.20.1",
+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.20.1.tgz",
+ "integrity": "sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg=="
},
"node_modules/metro/node_modules/hermes-parser": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.19.1.tgz",
- "integrity": "sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==",
+ "version": "0.20.1",
+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.20.1.tgz",
+ "integrity": "sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA==",
"dependencies": {
- "hermes-estree": "0.19.1"
+ "hermes-estree": "0.20.1"
}
},
"node_modules/metro/node_modules/ms": {
@@ -10451,6 +11112,14 @@
"mkdirp": "bin/cmd.js"
}
},
+ "node_modules/mrmime": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz",
+ "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -10729,9 +11398,9 @@
"integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw=="
},
"node_modules/ob1": {
- "version": "0.80.6",
- "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.6.tgz",
- "integrity": "sha512-nlLGZPMQ/kbmkdIb5yvVzep1jKUII2x6ehNsHpgy71jpnJMW7V+KsB3AjYI2Ajb7UqMAMNjlssg6FUodrEMYzg==",
+ "version": "0.80.7",
+ "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.80.7.tgz",
+ "integrity": "sha512-+m1cCNckRtDEnurNSVqywpN6LhFWc1Z3MdX7PX7boCwEdSzh4evlUjBIUzao1lBOpB7G5FvwfFagTVQGCMa0Yw==",
"engines": {
"node": ">=18"
}
@@ -11172,6 +11841,14 @@
"node": ">=4.0.0"
}
},
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/postcss": {
"version": "8.4.35",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
@@ -11521,6 +12198,11 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"node_modules/pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -11546,6 +12228,23 @@
"qrcode-terminal": "bin/qrcode-terminal.js"
}
},
+ "node_modules/query-string": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz",
+ "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==",
+ "dependencies": {
+ "decode-uri-component": "^0.2.2",
+ "filter-obj": "^1.1.0",
+ "split-on-first": "^1.0.0",
+ "strict-uri-encode": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/queue": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
@@ -11635,23 +12334,92 @@
}
}
},
+ "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.4",
+ "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.4.tgz",
+ "integrity": "sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "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-hook-form": {
+ "version": "7.51.2",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.51.2.tgz",
+ "integrity": "sha512-y++lwaWjtzDt/XNnyGDQy6goHskFualmDlf+jzEZvjvz6KWDf7EboL7pUvRCzPTJd0EOPpdekYaQLEvvG6m6HA==",
+ "engines": {
+ "node": ">=12.22.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/react-hook-form"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17 || ^18"
+ }
+ },
"node_modules/react-is": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
},
"node_modules/react-native": {
- "version": "0.73.4",
- "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.4.tgz",
- "integrity": "sha512-VtS+Yr6OOTIuJGDECIYWzNU8QpJjASQYvMtfa/Hvm/2/h5GdB6W9H9TOmh13x07Lj4AOhNMx3XSsz6TdrO4jIg==",
+ "version": "0.73.6",
+ "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.73.6.tgz",
+ "integrity": "sha512-oqmZe8D2/VolIzSPZw+oUd6j/bEmeRHwsLn1xLA5wllEYsZ5zNuMsDus235ONOnCRwexqof/J3aztyQswSmiaA==",
"dependencies": {
"@jest/create-cache-key-function": "^29.6.3",
- "@react-native-community/cli": "12.3.2",
- "@react-native-community/cli-platform-android": "12.3.2",
- "@react-native-community/cli-platform-ios": "12.3.2",
+ "@react-native-community/cli": "12.3.6",
+ "@react-native-community/cli-platform-android": "12.3.6",
+ "@react-native-community/cli-platform-ios": "12.3.6",
"@react-native/assets-registry": "0.73.1",
"@react-native/codegen": "0.73.3",
- "@react-native/community-cli-plugin": "0.73.16",
+ "@react-native/community-cli-plugin": "0.73.17",
"@react-native/gradle-plugin": "0.73.4",
"@react-native/js-polyfills": "0.73.1",
"@react-native/normalize-colors": "0.73.2",
@@ -11694,6 +12462,28 @@
"react": "18.2.0"
}
},
+ "node_modules/react-native-safe-area-context": {
+ "version": "4.8.2",
+ "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.8.2.tgz",
+ "integrity": "sha512-ffUOv8BJQ6RqO3nLml5gxJ6ab3EestPiyWekxdzO/1MQ7NF8fW1Mzh1C5QE9yq573Xefnc7FuzGXjtesZGv7cQ==",
+ "peerDependencies": {
+ "react": "*",
+ "react-native": "*"
+ }
+ },
+ "node_modules/react-native-screens": {
+ "version": "3.29.0",
+ "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.29.0.tgz",
+ "integrity": "sha512-yB1GoAMamFAcYf4ku94uBPn0/ani9QG7NdI98beJ5cet2YFESYYzuEIuU+kt+CNRcO8qqKeugxlfgAa3HyTqlg==",
+ "dependencies": {
+ "react-freeze": "^1.0.0",
+ "warn-once": "^0.1.0"
+ },
+ "peerDependencies": {
+ "react": "*",
+ "react-native": "*"
+ }
+ },
"node_modules/react-native/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -12099,6 +12889,24 @@
"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/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -12205,6 +13013,27 @@
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
},
+ "node_modules/set-cookie-parser": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz",
+ "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ=="
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -12226,6 +13055,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",
@@ -12279,6 +13113,19 @@
"node": ">= 5.10.0"
}
},
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/simple-swizzle/node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ },
"node_modules/sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
@@ -12357,6 +13204,14 @@
"node": "*"
}
},
+ "node_modules/split-on-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz",
+ "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -12432,6 +13287,19 @@
"node": ">= 0.10.0"
}
},
+ "node_modules/stream-slice": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/stream-slice/-/stream-slice-0.1.2.tgz",
+ "integrity": "sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA=="
+ },
+ "node_modules/strict-uri-encode": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
+ "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -12698,9 +13566,9 @@
}
},
"node_modules/tar": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
- "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
"dependencies": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
@@ -12823,9 +13691,9 @@
}
},
"node_modules/terser": {
- "version": "5.29.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz",
- "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==",
+ "version": "5.29.2",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz",
+ "integrity": "sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==",
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
@@ -13123,11 +13991,27 @@
"browserslist": ">= 4.21.0"
}
},
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
"node_modules/url-join": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz",
"integrity": "sha512-EGXjXJZhIHiQMK2pQukuFcL303nskqIRzWvPvV5O8miOfwoUb9G+a/Cld60kUyeaybEI94wvVClT10DtfeAExA=="
},
+ "node_modules/use-latest-callback": {
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.9.tgz",
+ "integrity": "sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw==",
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
"node_modules/use-sync-external-store": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
@@ -13136,6 +14020,18 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -13191,6 +14087,11 @@
"makeerror": "1.0.12"
}
},
+ "node_modules/warn-once": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.1.tgz",
+ "integrity": "sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q=="
+ },
"node_modules/wcwidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
@@ -13199,6 +14100,25 @@
"defaults": "^1.0.3"
}
},
+ "node_modules/web-encoding": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz",
+ "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==",
+ "dependencies": {
+ "util": "^0.12.3"
+ },
+ "optionalDependencies": {
+ "@zxing/text-encoding": "0.9.0"
+ }
+ },
+ "node_modules/web-streams-polyfill": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
@@ -13255,6 +14175,24 @@
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
"integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="
},
+ "node_modules/which-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/wonka": {
"version": "4.0.15",
"resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz",
diff --git a/mobile/package.json b/mobile/package.json
index 0004d05098d790862a7b4764d3caf39ed434433b..e503a600fbdbf85fbacb3571e12eeb06c7c92926 100644
--- a/mobile/package.json
+++ b/mobile/package.json
@@ -1,7 +1,7 @@
{
"name": "mobile",
"version": "1.0.0",
- "main": "node_modules/expo/AppEntry.js",
+ "main": "expo-router/entry",
"scripts": {
"start": "expo start",
"android": "expo start --android",
@@ -9,11 +9,19 @@
"web": "expo start --web"
},
"dependencies": {
- "expo": "~50.0.11",
+ "axios": "^1.6.8",
+ "expo": "~50.0.14",
+ "expo-constants": "~15.4.5",
+ "expo-linking": "~6.2.2",
+ "expo-router": "~3.4.8",
+ "expo-secure-store": "~12.8.1",
"expo-status-bar": "~1.11.1",
"nativewind": "^2.0.11",
"react": "18.2.0",
- "react-native": "0.73.4"
+ "react-hook-form": "^7.51.2",
+ "react-native": "0.73.6",
+ "react-native-safe-area-context": "4.8.2",
+ "react-native-screens": "~3.29.0"
},
"devDependencies": {
"@babel/core": "^7.20.0",
diff --git a/mobile/src/components/caroussel/caroussel.tsx b/mobile/src/components/caroussel/caroussel.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..acd257b4d73f543d985b8feef8de62f10d154f09
--- /dev/null
+++ b/mobile/src/components/caroussel/caroussel.tsx
@@ -0,0 +1,77 @@
+import { View, Animated, Text, Dimensions, Image } from "react-native";
+import { PlaceInfoEntity } from "../../domain/entities/place_info_entity";
+import { useRef } from "react";
+import { StateDataSource } from "../../domain/datasources/state_datasource";
+import { CarousselTile } from "./caroussel_tile";
+
+interface CarousselProps {
+ data: PlaceInfoEntity[];
+}
+
+const ITEM_WIDTH = Dimensions.get("window").width * 0.7;
+const BLANK_ITEM_WIDTH = Dimensions.get("window").width * 0.15;
+
+export const Caroussel = ({ data }: CarousselProps) => {
+ const scrollX = useRef(new Animated.Value(0)).current;
+ const finalData = [
+ {
+ id: -1,
+ name: "empty-left",
+ },
+ ...data,
+ {
+ id: -2,
+ name: "empty-right",
+ },
+ ];
+ return (
+ item.id.toString()}
+ horizontal
+ showsHorizontalScrollIndicator={false}
+ decelerationRate={0}
+ initialNumToRender={1}
+
+ bounces={false}
+ snapToInterval={ITEM_WIDTH}
+ onScroll={Animated.event(
+ [{ nativeEvent: { contentOffset: { x: scrollX } } }],
+ { useNativeDriver: true }
+ )}
+ renderItem={({ item, index }) => {
+ if (item.id === -1 || item.id === -2) {
+ return ;
+ }
+ console.log(item);
+ const inputRange = [
+ (index - 2) * ITEM_WIDTH,
+ (index - 1) * ITEM_WIDTH,
+ index * ITEM_WIDTH,
+ ];
+
+ const translateY = scrollX.interpolate({
+ inputRange,
+ outputRange: [100, 0, 100],
+ });
+
+ const opacity = scrollX.interpolate({
+ inputRange,
+ outputRange: [0.6, 1, 0.6],
+ });
+ const scale = scrollX.interpolate({
+ inputRange,
+ outputRange: [0.8, 1, 0.8],
+ });
+ return (
+
+ );
+ }}
+ />
+ );
+};
diff --git a/mobile/src/components/caroussel/caroussel_tile.tsx b/mobile/src/components/caroussel/caroussel_tile.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..49739be6f8e07142b4be7af22cef717678223f7a
--- /dev/null
+++ b/mobile/src/components/caroussel/caroussel_tile.tsx
@@ -0,0 +1,71 @@
+import { memo } from "react";
+import { Animated, Dimensions, Image, Text, TouchableOpacity } from "react-native";
+import { PlaceInfoEntity } from "../../domain/entities/place_info_entity";
+import { Link } from "expo-router";
+
+interface CarousselTileProps {
+ onPress?: () => void;
+ item: PlaceInfoEntity;
+ translateY: Animated.AnimatedInterpolation;
+ scale: Animated.AnimatedInterpolation;
+ opacity: Animated.AnimatedInterpolation;
+}
+
+const ITEM_WIDTH = Dimensions.get("window").width * 0.7;
+const BLANK_ITEM_WIDTH = Dimensions.get("window").width * 0.15;
+const ITEM_HEIGHT = Dimensions.get("window").height * 0.7;
+
+export const CarousselTile = memo(({ translateY, scale, opacity, item }: CarousselTileProps) => {
+ console.log('render');
+ return (
+
+
+
+
+
+ {item.name}
+
+
+
+
+ );
+});
diff --git a/mobile/src/components/circle_avatar/circle_avatar.tsx b/mobile/src/components/circle_avatar/circle_avatar.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..118d296bb24d8c2b34c9a5d10dcbda39d684da80
--- /dev/null
+++ b/mobile/src/components/circle_avatar/circle_avatar.tsx
@@ -0,0 +1,14 @@
+import { View, Image, ImageSourcePropType } from "react-native";
+
+interface CircleAvatarProps {
+ size: number;
+ source: ImageSourcePropType;
+}
+
+export const CircleAvatar = ({ size, source }: CircleAvatarProps) => {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/mobile/src/components/full_page_loader/full_page_loader.tsx b/mobile/src/components/full_page_loader/full_page_loader.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..858792083c12ad8c06a0374bae24c49434ab2ded
--- /dev/null
+++ b/mobile/src/components/full_page_loader/full_page_loader.tsx
@@ -0,0 +1,9 @@
+import { ActivityIndicator, View } from "react-native";
+
+export const FullPageLoader = () => {
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/mobile/src/components/login_form/login_form.tsx b/mobile/src/components/login_form/login_form.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..39eb15fa5614eb8feebe36671b74c5f1721b2b94
--- /dev/null
+++ b/mobile/src/components/login_form/login_form.tsx
@@ -0,0 +1,107 @@
+import { Control, Controller, FieldValues } from "react-hook-form";
+import { ScrollView, StyleSheet, Text, TouchableOpacity, View } from "react-native";
+import { CustomTextInput } from "../text_input/text_input";
+import { LIGTHT_THEME } from "../../constants/theme";
+import { LoginFormValues } from "../../hooks/useLoggin";
+import { OrDivision } from "../or_division/or_division";
+
+interface LoginFormProps {
+ control: Control;
+ onSubmit: () => void;
+}
+
+export const LoginForm = ({ control, onSubmit }: LoginFormProps) => {
+ return (
+
+ Login
+
+ (
+
+ )}
+ rules={{
+ required: "Email is required",
+ pattern: { value: /\S+@\S+\.\S+/, message: "Invalid email" },
+ }}
+ />
+ (
+
+ )}
+ rules={{ required: "Password is required" }}
+ />
+
+
+ Login
+
+
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ mainContainer: {
+ flex: 1,
+ backgroundColor:
+ LIGTHT_THEME.color.background
+ },
+ imageContainer: {
+ height: "40%",
+ overflow: "hidden",
+ borderBottomLeftRadius: 70,
+ elevation: 5,
+ },
+ loginContainer: {
+ marginHorizontal: 20,
+ marginTop: "-30%",
+ marginBottom: 20,
+ elevation: 5,
+ borderRadius: 10,
+ backgroundColor: LIGTHT_THEME.color.white,
+ height: "70%",
+ },
+ loginScroll: {
+ padding: 20,
+ gap: 10,
+ justifyContent: "center",
+ },
+ title: { fontSize: 30, fontWeight: "bold", alignSelf: "center" },
+ submitBtn: {
+ backgroundColor: "black",
+ borderRadius: 5,
+ width: "100%",
+ padding: 10,
+ justifyContent: "center",
+ alignItems: "center",
+ },
+ submitBtnText: {
+ color: "white",
+ fontSize: 20,
+ },
+ });
\ No newline at end of file
diff --git a/mobile/src/components/or_division/or_division.tsx b/mobile/src/components/or_division/or_division.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..95430d938c48499a032bcaf4da5dccb1fac2baef
--- /dev/null
+++ b/mobile/src/components/or_division/or_division.tsx
@@ -0,0 +1,26 @@
+import { View, Text, StyleSheet } from "react-native";
+import { LIGTHT_THEME } from "../../constants/theme";
+
+export const OrDivision = () => {
+ return (
+
+ OR
+
+ );
+};
+
+const styles = StyleSheet.create({
+ orDivision: {
+ marginVertical: 30,
+ borderTopWidth: 2,
+ borderTopColor: LIGTHT_THEME.color.black,
+ alignItems: "center",
+ },
+ orText: {
+ fontSize: 16,
+ marginTop: -12,
+ backgroundColor: LIGTHT_THEME.color.white,
+ width: 40,
+ textAlign: "center",
+ },
+});
\ No newline at end of file
diff --git a/mobile/src/components/sign_up_form/sign_up_form.tsx b/mobile/src/components/sign_up_form/sign_up_form.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..edf7ed1e340b320159598092bf5d406de2b1e946
--- /dev/null
+++ b/mobile/src/components/sign_up_form/sign_up_form.tsx
@@ -0,0 +1,167 @@
+import { Controller, useForm } from "react-hook-form";
+import {
+ ScrollView,
+ StyleSheet,
+ Text,
+ TouchableOpacity,
+ View,
+} from "react-native";
+import { CustomTextInput } from "../text_input/text_input";
+import { LIGTHT_THEME } from "../../constants/theme";
+import { useLoggin } from "../../hooks/useLoggin";
+import { OrDivision } from "../or_division/or_division";
+
+export const SignUpForm = () => {
+ const { control } = useForm();
+ return (
+
+ Sign Up
+
+ (
+
+ )}
+ rules={{
+ required: "Name is required",
+ }}
+ />
+ (
+
+ )}
+ rules={{
+ required: "Last name is required",
+ }}
+ />
+ (
+
+ )}
+ rules={{
+ required: "Email is required",
+ pattern: { value: /\S+@\S+\.\S+/, message: "Invalid email" },
+ }}
+ />
+ (
+
+ )}
+ rules={{ required: "Password is required" }}
+ />
+ (
+
+ )}
+ rules={{ required: "Confirm password is required" }}
+ />
+
+
+ Sign Up
+
+
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ mainContainer: {
+ flex: 1,
+ backgroundColor: LIGTHT_THEME.color.background,
+ },
+ imageContainer: {
+ height: "40%",
+ overflow: "hidden",
+ borderBottomLeftRadius: 70,
+ elevation: 5,
+ },
+ loginContainer: {
+ marginHorizontal: 20,
+ marginTop: "-30%",
+ marginBottom: 20,
+ elevation: 5,
+ borderRadius: 10,
+ backgroundColor: LIGTHT_THEME.color.white,
+ height: "70%",
+ },
+ loginScroll: {
+ padding: 20,
+ gap: 10,
+ justifyContent: "center",
+ },
+ title: { fontSize: 30, fontWeight: "bold", alignSelf: "center" },
+ submitBtn: {
+ backgroundColor: "black",
+ borderRadius: 5,
+ width: "100%",
+ padding: 10,
+ justifyContent: "center",
+ alignItems: "center",
+ },
+ submitBtnText: {
+ color: "white",
+ fontSize: 20,
+ },
+});
diff --git a/mobile/src/components/text_input/text_input.tsx b/mobile/src/components/text_input/text_input.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..419401d5b559a58de80c2b7b98a33cd000b51294
--- /dev/null
+++ b/mobile/src/components/text_input/text_input.tsx
@@ -0,0 +1,90 @@
+import { useEffect, useRef } from "react";
+import { TextInput, Text, StyleSheet, View, Animated } from "react-native";
+import { LIGTHT_THEME } from "../../constants/theme";
+
+interface TextInputProps {
+ isPassword?: boolean;
+ label: string;
+ onChangeText: (text: string) => void;
+ value: string;
+ onBlur?: () => void;
+ errors?: string;
+ type?: any;
+}
+
+export const CustomTextInput = (props: TextInputProps) => {
+ const { isPassword, label, type, onBlur, errors, ...rest } = props;
+ const labelFocusAnimation = useRef(new Animated.Value(0)).current;
+
+ const handleFocus = () => {
+ Animated.timing(labelFocusAnimation, {
+ toValue: 1,
+ duration: 200,
+ useNativeDriver: false,
+ }).start();
+ };
+
+ const handleBlur = () => {
+ if (!props.value || props.value === "") {
+ Animated.timing(labelFocusAnimation, {
+ toValue: 0,
+ duration: 200,
+ useNativeDriver: false,
+ }).start();
+ }
+ onBlur && onBlur();
+ };
+
+ return (
+
+
+
+ {label}
+
+
+
+ {
+ errors ? {errors} :
+ }
+
+ );
+};
+
+const styles = StyleSheet.create({
+ container: {
+ width: "100%",
+ borderWidth: 1,
+ borderRadius: 5,
+ borderColor: "black",
+ height: 40,
+ alignItems: "center",
+ justifyContent: "center",
+ },
+ input: {
+ width: "100%",
+ height: "100%",
+ paddingHorizontal: 10,
+ },
+ label: {
+ position: "absolute",
+ left: 10,
+ zIndex: 1,
+ backgroundColor: LIGTHT_THEME.color.white,
+ },
+});
diff --git a/mobile/src/constants/api_request_states.ts b/mobile/src/constants/api_request_states.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8d11f73954813e71dfdf1c3c5d5fa006d94eca95
--- /dev/null
+++ b/mobile/src/constants/api_request_states.ts
@@ -0,0 +1,5 @@
+export enum ApiRequestStatus {
+ LOADING = "LOADING",
+ SUCCESS = "SUCCESS",
+ ERROR = "ERROR"
+}
diff --git a/mobile/src/constants/theme.ts b/mobile/src/constants/theme.ts
new file mode 100644
index 0000000000000000000000000000000000000000..83bdb23dde7c722ddc1c54cb246040c1de6d1c42
--- /dev/null
+++ b/mobile/src/constants/theme.ts
@@ -0,0 +1,31 @@
+interface Theme {
+ color: {
+ primary: string;
+ secondary: string;
+ terciary: string;
+ background: string;
+ white: string;
+ black: string;
+ };
+ fontSize: {
+ small: string;
+ medium: string;
+ large: string;
+ };
+}
+
+export const LIGTHT_THEME: Theme = {
+ color: {
+ primary: "tomato",
+ secondary: "gray",
+ terciary: "#f0f0f0",
+ background: "#f0f0f0",
+ white: "white",
+ black: "black",
+ },
+ fontSize: {
+ small: "12px",
+ medium: "16px",
+ large: "24px",
+ },
+};
\ No newline at end of file
diff --git a/mobile/src/contexts/auth_context.tsx b/mobile/src/contexts/auth_context.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..098f7e6e19128255dd8cca0663dbe27a2c01a9c4
--- /dev/null
+++ b/mobile/src/contexts/auth_context.tsx
@@ -0,0 +1,71 @@
+import { PropsWithChildren, createContext, useContext, useEffect, useState } from "react";
+import { UserInfoEntity } from "../domain/entities/user_info_entity";
+import * as SecureStore from "expo-secure-store";
+import axios from "axios";
+
+type AuthContextType = {
+ user: UserInfoEntity | null;
+ login: (userInfo: UserInfoEntity, token: string) => Promise;
+ logout: () => Promise;
+ isLoading: boolean;
+}
+
+const AuthContext = createContext(
+ {
+ user: null,
+ login: (userInfo: UserInfoEntity, token: string) => {},
+ logout: () => {},
+ isLoading: true
+ } as AuthContextType
+);
+
+type AuthContextProviderProps = PropsWithChildren<{}>;
+
+export const AuthContextProvider = ({children}: AuthContextProviderProps) => {
+ const [user, setUser] = useState(null);
+ const [isLoading, setIsLoading] = useState(true);
+
+ const checkSession = async () => {
+ const user = await SecureStore.getItemAsync("user");
+ const token = await SecureStore.getItemAsync("token");
+ console.log(user);
+ console.log(token);
+ if (user && token) {
+ setUser(JSON.parse(user));
+ axios.defaults.headers.common["Authorization"] = `Bearer ${token}`;
+ }
+ setIsLoading(false);
+ }
+
+ const login = async (userInfo: UserInfoEntity, token: string) => {
+ await SecureStore.setItemAsync("user", JSON.stringify(userInfo));
+ await SecureStore.setItemAsync("token", token);
+ setUser(userInfo);
+ axios.defaults.headers.common["Authorization"] = `Bearer ${token}`;
+ }
+
+ const logout = async () => {
+ await SecureStore.deleteItemAsync("user");
+ await SecureStore.deleteItemAsync("token");
+ setUser(null);
+ delete axios.defaults.headers.common["Authorization"];
+ }
+
+ useEffect(() => {
+ checkSession();
+ }, []);
+
+ return (
+
+ {children}
+
+ );
+}
+
+export const useAuth = () => {
+ const context = useContext(AuthContext);
+ if (!context) {
+ throw new Error("useAuth must be used within an AuthContextProvider");
+ }
+ return context;
+}
\ No newline at end of file
diff --git a/mobile/src/contexts/data_context.tsx b/mobile/src/contexts/data_context.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..e50f526241b603ee1ad064af98b42b872cd14342
--- /dev/null
+++ b/mobile/src/contexts/data_context.tsx
@@ -0,0 +1,37 @@
+import { createContext, PropsWithChildren, useContext } from "react";
+import { StateRepository } from "../domain/repositories/state_repository";
+import { StateRepositoryImpl } from "../infrastructure/repositories/state_repository";
+import { StateDataSourceImpl } from "../infrastructure/datasource/state_datasource";
+
+type DataContextType = {
+ statesRepository: StateRepository | null;
+};
+
+type DataContextProviderProps = PropsWithChildren<{}>;
+
+const DataContext = createContext({
+ statesRepository: null
+});
+
+export const DataContextProvider = ({ children }: DataContextProviderProps) => {
+ const statesDataSource = new StateDataSourceImpl();
+ const statesRepository = new StateRepositoryImpl(statesDataSource);
+
+ const value = {
+ statesRepository
+ };
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const useDataContext = () => {
+ const context = useContext(DataContext);
+ if (!context) {
+ throw new Error("useDataContext must be used within a DataContextProvider");
+ }
+ return context;
+}
\ No newline at end of file
diff --git a/mobile/src/domain/datasources/state_datasource.ts b/mobile/src/domain/datasources/state_datasource.ts
index e6a4c58a2c2d29bea152e1e63f3a25b04f949866..313fdd77cae1525ad32d4af0460bf6f8ba3cb0aa 100644
--- a/mobile/src/domain/datasources/state_datasource.ts
+++ b/mobile/src/domain/datasources/state_datasource.ts
@@ -1,5 +1,7 @@
import { StateEntity } from "../entities/state_entity";
+import { TownEntity } from "../entities/town_entity";
export interface StateDataSource {
- getStates(): Promise
+ getStates(): Promise;
+ getTowns(stateId: number): Promise;
}
\ No newline at end of file
diff --git a/mobile/src/domain/entities/place_info_entity.ts b/mobile/src/domain/entities/place_info_entity.ts
new file mode 100644
index 0000000000000000000000000000000000000000..016cac305f0e3158d17421464ea079fd5994ef02
--- /dev/null
+++ b/mobile/src/domain/entities/place_info_entity.ts
@@ -0,0 +1,6 @@
+export interface PlaceInfoEntity {
+ name: string;
+ id: number;
+ imageUri?: string;
+ description?: string;
+}
\ No newline at end of file
diff --git a/mobile/src/domain/entities/state_entity.ts b/mobile/src/domain/entities/state_entity.ts
index 963e025b8bc4c38158a8059809bb4dbb67f830b3..50921456fb016293068bf3eaae2c0d7d7005682e 100644
--- a/mobile/src/domain/entities/state_entity.ts
+++ b/mobile/src/domain/entities/state_entity.ts
@@ -1,6 +1,3 @@
-export interface StateEntity {
- name: string;
- id: number;
- imageUri: string;
- description: string;
-}
\ No newline at end of file
+import { PlaceInfoEntity } from "./place_info_entity";
+
+export interface StateEntity extends PlaceInfoEntity{}
\ No newline at end of file
diff --git a/mobile/src/domain/entities/town_entity.ts b/mobile/src/domain/entities/town_entity.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b142531218ac006e41c9dad34dcfa909090628bb
--- /dev/null
+++ b/mobile/src/domain/entities/town_entity.ts
@@ -0,0 +1,5 @@
+import { PlaceInfoEntity } from "./place_info_entity";
+
+export interface TownEntity extends PlaceInfoEntity {
+ stateId: number;
+}
\ No newline at end of file
diff --git a/mobile/src/domain/entities/user_info_entity.ts b/mobile/src/domain/entities/user_info_entity.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3482cd5683d2c5b392152cd096f60638f02ef8e1
--- /dev/null
+++ b/mobile/src/domain/entities/user_info_entity.ts
@@ -0,0 +1,7 @@
+export interface UserInfoEntity {
+ id: number;
+ name: string;
+ lastName: string;
+ email: string;
+ birthDate: string;
+}
\ No newline at end of file
diff --git a/mobile/src/domain/repositories/state_repository.ts b/mobile/src/domain/repositories/state_repository.ts
index 611ce8887e682325cc4049d0d9e52720af305dee..d0d8578e6c010a66666c8c4d731fed352d10b0d4 100644
--- a/mobile/src/domain/repositories/state_repository.ts
+++ b/mobile/src/domain/repositories/state_repository.ts
@@ -1,5 +1,7 @@
import { StateEntity } from "../entities/state_entity";
+import { TownEntity } from "../entities/town_entity";
export interface StateRepository {
- getStates(): Promise
+ getStates(): Promise;
+ getTowns(stateId: number): Promise;
}
\ No newline at end of file
diff --git a/mobile/src/hooks/useGetList.ts b/mobile/src/hooks/useGetList.ts
new file mode 100644
index 0000000000000000000000000000000000000000..803ddc96096f0b1ef9efb8e9d592d0575f82ccd1
--- /dev/null
+++ b/mobile/src/hooks/useGetList.ts
@@ -0,0 +1,23 @@
+import { useEffect, useState } from "react";
+import { ApiRequestStatus } from "../constants/api_request_states";
+
+export const useGetList = (callback: () => Promise) => {
+ const [data, setData] = useState([]);
+ const [requestStatus, setRequestStatus] = useState(ApiRequestStatus.LOADING);
+
+ useEffect(() => {
+ const fetchData = async () => {
+ try {
+ const response = await callback();
+ setData(response);
+ setRequestStatus(ApiRequestStatus.SUCCESS);
+ } catch (error) {
+ console.error(error);
+ setRequestStatus(ApiRequestStatus.ERROR);
+ }
+ };
+ fetchData();
+ }, []);
+
+ return { data, requestStatus };
+}
\ No newline at end of file
diff --git a/mobile/src/hooks/useGetStates.ts b/mobile/src/hooks/useGetStates.ts
new file mode 100644
index 0000000000000000000000000000000000000000..719e1f556105cc40b5be14bfc09726b6cdc3c09f
--- /dev/null
+++ b/mobile/src/hooks/useGetStates.ts
@@ -0,0 +1,14 @@
+import { useDataContext } from "../contexts/data_context";
+import { StateEntity } from '../domain/entities/state_entity';
+import { useGetList } from "./useGetList"
+
+export const useGetStates = () => {
+ const { statesRepository } = useDataContext();
+
+ const callback = async () =>{
+ return await statesRepository?.getStates() || [];
+ }
+ const { requestStatus, data } = useGetList(callback);
+
+ return { requestStatus, data };
+}
\ No newline at end of file
diff --git a/mobile/src/hooks/useGetTowns.ts b/mobile/src/hooks/useGetTowns.ts
new file mode 100644
index 0000000000000000000000000000000000000000..867f795e750ca88e32e9c60dceb023c9faf053c3
--- /dev/null
+++ b/mobile/src/hooks/useGetTowns.ts
@@ -0,0 +1,15 @@
+import { useDataContext } from "../contexts/data_context";
+import { StateEntity } from '../domain/entities/state_entity';
+import { TownEntity } from "../domain/entities/town_entity";
+import { useGetList } from "./useGetList"
+
+export const useGetTowns = (stateId: number) => {
+ const { statesRepository } = useDataContext();
+
+ const callback = async () =>{
+ return await statesRepository?.getTowns(stateId) || [];
+ }
+ const { requestStatus, data } = useGetList(callback);
+
+ return { requestStatus, data };
+}
\ No newline at end of file
diff --git a/mobile/src/hooks/useLoggin.ts b/mobile/src/hooks/useLoggin.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bc6472635d249d2313851ab864e78354daff73bc
--- /dev/null
+++ b/mobile/src/hooks/useLoggin.ts
@@ -0,0 +1,34 @@
+import { useForm } from "react-hook-form"
+import { useAuth } from "../contexts/auth_context";
+import { Navigator, Redirect, router } from "expo-router";
+
+export type LoginFormValues = {
+ email: string;
+ password: string;
+}
+
+export const useLoggin = () => {
+ const { control, handleSubmit, formState: { errors } } = useForm();
+ const { login } = useAuth();
+
+ const validSubmit = async (data: LoginFormValues) => {
+ await login({
+ id: 1,
+ email: data.email,
+ name: 'John',
+ lastName: 'Doe',
+ birthDate: '1990-01-01'
+ }, 'hola');
+ router.replace('/(tabs)');
+ }
+
+ const invalidSubmit = (errors: any) => {
+ console.log(errors);
+ }
+
+ const onSubmit = async () => {
+ await handleSubmit(validSubmit, invalidSubmit)();
+ }
+
+ return { control, onSubmit };
+}
\ No newline at end of file
diff --git a/mobile/src/infrastructure/datasource/state_datasource.ts b/mobile/src/infrastructure/datasource/state_datasource.ts
index f18a61e8f36b8689e76028d20760cd5272ec0a21..c3e70c3649bd65b31ab04263640aa5db2e898b66 100644
--- a/mobile/src/infrastructure/datasource/state_datasource.ts
+++ b/mobile/src/infrastructure/datasource/state_datasource.ts
@@ -1,7 +1,70 @@
import { StateDataSource } from '../../domain/datasources/state_datasource';
import { StateEntity } from '../../domain/entities/state_entity';
+import { TownEntity } from '../../domain/entities/town_entity';
+
export class StateDataSourceImpl implements StateDataSource {
+ getTowns(stateId: number): Promise {
+ return new Promise((resolve) => {
+ resolve(towns.filter(town => town.stateId === stateId));
+ });
+ }
getStates(): Promise {
- throw new Error('Method not implemented.');
+ return new Promise((resolve) => {
+ resolve(states);
+ });
+ }
+}
+
+const states: StateEntity[] = [
+ {
+ id: 1,
+ name: 'Zacatecas',
+ imageUri: 'https://www.mexicodesconocido.com.mx/wp-content/uploads/2010/07/Catedral-_Plaza-de-armas-scaled.jpg',
+ description: 'Zacatecas es una ciudad colonial que se encuentra en el centro de México. Es conocida por su arquitectura barroca, como la catedral del siglo XVIII, que se encuentra en la plaza principal, la Plaza de Armas. El Palacio de Gobierno, que data del siglo XVIII, alberga murales históricos de José Clemente Orozco. El Museo Rafael Coronel, ubicado en un antiguo convento, exhibe una colección de máscaras mexicanas. El Cerro de la Bufa, un cerro cercano, ofrece vistas panorámicas de la ciudad.'
+ },
+ {
+ id: 2,
+ name: 'San Miguel de Allende',
+ imageUri: 'https://www.mexicodesconocido.com.mx/wp-content/uploads/2010/07/Catedral-_Plaza-de-armas-scaled.jpg',
+ description: 'San Miguel de Allende es una ciudad colonial en el estado de Guanajuato, en el centro de México. Es conocida por su arquitectura barroca, sus iglesias bien conservadas y sus plazas pintorescas. El Santuario de Atotonilco, a 14 km al norte, es un importante lugar de peregrinación con frescos y esculturas religiosas. La ciudad también alberga el Museo Histórico de San Miguel de Allende, que exhibe arte y arte popular mexicano.'
+ },
+ {
+ id: 3,
+ name: 'San Miguel de Allende',
+ imageUri: 'https://www.mexicodesconocido.com.mx/wp-content/uploads/2010/07/Catedral-_Plaza-de-armas-scaled.jpg',
+ description: 'San Miguel de Allende es una ciudad colonial en el estado de Guanajuato, en el centro de México. Es conocida por su arquitectura barroca, sus iglesias bien conservadas y sus plazas pintorescas. El Santuario de Atotonilco, a 14 km al norte, es un importante lugar de peregrinación con frescos y esculturas religiosas. La ciudad también alberga el Museo Histórico de San Miguel de Allende, que exhibe arte y arte popular mexicano.'
+ },
+ {
+ id: 4,
+ name: 'San Miguel de Allende',
+ imageUri: 'https://www.mexicodesconocido.com.mx/wp-content/uploads/2010/07/Catedral-_Plaza-de-armas-scaled.jpg',
+ description: 'San Miguel de Allende es una ciudad colonial en el estado de Guanajuato, en el centro de México. Es conocida por su arquitectura barroca, sus iglesias bien conservadas y sus plazas pintorescas. El Santuario de Atotonilco, a 14 km al norte, es un importante lugar de peregrinación con frescos y esculturas religiosas. La ciudad también alberga el Museo Histórico de San Miguel de Allende, que exhibe arte y arte popular mexicano.'
+ }
+];
+
+const towns: TownEntity[] = [
+ {
+ id: 1,
+ name: 'Zacatecas',
+ imageUri: 'https://www.mexicodesconocido.com.mx/wp-content/uploads/2010/07/Catedral-_Plaza-de-armas-scaled.jpg',
+ stateId: 1
+ },
+ {
+ id: 2,
+ name: 'Guanajuato',
+ imageUri: 'https://www.mexicodesconocido.com.mx/wp-content/uploads/2010/07/Catedral-_Plaza-de-armas-scaled.jpg',
+ stateId: 1
+ },
+ {
+ id: 3,
+ name: 'San Miguel de Allende',
+ imageUri: 'https://www.mexicodesconocido.com.mx/wp-content/uploads/2010/07/Catedral-_Plaza-de-armas-scaled.jpg',
+ stateId: 1
+ },
+ {
+ id: 4,
+ name: 'Guanajuato',
+ imageUri: 'https://www.mexicodesconocido.com.mx/wp-content/uploads/2010/07/Catedral-_Plaza-de-armas-scaled.jpg',
+ stateId: 1
}
-}
\ No newline at end of file
+];
\ No newline at end of file
diff --git a/mobile/src/infrastructure/repositories/state_repository.ts b/mobile/src/infrastructure/repositories/state_repository.ts
index a387fc5955834faed4bcc0186d27610d88314271..721f23034f086d31a4c20722d97201e9b159199d 100644
--- a/mobile/src/infrastructure/repositories/state_repository.ts
+++ b/mobile/src/infrastructure/repositories/state_repository.ts
@@ -1,13 +1,17 @@
import { StateDataSource } from "../../domain/datasources/state_datasource";
import { StateEntity } from "../../domain/entities/state_entity";
+import { TownEntity } from "../../domain/entities/town_entity";
import { StateRepository } from "../../domain/repositories/state_repository";
export class StateRepositoryImpl implements StateRepository {
constructor(
private datasource: StateDataSource
){}
+ getTowns(stateId: number): Promise {
+ return this.datasource.getTowns(stateId);
+ }
getStates(): Promise {
- throw new Error("Method not implemented.");
+ return this.datasource.getStates();
}
}
\ No newline at end of file
diff --git a/mobile/src/screens/account/account_page.tsx b/mobile/src/screens/account/account_page.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..586d2a4f28161fe2bdb7ef8893b33d7a564170c8
--- /dev/null
+++ b/mobile/src/screens/account/account_page.tsx
@@ -0,0 +1,81 @@
+import {
+ View,
+ Text,
+ Button,
+ StyleSheet,
+ Touchable,
+ TouchableOpacity,
+} from "react-native";
+import { useAuth } from "../../contexts/auth_context";
+import { CircleAvatar } from "../../components/circle_avatar/circle_avatar";
+import { MaterialIcons } from "@expo/vector-icons";
+import { LIGTHT_THEME } from "../../constants/theme";
+import { ReactNode } from "react";
+
+//TODO: Add source to CircleAvatar
+const source = require("../../../assets/avatar.png");
+
+export const AccountPage = () => {
+ const { logout, user } = useAuth();
+ return (
+
+
+
+ {user?.name + " " + user?.lastName}
+
+
+ }
+ />
+
+ );
+};
+
+interface CustomTileButtonProps {
+ leadingIcon: ReactNode;
+ title: string;
+ onPress: () => void;
+}
+
+const CustomTileButton = ({
+ title,
+ onPress,
+ leadingIcon,
+}: CustomTileButtonProps) => {
+ return (
+
+
+ {leadingIcon}
+ {title}
+
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ alignItems: "center",
+ padding: 20,
+ gap: 5,
+ backgroundColor: "#f5f5f5",
+ },
+ account_option: {
+ flexDirection: "row",
+ alignItems: "center",
+ justifyContent: "space-between",
+ height: 50,
+ paddingHorizontal: 10,
+ borderTopWidth: 1,
+ borderTopColor: "#ccc",
+ backgroundColor: LIGTHT_THEME.color.white,
+ borderRadius: 5,
+ width: "100%",
+ },
+ profilePhotoContainer: {
+ alignItems: 'center'
+ }
+});
diff --git a/mobile/src/screens/login/login_page.tsx b/mobile/src/screens/login/login_page.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..385cb637c7d5b1cf99d4bf728176f13509dbece0
--- /dev/null
+++ b/mobile/src/screens/login/login_page.tsx
@@ -0,0 +1,65 @@
+import { View, Image, StyleSheet, Button } from "react-native";
+import { LoginForm } from "../../components/login_form/login_form";
+import { useLoggin } from "../../hooks/useLoggin";
+import { LIGTHT_THEME } from "../../constants/theme";
+import { router } from "expo-router";
+const loginImage = require("../../../assets/login-image.jpg");
+
+export const LoginPage = () => {
+ const { control, onSubmit } = useLoggin();
+ return (
+
+
+
+
+
+
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ mainContainer: {
+ flex: 1,
+ backgroundColor: LIGTHT_THEME.color.background,
+ },
+ imageContainer: {
+ height: "40%",
+ overflow: "hidden",
+ borderBottomLeftRadius: 70,
+ elevation: 5,
+ },
+ loginContainer: {
+ marginHorizontal: 20,
+ marginTop: "-30%",
+ marginBottom: 20,
+ elevation: 5,
+ borderRadius: 10,
+ backgroundColor: LIGTHT_THEME.color.white,
+ height: "70%",
+ },
+ loginScroll: {
+ padding: 20,
+ gap: 10,
+ justifyContent: "center",
+ },
+ title: { fontSize: 30, fontWeight: "bold", alignSelf: "center" },
+ submitBtn: {
+ backgroundColor: "black",
+ borderRadius: 5,
+ width: "100%",
+ padding: 10,
+ justifyContent: "center",
+ alignItems: "center",
+ },
+ submitBtnText: {
+ color: "white",
+ fontSize: 20,
+ },
+});
diff --git a/mobile/src/screens/page_styles.tsx b/mobile/src/screens/page_styles.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..b0093309848447cf964c1eee735e150615d9b2ff
--- /dev/null
+++ b/mobile/src/screens/page_styles.tsx
@@ -0,0 +1,10 @@
+import { StyleSheet } from "react-native"
+
+export const pageStyles = StyleSheet.create({
+ page_container: {
+ flex: 1,
+ alignItems: 'center',
+ justifyContent: 'center',
+ backgroundColor: '#f5f5f5'
+ }
+});
\ No newline at end of file
diff --git a/mobile/src/screens/state_selection/state_selection_page.tsx b/mobile/src/screens/state_selection/state_selection_page.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..b0d4497e8c7c7658b67725104730bfeee618c282
--- /dev/null
+++ b/mobile/src/screens/state_selection/state_selection_page.tsx
@@ -0,0 +1,21 @@
+import { View, Text, ActivityIndicator } from "react-native";
+import { pageStyles } from '../page_styles';
+import { useGetStates } from "../../hooks/useGetStates";
+import { ApiRequestStatus } from "../../constants/api_request_states";
+import { Caroussel } from "../../components/caroussel/caroussel";
+
+export const StateSelectionPage = () => {
+ const { data, requestStatus } = useGetStates();
+ if (requestStatus === ApiRequestStatus.LOADING) {
+ return (
+
+
+
+ );
+ }
+ return (
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/mobile/src/screens/town_selection/town_selection_page.tsx b/mobile/src/screens/town_selection/town_selection_page.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..24fff6353b6453601706661d66891ba7680e6d2b
--- /dev/null
+++ b/mobile/src/screens/town_selection/town_selection_page.tsx
@@ -0,0 +1,26 @@
+import { View, Text, ActivityIndicator } from "react-native";
+import { pageStyles } from '../page_styles';
+import { useGetStates } from "../../hooks/useGetStates";
+import { ApiRequestStatus } from "../../constants/api_request_states";
+import { Caroussel } from "../../components/caroussel/caroussel";
+import { useGetTowns } from "../../hooks/useGetTowns";
+
+interface TownSelectionPageProps {
+ stateId: number;
+};
+
+export const TownSelectionPage = ({ stateId }: TownSelectionPageProps) => {
+ const { data, requestStatus } = useGetTowns(stateId);
+ if (requestStatus === ApiRequestStatus.LOADING) {
+ return (
+
+
+
+ );
+ }
+ return (
+
+
+
+ );
+}
\ No newline at end of file