diff --git a/app.json b/app.json
new file mode 100644
index 0000000..515445f
--- /dev/null
+++ b/app.json
@@ -0,0 +1,12 @@
+{
+ "expo": {
+ "extra": {
+ "eas": {
+ "projectId": "4418b05e-cf5e-4ccc-a472-1bc936253a63"
+ }
+ },
+ "android": {
+ "package": "com.karolix.agronavis"
+ }
+ }
+}
diff --git a/apps/mobile/app.json b/apps/mobile/app.json
index f44bf2c..e6c99a2 100644
--- a/apps/mobile/app.json
+++ b/apps/mobile/app.json
@@ -8,6 +8,9 @@
"scheme": "agronavis",
"userInterfaceStyle": "automatic",
"newArchEnabled": true,
+ "assetBundlePatterns": [
+ "**/*"
+ ],
"splash": {
"image": "./assets/images/splash-icon.png",
"resizeMode": "contain",
@@ -27,12 +30,13 @@
"foregroundImage": "./assets/images/adaptive-icon.png",
"backgroundColor": "#0E3D1F"
},
- "package": "com.agronavis.app",
+ "package": "com.karolix.agronavis",
"permissions": [
"android.permission.CAMERA",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_COARSE_LOCATION",
- "android.permission.READ_EXTERNAL_STORAGE"
+ "android.permission.READ_EXTERNAL_STORAGE",
+ "android.permission.RECORD_AUDIO"
]
},
"web": {
@@ -58,15 +62,17 @@
}
],
"expo-secure-store",
- "@react-native-community/datetimepicker"
+ "@react-native-community/datetimepicker",
+ "./plugins/withMonorepoFix"
],
"experiments": {
"typedRoutes": true
},
"extra": {
"eas": {
- "projectId": "YOUR_EAS_PROJECT_ID"
- }
+ "projectId": "4418b05e-cf5e-4ccc-a472-1bc936253a63"
+ },
+ "router": {}
}
}
}
diff --git a/apps/mobile/app/index.tsx b/apps/mobile/app/index.tsx
new file mode 100644
index 0000000..6ac8091
--- /dev/null
+++ b/apps/mobile/app/index.tsx
@@ -0,0 +1,12 @@
+import { Redirect } from 'expo-router';
+
+/**
+ * Root index — Expo Router needs this file to handle the app's entry URL.
+ * Redirects immediately to the auth welcome screen.
+ * Once authentication is integrated (Clerk), add your auth check here:
+ * - isSignedIn → redirect to /(tabs)
+ * - not signed in → redirect to /(auth)/welcome
+ */
+export default function Index() {
+ return ;
+}
diff --git a/apps/mobile/assets/images/adaptive-icon.png b/apps/mobile/assets/images/adaptive-icon.png
index e69de29..d70a5d5 100644
Binary files a/apps/mobile/assets/images/adaptive-icon.png and b/apps/mobile/assets/images/adaptive-icon.png differ
diff --git a/apps/mobile/assets/images/favicon.png b/apps/mobile/assets/images/favicon.png
index e69de29..d70a5d5 100644
Binary files a/apps/mobile/assets/images/favicon.png and b/apps/mobile/assets/images/favicon.png differ
diff --git a/apps/mobile/assets/images/icon.png b/apps/mobile/assets/images/icon.png
index e69de29..d70a5d5 100644
Binary files a/apps/mobile/assets/images/icon.png and b/apps/mobile/assets/images/icon.png differ
diff --git a/apps/mobile/assets/images/notification-icon.png b/apps/mobile/assets/images/notification-icon.png
index e69de29..d70a5d5 100644
Binary files a/apps/mobile/assets/images/notification-icon.png and b/apps/mobile/assets/images/notification-icon.png differ
diff --git a/apps/mobile/assets/images/splash-icon.png b/apps/mobile/assets/images/splash-icon.png
index e69de29..a272749 100644
Binary files a/apps/mobile/assets/images/splash-icon.png and b/apps/mobile/assets/images/splash-icon.png differ
diff --git a/apps/mobile/eas.json b/apps/mobile/eas.json
new file mode 100644
index 0000000..2be3d81
--- /dev/null
+++ b/apps/mobile/eas.json
@@ -0,0 +1,21 @@
+{
+ "cli": {
+ "version": ">= 19.0.8",
+ "appVersionSource": "remote"
+ },
+ "build": {
+ "development": {
+ "developmentClient": true,
+ "distribution": "internal"
+ },
+ "preview": {
+ "distribution": "internal"
+ },
+ "production": {
+ "autoIncrement": true
+ }
+ },
+ "submit": {
+ "production": {}
+ }
+}
diff --git a/apps/mobile/package.json b/apps/mobile/package.json
index 3e7fe19..4ccbff3 100644
--- a/apps/mobile/package.json
+++ b/apps/mobile/package.json
@@ -5,8 +5,8 @@
"scripts": {
"start": "expo start",
"dev": "expo start",
- "android": "expo start --android",
- "ios": "expo start --ios",
+ "android": "expo run:android",
+ "ios": "expo run:ios",
"web": "expo start --web",
"build:android": "eas build --platform android",
"build:ios": "eas build --platform ios",
@@ -63,7 +63,7 @@
"react-native-screens": "~4.16.0",
"react-native-svg": "15.12.1",
"react-native-web": "~0.21.0",
- "react-native-worklets": "^0.8.3",
+ "react-native-worklets": "0.5.1",
"react-redux": "^9.2.0",
"redux-persist": "^6.0.0",
"zod": "^3.23.8"
@@ -72,7 +72,6 @@
"@expo/ngrok": "^4.1.3",
"@types/jest": "^29.5.12",
"@types/react": "~19.1.0",
- "@types/react-native": "^0.72.8",
"babel-plugin-module-resolver": "^5.0.2",
"eslint": "^9.25.0",
"eslint-config-expo": "~10.0.0",
@@ -83,6 +82,18 @@
"typescript": "~5.9.2"
},
"private": true,
+ "overrides": {
+ "react-native-svg": "15.12.1",
+ "react-native-worklets": "0.5.1"
+ },
+ "expo": {
+ "install": {
+ "exclude": [
+ "react-native-svg",
+ "react-native-worklets"
+ ]
+ }
+ },
"jest": {
"preset": "jest-expo",
"transformIgnorePatterns": [
diff --git a/apps/mobile/plugins/withMonorepoFix.js b/apps/mobile/plugins/withMonorepoFix.js
new file mode 100644
index 0000000..a94813f
--- /dev/null
+++ b/apps/mobile/plugins/withMonorepoFix.js
@@ -0,0 +1,118 @@
+/**
+ * Comprehensive monorepo fix for ALL native modules hoisted to root node_modules.
+ *
+ * ROOT CAUSE:
+ * npm workspaces hoists native modules AND react-native to root node_modules.
+ * Native packages' build.gradle files use relative paths or pass incorrect
+ * paths to CMake that only work in a flat (non-monorepo) node_modules layout.
+ *
+ * STRATEGY: Create symlinks from expected sibling paths → actual react-native paths.
+ * This is more robust than copying individual files because:
+ * - Symlinks give access to ALL files in those directories (cmake-utils, etc.)
+ * - No need to know which specific files each package needs
+ * - No file duplication
+ *
+ * SYMLINKS CREATED (in root node_modules):
+ * ReactAndroid/ → react-native/ReactAndroid/
+ * Fixes: react-native-gesture-handler (ReactAndroid/gradle.properties)
+ * react-native-worklets (ReactAndroid/cmake-utils/folly-flags.cmake)
+ * react-native-reanimated (ReactAndroid/cmake-utils/*)
+ *
+ * ReactCommon/ → react-native/ReactCommon/
+ * Fixes: react-native-worklets (ReactCommon/cmake-utils/react-native-flags.cmake)
+ * react-native-reanimated (ReactCommon/cmake-utils/*)
+ *
+ * gradle/ → react-native/gradle/
+ * Fixes: react-native-svg (gradle/libs.versions.toml)
+ *
+ * EXT PROPERTIES SET (for @react-native-picker/picker and similar):
+ * REACT_NATIVE_DIR = react-native directory
+ * REACT_NATIVE_NODE_MODULES_DIR = node_modules directory
+ */
+const { withProjectBuildGradle } = require("@expo/config-plugins");
+
+const withMonorepoFix = (config) => {
+ return withProjectBuildGradle(config, (config) => {
+ const contents = config.modResults.contents;
+
+ if (contents.includes("_MONOREPO_FIX_")) {
+ return config;
+ }
+
+ const injection = `
+// _MONOREPO_FIX_ ──────────────────────────────────────────────────────────────
+// Fixes native modules that break when npm workspaces hoists them to root.
+// Creates symlinks so all packages find react-native's subdirectories.
+
+def _rnDir = null
+def _rnCandidates = [
+ new File(rootDir, "../node_modules/react-native"), // non-hoisted
+ new File(rootDir, "../../../node_modules/react-native"), // hoisted to monorepo root
+]
+for (def _c : _rnCandidates) {
+ if (_c.exists() && new File(_c, "ReactAndroid/gradle.properties").exists()) {
+ _rnDir = _c
+ break
+ }
+}
+
+if (_rnDir != null) {
+ def _nodeModulesDir = _rnDir.parentFile
+ logger.lifecycle("[MonorepoFix] react-native at: " + _rnDir.canonicalPath)
+
+ // ── Ext properties (for @react-native-picker/picker etc.) ──────────────
+ ext.REACT_NATIVE_DIR = _rnDir
+ ext.REACT_NATIVE_NODE_MODULES_DIR = _nodeModulesDir
+ subprojects {
+ project.ext.REACT_NATIVE_DIR = _rnDir
+ project.ext.REACT_NATIVE_NODE_MODULES_DIR = _nodeModulesDir
+ }
+
+ // ── Symlinks ───────────────────────────────────────────────────────────
+ // Create sibling symlinks so packages can find react-native's directories
+ // regardless of how they construct paths internally or pass args to CMake.
+ //
+ // node_modules/ReactAndroid/ → react-native/ReactAndroid/
+ // node_modules/ReactCommon/ → react-native/ReactCommon/
+ // node_modules/gradle/ → react-native/gradle/
+ //
+ def _symlinkDirs = ["ReactAndroid", "ReactCommon", "gradle"]
+ for (def _dirname : _symlinkDirs) {
+ def _source = new File(_rnDir, _dirname)
+ def _link = new File(_nodeModulesDir, _dirname)
+ if (_source.exists()) {
+ if (!_link.exists()) {
+ try {
+ java.nio.file.Files.createSymbolicLink(
+ _link.toPath(),
+ _source.toPath()
+ )
+ logger.lifecycle("[MonorepoFix] Symlinked: node_modules/" + _dirname + " -> react-native/" + _dirname)
+ } catch (Exception _e) {
+ // Symlink failed — fall back to copying key files
+ logger.warn("[MonorepoFix] Symlink failed for " + _dirname + ": " + _e.message + " — falling back to file copy")
+ _link.mkdirs()
+ ant.copy(todir: _link.absolutePath, overwrite: false) {
+ fileset(dir: _source.absolutePath)
+ }
+ }
+ } else {
+ logger.lifecycle("[MonorepoFix] Already exists: node_modules/" + _dirname)
+ }
+ } else {
+ logger.warn("[MonorepoFix] Source not found: react-native/" + _dirname)
+ }
+ }
+
+} else {
+ logger.warn("[MonorepoFix] WARNING: react-native not found in any candidate path!")
+}
+// ─────────────────────────────────────────────────────────────────────────────
+`;
+
+ config.modResults.contents = contents + injection;
+ return config;
+ });
+};
+
+module.exports = withMonorepoFix;
diff --git a/apps/mobile/plugins/withReactNativePickerFix.js b/apps/mobile/plugins/withReactNativePickerFix.js
new file mode 100644
index 0000000..659e4ea
--- /dev/null
+++ b/apps/mobile/plugins/withReactNativePickerFix.js
@@ -0,0 +1,73 @@
+/**
+ * Comprehensive monorepo fix for native modules that can't find react-native.
+ *
+ * Problems fixed:
+ * - @react-native-picker/picker → reads REACT_NATIVE_NODE_MODULES_DIR
+ * - react-native-gesture-handler → reads rootProject.ext.REACT_NATIVE_DIR
+ *
+ * Root cause: npm workspaces hoists react-native to the monorepo root
+ * node_modules. Native modules use relative paths that break when react-native
+ * isn't at the same node_modules level as themselves.
+ *
+ * Strategy:
+ * 1. Use pure Groovy (no `node` command) to check both hoisted and
+ * non-hoisted locations for react-native.
+ * 2. Set REACT_NATIVE_DIR directly on the ROOT PROJECT's ext so RNGH's
+ * safeExtGet("REACT_NATIVE_DIR") (which calls rootProject.ext.get())
+ * can find it.
+ * 3. Also propagate via subprojects{} for other native modules that read
+ * from their own project.ext.
+ *
+ * Paths (rootDir = apps/mobile/android/):
+ * ../node_modules/react-native → apps/mobile/node_modules/react-native
+ * ../../../node_modules/react-native → /node_modules/react-native (hoisted)
+ */
+const { withProjectBuildGradle } = require("@expo/config-plugins");
+
+const withReactNativePickerFix = (config) => {
+ return withProjectBuildGradle(config, (config) => {
+ const contents = config.modResults.contents;
+
+ if (contents.includes("REACT_NATIVE_DIR")) {
+ // Already patched, skip
+ return config;
+ }
+
+ const injection = `
+// ─── Monorepo Fix ────────────────────────────────────────────────────────────
+// Resolves react-native location for native modules in a monorepo where npm
+// workspaces may hoist react-native to the root node_modules.
+// Uses pure Groovy file checks — no dependency on 'node' being in PATH.
+def _reactNativeDir = null
+def _rnCandidates = [
+ new File(rootDir, "../node_modules/react-native"), // non-hoisted: apps/mobile/node_modules
+ new File(rootDir, "../../../node_modules/react-native"), // hoisted: /node_modules
+]
+for (def candidate : _rnCandidates) {
+ if (candidate.exists() && new File(candidate, "ReactAndroid/gradle.properties").exists()) {
+ _reactNativeDir = candidate
+ break
+ }
+}
+if (_reactNativeDir != null) {
+ // Set on ROOT PROJECT ext directly — read by RNGH via rootProject.ext.get("REACT_NATIVE_DIR")
+ ext.REACT_NATIVE_DIR = _reactNativeDir
+ ext.REACT_NATIVE_NODE_MODULES_DIR = _reactNativeDir.parentFile
+ // Also propagate to all subprojects for other native modules
+ subprojects {
+ ext.REACT_NATIVE_DIR = _reactNativeDir
+ ext.REACT_NATIVE_NODE_MODULES_DIR = _reactNativeDir.parentFile
+ }
+ logger.lifecycle("[MonorepoFix] react-native resolved at: " + _reactNativeDir.absolutePath)
+} else {
+ logger.warn("[MonorepoFix] WARNING: Could not resolve react-native location!")
+}
+// ─────────────────────────────────────────────────────────────────────────────
+`;
+
+ config.modResults.contents = contents + injection;
+ return config;
+ });
+};
+
+module.exports = withReactNativePickerFix;
diff --git a/eas.json b/eas.json
new file mode 100644
index 0000000..c520b38
--- /dev/null
+++ b/eas.json
@@ -0,0 +1,33 @@
+{
+ "cli": {
+ "version": ">= 18.13.0",
+ "appVersionSource": "remote"
+ },
+ "build": {
+ "development": {
+ "developmentClient": true,
+ "distribution": "internal"
+ },
+ "preview": {
+ "distribution": "internal",
+ "android": {
+ "buildType": "apk"
+ },
+ "env": {
+ "npm_config_legacy_peer_deps": "true"
+ }
+ },
+ "production": {
+ "autoIncrement": true,
+ "android": {
+ "buildType": "apk"
+ },
+ "env": {
+ "npm_config_legacy_peer_deps": "true"
+ }
+ }
+ },
+ "submit": {
+ "production": {}
+ }
+}
diff --git a/package-lock.json b/package-lock.json
index e6d818e..013ba5d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,6 +12,10 @@
"backend",
"packages/*"
],
+ "dependencies": {
+ "react-native-svg": "15.12.1",
+ "react-native-worklets": "0.5.1"
+ },
"devDependencies": {
"concurrently": "^8.2.2"
},
@@ -68,7 +72,7 @@
"react-native-screens": "~4.16.0",
"react-native-svg": "15.12.1",
"react-native-web": "~0.21.0",
- "react-native-worklets": "^0.8.3",
+ "react-native-worklets": "0.5.1",
"react-redux": "^9.2.0",
"redux-persist": "^6.0.0",
"zod": "^3.23.8"
@@ -77,7 +81,6 @@
"@expo/ngrok": "^4.1.3",
"@types/jest": "^29.5.12",
"@types/react": "~19.1.0",
- "@types/react-native": "^0.72.8",
"babel-plugin-module-resolver": "^5.0.2",
"eslint": "^9.25.0",
"eslint-config-expo": "~10.0.0",
@@ -124,21 +127,6 @@
"react-native": "*"
}
},
- "apps/mobile/node_modules/react-native-svg": {
- "version": "15.12.1",
- "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.12.1.tgz",
- "integrity": "sha512-vCuZJDf8a5aNC2dlMovEv4Z0jjEUET53lm/iILFnFewa15b4atjVxU6Wirm6O9y6dEsdjDZVD7Q3QM4T1wlI8g==",
- "license": "MIT",
- "dependencies": {
- "css-select": "^5.1.0",
- "css-tree": "^1.1.3",
- "warn-once": "0.1.1"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
"backend": {
"name": "@agronavis/backend",
"version": "1.0.0",
@@ -5543,604 +5531,12 @@
"node": ">= 20.19.4"
}
},
- "node_modules/@react-native/metro-babel-transformer": {
- "version": "0.85.3",
- "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.85.3.tgz",
- "integrity": "sha512-omuKq+r7jM4XvCMIlNMPP7Up3SyB8o5EAdZtF7YXniKyq7UOMBqhYHFqgsdOXr0lT+3ADf7VCJG3sb82jlBrrQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/core": "^7.25.2",
- "@react-native/babel-preset": "0.85.3",
- "hermes-parser": "0.33.3",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- },
- "peerDependencies": {
- "@babel/core": "*"
- }
- },
- "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-plugin-codegen": {
- "version": "0.85.3",
- "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.85.3.tgz",
- "integrity": "sha512-Wc94zGfeFG8Njf9SHMPfYZP04kjigkOps6F1TYTvd7ZVXuGxqseCDgxc50LWcOhOCLypI9n3oVVqz81C3p44ZA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/traverse": "^7.29.0",
- "@react-native/codegen": "0.85.3"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/babel-preset": {
- "version": "0.85.3",
- "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.85.3.tgz",
- "integrity": "sha512-fD7fxEhkJB/aF57tWoXjaAWpklfrExYZS3k6aXPP3BQ77DZY7gvf/b7dbirwjID6NVnP1JDRJyTuPBGr0K/vlw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/core": "^7.25.2",
- "@babel/plugin-proposal-export-default-from": "^7.24.7",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-default-from": "^7.24.7",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-transform-async-generator-functions": "^7.25.4",
- "@babel/plugin-transform-async-to-generator": "^7.24.7",
- "@babel/plugin-transform-block-scoping": "^7.25.0",
- "@babel/plugin-transform-class-properties": "^7.25.4",
- "@babel/plugin-transform-classes": "^7.25.4",
- "@babel/plugin-transform-destructuring": "^7.24.8",
- "@babel/plugin-transform-flow-strip-types": "^7.25.2",
- "@babel/plugin-transform-for-of": "^7.24.7",
- "@babel/plugin-transform-modules-commonjs": "^7.24.8",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
- "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
- "@babel/plugin-transform-optional-chaining": "^7.24.8",
- "@babel/plugin-transform-private-methods": "^7.24.7",
- "@babel/plugin-transform-private-property-in-object": "^7.24.7",
- "@babel/plugin-transform-react-display-name": "^7.24.7",
- "@babel/plugin-transform-react-jsx": "^7.25.2",
- "@babel/plugin-transform-react-jsx-self": "^7.24.7",
- "@babel/plugin-transform-react-jsx-source": "^7.24.7",
- "@babel/plugin-transform-regenerator": "^7.24.7",
- "@babel/plugin-transform-runtime": "^7.24.7",
- "@babel/plugin-transform-typescript": "^7.25.2",
- "@babel/plugin-transform-unicode-regex": "^7.24.7",
- "@react-native/babel-plugin-codegen": "0.85.3",
- "babel-plugin-syntax-hermes-parser": "0.33.3",
- "babel-plugin-transform-flow-enums": "^0.0.2",
- "react-refresh": "^0.14.0"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- },
- "peerDependencies": {
- "@babel/core": "*"
- }
- },
- "node_modules/@react-native/metro-babel-transformer/node_modules/@react-native/codegen": {
- "version": "0.85.3",
- "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.85.3.tgz",
- "integrity": "sha512-/JkS1lGLyzBWP1FbgDwaqEf7qShIC6pUC1M0a/YMAd/v4iqR24MRkQWe7jkYvcBQ2LpEhs5NGE9InhxSv21zCA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/core": "^7.25.2",
- "@babel/parser": "^7.29.0",
- "hermes-parser": "0.33.3",
- "invariant": "^2.2.4",
- "nullthrows": "^1.1.1",
- "tinyglobby": "^0.2.15",
- "yargs": "^17.6.2"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- },
- "peerDependencies": {
- "@babel/core": "*"
- }
- },
- "node_modules/@react-native/metro-babel-transformer/node_modules/babel-plugin-syntax-hermes-parser": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.33.3.tgz",
- "integrity": "sha512-/Z9xYdaJ1lC0pT9do6TqCqhOSLfZ5Ot8D5za1p+feEfWYupCOfGbhhEXN9r2ZgJtDNUNRw/Z+T2CvAGKBqtqWA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "hermes-parser": "0.33.3"
- }
- },
- "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-estree": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.33.3.tgz",
- "integrity": "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/@react-native/metro-babel-transformer/node_modules/hermes-parser": {
- "version": "0.33.3",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.33.3.tgz",
- "integrity": "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "hermes-estree": "0.33.3"
- }
- },
- "node_modules/@react-native/metro-config": {
- "version": "0.85.3",
- "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.85.3.tgz",
- "integrity": "sha512-sVo6HepUmCcpdfozEf91lA0FjpLNNZYu/Zi9FiYiAQTK8pzATXDVTqhvdxpFrQn435p5eUTSbllvbH/KN+bnyA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@react-native/js-polyfills": "0.85.3",
- "@react-native/metro-babel-transformer": "0.85.3",
- "metro-config": "^0.84.3",
- "metro-runtime": "^0.84.3"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/@react-native/js-polyfills": {
- "version": "0.85.3",
- "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.85.3.tgz",
- "integrity": "sha512-U2+aMshIXf1uFn77tpBb/xhHWB9vkVrMpt7kkucAugF8hJKYTDGB587X7WwelHduK2KBfhl4giSv0rzZGoef9A==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/accepts": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
- "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "mime-types": "^3.0.0",
- "negotiator": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/agent-base": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
- "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/@react-native/metro-config/node_modules/hermes-estree": {
- "version": "0.35.0",
- "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.35.0.tgz",
- "integrity": "sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/@react-native/metro-config/node_modules/hermes-parser": {
- "version": "0.35.0",
- "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.35.0.tgz",
- "integrity": "sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "hermes-estree": "0.35.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/https-proxy-agent": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
- "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "agent-base": "^7.1.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro/-/metro-0.84.4.tgz",
- "integrity": "sha512-8ETTubqfD6ornDy2zYDvRcKnVDOXdFJsjetYDBsY4oAsb6NJkiwFR+FaMESyGppFmQUyBQA4H4sFGxzcQSGtFA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/code-frame": "^7.29.0",
- "@babel/core": "^7.25.2",
- "@babel/generator": "^7.29.1",
- "@babel/parser": "^7.29.0",
- "@babel/template": "^7.28.6",
- "@babel/traverse": "^7.29.0",
- "@babel/types": "^7.29.0",
- "accepts": "^2.0.0",
- "ci-info": "^2.0.0",
- "connect": "^3.6.5",
- "debug": "^4.4.0",
- "error-stack-parser": "^2.0.6",
- "flow-enums-runtime": "^0.0.6",
- "graceful-fs": "^4.2.4",
- "hermes-parser": "0.35.0",
- "image-size": "^1.0.2",
- "invariant": "^2.2.4",
- "jest-worker": "^29.7.0",
- "jsc-safe-url": "^0.2.2",
- "lodash.throttle": "^4.1.1",
- "metro-babel-transformer": "0.84.4",
- "metro-cache": "0.84.4",
- "metro-cache-key": "0.84.4",
- "metro-config": "0.84.4",
- "metro-core": "0.84.4",
- "metro-file-map": "0.84.4",
- "metro-resolver": "0.84.4",
- "metro-runtime": "0.84.4",
- "metro-source-map": "0.84.4",
- "metro-symbolicate": "0.84.4",
- "metro-transform-plugins": "0.84.4",
- "metro-transform-worker": "0.84.4",
- "mime-types": "^3.0.1",
- "nullthrows": "^1.1.1",
- "serialize-error": "^2.1.0",
- "source-map": "^0.5.6",
- "throat": "^5.0.0",
- "ws": "^7.5.10",
- "yargs": "^17.6.2"
- },
- "bin": {
- "metro": "src/cli.js"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-babel-transformer": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.84.4.tgz",
- "integrity": "sha512-rvCfz8snl9h20VcvpOHxZuHP1SlAkv4HXbzw7nyyVwu6Eqo5PRerbakQ9XmUCOsRy70spJ37O+G1TK8oMzo48g==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/core": "^7.25.2",
- "flow-enums-runtime": "^0.0.6",
- "hermes-parser": "0.35.0",
- "metro-cache-key": "0.84.4",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-cache": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.84.4.tgz",
- "integrity": "sha512-gpcFQdSLUwUCk71saKoE64jLFbx2nwTfVCcPSULMNT8QYq0p1eZZE29Jvd0HtT/UlhC3ZOutLxJME5xqD2JUZg==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "exponential-backoff": "^3.1.1",
- "flow-enums-runtime": "^0.0.6",
- "https-proxy-agent": "^7.0.5",
- "metro-core": "0.84.4"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-cache-key": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.84.4.tgz",
- "integrity": "sha512-wVO79aGrkYImpnaVS4+d5RrRBRPX31QtvKB3wKGBuiNSznduZTQHzsrJZRroFJSwnygrzdsGUtDQPuqqFjFdvw==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "flow-enums-runtime": "^0.0.6"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-config": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.84.4.tgz",
- "integrity": "sha512-PMotGDjXcXLWo2TMRH+VR99phFNgYTwqh4OoieIKK3yTJa1Jmkl+fZJxDO0jfBvNF+WESHciHvpNuBtXaF3B0Q==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "connect": "^3.6.5",
- "flow-enums-runtime": "^0.0.6",
- "jest-validate": "^29.7.0",
- "metro": "0.84.4",
- "metro-cache": "0.84.4",
- "metro-core": "0.84.4",
- "metro-runtime": "0.84.4",
- "yaml": "^2.6.1"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-core": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.84.4.tgz",
- "integrity": "sha512-HONpWC5LGXZn3ffkd4Hu6AIrfE7j4Z0g0wMo/goV24WOB3lhuFZ40KgvaDiSw8iyQHloMYay5N/wPX+z8oN/PQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "flow-enums-runtime": "^0.0.6",
- "lodash.throttle": "^4.1.1",
- "metro-resolver": "0.84.4"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-file-map": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.84.4.tgz",
- "integrity": "sha512-KSVDi/u60hKPx++NLu3MTIvyjzNoJnFAF8PQFxaj1jiSka/wjw+Ua6sNuJ0TDHQv+7AAoFQxeMgaRAe8Yic5wQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "debug": "^4.4.0",
- "fb-watchman": "^2.0.0",
- "flow-enums-runtime": "^0.0.6",
- "graceful-fs": "^4.2.4",
- "invariant": "^2.2.4",
- "jest-worker": "^29.7.0",
- "micromatch": "^4.0.4",
- "nullthrows": "^1.1.1",
- "walker": "^1.0.7"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-minify-terser": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.84.4.tgz",
- "integrity": "sha512-5qpbaVOMC7CPitIpuewzVeGw7E+C3ykbv2mqTjQLl85Z3annSVGlSCTcsZjqXZzjupfK4Ztj3dDc4kc44NZwtQ==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "flow-enums-runtime": "^0.0.6",
- "terser": "^5.15.0"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-resolver": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.84.4.tgz",
- "integrity": "sha512-1qLgbxQ5ZGhhutuPot1Yp348ofDsATL2WkrHF65TobqTT9K3P9qJXw38bomk7ncp5B7OYMfWwtyBZo1lCV792A==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "flow-enums-runtime": "^0.0.6"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-runtime": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.84.4.tgz",
- "integrity": "sha512-Jibypds4g7AhzdRKY+kDoj51s5EXMwgyp5ddtlreDAsWefMdOx+agWqgm0H2XSZ/ueanHHVM89fnf5OJnlxa8Q==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/runtime": "^7.25.0",
- "flow-enums-runtime": "^0.0.6"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-source-map": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.84.4.tgz",
- "integrity": "sha512-jbWkPxIesVuo1IWkvezmMJld6iu8nD62GsrZiV6jP37AOdbo4OBq1FJ+qkOg8sV05wAHB//jAbziuW0SlJfW4g==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/traverse": "^7.29.0",
- "@babel/types": "^7.29.0",
- "flow-enums-runtime": "^0.0.6",
- "invariant": "^2.2.4",
- "metro-symbolicate": "0.84.4",
- "nullthrows": "^1.1.1",
- "ob1": "0.84.4",
- "source-map": "^0.5.6",
- "vlq": "^1.0.0"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-symbolicate": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.84.4.tgz",
- "integrity": "sha512-OnfpacxUqGPZQ27t8qK9mFa7uqHIlVWeqRqkCbvMvreEBiamEeOn8krKtcwgP5M4cYDPwuSmCTopHMVthqG4zA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "flow-enums-runtime": "^0.0.6",
- "invariant": "^2.2.4",
- "metro-source-map": "0.84.4",
- "nullthrows": "^1.1.1",
- "source-map": "^0.5.6",
- "vlq": "^1.0.0"
- },
- "bin": {
- "metro-symbolicate": "src/index.js"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-transform-plugins": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.84.4.tgz",
- "integrity": "sha512-kehr6HbAecqD0/a3xLXobELdPaAmRAl8bel0qagPF4vhZtux93nS8S4eq2kgKt6J2GnQpVjSoW1PXdst04mwow==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/core": "^7.25.2",
- "@babel/generator": "^7.29.1",
- "@babel/template": "^7.28.6",
- "@babel/traverse": "^7.29.0",
- "flow-enums-runtime": "^0.0.6",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/metro-transform-worker": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.84.4.tgz",
- "integrity": "sha512-W1IYMvvXTu4MxYr7d9h7CeG2vpIr3bmLLIavkPY4O1ilzDrvS8z/NEe6y+pC44Ff7raMXQgYSfdqDUwN/i39gg==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/core": "^7.25.2",
- "@babel/generator": "^7.29.1",
- "@babel/parser": "^7.29.0",
- "@babel/types": "^7.29.0",
- "flow-enums-runtime": "^0.0.6",
- "metro": "0.84.4",
- "metro-babel-transformer": "0.84.4",
- "metro-cache": "0.84.4",
- "metro-cache-key": "0.84.4",
- "metro-minify-terser": "0.84.4",
- "metro-source-map": "0.84.4",
- "metro-transform-plugins": "0.84.4",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/mime-types": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
- "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "mime-db": "^1.54.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/negotiator": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
- "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/ob1": {
- "version": "0.84.4",
- "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.84.4.tgz",
- "integrity": "sha512-eJXMpz4aQHXF/YBB9ddqZDIS+ooO91hObo9FoW/xBkr54/zCwYYCDqT/O54vNo8kOkWs5Ou/y28NgdrV0edQNA==",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "flow-enums-runtime": "^0.0.6"
- },
- "engines": {
- "node": "^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0"
- }
- },
- "node_modules/@react-native/metro-config/node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/@react-native/metro-config/node_modules/yaml": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
- "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
- "license": "ISC",
- "peer": true,
- "bin": {
- "yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/eemeli"
- }
- },
"node_modules/@react-native/normalize-colors": {
"version": "0.81.5",
"resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.81.5.tgz",
"integrity": "sha512-0HuJ8YtqlTVRXGZuGeBejLE04wSQsibpTI+RGOyVqxZvgtlLLC/Ssw0UmbHhT4lYMp2fhdtvKZSs5emWB1zR/g==",
"license": "MIT"
},
- "node_modules/@react-native/virtualized-lists": {
- "version": "0.72.8",
- "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.72.8.tgz",
- "integrity": "sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "invariant": "^2.2.4",
- "nullthrows": "^1.1.1"
- },
- "peerDependencies": {
- "react-native": "*"
- }
- },
"node_modules/@react-navigation/bottom-tabs": {
"version": "7.15.13",
"resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-7.15.13.tgz",
@@ -7563,17 +6959,6 @@
"csstype": "^3.0.2"
}
},
- "node_modules/@types/react-native": {
- "version": "0.72.8",
- "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.72.8.tgz",
- "integrity": "sha512-St6xA7+EoHN5mEYfdWnfYt0e8u6k2FR0P9s2arYgakQGFgU1f9FlPrIEcj0X24pLCF5c5i3WVuLCUdiCYHmOoA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@react-native/virtualized-lists": "^0.72.4",
- "@types/react": "*"
- }
- },
"node_modules/@types/responselike": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz",
@@ -19110,11 +18495,10 @@
}
},
"node_modules/react-native-svg": {
- "version": "15.15.4",
- "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.15.4.tgz",
- "integrity": "sha512-boT/vIRgj6zZKBpfTPJJiYWMbZE9duBMOwPK6kCSTgxsS947IFMOq9OgIFkpWZTB7t229H24pDRkh3W9ZK/J1A==",
+ "version": "15.12.1",
+ "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.12.1.tgz",
+ "integrity": "sha512-vCuZJDf8a5aNC2dlMovEv4Z0jjEUET53lm/iILFnFewa15b4atjVxU6Wirm6O9y6dEsdjDZVD7Q3QM4T1wlI8g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"css-select": "^5.1.0",
"css-tree": "^1.1.3",
@@ -19187,28 +18571,27 @@
"license": "MIT"
},
"node_modules/react-native-worklets": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.8.3.tgz",
- "integrity": "sha512-oCBJROyLU7yG/1R8s0INMflygTH71bx+5XcYkH0CM938TlhSoVbiunE1WVW5FZa51vwYqfLie/IXMX2s1Kh3eg==",
- "license": "MIT",
- "dependencies": {
- "@babel/plugin-transform-arrow-functions": "^7.27.1",
- "@babel/plugin-transform-class-properties": "^7.27.1",
- "@babel/plugin-transform-classes": "^7.28.4",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1",
- "@babel/plugin-transform-optional-chaining": "^7.27.1",
- "@babel/plugin-transform-shorthand-properties": "^7.27.1",
- "@babel/plugin-transform-template-literals": "^7.27.1",
- "@babel/plugin-transform-unicode-regex": "^7.27.1",
- "@babel/preset-typescript": "^7.27.1",
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.1.tgz",
+ "integrity": "sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/plugin-transform-arrow-functions": "^7.0.0-0",
+ "@babel/plugin-transform-class-properties": "^7.0.0-0",
+ "@babel/plugin-transform-classes": "^7.0.0-0",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0",
+ "@babel/plugin-transform-optional-chaining": "^7.0.0-0",
+ "@babel/plugin-transform-shorthand-properties": "^7.0.0-0",
+ "@babel/plugin-transform-template-literals": "^7.0.0-0",
+ "@babel/plugin-transform-unicode-regex": "^7.0.0-0",
+ "@babel/preset-typescript": "^7.16.7",
"convert-source-map": "^2.0.0",
- "semver": "^7.7.3"
+ "semver": "7.7.2"
},
"peerDependencies": {
- "@babel/core": "*",
- "@react-native/metro-config": "*",
+ "@babel/core": "^7.0.0-0",
"react": "*",
- "react-native": "0.81 - 0.85"
+ "react-native": "*"
}
},
"node_modules/react-native-worklets/node_modules/convert-source-map": {
@@ -19217,6 +18600,18 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"license": "MIT"
},
+ "node_modules/react-native-worklets/node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/react-native/node_modules/@react-native/virtualized-lists": {
"version": "0.81.5",
"resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.81.5.tgz",
diff --git a/package.json b/package.json
index f66bcbf..e76d682 100644
--- a/package.json
+++ b/package.json
@@ -20,8 +20,16 @@
"devDependencies": {
"concurrently": "^8.2.2"
},
+ "dependencies": {
+ "react-native-svg": "15.12.1",
+ "react-native-worklets": "0.5.1"
+ },
"engines": {
"node": ">=20.0.0",
"npm": ">=10.0.0"
+ },
+ "overrides": {
+ "react-native-svg": "15.12.1",
+ "react-native-worklets": "0.5.1"
}
}