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" } }